WF4.0 基础篇 (二十六) Interop调用WF3.X的Activity

来源:互联网 发布:淘宝运营每日工作内容 编辑:程序博客网 时间:2024/05/29 15:37

本节主要介绍Interop调用WF3.X的Activity

 

本文例子下载:

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

本文例子说明

 

Interop调用WF3.X的Activity

类名

System.Activities.Statements.Interop

文件

System.Workflow.Runtime.dll

结构说明

继承  NativeActivity, ICustomTypeDescriptor

是一个 sealed类

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

override 了 [CanInduceIdle属性] 

[ActivityMetaProperties]属性的类型为[IDictionary<string, object>]

[ActivityProperties]属性的类型为[IDictionary<string, object>]

[ActivityType]属性的类型为[Type]

功能说明

[ActivityType属性]用于指定要调用的WF3.5的Activity的类型

当指定WF3.5的Activity的类型后,在设计器中会自动为WF3.5的Activity的绑定生成两个参数一个为[属性名],另一个为[属性名Out]

 

 

 

使用说明

默认有WF4.0项目为[.NET Framework 4 Client Profile],要使用Interop,应将项目改为[.NET Framework 4 ]

 

Interop默认没出现在工具栏中,需要添加

 

 

[ActivityType属性]用于指定要调用的WF3.5的Activity的类型

 

 

当指定WF3.5的Activity的类型后,在设计器中会自动为WF3.5的Activity的绑定生成两个参数一个为[属性名],另一个为[属性名Out]

 

例子1:调用WF3.X的Activity

说明:

1.创建一WF3.X的Activity,有一绑定属性[printText]

  Activity在[ Execute]方法中打印[printText]的值,并为[printText]赋予一新值

 

2.创建一WF4的工作流,用[Interop]调用WF3.X的Activity,为[printText]传入值,并打印通过[printText]的返回值

 

WF3.XActivity

publicpartial class myActivity : Activity

    {

public myActivity()

        {

            InitializeComponent();

        }

 

        [System.Diagnostics.DebuggerNonUserCode]

        [System.CodeDom.Compiler.GeneratedCode("","")]

privatevoid InitializeComponent()

        {

this.Name ="myActivity";

        }

 

publicstatic readonly DependencyProperty printTextProperty = DependencyProperty.Register("printText",typeof(string), typeof(myActivity));

 

publicstring printText

        {

get

            {

return (string)base.GetValue(printTextProperty);

            }

set

            {

base.SetValue(printTextProperty,value);

            }

        }

 

protectedoverride ActivityExecutionStatus Execute(ActivityExecutionContext context)

        {

Console.WriteLine(this.printText);

this.printText = printText +":wxd";

returnActivityExecutionStatus.Closed;

        }

    }

WF4的工作流

宿主

staticvoid test1()

        {

WorkflowInvoker.Invoke(newtestWorkflow());

 

        }

结果

 

 

例2:代码操作

staticvoid test2()

        {

 

Variable<string> myVariable =new Variable<string>() { Default ="wxwinter" };

Sequence root =new Sequence()

            {

                Variables = { myVariable },

                Activities =

                {

 

newInterop()

                    {

                        ActivityType =typeof(myActivity),

                        ActivityProperties =

                        {

                           

                            { "printText", new InArgument<string>(myVariable) }

                            ,

                            { "printTextOut", new OutArgument<string>(myVariable) }

                             

                        },

                        ActivityMetaProperties =

                        {

// Provide a value for the Name meta-property of the WriteLine

                            { "Name", "myActivity" }

                        }

                    }

                    ,

newWriteLine{ Text=myVariable}

                }

            };

 

WorkflowInvoker.Invoke(root);

        }

 

原创粉丝点击