/// <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); } }
/// <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); }
/// <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); } }
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); }
public void SetWorkflowStatus(Guid guid, int version, ProcessDefStatusEnum status) { _persistence.SetStatus(guid, version, status); }