Esempio n. 1
0
 /// <summary>
 /// Load and deserialize the process definition
 /// </summary>
 /// <param name="id"></param>
 /// <param name="version"></param>
 /// <param name="definition"></param>
 /// <param name="status"></param>
 /// <param name="accounts"></param>
 /// <returns></returns>
 public bool TryFind(Guid id, int version, out ProcessDefinition definition,
                     out ProcessDefStatusEnum status,
                     out AccountData[] accounts)
 {
     using (var ctx = new ProcessDbContext())
     {
         ProcessDefinitionPersistence pd = ctx.ProcessDefinition.Find(id, version);
         if (pd == null)
         {
             definition = null;
             accounts   = new AccountData[] {};
             status     = ProcessDefStatusEnum.NotActive;
             return(false);
         }
         definition = JsonConvert.DeserializeObject <ProcessDefinition>(pd.JsonProcessDefinition);
         status     = (ProcessDefStatusEnum)pd.Status;
         accounts   = pd.Accounts?.Select(a => new AccountData
         {
             Id           = a.AccountDataId,
             Name         = a.Account.Name,
             SourceSystem = a.Account.SourceSystem
         }).ToArray();
         return(true);
     }
 }
Esempio n. 2
0
        /// <summary>
        /// Save process definition
        /// </summary>
        /// <param name="definition"></param>
        /// <param name="status"></param>
        /// <param name="version"></param>
        /// <param name="accounts">Security accounts that have access to the flow</param>
        public void Create(ProcessDefinition definition,
                           ProcessDefStatusEnum status,
                           int version, params AccountData[] accounts)
        {
            Md5CalcVisitor visitor = new Md5CalcVisitor();

            definition.Accept(visitor);
            var accountsList = new List <ProcessDefinitionAccount>();
            ProcessDefinitionPersistence pd = new ProcessDefinitionPersistence
            {
                Id                    = definition.Id,
                FlowId                = definition.FlowId,
                Version               = version,
                Name                  = definition.Name,
                Description           = definition.Description,
                LastModified          = DateTime.UtcNow,
                Status                = (int)status,
                Md5                   = visitor.CalculateMd5(),
                JsonProcessDefinition = JsonConvert.SerializeObject(definition),
                Accounts              = accountsList
            };

            try
            {
                using (var ctx = new ProcessDbContext())
                {
                    SetupAccounts(ctx, ctx.ProcessDefinition.Add(pd), accounts);
                    ctx.SaveChanges();
                }
            }
            catch (DbUpdateException ex)
            {
                throw new ArgumentException(ex.Message);
            }
        }
        /// <summary>
        /// Ceate process definition
        /// </summary>
        /// <param name="definition"></param>
        /// <param name="status"></param>
        /// <param name="version"></param>
        /// <param name="accounts"></param>
        /// <exception cref="NotImplementedException"></exception>
        public void Create(ProcessDefinition definition, ProcessDefStatusEnum status, int version, params AccountData[] accounts)
        {
            Md5CalcVisitor visitor = new Md5CalcVisitor();

            definition.Accept(visitor);
            string md5 = visitor.CalculateMd5();

            if (_collection.Find(f => f.FlowId == definition.FlowId && string.Equals(f.Md5, md5)).Count() != 0)
            {
                throw new ArgumentException($"Persistend Workflow definition FlowId={definition.FlowId} Md5={md5} already exists.");
            }
            List <AccountData> accountsList = new EditableList <AccountData>();

            if (accounts != null)
            {
                accountsList.AddRange(accounts);
            }
            ProcessDefinitionPersistence pd = new ProcessDefinitionPersistence
            {
                Id                    = definition.Id,
                FlowId                = definition.FlowId,
                Version               = version,
                Name                  = definition.Name,
                Description           = definition.Description,
                LastModified          = DateTime.UtcNow,
                Status                = (int)status,
                Md5                   = md5,
                JsonProcessDefinition = ToBase64(JsonConvert.SerializeObject(definition)),
                Accounts              = accountsList
            };

            _collection.InsertOne(pd);
        }
        /// <summary>
        /// Implement Fidnd method
        /// </summary>
        /// <param name="id"></param>
        /// <param name="version"></param>
        /// <param name="definition"></param>
        /// <param name="status"></param>
        /// <param name="accounts"></param>
        /// <returns></returns>
        public bool TryFind(Guid id, int version, out ProcessDefinition definition, out ProcessDefStatusEnum status,
                            out AccountData[] accounts)
        {
            var filter = Builders <ProcessDefinitionPersistence> .Filter.And(
                Builders <ProcessDefinitionPersistence> .Filter.Eq(r => r.Id, id),
                Builders <ProcessDefinitionPersistence> .Filter.Eq(r => r.Version, version)
                );

            return(TryFind(filter, out definition, out status, out accounts));
        }
        /// <summary>
        /// update status
        /// </summary>
        /// <param name="id"></param>
        /// <param name="version"></param>
        /// <param name="status"></param>
        /// <returns></returns>
        /// <exception cref="NotImplementedException"></exception>
        public bool SetStatus(Guid id, int version, ProcessDefStatusEnum status)
        {
            var filter = Builders <ProcessDefinitionPersistence> .Filter.And(
                Builders <ProcessDefinitionPersistence> .Filter.Eq(r => r.Id, id),
                Builders <ProcessDefinitionPersistence> .Filter.Eq(r => r.Version, version)
                );

            var update = Builders <ProcessDefinitionPersistence> .Update.Set(r => r.Status, (int)status)
                         .CurrentDate(r => r.LastModified);

            UpdateResult result = _collection.UpdateOne(filter, update);

            return(result.ModifiedCount == 1);
        }
Esempio n. 6
0
 /// <summary>
 /// Set or update status
 /// </summary>
 /// <param name="id"></param>
 /// <param name="version"></param>
 /// <param name="status"></param>
 public bool SetStatus(Guid id, int version, ProcessDefStatusEnum status)
 {
     using (var ctx = new ProcessDbContext())
     {
         ProcessDefinitionPersistence pd = ctx.ProcessDefinition.Find(id, version);
         if (pd == null)
         {
             return(false);
         }
         pd.Status       = (int)status;
         pd.LastModified = DateTime.UtcNow;
         ctx.SaveChanges();
         return(true);
     }
 }
Esempio n. 7
0
        private static void SetWorkflowStatius(ApplicationArgumments a, ProcessDefStatusEnum status)
        {
            Guid guid = CheckId(a);

            if (guid == Guid.Empty)
            {
                Console.WriteLine("Valid Process Definition GUID required.");
                return;
            }
            if (a.Version == -1)
            {
                Console.WriteLine("Version number is required.");
                return;
            }
            WfDeployer.SetWorkflowStatus(guid, a.Version, status);
        }
        /// <summary>
        /// Try find a workflow definition
        /// </summary>
        /// <param name="filter"></param>
        /// <param name="definition"></param>
        /// <param name="status"></param>
        /// <param name="accounts"></param>
        /// <returns></returns>
        public bool TryFind(FilterDefinition <ProcessDefinitionPersistence> filter, out ProcessDefinition definition, out ProcessDefStatusEnum status,
                            out AccountData[] accounts)
        {
            status     = ProcessDefStatusEnum.NotActive;
            definition = null;
            accounts   = new AccountData[] {};
            ProcessDefinitionPersistence pd = _collection.Find(filter).SingleOrDefault();

            if (pd != null)
            {
                string v = FromBase64(pd.JsonProcessDefinition);
                definition = JsonConvert.DeserializeObject <ProcessDefinition>(FromBase64(pd.JsonProcessDefinition));
                status     = (ProcessDefStatusEnum)pd.Status;
                accounts   = pd.Accounts?.ToArray();
            }
            return(pd != null);
        }
Esempio n. 9
0
 public void SetWorkflowStatus(Guid guid, int version, ProcessDefStatusEnum status)
 {
     _persistence.SetStatus(guid, version, status);
 }