Workflow 状态机持久化工作流 嘿,我已经创建了一个WINDOWS,用Windows工作流基金会来处理持久性活动。我使用.NET3.0SQL和VS2005作为IDE,C#作为代码语言。此外,公司发展政策规定环境是我的职责。所以,在恐龙决定升级之前,我一直坚持使用VS2005

Workflow 状态机持久化工作流 嘿,我已经创建了一个WINDOWS,用Windows工作流基金会来处理持久性活动。我使用.NET3.0SQL和VS2005作为IDE,C#作为代码语言。此外,公司发展政策规定环境是我的职责。所以,在恐龙决定升级之前,我一直坚持使用VS2005,workflow,workflow-foundation,Workflow,Workflow Foundation,我的问题是,我能够一次处理一个工作流,并且我希望能够处理多个工作流。当我在表单上单击Submit按钮时,我希望能够创建一个新的工作流实例 我创建了运行时并添加了所有适当的服务。我挂接持久性,当我单击Submit时,我启动工作流的一个实例。我对工作流基础比较新,MSDN链接对我几乎没有帮助。如果有人能在我的源代码中把我放在正确的方向上,那将是很有帮助的 我已经附加了一个链接到我的项目的源代码 提前谢谢 我看了一下,似乎每次单击“提交”时都在创建一个新的工作流。我得到了一个新的实例id,这是一个很

我的问题是,我能够一次处理一个工作流,并且我希望能够处理多个工作流。当我在表单上单击Submit按钮时,我希望能够创建一个新的工作流实例

我创建了运行时并添加了所有适当的服务。我挂接持久性,当我单击Submit时,我启动工作流的一个实例。我对工作流基础比较新,MSDN链接对我几乎没有帮助。如果有人能在我的源代码中把我放在正确的方向上,那将是很有帮助的

我已经附加了一个链接到我的项目的源代码


提前谢谢

我看了一下,似乎每次单击“提交”时都在创建一个新的工作流。我得到了一个新的实例id,这是一个很好的标志:)PopulatePSUP(stringinstanceid)为下拉列表捕获实例id。但在Guid\u instanceID中一次只存储一个实例id。然后,此表单级别变量将用于所有按钮事件。您可以使用cboPSUPItems.Text插入

比如:

    private void btnPSUPApprove_Click(object sender, EventArgs e)
    {
        string instanceId = this.cboPSUPItems.Text;

        if ( instanceId.Length > 0 )
        {
            myArgs.Approved = true;
            approved = "Yes";
            this.resumeHistory[ instanceId ].Clear( );
            this.resumeHistory[ instanceId ].Add( "Name: " + applicantName );
            this.resumeHistory[ instanceId ].Add( "Email:" + applicantEmail );
            this.resumeHistory[ instanceId ].Add( "Text:" + applicantText );
            this.resumeHistory[ instanceId ].Add( "Approved:" + approved );
            this.resumeHistory[ instanceId ].Add( "Denied:" + denied );
            this.resumeHistory[ instanceId ].Add( "PD Approval Requested:" + pDRequest );
            resumeService.RaisePSUPApprovedEvent( new Guid(instanceId) , myArgs );
            this.cboPSUPItems.Items.Remove( this.cboPSUPItems.SelectedItem );
            txtPSUPNotes.Clear( );
        }
    }
List<Guid> _instanceIds = new List<Guid>( );

...

_instanceIds.Add( instance.InstanceId );
您可能还需要考虑使用集合/列表来存储InstanceID。对于任何工作流范围的逻辑

比如:

    private void btnPSUPApprove_Click(object sender, EventArgs e)
    {
        string instanceId = this.cboPSUPItems.Text;

        if ( instanceId.Length > 0 )
        {
            myArgs.Approved = true;
            approved = "Yes";
            this.resumeHistory[ instanceId ].Clear( );
            this.resumeHistory[ instanceId ].Add( "Name: " + applicantName );
            this.resumeHistory[ instanceId ].Add( "Email:" + applicantEmail );
            this.resumeHistory[ instanceId ].Add( "Text:" + applicantText );
            this.resumeHistory[ instanceId ].Add( "Approved:" + approved );
            this.resumeHistory[ instanceId ].Add( "Denied:" + denied );
            this.resumeHistory[ instanceId ].Add( "PD Approval Requested:" + pDRequest );
            resumeService.RaisePSUPApprovedEvent( new Guid(instanceId) , myArgs );
            this.cboPSUPItems.Items.Remove( this.cboPSUPItems.SelectedItem );
            txtPSUPNotes.Clear( );
        }
    }
List<Guid> _instanceIds = new List<Guid>( );

...

_instanceIds.Add( instance.InstanceId );
List\u instanceIds=newlist();
...
_InstanceId.Add(instance.InstanceId);

嘿,谢谢你的回复。我将此作为一个测试应用程序来熟悉工作流基础。再看一遍我做的事,你是对的。我已经使用_instanceId变量删除了它,并在引发每个后续事件时传入下拉文本。我想知道的是,如何从数据库中获取现有的工作流,并以此填充信息?我正在考虑处理每个事件并将数据存储到数据库中。这可能吗?当然。我认为您将遇到的问题是确定特定工作流处于何种状态。工作流状态作为序列化数据保存在二进制字段中,因此很难确定哪个id属于哪个状态。您可能会发现从外部跟踪这一点最容易。这篇文章简要概述了持久性的作用,是一个很好的起点: