Workflow 从Dynamics CRM工作流发送会议通知
我创建了一个发送通知电子邮件的工作流,该工作流由“创建约会”事件触发Workflow 从Dynamics CRM工作流发送会议通知,workflow,dynamics-crm,crm,dynamics-crm-2013,Workflow,Dynamics Crm,Crm,Dynamics Crm 2013,我创建了一个发送通知电子邮件的工作流,该工作流由“创建约会”事件触发 我希望它发送会议邀请(在Outlook中可以接受/拒绝),而不是普通电子邮件,这里有什么诀窍?将邮件消息创建为自定义工作流活动,并通过SMTP发送: 使用适当的输入参数(开始时间、结束时间、smtp服务器名称等)开发自定义工作流活动,您可以将其配置为映射到CRM实体字段 在C#代码中,需要生成一个iCal事件。您可以通过阅读和理解iCal规范并以正确的格式手动生成字符串来实现这一点,也可以使用类似于库的库。注意,如果使用此库
我希望它发送会议邀请(在Outlook中可以接受/拒绝),而不是普通电子邮件,这里有什么诀窍?将邮件消息创建为自定义工作流活动,并通过SMTP发送:
- 使用适当的输入参数(开始时间、结束时间、smtp服务器名称等)开发自定义工作流活动,您可以将其配置为映射到CRM实体字段
- 在C#代码中,需要生成一个iCal事件。您可以通过阅读和理解iCal规范并以正确的格式手动生成字符串来实现这一点,也可以使用类似于库的库。注意,如果使用此库,则需要在GAC中部署此dll,或者在生成工作流活动时使用ILMerge将其合并
- 将iCal对象转换回字符串
- 通过smtp将iCal作为电子邮件发送(注意,smtp可能无法从CRM online sandbox中工作,只能在本地使用),但将邮件的内容类型更改为“文本/日历”
- 邮件应作为Outlook中可接受的日历送达,该日历将根据您配置iCal事件属性的方式显示
- 根据适当的实体(约会/服务活动)配置工作流活动
// 3rd party libraries to reference
using DDay.iCal;
using DDay.iCal.Serialization.iCalendar;
...
...
// Create the iCal
IICalendar iCal = new iCalendar();
iCal.Method = "Request";
...
...
IEvent evt = iCal.Create<Event>();
evt.Summary = summary;
evt.Start = new iCalDateTime(eventstartDt).SetTimeZone(local);
evt.End = new iCalDateTime(eventendDt).SetTimeZone(local);
var serializer = new iCalendarSerializer(iCal);
var iCalString = serializer.SerializeToString(iCal);
...
...
var mailMessage = new MailMessage
{
Subject = Summary.Get(_executionContext),
From = new MailAddress(FromEmailAddress.Get(_executionContext))
};
// Create the Alternate view object with Calendar MIME type
var ct = new System.Net.Mime.ContentType("text/calendar");
if (ct.Parameters != null) ct.Parameters.Add("method", "REQUEST");
//Provide the framed string here
AlternateView avCal = AlternateView.CreateAlternateViewFromString(iCalString, ct);
mailMessage.AlternateViews.Add(avCal);
// Send email
try
{
smtpClient.Send(mailMessage);
}
catch (Exception ex)
{
// Log it.
}
//要引用的第三方库
使用DDay.iCal;
使用DDay.iCal.Serialization.iCalendar;
...
...
//创建iCal
IICalendar iCal=新iCalendar();
iCal.Method=“请求”;
...
...
IEvent evt=iCal.Create();
evt.Summary=总结;
evt.Start=新的iCalDateTime(eventstartDt).SetTimeZone(本地);
evt.End=新的iCalDateTime(eventendDt).SetTimeZone(本地);
var序列化程序=新的iCalendarSerializer(iCal);
var iCalString=serializer.SerializeToString(iCal);
...
...
var mailMessage=新的mailMessage
{
Subject=Summary.Get(_executionContext),
From=新邮件地址(FromEmailAddress.Get(_executionContext))
};
//创建日历MIME类型的备用视图对象
var ct=new System.Net.Mime.ContentType(“文本/日历”);
如果(ct.Parameters!=null)ct.Parameters.Add(“方法”、“请求”);
//在这里提供带边框的字符串
AlternateView avCal=AlternateView.CreateAlternateView-FromString(iCalString,ct);
mailMessage.AlternateViews.Add(avCal);
//发送电子邮件
尝试
{
smtpClient.Send(mailMessage);
}
捕获(例外情况除外)
{
//记录下来。
}