Отправить уведомление о собрании из рабочего процесса Dynamics CRM

#workflow #dynamics-crm #crm #dynamics-crm-2013

#рабочий процесс #dynamics-crm #crm #dynamics-crm-2013

Вопрос:

Я создаю рабочий процесс, который отправляет уведомление по электронной почте, которое запускается событием «Создано назначение».

Я хочу, чтобы он отправлял приглашения на собрания (которые могут быть приняты / отклонены в Outlook), а не обычное электронное письмо, в чем здесь хитрость?

Ответ №1:

Создайте почтовое сообщение в качестве пользовательского действия рабочего процесса и отправьте его через SMTP :

  • Разработайте пользовательскую операцию рабочего процесса с соответствующими входными параметрами (время начала, время окончания, имя smtp-сервера и т.д.), Которые можно настроить для сопоставления с полями сущности CRM.
  • В вашем коде C # вам нужно будет сгенерировать событие iCal. Вы могли бы сделать это, прочитав и поняв спецификацию iCal и сгенерировав строку вручную в правильном формате, подобном этому, или просто используя библиотеку, подобную DDay.Библиотека iCal. Обратите внимание, что если вы используете эту библиотеку, вам нужно будет либо развернуть эту dll в GAC, либо объединить ее с помощью ILMerge при создании действия рабочего процесса.
  • Преобразуйте объект iCal обратно в строку.
  • Отправьте iCal в виде электронного письма через smtp (обратите внимание, smtp, скорее всего, не будет работать из CRM online sandbox, только в помещении), но измените тип содержимого почтового сообщения на «текст / календарь»
  • Сообщение должно прийти в виде приемлемого календаря в Outlook, который будет отображаться в зависимости от того, как вы настроили свойства iCal event.
  • Настройте действие рабочего процесса для соответствующего объекта (назначение / Обслуживание).

Пример подхода в коде ниже — обратите внимание, не готов к работе. Вам необходимо понять, какие свойства 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.
    }