WF中的Bookmark
最近在学习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的更多相关文章
- 关于Visual Studio中书签Bookmark的一些问题
VS自带一个书签功能,但是有个大问题,没有导出功能,因为这个书签是保存在工程.suo文件中,所以在移动,分享,甚至其他情况下很不方便,甚至丢失. 在你分析一个较大的开源,做了30-50个关键代码书签, ...
- 你还记得windows workflow foundation吗
很多年前,windows workflow foundation还叫WWF,而直译过来的名称让很多人以为它就是用来开发工作流或者干脆就是审批流的. 博主当年还是个懵懂的少年,却也知道微软不会大力推一个 ...
- SQLSERVER中的假脱机spool
SQLSERVER中的假脱机spool 我发现网上对于假脱机的解释都非常零散,究竟假脱机是什么? 这几天在家里研究了一下,收集了很多网上的资料 假脱机是中文的翻译,而英文的名字叫做 spool 在徐老 ...
- wf(七)(手把手包会)
这个demo中我们将用If/Else逻辑加到工作流用来展示不同的message通过自定义的条件. 如果name的字符数是奇数,第一个单词就输出“Greeting”否则输出“Hello”. 1. 在Sa ...
- WF工作流与管理类应用系统工作流需求实现的一些误区
如今实现各种应用系统大家都知道工作流是一个非常重要的环节,不同的业务系统的工作流需求是需要找相应的工作流产品去实现的,因为不同工作流产品的架构细节也许会成为某类需求实现的瓶颈. WF ...
- [转]WF事件驱动
本文转自:http://www.cnblogs.com/Mayvar/archive/2011/09/03/wanghonghua_201109030446.html 已经有不少朋友知道Workflo ...
- PowerBI 使用Bookmark
使用PowerBI Desktop中的bookmark(书签),开发人员可以捕获报表中一个页面的当前配置,包括过滤器的设置,Visual的状态等信息,此后,开发人员可以通过激活已保存的bookmark ...
- 解析大型.NET ERP系统架构设计 Framework+ Application 设计模式
我对大型系统的理解,从数量上面来讲,源代码超过百万行以上,系统有超过300个以上的功能,从质量上来讲系统应该具备良好的可扩展性和可维护性,系统中的功能紧密关联.除去业务上的复杂性,如何设计这样的一个协 ...
- Workflow笔记1——工作流介绍
什么是工作流? 工作流(Workflow),是对工作流程及其各操作步骤之间业务规则的抽象.概括.描述.BPM:是Business Process Management的英文字母缩写.即业务流程管理,是 ...
随机推荐
- 06深入理解C指针之---指针操作和比较
该系列文章源于<深入理解C指针>的阅读与理解,由于本人的见识和知识的欠缺可能有误,还望大家批评指教. 指针作为一种特殊类型的变量,必须遵守C语言中变量先声明后使用的原则.本节内容中指针的操 ...
- C语言处理json字符串
JSON语法说明 先来看一个简单的JSON 1 { 2 "stars": [ 3 { 4 "name": "Faye", 5 "a ...
- ajax 分页(jquery分页插件pagination) 小例2
封装成:myPagination.js// ajax分页 function sendAjax(flag, dataParam, url, callback) {//封装的ajax: var shus ...
- POJ 1011:木棒
传送门 http://poj.org/problem?id=1011 题目大意 已知原来有等长若干木棒,现在给你一堆断了的木棒的长度,问原来的木棒最短是多长 题目类型 DFS + 剪枝 + “贪心优化 ...
- Visual Studio Code 使用教程
visual studio code以下简称vsc.vsc这个编辑器也火了一会了,最近在跟风学一波typescript,网络上很多人说vsc是最适合ts的编辑器,而且这个编辑器本身也很好用,所以学一下 ...
- AC日记——王室联邦 bzoj 1086
Description “余”人国的国王想重新编制他的国家.他想把他的国家划分成若干个省,每个省都由他们王室联邦的一个成员来管理.他的国家有n个城市,编号为1..n.一些城市之间有道路相连,任意两个不 ...
- Android之观察者/被观察者模式Observer/Observable
Android 本身也是有观察者模式的.虽然项目中很多需要通知数据改变的地方,用了EventBus,但是不得不说这个观察者模式还是很好用的.最近在开发新版本的时候引用了腾讯的IM,之前写直播的时候就用 ...
- 初识mysql语句
操作文件夹(库) 增 create database db1 charset utf8; 查 # 查看当前创建的数据库 show create database db1; # 查看所有的数据库 sho ...
- 从壹开始 [ Ids4实战 ] 之三║ 详解授权持久化 & 用户数据迁移
回顾 哈喽大家周三好,今天终于又重新开启 IdentityServer4 的落地教程了,不多说,既然开始了,就要努力做好
- SpringCloud 分布式事务解决方案
目录 TX-LCN分布式事务框架 TX-LCN分布式事务框架 随着互联化的蔓延,各种项目都逐渐向分布式服务做转换.如今微服务已经普遍存在,本地事务已经无法满足分布式的要求,由此分布式事务问题诞生. 分 ...