随笔 - 4  文章 - 0 评论 - 0 trackbacks - 0

原文:http://msdn.microsoft.com/en-us/library/hh305677%28VS.110%29.aspx

微软在 .NET Framework 4.5 Developer Preview 中发布了 WF 4.5,新的功能如下:

1.Activity

   新活动 NoPersistScope: 在此活动之内不会发生工作流的持久化操作。之前网上也有很多开源的实现,现在终于集成进来了。

   Flowchart 增强: FlowSwitch 和FlowDecision 的 DisplayName属性可以编辑了,这样在工作流设计器中,分支判断就就更加直观。

   Flowchart 新增属性 ValidateUnconnectedNodes, 默认为false。若这支为true,则没有被连接到 chart node 验证时会报错误

2.设计器功能增强

  a.搜索查询,可搜索活动,变量,参数,表达式等:目前只在VS中支持,在外部设计器(rehost designer)中不支持

  b.选中变量或参数,可在弹出的右键菜单中删除。在WF4中只能猛击键盘上的delete键删除

  Variable and Argument Designer Context Menu

   c.自动生成 Sequence活动

    某些活动,如NoPersistScope, Transaction等,只允许包含一个子活动,当在设计器中往其添加第二个字活动时,设计器会自动生成一个Sequence活动将之前的多个子活动包含其中,省去了手动添加Sequence活动的麻烦

  Auto-surround drop location      当往NoPersistScope中添加第二个WriteLine时,自动生成Sequence ->  Automatically created sequence activity

   d. 可以移动工作流设计图,这样对于大型复杂的工作流的设计更为方便。之前的版本只能放大缩小

 Pan button in workflow designer

   e. 多选: 可一次选择多个活动,进行操作(如删除等)

   f. 工作流文档结构图: Document Outline 窗口也支持工作流的树形结构显示了。就像WPF中的xaml visual tree一样。

   g. 支持C# 表达式: 这个是个人认为最为给力的改进之一。之前写VB表达式是在很痛苦。

    h. 当构建外部设计器时,可以对其界面组成和布局进行更多的控制。

    i.  flowchart 和 state machine 类型的工作流,支持自动连接和插入节点:

   自动连接:当将新节点拖动到某个已存节点上的自动连接点时,设计器会自动连接它们。

Flowchart start node showing autoconnect points 

   自动插入节点: 当将新节点拖动到一个连接线时,该连接线会高亮,然后松开鼠标,设计器会将新节点自动插入到两个已存节点中,并新建两条连接线

  Auto-insert handle for dropping activities

  j. 设计器标注(Designer Annotations)

  可以给活动,变量,参数标注说明,相当于代码中的注释

  k. 状态机中的状态节点(state node ) 也支持debug 断点了

  l.  设计器支持 ActivityDelegate。 之前的版本不支持 ActivityDelegate可视化设计。

 3. 工作流版本控制 (给力,这个问题是WF4在企业应用中经常遇到,也最为难控制的地方)

  WorkflowApplicationWorkflowServiceHost 均支持工作流反序列化后读取其版本信息的,这样宿主程序就可以根据此版本信息做出进一步处理。同时可进行一定程度的动态更新,这个功能其实WF3.5中就提供了。WF4中被取消。这次又支持了。

 4. 编译工作流项目时,之前的流程设计错误(validation errors),不会导致整个功能编译失败,但现在的版本将会导致编译失败

 5.xaml文件中的 View state  信息将会单独保存在另一个文件中。这样实现了流程结构和设计器可视化信息的分离,原来是全部存在同一个文件中的。

 6. 可扩展的表达式机制。 通过表达式扩展机制,开发人员可以定义自己的表达式语言,这样就可更容易的将设计工作交给非技术人员,如关键客户来做了。

 7. 创建外部设计器时,可通过设置 DesignerConfigurationService 属性来开启关闭新的设计器功能,以兼容前一版本的工作流设计。

 8. 状态机工作流模型: 这个在 .NET Framework 4 Platform Update 1Microsoft .NET Framework 4 Platform Update 1中已经提供,现在则正是包含进来了。

 9. 支持Contract-first workflow的开发。

 

 

posted @ 2011-10-16 00:20 毁灭公爵 阅读(610) 评论(0) 编辑

MSDN 2011-1月文章:

在 WF 4 中编写自定义控制流活动: http://msdn.microsoft.com/zh-cn/magazine/gg535667.aspx

值得一看,mark一下

posted @ 2011-04-24 17:17 毁灭公爵 阅读(132) 评论(0) 编辑
this.wd = new WorkflowDesigner();
this.wd.Load(new Flowchart());

ReadOnlyState state
= this.wd.Context.Items.GetValue<ReadOnlyState>();
state.IsReadOnly
= true;

这样在设计器中就不允许修改工作流定义了

参考:http://blogs.msdn.com/b/kushals/archive/2009/09/14/re-hosting-the-workflow-desinger-in-read-only-mode.aspx

posted @ 2011-04-23 19:05 毁灭公爵 阅读(79) 评论(0) 编辑

 先看看System.Activities.Hosting.SymbolResolver 的定义:

public sealed class SymbolResolver : IDictionary<string, Object>,
ICollection
<KeyValuePair<string, Object>>, IEnumerable<KeyValuePair<string, Object>>,
IEnumerable

 实现了IDictionary<string, Object> 接口,我们在工作流宿主中将需要在自定义Activity中访问的变量加入到SymbolResolver 中,然后在Activity中获取

SymbolResolver 实例,再通过key访问需要的变量,代码如下:

  

//定义信息包装类:
public class MyObject
{
public int MyValue { get; set; }
public string MyString { get; set; }
}

//将SymbolResolver作为Extension加入到WorkflowApplication中
class Program
{
static void Main(string[] args)
{
WorkflowApplication WFApp
= new WorkflowApplication(new Workflow1());
SymbolResolver symbolResolver
= new SymbolResolver();
WFApp.Extensions.Add(symbolResolver);
symbolResolver.Add(
"CustomObject", new SymbolUserActivity.MyObject() { MyValue = 1, MyString = "TestString" });
WFApp.Run();
Console.ReadLine();
}
}

//在自定义活动中访问MyObject实例
public sealed class SymbolUser : CodeActivity
{
protected override void Execute(CodeActivityContext context)
{
SymbolResolver symbolResolver
= context.GetExtension<SymbolResolver>();
MyObject obj
= symbolResolver["CustomObject"] as MyObject;
Console.WriteLine(obj.MyString);
}
}

最后要注意的是: SymbolResolver 不会参与工作流持久化过程

原文:Using a WF4 SymbolResolver to access host environment information

posted @ 2011-04-23 11:10 毁灭公爵 阅读(66) 评论(0) 编辑
仅列出标题