从Dynamics CRM工作流程发送会议通知

时间:2014-06-26 15:07:53

标签: workflow dynamics-crm crm dynamics-crm-2013

我创建了一个发送通知电子邮件的工作流程,该工作流程由“约会创建”事件触发。

我希望它发送会议邀请(可以在Outlook中接受/拒绝),而不是常规电子邮件,这里的诀窍是什么?

1 个答案:

答案 0 :(得分:1)

将邮件消息创建为自定义工作流活动并通过SMTP发送:

  • 使用适当的输入参数(开始时间,结束时间,smtp服务器名称等)开发自定义工作流活动,您可以将其配置为映射到CRM实体字段。
  • 在C#代码中,您需要生成iCal事件。您可以通过阅读和理解iCal规范并以正确的格式like this手动生成字符串,或者只使用像DDay.iCal库这样的库来完成此操作。请注意,如果您使用此库,则需要在GAC中部署此dll,或在构建工作流活动时使用ILMerge将其合并。
  • 将iCal对象转换回字符串。
  • 通过smtp将iCal作为电子邮件发送(注意,smtp可能无法在CRM在线沙箱中使用,仅在本地使用),但将MailMessage的内容类型更改为“text / calendar”
  • 消息应作为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.
    }