跟我一起学Windows Workflow Foundation(6)-----制作一个基本的定制活动

原创 2007年09月17日 09:52:00

 

上一节,我们的自定义活动其实是“拼”出来的,这次,我们来做一个基本的定制活动(不再是将已有的活动进行拼凑),我们将通过自定义属性来设置一封 email的信息。我们将给创建给自定义活动创建一个执行组件,并把这个自定义活动添加到工作流中。这个执行组件将使用.NET API来把包含信息的 email发送出去。

创建一个工作流项目

1. 创建一个顺序工作流控制台应用程序,名称为CustomPropertySample

2. 重命名Workflow1.cs的名称为SendMailWorkflow.cs

创建一个工作流Activity项目

1. 添加新项目 工作流Activity库,名称为SendMailActivityLibrary记得勾上添加到解决方案的勾哦)。

2. 修改Activity1.cs为SendMailActivity.cs

3. 单击活动设计视图中的标题(或者双击SendMailActivity.cs),可以看到如下界面:

CropperCapture[5]

4. 在属性窗口,选择Base Class 属性,点击“…”打开浏览对话框来为这个活动选择一个基类。

CropperCapture[48]

5. 选择System.Workflow.ComponentModel命名空间下的Activity后点击OK。这样我们自定义的工作流活动是继承自基本的活动,而不是像以前一样继承自类似System.Workflow.Activities.SequenceActivity来拼凑工作流了。

6. 右键点击SendMailActivity.cs 选择查看代码。

7. 在如图所示处点击右键,选择插入代码段。

Snap1.jpg

8. 选择Workflow。

Snap2.jpg

9. 选择 DependencyProperty - Property.

New Picture (3)

10. 此时将插入一些模板代码在我们选择的位置。

下面是一些我们的属性(property)代码段中可以被添加的属性(attribute)描述:

 

Name

Type

Description

Browseable

Boolean

Indicates whether this property appears in the Properties window.

指出这个属性在我们自定义活动右侧的属性栏中是否可见

Category

String

A user-defined category for the property.

用户为这个属性自定义的分类

Description

String

A description for the property.

此属性的描述

DesignerSerializationVisibility

Visible, Hidden, or Content

Determines how and if properties will be serialized.

Visible (the default) – the property will be serialized normally.

Hidden – prevents property serialization

Content – used for collection properties. The collection object itself is not serialized, however the contents of the collection are.

If a developer chooses a collection type, this property will be set to Content.  If a developer chooses a non-serializable type, this property will be set to Hidden.

ValidationVisibility

Optional, Required, or Hidden

Specifies how the property’s value is validated.

Optional (the default) – the property can accept null values.

Required – The property must be set to a non-null value and is checked to ensure that this is the case.

Hidden – There is no automatic validation of the property’s value.

If ValidationVisibility is set to ‘Required,’ when the component is reused, it will require the property to be configured via smart tags, obviating the need for a check in the activity’s Validator class.

 

如图:

CropperCapture[49]

12. 类似的,添加如下属性:

Name

Type

Description

Category

From

string

From Email Address

EmailActivity

Subject

string

Subject of Email

EmailActivity

Body

string

Body of Email

EmailActivity

到这里我们的这个活动应该有4个属性了。.

 

构建工作流解决方案

1. 生成解决方案.
2. 然后会发现SendMailActivity会被添加到工具栏(在解决方案资源管理器中双击SendMailWorkflow.cs,就可以看到工具栏出现了SendMailActivity)。

3. 从工具栏中将 SendMailActivity 活动拖拽到 Visual Studio 工作流设计器中,并修改 (Name) 属性 为 sendMail.

4. 注意,现在我们可以看到我们在自定义活动那个项目中创建的属性出现在了属性窗口:

5. 现在可以为这个活动的自定义属性设置初始值值。

添加一个可执行组件

1. 右键点击 SendMailActivity.cs 选择查看代码

2. 在代码文件底部重写活动的 Execute方法,添加如下代码:

 

protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext) 



Console.WriteLine(To); 

return ActivityExecutionStatus.Closed; 

}
 

 

构建项目

1. 选择重新生成解决方案。

2. 在解决方案资源管理器中双击 SendMailWorkflow.cs 查看工作流设计视图.

3. 选择调试-开始执行(不调试)来运行项目(或点ctrl+F5),可以看到命令行的输出信息。

4. 命令行中将显示我们的邮件将寄出的地址:

更新这个活动,使他能够发送邮件

现在我们已经吧上面自定义的活动制作成功了,能供通过输出我们自定义的属性到命令行中。现在,我们修改这个代码,使他真的可以发送邮件。

1. 首先,我们本机的添加删除windows组件中确认已经安装了SMTP服务

2. 回到 SendMailActivity.cs 文件的代码视图。

3. 添加如下引用(用以发送邮件):

using System.Net;

using System.Net.Mail;

4. 用如下代码替代我们Execute方法中的测试代码---用来发送邮件:

 

protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext) 



MailAddress toAddress 
= new MailAddress(To); 

MailAddress fromAddress 
= new MailAddress(From); 

MailAddressCollection addresses 
= new MailAddressCollection(); 

addresses.Add(toAddress); 

MailMessage msg 
= new MailMessage(fromAddress, toAddress); 

msg.Subject 
= Subject; 

msg.Body 
= Body; 

SmtpClient mail 
= new SmtpClient("smtp.163.com"); 

mail.Credentials 
= new NetworkCredential("shinji329""123456"); 

mail.Send(msg); 

return ActivityExecutionStatus.Closed; 

}
 

如果出现异常,可以看一下是不是杀毒软件监控防止蠕虫病毒的设置拒绝了我们的发送。

在运行这个工作流项目偶,我们可以收到邮件:

现在,我们的自定义基本活动也做出来了,嘿嘿,比较简单的说。

 

跟我一起学Windows Workflow Foundation(6)-----制作一个基本的定制活动(发邮件)

  跟我一起学Windows Workflow Foundation(6)-----制作一个基本的定制活动  上一节,我们的自定义活动其实是“拼”出来的,这次,我们来做一个基本的定制活动(不再是...
  • glumtree
  • glumtree
  • 2007年10月11日 12:37
  • 538

跟我一起学Windows Workflow Foundation(6)-----制作一个基本的定制活动(发邮件)

 上一节,我们的自定义活动其实是“拼”出来的,这次,我们来做一个基本的定制活动(不再是将已有的活动进行拼凑),我们将通过自定义属性来设置一封 email的信息。我们将给创建给自定义活动创建一个执行组件...
  • thy822
  • thy822
  • 2010年01月21日 15:10
  • 793

Windows Workflow Foundation(四)——(创建自定义活动)

WWF包含了一组丰富的通用用户活动,这些能满足绝大多数的场景的需求。但有时,我们还是会碰到需要一些更加自定义的活动的场景。WWF SDK拥有一些可扩展的特性,能使你轻松的创建自定义的活动,并把他们应用...
  • simonezhlx
  • simonezhlx
  • 2007年04月27日 16:27
  • 954

和我一起学Windows Workflow Foundation(微软工作流)

和我一起学Windows Workflow Foundation(微软工作流)
  • mq0036
  • mq0036
  • 2011年04月20日 10:00
  • 2346

跟我一起学Windows Workflow Foundation(5)

跟我一起学Windows Workflow Foundation(5) 使用activity设计器创建一个整合的定制activity2007年04月12日 10:57Lab01已经完了,lab02中说...
  • mao2kun1
  • mao2kun1
  • 2009年09月22日 18:18
  • 533

跟我一起学Windows Workflow Foundation(3)

跟我一起学Windows Workflow Foundation(3) 使用If/Else活动,定制活动处理工作流,使用事件传递数据2007年04月12日 10:53上一节我们学习了怎样通过参数传递数...
  • mao2kun1
  • mao2kun1
  • 2009年09月22日 18:13
  • 907

跟我一起学Windows Workflow Foundation(4)

跟我一起学Windows Workflow Foundation(4) 使用Listen,Delay,和其他envnt-based定制活动2007年04月12日 10:56这一节我们将扩充上一节制作的...
  • mao2kun1
  • mao2kun1
  • 2009年09月22日 18:16
  • 695

跟我一起学C++之C++介绍(笔记)

C++介绍 为什么学习C++?  1.C++能提升性能,C++之父BjarneStroustrup戏称C++可以减轻全球变暖问题。  2.编程语言需求总结为四个:效率(efficiency)、灵活(f...
  • kongshuai19900505
  • kongshuai19900505
  • 2016年05月25日 23:24
  • 404

《跟我一起学C++》

《跟我一起学C++》视频下载地址:   《跟我一起学C++》第一季(入门篇)总共38集,目录列表如下: 01C++介绍 为什么要学习C++ C++为什么难学 C++ 11值得学习的新特性 ...
  • oAmamatthew
  • oAmamatthew
  • 2014年05月16日 18:51
  • 626

Windows Workflow Foundation 例子

http://msdn.microsoft.com/zh-cn/library/aa480214.aspxWF 例子http://www.cnblogs.com/foundation/category...
  • livening
  • livening
  • 2011年05月19日 17:58
  • 1661
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:跟我一起学Windows Workflow Foundation(6)-----制作一个基本的定制活动
举报原因:
原因补充:

(最多只允许输入30个字)