我是Windows Workflow的新手,我正在使用4.5创建一个长期运行的工作流程。我做了很多在线搜索,试图在没有用户输入的情况下找到创建书签和ResumeBookmark的方法。我到目前为止所阅读的信息都需要一个Console.ReadLine(用户输入)才能恢复书签。书签仅用于人类输入吗?我现在使用延迟活动,但想使用书签。
我的Workflow.xaml是这样的:
向审稿人发送电子邮件,要求他们完成各自的任务。该 电子邮件只是一个通知。没有批准或拒绝按钮。
延迟活动。这是为了使工作流在持久性中持续存在 数据库。
检查另一个数据库,以查看审阅者是否更新了某些数据。
如果审阅者未更新数据,则再次延迟活动。
向批准人发送电子邮件。如果数据更新。审批人的回复将记录在数据库中。电子邮件只是一个通知。
再次延迟活动,等待审批者更新数据库中的响应。
等等。
我非常感谢你的帮助。
答案 0 :(得分:1)
书签不需要用户输入。
您在活动中创建书签:
context.CreateBookmark("bookmarkName", new BookmarkCallback(OnResumeBookmark));
在哪里" OnResumeBookmark"是您活动中的一种方法。
然后,当您恢复工作流程时,您可以使用:
WorkflowApplication wfApp= new WorkflowApplication(new NameOFWorkflow());
wfApp.Run();
wfApp.ResumeBookmark("bookmarkName");
然后执行OnResumeBookmark。
这是一个更全面的版本http://msdn.microsoft.com/en-us/library/ee191721(v=vs.110).aspx
关于console.read的内容只是向您展示书签名称如何是变量而不是字符串的方法:
context.CreateBookmark(BookmarkName.Get(context), <-- get name from the InArgumen
答案 1 :(得分:1)
此处是自定义活动的示例代码:
public sealed class WaitForResponse<TResult> : NativeActivity<TResult>
{
public string ResponseName { get; set; }
protected override bool CanInduceIdle
{
get
{
return true;
}
}
protected override void Execute(NativeActivityContext context)
{
context.CreateBookmark(this.ResponseName, new BookmarkCallback(this.ReceivedResponse));
// Put code here...
}
void ReceivedResponse(NativeActivityContext context, Bookmark bookmark, object obj)
{
this.Result.Set(context, (TResult)obj);
}
此活动将运行方法Execute并等待(持久/卸载)直到ResumeBookmark。 ResumeBookmark可以是WCF调用,也可以是WorkflowApplication.ResumeBookmark的调用。