现在的位置: 首页 > 综合 > 正文

WF4.0 基础篇 (十八) Flowchart

2014年04月05日 ⁄ 综合 ⁄ 共 9737字 ⁄ 字号 评论关闭

本节主要介绍WF4 中 Flowchart的使用

 

本文例子下载:

http://files.cnblogs.com/foundation/FlowcharSample.rar

本文例子说明

 

Flowchart 说明 

Flowchart

类名

System.Activities.Statements.Flowchart

文件

System.Activities.dll

结构说明

继承 NativeActivity

是一个 sealed类

override 了 [CacheMetadata方法] 与 [Execute方法]

[Variables]属性 的类型为[ Collection<Variable>]

[StartNode]属性 的类型为[FlowNode]

[Nodes]属性 的类型为[Collection<FlowNode>]

功能说明

 

 

 

 

FlowDecision

类名

System.Activities.Statements.FlowDecision

文件

System.Activities.dll

结构说明

继承 FlowNode

是一个 sealed类

[Condition]属性 的类型为[Activity<bool>]

[False]属性 的类型为[FlowNode]

[True]属性 的类型为[FlowNode]

功能说明

 

 

 

 

 

FlowSwitch

类名

System.Activities.Statements.FlowSwitch

文件

System.Activities.dll

结构说明

继承 FlowNode

是一个 sealed类

[Expression]属性 的类型为[Activity<object>]

[Default]属性 的类型为[FlowNode]

[Cases]属性 的类型为[IDictionary<object, FlowNode>]

功能说明

 

 

 

 

FlowStep

 

类名

System.Activities.Statements.FlowStep

文件

System.Activities.dll

结构说明

继承 FlowNode

是一个 sealed类

[Action]属性 的类型为[Activity]

[Next]属性 的类型为[FlowNode]

功能说明

 

 

 

Flowchart基本使用

工作流

宿主

//===================================================

 

WorkflowApplication instance =
null;

 

private
void button_triggering_Click(object sender,
RoutedEventArgs e)

        {

string bookName = textBox_bookmark.Text;

string inputValue = textBox_value.Text;

 

if (instance !=
null)

            {

if (instance.GetBookmarks().Count(p => p.BookmarkName == bookName) ==
1)

                {

                    instance.ResumeBookmark(bookName, inputValue);

                }

else

                {

foreach (var v
in instance.GetBookmarks())

                    {

                        System.Console.WriteLine("-------请从下面选项中选择一BookmarkName---------------------------");

System.Console.WriteLine("BookmarkName:{0}:,OwnerDisplayName:{1}", v.BookmarkName, v.OwnerDisplayName);

                        System.Console.WriteLine("================================");

                    }

                }

            }

else

            {

MessageBox.Show("没有创建实例");

            }

 

        }

 

void workflowCompleted(WorkflowApplicationCompletedEventArgs e)

        {

            instance =
null
;

            System.Console.WriteLine("workflowCompleted:{0}", e.CompletionState.ToString());

        }

 

void aborted(WorkflowApplicationAbortedEventArgs e)

        {

            instance =
null
;

            System.Console.WriteLine("aborted ,Reason:{0}", e.Reason.Message);

        }

 

UnhandledExceptionAction unhandledExceptionl(WorkflowApplicationUnhandledExceptionEventArgs e)

        {

            System.Console.WriteLine("unhandledException:{0}", e.UnhandledException.Message);

return
UnhandledExceptionAction.Cancel;

        }

void workflowIdel(WorkflowApplicationIdleEventArgs e)

        {

            System.Console.WriteLine("Idle:{0}", e.InstanceId);

 

            System.Console.WriteLine("--------BookmarkName---------------------------");

foreach (var item
in e.Bookmarks)

            {

                System.Console.WriteLine("{0}", item.BookmarkName);

            }

            System.Console.WriteLine("================================");

        }

//==================================================

 

private
void button_baseFlowchartWorkflow_Click(object sender,
RoutedEventArgs e)

        {

            instance =
new
WorkflowApplication(new FlowcharLibrary.baseFlowchartWorkflow());

 

            instance.Completed =
new Action<WorkflowApplicationCompletedEventArgs>(workflowCompleted);

            instance.OnUnhandledException = unhandledExceptionl;

            instance.Aborted = aborted;

            instance.Idle = workflowIdel;

            instance.Run();

 

        }

结果

 

FlowDecision 例子

工作流

bookmark

public
sealed class
bookmark
<T> : NativeActivity<T>

    {

public
InArgument<string> bookmarkName {
get; set; }

 

protected
override bool CanInduceIdle

        {

get

            {
return
true; }

        }

protected
override void Execute(NativeActivityContext context)

        {

string bookmark = context.GetValue(bookmarkName);

            context.CreateBookmark(bookmark,
new BookmarkCallback(bookmarkCallback));

            System.Console.WriteLine("创建bookmark:{0}",
bookmark);

        }

void bookmarkCallback(NativeActivityContext context,
Bookmark bookmark, object obj)

        {

 

if (typeof(T) ==
typeof(Int32))

            {

this.Result.Set(context,
int.Parse(obj.ToString()) );

return;

            }

 

if (typeof(T) ==
typeof(string))

            {

this.Result.Set(context, obj.ToString());

return;

            }

 

this.Result.Set(context,obj);

        }

    }

宿主

//===================================================

 

WorkflowApplication instance =
null;

 

private
void button_triggering_Click(object sender,
RoutedEventArgs e)

        {

string bookName = textBox_bookmark.Text;

string inputValue = textBox_value.Text;

 

if (instance !=
null)

            {

if (instance.GetBookmarks().Count(p => p.BookmarkName == bookName) ==
1)

                {

                    instance.ResumeBookmark(bookName, inputValue);

                }

else

                {

foreach (var v
in instance.GetBookmarks())

                    {

                        System.Console.WriteLine("-------请从下面选项中选择一BookmarkName---------------------------");

System.Console.WriteLine("BookmarkName:{0}:,OwnerDisplayName:{1}", v.BookmarkName, v.OwnerDisplayName);

                        System.Console.WriteLine("================================");

                    }

                }

            }

else

            {

MessageBox.Show("没有创建实例");

            }

 

        }

 

void workflowCompleted(WorkflowApplicationCompletedEventArgs e)

        {

            instance =
null
;

            System.Console.WriteLine("workflowCompleted:{0}", e.CompletionState.ToString());

        }

 

void aborted(WorkflowApplicationAbortedEventArgs e)

        {

            instance =
null
;

            System.Console.WriteLine("aborted ,Reason:{0}", e.Reason.Message);

        }

 

UnhandledExceptionAction unhandledExceptionl(WorkflowApplicationUnhandledExceptionEventArgs e)

        {

            System.Console.WriteLine("unhandledException:{0}", e.UnhandledException.Message);

return
UnhandledExceptionAction.Cancel;

        }

void workflowIdel(WorkflowApplicationIdleEventArgs e)

        {

            System.Console.WriteLine("Idle:{0}", e.InstanceId);

 

            System.Console.WriteLine("--------BookmarkName---------------------------");

foreach (var item
in e.Bookmarks)

            {

                System.Console.WriteLine("{0}", item.BookmarkName);

            }

            System.Console.WriteLine("================================");

        }

//==================================================

private
void button_FlowDecisionWorkflow_Click(object sender,
RoutedEventArgs e)

        {

            instance =
new
WorkflowApplication(new FlowcharLibrary.FlowDecisionWorkflow());

 

            instance.Completed =
new Action<WorkflowApplicationCompletedEventArgs>(workflowCompleted);

            instance.OnUnhandledException = unhandledExceptionl;

            instance.Aborted = aborted;

            instance.Idle = workflowIdel;

            instance.Run();

        }

 

结果

 

FlowSwitch 例子

工作流

bookmark

public
sealed class
bookmark
<T> : NativeActivity<T>

    {

public
InArgument<string> bookmarkName {
get; set; }

 

protected
override bool CanInduceIdle

        {

get

            {
return
true; }

        }

protected
override void Execute(NativeActivityContext context)

        {

string bookmark = context.GetValue(bookmarkName);

            context.CreateBookmark(bookmark,
new BookmarkCallback(bookmarkCallback));

            System.Console.WriteLine("创建bookmark:{0}",
bookmark);

        }

void bookmarkCallback(NativeActivityContext context,
Bookmark bookmark, object obj)

        {

 

if (typeof(T) ==
typeof(Int32))

            {

this.Result.Set(context,
int.Parse(obj.ToString()) );

return;

            }

 

if (typeof(T) ==
typeof(string))

            {

this.Result.Set(context, obj.ToString());

return;

            }

 

this.Result.Set(context,obj);

        }

    }

宿主

//===================================================

 

WorkflowApplication instance =
null;

 

private
void button_triggering_Click(object sender,
RoutedEventArgs e)

        {

string bookName = textBox_bookmark.Text;

string inputValue = textBox_value.Text;

 

if (instance !=
null)

            {

if (instance.GetBookmarks().Count(p => p.BookmarkName == bookName) ==
1)

                {

                    instance.ResumeBookmark(bookName, inputValue);

                }

else

                {

foreach (var v
in instance.GetBookmarks())

                    {

                        System.Console.WriteLine("-------请从下面选项中选择一BookmarkName---------------------------");

System.Console.WriteLine("BookmarkName:{0}:,OwnerDisplayName:{1}", v.BookmarkName, v.OwnerDisplayName);

                        System.Console.WriteLine("================================");

                    }

                }

            }

else

            {

MessageBox.Show("没有创建实例");

            }

 

        }

 

void workflowCompleted(WorkflowApplicationCompletedEventArgs e)

        {

            instance =
null
;

            System.Console.WriteLine("workflowCompleted:{0}", e.CompletionState.ToString());

        }

 

void aborted(WorkflowApplicationAbortedEventArgs e)

        {

            instance =
null
;

            System.Console.WriteLine("aborted ,Reason:{0}", e.Reason.Message);

        }

 

UnhandledExceptionAction unhandledExceptionl(WorkflowApplicationUnhandledExceptionEventArgs e)

        {

            System.Console.WriteLine("unhandledException:{0}", e.UnhandledException.Message);

return
UnhandledExceptionAction.Cancel;

        }

void workflowIdel(WorkflowApplicationIdleEventArgs e)

        {

            System.Console.WriteLine("Idle:{0}", e.InstanceId);

 

            System.Console.WriteLine("--------BookmarkName---------------------------");

foreach (var item
in e.Bookmarks)

            {

                System.Console.WriteLine("{0}", item.BookmarkName);

            }

            System.Console.WriteLine("================================");

        }

//==================================================

 

private
void button_FlowSwitchWorkflow_Click(object sender,
RoutedEventArgs e)

        {

            instance =
new
WorkflowApplication(new FlowcharLibrary.FlowSwitchWorkflow());

 

            instance.Completed =
new Action<WorkflowApplicationCompletedEventArgs>(workflowCompleted);

            instance.OnUnhandledException = unhandledExceptionl;

            instance.Aborted = aborted;

            instance.Idle = workflowIdel;

            instance.Run();

        }

结果


 

抱歉!评论已关闭.