コード例 #1
0
 private void ClearTrackingSource()
 {
     if (_trackingSource != null)
     {
         _trackingSource.Clear();
         _trackingSource = null;
     }
 }
コード例 #2
0
        public WorkflowApplication CreateWorkflow(Activity activity, IDictionary <string, object> inputs, Guid instanceId, bool notUseActivityStackTrace, bool usePersistAndLog)
        {
            if (_instances.Value.ContainsKey(instanceId))
            {
                throw new DeveloperException("Процесс с кодом '{0}' уже существует.", instanceId);
            }

            var result = new WorkflowApplication(activity, inputs)
            {
                SynchronizationContext = SynchronizationContext.Current
            };

            //Настраиваем Activity StackTrace
            ClearTrackingSource();
            if (!notUseActivityStackTrace)
            {
                _trackingSource = new ActivityStackTrace();
                result.Extensions.Add(CreateActivityTrackingParticipant());
            }

            var traceExtension = new TraceExtension
            {
                NotUseActivityStackTrace = notUseActivityStackTrace,
                UsePersistAndLog         = usePersistAndLog
            };

            traceExtension.Set(TraceExtension.ParentWfInstanceIdPropertyName, instanceId);
            traceExtension.Set(TraceExtension.ActivityTrackingSourcePropertyName, _trackingSource);
            result.Extensions.Add(traceExtension);

            if (usePersistAndLog)
            {
                result.InstanceStore = new XmlWorkflowInstanceStore(result.Id);
                //Create the persistence Participant and add it to the workflow instance
                result.Extensions.Add(new XmlPersistenceParticipant(instanceId, result.Id));
                //Add a tracking participant
                result.Extensions.Add(new SaveAllEventsToFileTrackingParticipant());
            }

            _instances.Value.Add(instanceId, result);
            _keyLink.Value.Add(result.Id, instanceId);

            // пропишем события
            SubscribeEvents(result);

            if (usePersistAndLog)
            {
                result.Persist();
            }

            return(result);
        }