【问题标题】:Send meeting notification from Dynamics CRM workflow从 Dynamics CRM 工作流发送会议通知
【发布时间】:2014-08-17 12:25:13
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-21
      • 1970-01-01
      相关资源
      最近更新 更多