internal static PersistedWorkflow ToPersistable(this WorkflowInstance instance, PersistedWorkflow persistable = null)
        {
            if (persistable == null)
            {
                persistable = new PersistedWorkflow();
            }

            persistable.Data                 = JsonConvert.SerializeObject(instance.Data, SerializerSettings);
            persistable.Description          = instance.Description;
            persistable.Reference            = instance.Reference;
            persistable.InstanceId           = new Guid(instance.Id);
            persistable.NextExecution        = instance.NextExecution;
            persistable.Version              = instance.Version;
            persistable.WorkflowDefinitionId = instance.WorkflowDefinitionId;
            persistable.Status               = instance.Status;
            persistable.CreateTime           = instance.CreateTime;
            persistable.CompleteTime         = instance.CompleteTime;

            foreach (var ep in instance.ExecutionPointers)
            {
                var persistedEP = persistable.ExecutionPointers.FindById(ep.Id);

                if (persistedEP == null)
                {
                    persistedEP    = new PersistedExecutionPointer();
                    persistedEP.Id = ep.Id ?? Guid.NewGuid().ToString();
                    persistable.ExecutionPointers.Add(persistedEP);
                }

                persistedEP.StepId          = ep.StepId;
                persistedEP.Active          = ep.Active;
                persistedEP.SleepUntil      = ep.SleepUntil;
                persistedEP.PersistenceData = JsonConvert.SerializeObject(ep.PersistenceData, SerializerSettings);
                persistedEP.StartTime       = ep.StartTime;
                persistedEP.EndTime         = ep.EndTime;
                persistedEP.StepName        = ep.StepName;
                persistedEP.RetryCount      = ep.RetryCount;
                persistedEP.PredecessorId   = ep.PredecessorId;
                persistedEP.ContextItem     = JsonConvert.SerializeObject(ep.ContextItem, SerializerSettings);
                persistedEP.Children        = string.Empty;

                foreach (var child in ep.Children)
                {
                    persistedEP.Children += child + ";";
                }

                persistedEP.EventName      = ep.EventName;
                persistedEP.EventKey       = ep.EventKey;
                persistedEP.EventPublished = ep.EventPublished;
                persistedEP.EventData      = JsonConvert.SerializeObject(ep.EventData, SerializerSettings);
                persistedEP.Outcome        = JsonConvert.SerializeObject(ep.Outcome, SerializerSettings);
                persistedEP.Status         = ep.Status;

                persistedEP.Scope = string.Empty;
                foreach (var item in ep.Scope)
                {
                    persistedEP.Scope += item + ";";
                }

                foreach (var attr in ep.ExtensionAttributes)
                {
                    var persistedAttr = persistedEP.ExtensionAttributes.FirstOrDefault(x => x.AttributeKey == attr.Key);
                    if (persistedAttr == null)
                    {
                        persistedAttr = new PersistedExtensionAttribute();
                        persistedEP.ExtensionAttributes.Add(persistedAttr);
                    }

                    persistedAttr.AttributeKey   = attr.Key;
                    persistedAttr.AttributeValue = JsonConvert.SerializeObject(attr.Value, SerializerSettings);
                }
            }

            return(persistable);
        }
Example #2
0
        internal static PersistedWorkflow ToPersistable(this WorkflowInstance instance, PersistedWorkflow persistable = null)
        {
            if (persistable == null)
            {
                persistable = new PersistedWorkflow();
            }

            persistable.Data                 = JsonConvert.SerializeObject(instance.Data, SerializerSettings);
            persistable.Description          = instance.Description;
            persistable.InstanceId           = new Guid(instance.Id);
            persistable.NextExecution        = instance.NextExecution;
            persistable.Version              = instance.Version;
            persistable.WorkflowDefinitionId = instance.WorkflowDefinitionId;
            persistable.Status               = instance.Status;
            persistable.CreateTime           = instance.CreateTime;
            persistable.CompleteTime         = instance.CompleteTime;

            foreach (var ep in instance.ExecutionPointers)
            {
                var persistedEP = persistable.ExecutionPointers.FirstOrDefault(x => x.Id == ep.Id);

                if (persistedEP == null)
                {
                    persistedEP = new PersistedExecutionPointer();
                    persistable.ExecutionPointers.Add(persistedEP);
                }

                persistedEP.Id              = ep.Id ?? Guid.NewGuid().ToString();
                persistedEP.StepId          = ep.StepId;
                persistedEP.Active          = ep.Active;
                persistedEP.SleepUntil      = ep.SleepUntil;
                persistedEP.PersistenceData = JsonConvert.SerializeObject(ep.PersistenceData, SerializerSettings);
                persistedEP.StartTime       = ep.StartTime;
                persistedEP.EndTime         = ep.EndTime;
                persistedEP.StepName        = ep.StepName;
                persistedEP.EventName       = ep.EventName;
                persistedEP.EventKey        = ep.EventKey;
                persistedEP.EventPublished  = ep.EventPublished;
                persistedEP.ConcurrentFork  = ep.ConcurrentFork;
                persistedEP.PathTerminator  = ep.PathTerminator;
                persistedEP.EventData       = JsonConvert.SerializeObject(ep.EventData, SerializerSettings);

                foreach (var attr in ep.ExtensionAttributes)
                {
                    var persistedAttr = persistedEP.ExtensionAttributes.FirstOrDefault(x => x.AttributeKey == attr.Key);
                    if (persistedAttr == null)
                    {
                        persistedAttr = new PersistedExtensionAttribute();
                        persistedEP.ExtensionAttributes.Add(persistedAttr);
                    }

                    persistedAttr.AttributeKey   = attr.Key;
                    persistedAttr.AttributeValue = JsonConvert.SerializeObject(attr.Value, SerializerSettings);
                }

                foreach (var err in ep.Errors)
                {
                    var persistedErr = persistedEP.Errors.FirstOrDefault(x => x.Id == err.Id);
                    if (persistedErr == null)
                    {
                        persistedErr           = new PersistedExecutionError();
                        persistedErr.Id        = err.Id ?? Guid.NewGuid().ToString();
                        persistedErr.ErrorTime = err.ErrorTime;
                        persistedErr.Message   = err.Message;
                        persistedEP.Errors.Add(persistedErr);
                    }
                }
            }

            return(persistable);
        }