WF4B1 的有返回值的Activity,Bookmark,有返回值Bookmark
目录
NativeActivity<T>
类名:System.Activities.NativeActivity<TResult>
基类:System.Activities.WorkflowElement<TResult>
文件: System.Activities.dll
类型:abstract (void Execute(System.Activities.ActivityExecutionContext context))
定义有返回值的Activity
场景说明:有两个[Int]参数v1,v2,返回值为v1+v2
public class myActivity<T> : NativeActivity<int> { public System.Activities.InArgument<int> v1 { set; get; }
public System.Activities.InArgument<int> v2 { set; get; }
protected override void Execute(ActivityExecutionContext context) { int r =(int)v1.Get(context) + (int)v2.Get(context); this.Result.Set(context, r); } } |
说明:
当在设计器中添加有返回值的Activity时,会出现一个对话框,要求指定返回值的类型
使用
流程 | |
宿主 | WorkflowInstance myInstance = new WorkflowInstance(new Sequence1());
myInstance.Run();
System.Console.Read(); |
结果 |
Bookmark说明
Bookmark可使用流程Idle并触发流程的OnIdle
Bookmark
要定义具备Bookmark的Activit,可从 NativeActivity继承
类名:System.Activities.NativeActivity
基类:System.Activities.WorkflowElement
文件: System.Activities.dll
类型:abstract (void Execute(System.Activities.ActivityExecutionContext context))
定义Activity
public class myBookmark : NativeActivity {
public string bookmarkName { get; set; } protected override void Execute(ActivityExecutionContext context) { context.CreateNamedBookmark(bookmarkName); } } |
定义工作流
<p:Activity mc:Ignorable="" x:Class="WorkflowConsoleApplication1.Sequence2" xmlns="http://schemas.microsoft.com/netfx/2009/xaml/activities/design" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:p="http://schemas.microsoft.com/netfx/2009/xaml/activities" xmlns:sad="clr-namespace:System.Activities.Debugger;assembly=System.Activities" xmlns:w="clr-namespace:WorkflowConsoleApplication1;assembly=WorkflowConsoleApplication1" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" > <p:Sequence > <p:WriteLine DisplayName="WriteLine:begin">["begin"]</p:WriteLine> <w:myBookmark bookmarkName="mywait" /> <p:WriteLine DisplayName="WriteLine:end">["end"]</p:WriteLine> </p:Sequence> </p:Activity> |
宿主
<Window x:Class="WpfApplication1.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Window1" Height="300" Width="300"> <StackPanel> <Button Content="启动" Height="23" Name="button1" Width="75" Click="button1_Click" /> <Button Content="继续" Height="23" Name="button2" Width="75" Click="button2_Click" />
</StackPanel>
</Window> |
WorkflowInstance myInstance; private void button1_Click(object sender, RoutedEventArgs e) { myInstance = new WorkflowInstance(new Sequence2()); myInstance.OnIdle += idel; myInstance.Run();
} IdleAction idel() { System.Console.WriteLine("等待提交....."); return IdleAction.Nothing; }
private void button2_Click(object sender, RoutedEventArgs e) { myInstance.ResumeBookmark("mywait",null); } |
结果
Bookmark(有返回值)
要定义具备有返回值的Bookmark Activit,可从 NativeActivity<T>继承
类名:System.Activities.NativeActivity<TResult>
基类:System.Activities.WorkflowElement<TResult>
文件: System.Activities.dll
类型:abstract (void Execute(System.Activities.ActivityExecutionContext context))
定义Activity
public sealed class bookmark<T> : NativeActivity<T> { public bookmark() : base() { }
public string bookmarkName { get; set; }
protected override void Execute(ActivityExecutionContext context) { context.CreateNamedBookmark(bookmarkName, new BookmarkCallback(bookmarkCallback));
}
void bookmarkCallback(ActivityExecutionContext context, Bookmark bookmark, object obj) { this.Result.Set(context, (T)obj);
} } |
定义工作流
<p:Activity mc:Ignorable="" x:Class="myBookmarks.Sequence1" xmlns="http://schemas.microsoft.com/netfx/2009/xaml/activities/design" xmlns:m="clr-namespace:myBookmarks;assembly=myBookmarks" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:p="http://schemas.microsoft.com/netfx/2009/xaml/activities" xmlns:sad="clr-namespace:System.Activities.Debugger;assembly=System.Activities" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <p:Sequence> <p:Sequence.Variables> <p:Variable x:TypeArguments="x:String" Name="rs" /> </p:Sequence.Variables> <p:WriteLine DisplayName="开始">["请提交意见"]</p:WriteLine> <m:bookmark x:TypeArguments="x:String" DisplayName="等待意见" Result="[rs]" bookmarkName="mywait" /> <p:WriteLine DisplayName="显示结果">[rs]</p:WriteLine> </p:Sequence> </p:Activity> |
宿主
<Window x:Class="WpfApplication1.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Window1" Height="300" Width="300"> <Canvas> <Button Canvas.Left="27" Canvas.Top="31" Content="启动流程" Height="23" Name="button1" Width="75" Click="button1_Click" /> <Button Canvas.Left="27" Canvas.Top="111" Content="继续" Height="23" Name="button2" Width="75" Click="button2_Click" /> <TextBox Canvas.Left="123" Canvas.Top="112.157" Height="23" Name="textBox1" Width="120" /> </Canvas> </Window> |
WorkflowInstance myInstance; private void button1_Click(object sender, RoutedEventArgs e) { myInstance = new WorkflowInstance(new Sequence1()); myInstance.OnIdle += idel; myInstance.Run(); }
IdleAction idel() { System.Console.WriteLine("等待提交....."); return IdleAction.Nothing; }
private void button2_Click(object sender, RoutedEventArgs e) { myInstance.ResumeBookmark("mywait", this.textBox1.Text); } |
结果
|