EmailActivity组件开发

来源:互联网 发布:并发编程是不是多线程 编辑:程序博客网 时间:2024/05/23 05:08

1、创建Activity Library
2、更改Base Class 为System.Workflow.ComponentModel.Activity
3、插入代码段 Workflow->DependencyProperty Property,定义属性
4、重写Execute事件

 

protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext)
        
{
            
//Console.WriteLine(To);

            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("localhost");
            mail.Send(msg);
            
return ActivityExecutionStatus.Closed;
        }

 

5、添加代码文件(Code file),对先前定义的属性进行验证

 

using System;
using System.Workflow.Activities;
using System.Workflow.ComponentModel;
using System.Workflow.ComponentModel.Compiler;
using System.Text.RegularExpressions;
using System.Net.Mail;

namespace SendMailActivityLibrary
{
    
public class ParametersValidator : ActivityValidator
    
{
        
public override ValidationErrorCollection ValidateProperties(ValidationManager manager, object obj)
        
{
            ValidationErrorCollection validationErrors 
= new ValidationErrorCollection(base.ValidateProperties(manager, obj));
            SendMailActivity sendMailActivityToBeValidated 
= obj as SendMailActivity;
            
if (sendMailActivityToBeValidated == null)
            
{
                
throw new InvalidOperationException("Parameter obj is not of type SendMailActivity");
            }

            
if (!IsValidEmailAddress(sendMailActivityToBeValidated.To))
            
{
                ValidationError CustomActivityValidationError 
= new ValidationError(String.Format("'{0}' is an Invalid destination e-mail address", sendMailActivityToBeValidated.To), 1);
                validationErrors.Add(CustomActivityValidationError);
            }

            
if (!IsValidEmailAddress(sendMailActivityToBeValidated.From))
            
{
                ValidationError CustomActivityValidationError 
=
                    
new ValidationError(String.Format("'{0}' is an Invalid source e-mail address", sendMailActivityToBeValidated.From), 1);
                validationErrors.Add(CustomActivityValidationError);
            }

            
return validationErrors;
            
//return base.ValidateProperties(manager, obj);
        }


        
private bool IsValidEmailAddress(string address)
        
{
            
//throw new Exception("The method or operation is not implemented.");
            if (address == null || address.Length == 0)
            
{
                
return true;
            }


            Regex rx 
= new Regex(@"[^A-Za-z0-9@-_.]", RegexOptions.Compiled);
            MatchCollection matches 
= rx.Matches(address);
            
if (matches.Count > 0)
            
{
                
return false;
            }


            
int i = address.IndexOf('@');
            
if (i <= 0 || i > address.Length - 3)
            
{
                
return false;
            }


            
if (address.IndexOf('@', i + 1>= 0)
            
{
                
return false;
            }


            
int j = address.LastIndexOf('.');
            
if (j >= 0 && j <= i + 1)
            
{
                
return false;
            }

            
return true;

        }


    }

}

 

6、添加代码文件(Code file),进行界面设计

 

using System;
using System.Text;
using System.ComponentModel;
using System.Collections;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Design;
using System.Workflow.ComponentModel.Compiler;
using System.Workflow.ComponentModel.Serialization;
using System.Workflow.ComponentModel;
using System.Workflow.ComponentModel.Design;
using System.Workflow.Runtime;
using System.Workflow.Activities;
using System.Workflow.Activities.Rules;

namespace SendMailActivityLibrary
{
    
public class SendMailDesigner:ActivityDesigner
    
{
        SendMailActivity parentActivity;

        
protected override void Initialize(Activity activity)
        
{
            
base.Initialize(activity);
            parentActivity 
= (SendMailActivity)activity;
        }


        
protected override Size OnLayoutSize(ActivityDesignerLayoutEventArgs e)
        
{
            
return new Size(230100);
        }


        
protected override void OnPaint(ActivityDesignerPaintEventArgs e)
        
{
            Rectangle frameRect 
= new Rectangle(this.Location.X, this.Location.Y, this.Size.Width - 5this.Size.Height - 5);
            Rectangle shadowRect 
= new Rectangle(frameRect.X + 5, frameRect.Y + 5, frameRect.Width, frameRect.Height);
            Rectangle pageRect 
= new Rectangle(frameRect.X + 4, frameRect.Y + 24, frameRect.Width - 8, frameRect.Height - 28);
            Rectangle titleRect 
= new Rectangle(frameRect.X + 15, frameRect.Y + 4, frameRect.Width / 220);
            Brush frameBrush 
=new LinearGradientBrush(frameRect,Color.DarkBlue,Color.LightBlue,45);
            e.Graphics.FillPath(Brushes.LightGray,RoundedRect(shadowRect));
            e.Graphics.FillPath(frameBrush,RoundedRect(frameRect));
            e.Graphics.FillPath(
new LinearGradientBrush(pageRect,Color.White,Color.WhiteSmoke,45),RoundedRect(pageRect));
            e.Graphics.DrawString(Activity.QualifiedName,
new Font("Segoe UI",9),Brushes.White,titleRect);
            frameRect.Inflate(
20,20);
            
string textToDisplay=String.Format("To : '{0}' From : '{1}' Subject : '{2}' ",parentActivity.To,parentActivity.From,parentActivity.Subject);
            e.Graphics.DrawString(String.Format(textToDisplay,parentActivity.Subject),
new Font("宋体",8),Brushes.Black,pageRect.X,pageRect.Y+15);

        }


        
private GraphicsPath RoundedRect(Rectangle frame)
        
{
            GraphicsPath path
=new GraphicsPath();
            
int radius=7;
            
int diameter=radius*2;
            Rectangle arc
=new Rectangle(frame.Left,frame.Top,diameter,diameter);
            path.AddArc(arc,
180,90);
            arc.X
=frame.Right-diameter;
            path.AddArc(arc,
270,90);
            arc.Y
=frame.Bottom-diameter;
            path.AddArc(arc,
0,90);
            arc.X
=frame.Left;
            path.AddArc(arc,
90,90);
            path.CloseFigure();
            
return path;
        }

    }

}

 

7、添加验证和界面支持

[Designer(typeof(SendMailDesigner),typeof(IDesigner))]
[ActivityValidator(typeof(ParametersValidator))]

原创粉丝点击