AXForum  
Вернуться   AXForum > Microsoft Dynamics CRM > Dynamics CRM: Разработка
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 15.05.2013, 13:07   #1  
Ronin2007 is offline
Ronin2007
Участник
 
87 / 12 (1) ++
Регистрация: 14.03.2012
Отправка 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  
a33ik is offline
a33ik
Чайный пьяница
Аватар для a33ik
MCP
MCBMSS
Злыдни
Соотечественники
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,243 / 896 (36) +++++++
Регистрация: 02.07.2008
Адрес: Greenville, SC
Вам необходимо поменять код используя следующий алгоритм:
1. Инстанциировать имейл используя InstantiateTemplateRequest.
2. Получив Entity создать имейл, запомнить его ID.
3. Присоединить вложения используя код, который у вас уже есть.
4. Отправить имейл используя SendEmailRequest.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
За это сообщение автора поблагодарили: Ronin2007 (1).
Старый 15.05.2013, 15:12   #3  
Ronin2007 is offline
Ronin2007
Участник
 
87 / 12 (1) ++
Регистрация: 14.03.2012
Большое спасибо! Работает!
Вот что у меня получилось:
//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  
a33ik is offline
a33ik
Чайный пьяница
Аватар для a33ik
MCP
MCBMSS
Злыдни
Соотечественники
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,243 / 896 (36) +++++++
Регистрация: 02.07.2008
Адрес: Greenville, SC
Мой совет по оформлению постов - используйте теги, чтобы обернуть код. Будет гораздо читабельнее.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
Старый 02.06.2016, 18:26   #5  
vasya-serega is offline
vasya-serega
Участник
 
145 / 17 (1) ++
Регистрация: 12.05.2013
Адрес: Украина
Удачная тема, мне помогла, а то в MSDN по созданию e-mail из вложения написано немного коряво:
Use the InstantiateTemplate message to create an e-mail message using a template.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Microsoft Dynamics CRM Team Blog: Upgrading a CRM 4.0 Custom Workflow Activity to CRM 2011 Blog bot Dynamics CRM: Blogs 0 18.11.2010 01:12
Не выполняется отправка email в workflow activity _AV_ Dynamics CRM: Разработка 9 10.08.2010 18:37
Ошибка бизнес-процесса Tarasov E Dynamics CRM: Разработка 9 18.02.2010 14:02
CRMScape: RFC822 Import to MS CRM email activity utility Blog bot Dynamics CRM: Blogs 0 13.08.2009 15:05
Microsoft Dynamics CRM Team Blog: Workflow E-mail Utilities Blog bot Dynamics CRM: Blogs 0 16.12.2008 23:05

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 19:37.