#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.
}