生活随笔
收集整理的這篇文章主要介紹了
WF4.0实战(十一):邮件通知
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在工作流開發中,郵件通知是必不可少。這篇文章中,我將是使用WF4.0一步一步打造一個功能完整的郵件通知節點。
??? 首先,新建一個WorkflowConsoleApplication項目,改名為MailNoticeDemo,如下圖:
??? 添加一個CodeActivity活動命名為MailNotice,添加一個ActivityDesigner活動命名為MailNoticeDesigner。項目結構如下圖:
MailNotice用于寫發送郵件的業務邏輯,MailNoticeDesigner用于設計活動的界面,現在MailNotice和MailNoticeDesigner是沒有任何關聯的,我們在MailNotice類上添加[Designer(typeof(MailNoticeDesigner))],關聯MailNotice和MailNoticeDesigner,還需要引入System.ComponentModel命名空間,代碼如下。
using System.Activities;
using System.ComponentModel;
using System.Activities.Presentation.Metadata;
using System.Activities.Presentation.PropertyEditing;
using System;
namespace MailNoticeDemo
{
[Designer (typeof (MailNoticeDesigner ))]
public sealed class MailNotice : CodeActivity
{ ……… } 這時,MailNotice和MailNoticeDesigner活動中還沒有進行編碼。在項目中引入一個郵件發送類MailHelper.cs,編寫MailNotice代碼,如下:
[Designer (typeof (MailNoticeDesigner ))] public sealed class MailNotice : CodeActivity
{
public InArgument <string > Receive { get ; set ; }
public InArgument <string > Subject { get ; set ; }
public InArgument <string > Content { get ; set ; }
public string Attachment { get ; set ; }
static MailNotice()
{
AttributeTableBuilder builder = new AttributeTableBuilder ();
builder.AddCustomAttributes(typeof (MailNotice ), "Attachment" , new EditorAttribute (typeof (FilePickerEditor ), typeof (DialogPropertyValueEditor )));
MetadataStore .AddAttributeTable(builder.CreateTable());
}
// If your activity returns a value, derive from CodeActivity<TResult>
// and return the value from the Execute method.
protected override void Execute(CodeActivityContext context)
{
SMTP smtp = new SMTP ("你郵箱地址·" , "顯示的名稱" , new string [] { Receive.Get(context) }, null , null , Subject.Get(context), Content.Get(context), new string [] { Attachment }, "郵件發送服務" , 25, "你郵箱地址·" , "你郵箱密碼" , false );
try
{
smtp.Send();
}
catch (Exception ex) { string error = ex.Message; if (ex.InnerException != null ) { error = ex.InnerException.Message;
} Console .WriteLine("郵箱發送失敗: " + error); }} } 設計MailNoticeDesigner活動的UI,設計UI之前讓你可以先了解一下ExpressionTextBox。詳見:expressiontextbox-101 通過expressiontextbox和WPF的控件,設計UI界面如下: Xaml代碼如下: < sap : ActivityDesigner x : Class ="MailNoticeDemo.MailNoticeDesigner"
xmlns ="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns : x ="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns : sap ="clr-namespace:System.Activities.Presentation;assembly=System.Activities.Presentation"
xmlns : sapc ="clr-namespace:System.Activities.Presentation.Converters;assembly=System.Activities.Presentation"
xmlns : sapv ="clr-namespace:System.Activities.Presentation.View;assembly=System.Activities.Presentation"
mc : Ignorable ="d" xmlns : d ="http://schemas.microsoft.com/expression/blend/2008" xmlns : mc ="http://schemas.openxmlformats.org/markup-compatibility/2006" d : DesignHeight ="221" d : DesignWidth ="336">
< sap : ActivityDesigner.Resources >
< ResourceDictionary x : Uid ="ResourceDictionary_1">
< sapc : ArgumentToExpressionConverter x : Uid ="sadv:ArgumentToExpressionConverter_1" x : Key ="ArgumentToExpressionConverter" />
</ ResourceDictionary > </ sap : ActivityDesigner.Resources >
< Grid Height ="190" Width ="328">
< Grid.RowDefinitions >
< RowDefinition Height ="28"></ RowDefinition >
< RowDefinition Height ="28"></ RowDefinition >
< RowDefinition Height ="54"></ RowDefinition >
< RowDefinition Height ="47" />
< RowDefinition Height ="31*" />
</ Grid.RowDefinitions >
< Grid.ColumnDefinitions >
< ColumnDefinition Width =".2*"></ ColumnDefinition >
< ColumnDefinition Width =".8*"></ ColumnDefinition >
</ Grid.ColumnDefinitions >
< Label Content ="收件人" Height ="28" HorizontalAlignment ="Left" Grid.Row ="0" Grid.Column ="0" Name ="label1" VerticalAlignment ="Top" />
< sapv : ExpressionTextBox Grid.Row ="0" Grid.Column ="1"
OwnerActivity ="{ Binding Path =ModelItem}"
Expression ="{ Binding Path =ModelItem.Receive, Mode =TwoWay, Converter ={ StaticResource ArgumentToExpressionConverter }, ConverterParameter =In }"
UseLocationExpression ="False" />
< Label Content ="主題:" Grid.Row ="1" Grid.Column ="0" HorizontalAlignment ="Left" Name ="label2" VerticalAlignment ="Top" />
< sapv : ExpressionTextBox Grid.Row ="1" Grid.Column ="1"
OwnerActivity ="{ Binding Path =ModelItem}"
Expression ="{ Binding Path =ModelItem.Subject, Mode =TwoWay, Converter ={ StaticResource ArgumentToExpressionConverter }, ConverterParameter =In }"
UseLocationExpression ="False" />
< Label Content ="正文:" Grid.Row ="2" HorizontalAlignment ="Left" Name ="label3" VerticalAlignment ="Top" />
< sapv : ExpressionTextBox Grid.Row ="2" Grid.Column ="1"
OwnerActivity ="{ Binding Path =ModelItem}"
Expression ="{ Binding Path =ModelItem.Content, Mode =TwoWay, Converter ={ StaticResource ArgumentToExpressionConverter }, ConverterParameter =In }"
UseLocationExpression ="False" Margin ="0,0,0,1" Grid.RowSpan ="2" />
</ Grid >
</ sap : ActivityDesigner >
這樣我們就完成了這個郵件活動。測試一下。在Workflow1中拖入這個活動。輸入收件人、主題、正文,如下圖: ?設置附件,如下圖: 啟動工作流發送郵件: WorkflowInvoker .Invoke(new Workflow1 ()); 你會發現這個活動的圖標不夠美觀,讓我們修改一下這個自定義活動的圖標。 在MailNoticeDesigner.xaml中加入下面代碼 ?
< sap : ActivityDesigner.Icon > < DrawingBrush > < DrawingBrush.Drawing > < ImageDrawing > < ImageDrawing.Rect > < Rect Location ="0,0" Size ="16,16" ></ Rect > </ ImageDrawing.Rect > < ImageDrawing.ImageSource > < BitmapImage UriSource ="mail.ico" ></ BitmapImage > </ ImageDrawing.ImageSource > </ ImageDrawing > </ DrawingBrush.Drawing > </ DrawingBrush > </ sap : ActivityDesigner.Icon > 設置圖標mail.ico,將Build action設置為Resource,如下圖: 看一下我們最終打造的郵件活動: 總結: 這篇文章詳細講解了創建WF4.0一個自定義活動的完整過程,雖然很簡單,但對創建自定義活動很有參考價值。 本文轉自麒麟博客園博客,原文鏈接:http://www.cnblogs.com/zhuqil/archive/2010/04/29/WFMAIL.html,如需轉載請自行聯系原作者
總結
以上是生活随笔 為你收集整理的WF4.0实战(十一):邮件通知 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。