WWF中宿主程序(即调用工作流的程序)和工作流内部交换数据的几种方法(情况)。
来源:互联网 发布:日本老龄化 知乎 编辑:程序博客网 时间:2024/05/21 08:51
WWF中宿主程序(即调用工作流的程序)和工作流内部交换数据的几种方法(情况)。
一、在工作流启动时,向工作流内部传递参数:(特点是:只能在工作流启动时传入数据。)
这个比较简单,只需
在文章http://blog.csdn.net/xjzdr/archive/2008/06/06/2516102.aspx中的第二部分有详细的说明:
大概是:
(1)在Workflow1.cs文件中,定义属性:
public string STRNAME
{
get { return strName; }
set { strName = value;}
}
(2)定义Dictionary对象,如:
Dictionary<string, object> parameters = new Dictionary<string, object>();
然后给这个Dictionary加入参数和传入的数据。
注意:加入的参数名称要和工作流中的参数名称一样。
(3)在工作流实例创建的CreateWorkflow方法中,加入Dictionary对象。
完整的一个启动代码如下:
using System.ComponentModel; using System.Data; u
sing System.Drawing; using System.Text;
using System.Windows.Forms; //
using System.Workflow.Runtime;//在项目中添加System.Workflow.Runtime 引用 using System.Workflow.Activities;///在项目中添加 System.Workflow.Activities 引用
using System.Workflow.ComponentModel;
namespace WindowsApplication1 {
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private WorkflowRuntime wr;
private void button1_Click(object sender, EventArgs e)
{
if (wr == null)
{
wr = new WorkflowRuntime();
wr.StartRuntime();
}
Dictionary<string, object> parameters = new Dictionary<string, object>();
parameters.Add("STRNAME", this.textBox1.Text);
parameters.Add("STRQQ", this.textBox2.Text);
WorkflowInstance instance = wr.CreateWorkflow(typeof(WorkflowLibrary1.Workflow1), parameters);
instance.Start();//启动工作流
}
}
}
二、在工作流内部调用外部方法(包括带参数和不带参数的方法):
(1)定义一个接口IWWFDEMO,在接口IWWFDEMO中定义方法,在另一个类中(必须继承自该接口)进行方法的具体实现。
为了方便,我将接口的定义和方法的具体实现放在一个CS文件中,完整的WWFDEMO.cs代码如下:
using System;
using System.Collections.Generic;
using System.Text;
using System.Workflow.Activities;
namespace WorkflowLibrary4
{
/// <summary>
/// 定义工作流服务接口
/// </summary>
[System.Workflow.Activities.ExternalDataExchange]
public interface IWWFDEMO//定义接口
{
//定义两个方法,其中一个有参数,一个没有参数
void CreateBallot1();//调用程序输入的将QQ号通过外部方法传入工作流中,并在工作流中打印出来
void CreateBallot2(string StrQQ);
}
/// <summary>
/// 实现类
/// </summary>
public class WWFDEMO : IWWFDEMO
{
public void CreateBallot1()
{
Console.WriteLine("Bollot created for {0}.");
}
public void CreateBallot2(string myqq)
{
Console.WriteLine("Bollot2 created for ", myqq);
}
}
}
定义了两个方法,其中一个有输入参数,另一个没有输入参数。
(2)设置WWF。
工作流中,使用callExternalMethodActivity来调用外部的方法。
设置效果如下:
放置了两个callExternalMethodActivity,分别用于调用外部的CreateBallot1和CreateBallot2方法。CODEActivity用于输出接收的参数。
分别设置这两个callExternalMethodActivity的InterFaceType属性和MethodName属性。
InterFaceType属性为:WorkflowLibrary4.IWWFDEMO
MethodName分别为两个方法名称。
其中,因为 CreateBallot2带有一个参数,因此,在属性窗口中,会出现一个方法的属性,如图:
运行到callExternalMethodActivity2时,将会把输入的参数传入,并保存在StrQQ1中,因此,在下面的CodeActivity中,就可以调用该参数了。
codeActivity1的执行代码如下:
private void codeActivity1_ExecuteCode(object sender, EventArgs e)
{
Console.WriteLine(this.StrQQ1.ToString());
}
(3)调用WWF的宿主程序:
private void button1_Click(object sender, EventArgs e)
{
WorkflowRuntime workflowRuntime = new WorkflowRuntime(); //为工作流添加参数
Dictionary<string, object> parameters = new Dictionary<string, object>();
parameters.Add("StrQQ1", "ABC");//此名称必须和WF中参数的名称完全一样才行。 //为工作流添加数据交换服务
System.Workflow.Activities.ExternalDataExchangeService dataService = new ExternalDataExchangeService(); workflowRuntime.AddService(dataService);
//实例化服务内容
WorkflowLibrary4.WWFDEMO votingservice = new WorkflowLibrary4.WWFDEMO();
dataService.AddService(votingservice);
workflowRuntime.StartRuntime(); //调用工作流
WorkflowInstance instance = workflowRuntime.CreateWorkflow(typeof(WorkflowLibrary4.Workflow1), parameters);
instance.Start();
}
说明:
调用外部的方法和事件时,必须使用ExternalDataExchangeService 进行方法和事件的交互。
MSDN中对此的解释是:
表示一个必须添加到工作流运行时引擎才能启用本地服务通信的服务。若要正确地初始化和注册这些服务,必需将本地服务实现添加到 ExternalDataExchangeService。
运行效果:
private string strName;
- WWF中宿主程序(即调用工作流的程序)和工作流内部交换数据的几种方法(情况)。
- 在工作流内部调用宿主的静态方法终止工作流的执行
- WWF支持的工作流模式和风格
- wwf工作流和自开发工作流引擎的比较
- 在asp.net中实际应用工作流(WWF)的2个实例教程
- 宿主和工作流:两个世界的交互 II(工作流给Host传递数据)
- 【工作流】——工作流的宿主WorkflowApplication和WorkflowInvoker
- 探索工作流(四)--工作流宿主--WorkflowInvoker
- 探索工作流(五)--工作流宿主WorkflowApplication
- 如何配置WWF工作流的持久化
- 有使用WWF和ASP.NET结合做工作流产品的朋友么?
- 程序中實現審覈中心,也就是講的工作流
- 程序中實現審覈中心,也就是講的工作流
- 推荐大家一本介绍WWF的杂志——The Architecture Journal——生成工作流(第七期)
- ASP.NET中实现WWF工作流(ManualWorkflowSchedulerService)
- linux C程序调用外部程序的几种方法
- VS 2005 工作流 WWF
- 工作流几种常用的模式
- C#.NET中的DateTime类型和DateTimeKind枚举
- Asp.net图片上传access数据库以及图片显示;点击图片以后显示[图片,以及图片的
- 关于tcltest的返回结果
- 当文字过多时,显示省略号
- net上传图片(取一张最新图片)
- WWF中宿主程序(即调用工作流的程序)和工作流内部交换数据的几种方法(情况)。
- 关于checkboxtree选中的一个小例子非常使用
- C#中使用反射动态加载和卸载DLL
- oracle和操作系统冲突的问题。
- Sql Server 基本函数
- 又遇Trojan.PSW.Win32.QQPass,Trojan.PSW.Win32.GameOL等1
- 德国队输了
- 系统资源调用和shell32.dll简介
- .NET vs J2EE——面对SOA的荒谬与误解