最近在学习WF, 把自己的一些学习心得放上来

Bookmark允许你以事件驱动的方式与一个Workflow内的Activity进行交互. 如果把启动一个workflow比做开始读一本书, 在Workflow中的Bookmark起到的就是和书中的Bookmark一样的作用, 就是标记现在到哪了, 以后可以从这里再继续.

但是Bookmark在原生的Activity中没有, 只能自己创建, 而且是继承自NativeActivity.

  public sealed class noResultBookmark : NativeActivity  //继承自NativeActivity
{
public InArgument<string> bookmarkName { get; set; } //创建一个输入类型参数
protected override bool CanInduceIdle //允许InduceIdle
{
get
{ return true; }
}
protected override void Execute(NativeActivityContext context)
{
string bookmark = context.GetValue(bookmarkName); //获取输入参数的值
context.CreateBookmark(bookmark); //创建Bookmark, 创建之后, 导致Workflow进入Idle状态, 引发Workflow Idle事件. 注意我们在这里没有加入Callback, 因为暂时没有返回值
System.Console.WriteLine("创建bookmark:{0}", bookmark);
}
}  

创建好后, 就可以使用了.

接下来, 建立一个Winform, 让我们来试验一下:

启动流程的代码如下:

 private void button_Run_Click(object sender, RoutedEventArgs e)
{
instance = new WorkflowApplication(new WFLibrary.noResultBookmarkWorkflow());
instance.Completed = new Action<WorkflowApplicationCompletedEventArgs>(workflowCompleted);
instance.OnUnhandledException = unhandledExceptionl;
instance.Aborted = aborted;
instance.Idle = workflowIdel;
instance.Run();
}

流程启动后, 首先执行的是WriteLine Activity. 可以在控制台中看到(第一行):

接下来执行noResultBookmark Activity, 创建名为wxd的Bookmark(第二行).

创建Bookmark后, 引发了Workflow的Idle事件, 可以在控制台中看到Idle事件引发的痕迹(第三行), Workflow进入Idle状态, 执行告一段落.

然后在Winform中输入Bookmark的名字wxd, 点击触发按钮.

 private void button_triggering_Click(object sender, RoutedEventArgs e)
{
string bookName = textBoxBookmark.Text; //获取Bookmark的名字 if (instance != null)
{
if (instance.GetBookmarks().Count(p => p.BookmarkName == bookName) == )
{
instance.ResumeBookmark(bookName, null); //从此Bookmark重启Workflow
}
else
{
foreach (var v in instance.GetBookmarks()) //输入的Bookmark名字不对, Workflow Instance中没有这个BookMark
{
System.Console.WriteLine("--------请从下面选项中选择一个BookmarkName---------------------------");
System.Console.WriteLine("BookmarkName:{0}:,OwnerDisplayName:{1}", v.BookmarkName, v.OwnerDisplayName);
System.Console.WriteLine("================================");
}
}
}
else
{
MessageBox.Show("没有创建实例");
}
}

如果输入的Bookmark名字正确, Workflow Instance被从中断的地方唤醒, 继续下一个WriteLine Activity, 执行完后流程结束.

对Bookmark的理解, 其实最关键的地方就是, CreateBookmark会自动使Workflow进入Idle状态, 直到被ResumeBookmark唤醒.

WF中的Bookmark的更多相关文章

  1. 关于Visual Studio中书签Bookmark的一些问题

    VS自带一个书签功能,但是有个大问题,没有导出功能,因为这个书签是保存在工程.suo文件中,所以在移动,分享,甚至其他情况下很不方便,甚至丢失. 在你分析一个较大的开源,做了30-50个关键代码书签, ...

  2. 你还记得windows workflow foundation吗

    很多年前,windows workflow foundation还叫WWF,而直译过来的名称让很多人以为它就是用来开发工作流或者干脆就是审批流的. 博主当年还是个懵懂的少年,却也知道微软不会大力推一个 ...

  3. SQLSERVER中的假脱机spool

    SQLSERVER中的假脱机spool 我发现网上对于假脱机的解释都非常零散,究竟假脱机是什么? 这几天在家里研究了一下,收集了很多网上的资料 假脱机是中文的翻译,而英文的名字叫做 spool 在徐老 ...

  4. wf(七)(手把手包会)

    这个demo中我们将用If/Else逻辑加到工作流用来展示不同的message通过自定义的条件. 如果name的字符数是奇数,第一个单词就输出“Greeting”否则输出“Hello”. 1. 在Sa ...

  5. WF工作流与管理类应用系统工作流需求实现的一些误区

             如今实现各种应用系统大家都知道工作流是一个非常重要的环节,不同的业务系统的工作流需求是需要找相应的工作流产品去实现的,因为不同工作流产品的架构细节也许会成为某类需求实现的瓶颈. WF ...

  6. [转]WF事件驱动

    本文转自:http://www.cnblogs.com/Mayvar/archive/2011/09/03/wanghonghua_201109030446.html 已经有不少朋友知道Workflo ...

  7. PowerBI 使用Bookmark

    使用PowerBI Desktop中的bookmark(书签),开发人员可以捕获报表中一个页面的当前配置,包括过滤器的设置,Visual的状态等信息,此后,开发人员可以通过激活已保存的bookmark ...

  8. 解析大型.NET ERP系统架构设计 Framework+ Application 设计模式

    我对大型系统的理解,从数量上面来讲,源代码超过百万行以上,系统有超过300个以上的功能,从质量上来讲系统应该具备良好的可扩展性和可维护性,系统中的功能紧密关联.除去业务上的复杂性,如何设计这样的一个协 ...

  9. Workflow笔记1——工作流介绍

    什么是工作流? 工作流(Workflow),是对工作流程及其各操作步骤之间业务规则的抽象.概括.描述.BPM:是Business Process Management的英文字母缩写.即业务流程管理,是 ...

随机推荐

  1. javap的基本用法

    参考:http://www.cnblogs.com/beautiful-code/p/6424977.html javap是JDK自带的反汇编器,可以查看java编译器为我们生成的字节码.通过它,我们 ...

  2. hdu 4937 2014 Multi-University Training Contest 7 1003

    Lucky Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) T ...

  3. php 生成二维码图片

    php 生成二维码图片 (1)下载类库文件 php类库PHP QR Code,地址:http://phpqrcode.sourceforge.net/. (2)放到项目里 把下载的文件解压后有个php ...

  4. file中的一些常用方法

    1.exists();判断文件(目录)是否存在 2.mkdir();创建一级目录:mkdirs()创建多级目录 3.delete();删除文件(目录) 4.isDirectory();判断是否是一个目 ...

  5. 拖拽排序插件 ---- Dragula

    相关链接:  https://github.com/bevacqua/react-dragula https://github.com/bevacqua/react-dragula demo:  ht ...

  6. AC日记——[ZJOI2009]假期的宿舍 cogs 1333

    1333. [ZJOI2009] 假期的宿舍 ★★☆   输入文件:zjoi09holiday.in   输出文件:zjoi09holiday.out   简单对比时间限制:1 s   内存限制:25 ...

  7. Codeforces Round #321 (Div. 2) Kefa and Park 深搜

    原题链接: 题意: 给你一棵有根树,某些节点的权值是1,其他的是0,问你从根到叶子节点的权值和不超过m的路径有多少条. 题解: 直接dfs一下就好了. 代码: #include<iostream ...

  8. Ubuntu 16.04安装Wine版的迅雷+QQ(完美方案,终极解决方法)

    安装前先备份好系统! 继上一篇安装QQ的方法http://www.cnblogs.com/EasonJim/p/7425978.html,这一篇的QQ采用的是Wine模式安装.完美解决消息记录中文乱码 ...

  9. iOS开发 编码规范

    转至   http://www.cnblogs.com/celestial/archive/2012/06/30/2571417.html 编码规范 一.文档结构管理 1.建立Libraries文件夹 ...

  10. libsvm交叉验证与网格搜索(参数选择)

    首先说交叉验证.交叉验证(Cross validation)是一种评估统计分析.机器学习算法对独立于训练数据的数据集的泛化能力(generalize), 能够避免过拟合问题.交叉验证一般要尽量满足:1 ...