15.05.2013, 13:07 | #1 |
Участник
|
Отправка email из workflow activity с использованием шаблона и присоединение файлов
Доброго времени суток.
Пытаюсь создать кастомный шаг для отправки электронным письмом предложения с расценками в своей форме. Создал отчет, и всё что нужно, но вот сама отправка не получается. Кусок кода: Entity clientEntity = service.Retrieve(_client.LogicalName, _client.Id, new ColumnSet(true)); Entity emailtemplateEntity = service.Retrieve(_emailtemplate.LogicalName, _emailtemplate.Id, new ColumnSet(true)); Entity emailCreate = new Entity("email"); emailCreate["subject"] = "test subject"; emailCreate["description"] = " test description"; Entity ap = new Entity("activityparty"); ap.Attributes.Add("partyid", new EntityReference(clientEntity.LogicalName, clientEntity.Id)); emailCreate["to"] = new[] { ap }; emailCreate["regardingobjectid"] = new EntityReference(context.PrimaryEntityName, context.PrimaryEntityId); SendEmailFromTemplateRequest emailUsingTemplateReq = new SendEmailFromTemplateRequest { Target = emailCreate, TemplateId = emailtemplateEntity.Id, RegardingId = context.PrimaryEntityId, RegardingType = context.PrimaryEntityName }; SendEmailFromTemplateResponse emailUsingTemplateResp = (SendEmailFromTemplateResponse)service.Execute(emailUsingTemplateReq); Guid newContactId = emailUsingTemplateResp.Id; if (!newContactId.Equals(Guid.Empty)) { tracingService.Trace("Successfully sent an e-mail message using the template."); } if (result != null) { Entity attachment = new Entity("activitymimeattachment"); attachment["objectid"] = new EntityReference("email", emailUsingTemplateResp.Id); attachment["objecttypecode"] = "email"; string _FileName = FileName.Get(executionContext); attachment["filename"] = _FileName; attachment["subject"] = "Included " + _FileName; attachment["body"] = System.Convert.ToBase64String(result); service.Create(attachment); } SendEmailRequest sendEmailreq = new SendEmailRequest { EmailId = newContactId, TrackingToken = "", IssueSend = true }; service.Execute(sendEmailreq); Во время того как я пытаюсь присоединить файл возникает ошибка "Changes to attachments for an email in pending or sending status is not allowed". Как правильно сформировать письмо на основании шаблона, а потом присоединить файл? P.S. CRM 2011 |
|
15.05.2013, 14:31 | #2 |
Чайный пьяница
|
Вам необходимо поменять код используя следующий алгоритм:
1. Инстанциировать имейл используя InstantiateTemplateRequest. 2. Получив Entity создать имейл, запомнить его ID. 3. Присоединить вложения используя код, который у вас уже есть. 4. Отправить имейл используя SendEmailRequest.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
|
За это сообщение автора поблагодарили: Ronin2007 (1). |
15.05.2013, 15:12 | #3 |
Участник
|
Большое спасибо! Работает!
Вот что у меня получилось: //1. Инстанциировать имейл используя InstantiateTemplateRequest InstantiateTemplateRequest instTemplateReq = new InstantiateTemplateRequest { TemplateId = emailtemplateEntity.Id, ObjectId = context.PrimaryEntityId, ObjectType = context.PrimaryEntityName }; InstantiateTemplateResponse instTemplateResp = (InstantiateTemplateResponse)service.Execute(instTemplateReq); //2. Получив Entity создать имейл, запомнить его ID. Entity emailCreate = instTemplateResp.EntityCollection.Entities[0]; Entity ap = new Entity("activityparty"); ap.Attributes.Add("partyid", new EntityReference(clientEntity.LogicalName, clientEntity.Id)); emailCreate["to"] = new[] { ap }; emailCreate["regardingobjectid"] = new EntityReference(context.PrimaryEntityName, context.PrimaryEntityId); Guid emailCreateId = service.Create(emailCreate); //3. Присоединить вложения используя код, который у вас уже есть. if (result != null) { Entity attachment = new Entity("activitymimeattachment"); attachment["objectid"] = new EntityReference(emailCreate.LogicalName, emailCreateId); attachment["objecttypecode"] = emailCreate.LogicalName; string _FileName = FileName.Get(executionContext); attachment["filename"] = _FileName; attachment["subject"] = "Included " + _FileName; attachment["body"] = System.Convert.ToBase64String(result); service.Create(attachment); } //4. Отправить имейл используя SendEmailRequest SendEmailRequest sendEmailreq = new SendEmailRequest { EmailId = emailCreateId, TrackingToken = "", IssueSend = true }; service.Execute(sendEmailreq); |
|
|
За это сообщение автора поблагодарили: vasya-serega (1). |
15.05.2013, 16:03 | #4 |
Чайный пьяница
|
Мой совет по оформлению постов - используйте теги, чтобы обернуть код. Будет гораздо читабельнее.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
02.06.2016, 18:26 | #5 |
Участник
|
Удачная тема, мне помогла, а то в MSDN по созданию e-mail из вложения написано немного коряво:
Use the InstantiateTemplate message to create an e-mail message using a template. |
|
|
|