您的位置:首页 > 其它

Windows Workflow Foundation之旅(五)——指南3(创建自定义活动)

2005-12-20 09:50 579 查看
Windows Workflow Foundation之旅(五)——指南3(创建自定义活动)

翻译自: ms-help://MS.WinWF.v1.EN/WinWF_GettingStarted/html/8b6344bc-c879-41c5-babf-74e91c34d281.htm



WWF包含了一组丰富的通用用户活动,这些能满足绝大多数的场景的需求。但有时,我们还是会碰到需要一些更加自定义的活动的场景。WWF SDK拥有一些可扩展的特性,能使你轻松的创建自定义的活动,并把他们应用到你的解决方案中。在这一节中,我们会编写一个自定义活动,用来根据传入工作流的参数,从网页中下载文本。

创建一个网页解析自定义活动

这个自定义活动会根据传入活动的网页属性集,从网页中下载文本。页面一旦下载完毕,活动就会发出一个网页下载完毕的事件,并把网页数据值发回工作流。

创建WebTearActivity类

WebTear类继承自System.Workflow.ComponentModel.Activity类。当你定义了一个自定义活动时,把ToolboxItemAttributes属性应用到类上,并指明为ActivityboxItem类型。以下的代码就是一个最小的自定义活动。

using System;
using System.ComponentModel;
using System.Workflow.ComponentModel;
using System.Workflow.ComponentModel.Design;
using System.Workflow.ComponentModel.Compiler;

namespace Microsoft.Samples.Workflow.Quickstarts.CustomActivity
public static DependencyProperty WebPageProperty =
DependencyProperty.Register("WebPage", typeof(System.String), typeof (Microsoft.Samples.Workflow.Quickstarts.CustomActivity.WebTear ) );

[DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Visible)]
[ValidationVisibilityAttribute(ValidationVisibility.Optional)]
[BrowsableAttribute(true)]
[DescriptionAttribute("Web page to download")]
[CategoryAttribute("WebTear Property")]
public string WebPage
public class PageFinishedEventArgs
public delegate void PageFinishedEventHandler( object sender, PageFinishedEventArgs e );
public event PageFinishedEventHandler PageFinished;

protected override Status Execute(ActivityExecutionContext context)
using System;
using System.ComponentModel;
using System.Workflow.ComponentModel;
using System.Workflow.ComponentModel.Design;
using System.Workflow.ComponentModel.Compiler;
using System.Workflow.Activities;

namespace Microsoft.Samples.Workflow.Quickstarts.CustomActivity
……

namespace Microsoft.Samples.Workflow.Quickstarts.CustomActivity
{
public class MainForm : Form
{
private System.Windows.Forms.Label addressCaption;
private System.Windows.Forms.TextBox address;
private System.Windows.Forms.TextBox data;
private System.Windows.Forms.Button goButton;

private WorkflowRuntime workflowRuntime;

public MainForm()
{
InitializeComponent();

workflowRuntime = new WorkflowRuntime();
workflowRuntime.StartRuntime();

workflowRuntime.WorkflowCompleted += new EventHandler<WorkflowCompletedEventArgs>(workflowRuntime_WorkflowCompleted);
}

void workflowRuntime_WorkflowCompleted(object sender, WorkflowCompletedEventArgs e)
{
// Retrieve the downloaded page data
if (data.InvokeRequired)
data.Invoke(new EventHandler<WorkflowCompletedEventArgs>(workflowRuntime_WorkflowCompleted), sender, e);
else
data.Text = e.OutputParameters["PageData"].ToString();
}

private void goButton_Click(object sender, EventArgs e)
{
Type type = typeof(Microsoft.Samples.Workflow.Quickstarts.CustomActivity.WebTearActivityWorkflow);

// Sending the data to the workflow.
// First create the required property set
Dictionary<string, object> properties = new Dictionary<string, object>();
properties.Add("WebPage", address.Text);
properties.Add("PageData", "");

workflowRuntime.StartWorkflow(type, properties);
}

……
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐