示例#1
0
        public WorkflowInstance LoadWorkflow(Guid instanceId)
        {
            var instance = this._repository.LoadWorkflowInstance(instanceId);
            var activity = Helpers.LoadWorkflowActiovityFromXaml(this._workflowRepositoryPath + instance.WorkflowName, this._errorLogger);

            if (activity != null)
            {
                WorkflowApplication app = new WorkflowApplication(activity);
                app.Extensions.Add(() =>
                {
                    SQLTrackingPaticipant participant = new SQLTrackingPaticipant();
                    participant.ConnectionString      = _connectionString;
                    participant.TrackingProfile       = CreateTrackingProfile();
                    return(participant);
                });
                if (this._isPersistable)
                {
                    //setup persistence
                    InstanceStore store = new SqlWorkflowInstanceStore(
                        this._connectionString);
                    InstanceHandle handle = store.CreateInstanceHandle();
                    InstanceView   view   = store.Execute(handle,
                                                          new CreateWorkflowOwnerCommand(), TimeSpan.FromSeconds(30));
                    handle.Free();
                    store.DefaultInstanceOwner = view.InstanceOwner;
                    app.InstanceStore          = store;
                    app.PersistableIdle        = (e) => { return(PersistableIdleAction.Persist); };
                }
                try
                {
                    app.Load(instanceId);
                    app.Run();

                    instance.SetApplicationhost(app);
                    instance.SetWorkflowInstanceHandeler(this);

                    instance.State      = InstanceState.Loaded;
                    instance.InstanceId = instanceId;
                    this._managedWorkflows.Add(instance);
                    this._repository.UpdateWorkflowInstanceState(app.Id, InstanceState.Loaded, instance.Bookmarks.ConvertStringListToCommaSeparatedString());

                    return(instance);
                }
                catch (Exception ex)
                {
                    this._errorLogger.Log(ex.Message, LoggerInfoTypes.Error);
                }
            }
            return(null);
        }
示例#2
0
        public Guid NewWorkFlow(string workflowName, IDictionary <string, object> parameters)
        {
            var activity = Helpers.LoadWorkflowActiovityFromXaml(this._workflowRepositoryPath + workflowName, this._errorLogger);

            if (activity != null)
            {
                WorkflowApplication app = new WorkflowApplication(activity, parameters);
                app.Extensions.Add(() =>
                {
                    SQLTrackingPaticipant participant = new SQLTrackingPaticipant();
                    participant.ConnectionString      = _connectionString;
                    return(participant);
                });

                if (this._isPersistable)
                {
                    //setup persistence
                    InstanceStore store = new SqlWorkflowInstanceStore(
                        this._connectionString);
                    InstanceHandle handle = store.CreateInstanceHandle();
                    InstanceView   view   = store.Execute(handle,
                                                          new CreateWorkflowOwnerCommand(), TimeSpan.FromSeconds(30));
                    handle.Free();
                    store.DefaultInstanceOwner = view.InstanceOwner;
                    app.InstanceStore          = store;
                    app.PersistableIdle        = (e) => { return(PersistableIdleAction.Unload); };
                }
                try
                {
                    app.Run();
                    var wfinstance = new WorkflowInstance(workflowName, this, app);
                    wfinstance.State      = InstanceState.Created;
                    wfinstance.InstanceId = app.Id;
                    this._managedWorkflows.Add(wfinstance);
                    this._repository.SaveWorkflowInstanceState(app.Id, workflowName, InstanceState.Created, string.Empty);
                    return(app.Id);
                }
                catch (Exception ex)
                {
                    this._errorLogger.Log(ex.Message, LoggerInfoTypes.Error);
                }
            }
            return(Guid.Empty);
        }