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事件属性的方式显示
  • 根据适当的实体(约会/服务活动)配置工作流活动
下面代码中的示例方法-注意,尚未准备好生产。您需要了解要设置的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);
}
捕获(例外情况除外)
{
//记录下来。
}