状态机持久性WorkFlow

时间:2009-08-25 15:58:36

标签: workflow workflow-foundation

嘿所有,我已经使用Windows WorkFlow Foundation创建了一个WinForms来处理持久性活动。我使用.NET 3.0 SQL和VS2005作为IDE,使用C#作为代码语言。此外,公司的发展政策赋予了我环境。所以在恐龙决定升级之前,我一直坚持使用VS2005。

我的问题是,我能够一次使用1个工作流程,并且我希望能够处理多个工作流程。当我单击表单上的“提交”按钮时,我希望能够创建一个新的WorkFlow实例。

我创建了运行时并添加了所有适当的服务。我挂钩持久性,当我点击提交时我启动了一个WorkFlow的实例。我是WorkFlow Foundation的新手,MSDN链接对我来说几乎没有任何帮助。如果有人能在我的源代码中将我放在正确的方向,那将会有所帮助。

我附上了一个指向我项目源代码的链接。

Click Here for the Source

提前致谢!

1 个答案:

答案 0 :(得分:0)

我看了一下,每次点击提交时,您似乎都在创建新的工作流程。我得到一个新的实例ID,这是一个好兆头:) PopulatePSUP(字符串instanceID)捕获下拉列表的实例ID。但是,您只在Guid _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( );
        }
    }

您可能还想考虑使用集合/列表来存储instanceIds。适用于任何工作流程范围的逻辑。

类似的东西:

List<Guid> _instanceIds = new List<Guid>( );

...

_instanceIds.Add( instance.InstanceId );