我看了一下,看起来您每次点击提交时都会创建一个新的工作流程。我得到一个新的实例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);
嘿感谢您的答复马克。我将此作为测试应用程序来熟悉WorkFlow Foundation。看完我又做了什么,你是对的。我已经使用_instaneID变量删除,并在每个后续事件被引发时传递下拉文本。我想知道的是,我如何从数据库中获取现有的工作流并填充信息?我正在考虑处理每个事件并将数据存储到数据库。这样的事情可能吗? – AProgrammer 2009-08-25 23:50:09
当然。我认为你遇到的问题是搞清楚一个特定的工作流程所处的状态。工作流程状态在二进制字段中作为序列化数据持久化,因此很难确定哪个id属于哪个状态。您可能会发现从外部跟踪它最容易。 这篇文章简要介绍了持久性行为,并且是一个很好的开始: http://blogs.msdn.com/kaevans/archive/2008/12/09/understanding-persistence-in-windows-workflow- foundation.aspx – MarcLawrence 2009-08-26 05:39:13