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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 01.03.2010, 23:15   #1  
wb is offline
wb
Участник
 
86 / 16 (1) ++
Регистрация: 26.01.2004
Адрес: Краснодар
Crm 3.0: custom workflow create email from template
Добрый день,
подскажите как создать email на основе шаблона
хочется вместо
X++:
email email = new email();
email.trackingtoken = " ";
activityparty fromparty = new activityparty();
fromparty.partyid       = new Lookup();
fromparty.partyid.type  = EntityName.systemuser.ToString();
fromparty.partyid.Value = userId;
email.from = new activityparty[] {fromparty};
activityparty toparty = new activityparty();
toparty.partyid       = new Lookup();
toparty.partyid.type  = EntityName.account.ToString();
toparty.partyid.Value = accountId;
email.to = new activityparty[] {toparty};
email.sender      = emailSender;
email.subject     = emailSubj;
email.description = emailDesc;
email.ownerid       = new Owner();
email.ownerid.type  = EntityName.systemuser.ToString();
email.ownerid.Value = userId;

Guid emailId = service.Create(email);
что-то типа
X++:
email email = new email();
email.CopyFromTemplate(templateId);
Guid emailId = service.Create(email);
Старый 02.03.2010, 10:00   #2  
Артем Enot Грунин is offline
Артем Enot Грунин
Moderator
Аватар для Артем Enot Грунин
MCBMSS
Злыдни
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,912 / 623 (28) +++++++
Регистрация: 16.08.2007
Адрес: Пермь!
Записей в блоге: 151
Используйте InstantiateTemplate Message

// Set up the CRM Service.
CrmService service = new CrmService();
service.Credentials = System.Net.CredentialCache.DefaultCredentials;

// Create a template instantiation request.
InstantiateTemplateRequest instTemplate =
new InstantiateTemplateRequest();

// The email template to use.
instTemplate.TemplateId =
new Guid("9AF74EF9-A04C-DA11-A0C5-000D9DD8CDAC");

// The object that this email is regarding.
instTemplate.ObjectId = new Guid("A0F2D8FE-6468-DA11-B748-000D9DD8CDAC");
instTemplate.ObjectType = EntityName.account.ToString();

//Uncomment this next line to return dynamic entities.
//instTemplate.ReturnDynamicEntities = true;

// Execute the request to create an email message from the template.
InstantiateTemplateResponse instTemplateResponse =
(InstantiateTemplateResponse)service.Execute(instTemplate);
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
За это сообщение автора поблагодарили: wb (1).
Старый 03.03.2010, 16:48   #3  
wb is offline
wb
Участник
 
86 / 16 (1) ++
Регистрация: 26.01.2004
Адрес: Краснодар
спасибо.
1) Написал вот такой код
X++:
InstantiateTemplateRequest templateReq = new InstantiateTemplateRequest();
templateReq.TemplateId              = templateId;
templateReq.ObjectId                = accountId;
templateReq.ObjectType              = EntityName.account.ToString();
templateReq.ReturnDynamicEntities   = true;
InstantiateTemplateResponse templateRes = (InstantiateTemplateResponse) service.Execute(templateReq);

email email = (email) templateRes.BusinessEntityCollection.BusinessEntities[0];
email.trackingtoken = " ";
email.ownerid       = new Owner();
email.ownerid.type  = EntityName.systemuser.ToString();
email.ownerid.Value = userId;

Guid emailId = service.Create(email);
но получаю ошибку
X++:
Error code = 8004280b.Unable to cast object of type 'CrmSdk.DynamicEntity' to type 'CrmSdk.email'.
тупик пока для меня не понятный

2) насколько я понял к шаблону нельзя прикреплять файлы, т.е. шаблон письма будет без вложений, тогда где лучше сохранять вложения, чтобы их затем прикреплять к письмам?
нельзя также в шаблон вставлять картинки (логотип)?
Старый 03.03.2010, 17:07   #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
Цитата:
Сообщение от wb Посмотреть сообщение
спасибо.
1) Написал вот такой код
X++:
InstantiateTemplateRequest templateReq = new InstantiateTemplateRequest();
templateReq.TemplateId              = templateId;
templateReq.ObjectId                = accountId;
templateReq.ObjectType              = EntityName.account.ToString();
templateReq.ReturnDynamicEntities   = true;
InstantiateTemplateResponse templateRes = (InstantiateTemplateResponse) service.Execute(templateReq);

email email = (email) templateRes.BusinessEntityCollection.BusinessEntities[0];
email.trackingtoken = " ";
email.ownerid       = new Owner();
email.ownerid.type  = EntityName.systemuser.ToString();
email.ownerid.Value = userId;

Guid emailId = service.Create(email);
но получаю ошибку
X++:
Error code = 8004280b.Unable to cast object of type 'CrmSdk.DynamicEntity' to type 'CrmSdk.email'.
тупик пока для меня не понятный
Попробуйте так:

templateReq.ReturnDynamicEntities = false;

Цитата:
Сообщение от wb Посмотреть сообщение
2) насколько я понял к шаблону нельзя прикреплять файлы, т.е. шаблон письма будет без вложений, тогда где лучше сохранять вложения, чтобы их затем прикреплять к письмам?
Сохраняйте файлы в том хранилище, которое будет доступно из кастомного степа (файловая система, Шарепоинт и т.п.)

Цитата:
Сообщение от wb Посмотреть сообщение
нельзя также в шаблон вставлять картинки (логотип)?
Попробуйте так. Правда в статье описывается Microsoft Dynamics CRM 4.0. Насчёт того подойдёт ли это под 3.0 - не могу сказать.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
За это сообщение автора поблагодарили: wb (1).
Старый 03.03.2010, 17:47   #5  
wb is offline
wb
Участник
 
86 / 16 (1) ++
Регистрация: 26.01.2004
Адрес: Краснодар
Цитата:
Сообщение от a33ik Посмотреть сообщение
Попробуйте так:

templateReq.ReturnDynamicEntities = false;
Спасибо. Теперь работает

Цитата:
Сообщение от a33ik Посмотреть сообщение
Сохраняйте файлы в том хранилище, которое будет доступно из кастомного степа (файловая система, Шарепоинт и т.п.)
файловая система мне не подходит - нужно оставить возможность пользователям изменять шаблон и вложения, я думал разместить где-то внутри CRM.
Может в Sales&Service Docs, но как программно их от туда достать?

Цитата:
Сообщение от a33ik Посмотреть сообщение
Попробуйте так. Правда в статье описывается Microsoft Dynamics CRM 4.0. Насчёт того подойдёт ли это под 3.0 - не могу сказать.
так уже пробовал, не сохраняет

Последний раз редактировалось wb; 03.03.2010 в 18:06.
Старый 03.03.2010, 19:01   #6  
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
Цитата:
Сообщение от wb Посмотреть сообщение
файловая система мне не подходит - нужно оставить возможность пользователям изменять шаблон и вложения, я думал разместить где-то внутри CRM.
Так вот потому и гибко. Создайте файловую расшару и дайте пользователям права кроме удаления.

Цитата:
Сообщение от wb Посмотреть сообщение
Может в Sales&Service Docs, но как программно их от туда достать?
Вот этого не подскажу, потому что 3.0 видел в глаза пару раз, а опыт приобрёл уже на 4.0. Смотрите SDK по тройке.

Цитата:
Сообщение от wb Посмотреть сообщение
так уже пробовал, не сохраняет
В самом шаблоне изначально картинки отображаются? Я помню вставлял как ссылки на picasa - и всё чудесно работало. Правда опять таки в 4.0.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
Старый 03.03.2010, 19:50   #7  
wb is offline
wb
Участник
 
86 / 16 (1) ++
Регистрация: 26.01.2004
Адрес: Краснодар
Цитата:
Сообщение от a33ik Посмотреть сообщение
Так вот потому и гибко. Создайте файловую расшару и дайте пользователям права кроме удаления..
мне нужен другой путь, поскольку сотрудникам из филиалов дан доступ только к CRM, к тому же менеджеры/маркетологи как правило не сидят в офисе и соответственно доступ у них к CRM только через инет


Цитата:
Сообщение от a33ik Посмотреть сообщение
В самом шаблоне изначально картинки отображаются? Я помню вставлял как ссылки на picasa - и всё чудесно работало. Правда опять таки в 4.0.
нет, правда если установить курсор на место где должна быть картинка досвечивается пустая рамка
Старый 04.03.2010, 00:02   #8  
wb is offline
wb
Участник
 
86 / 16 (1) ++
Регистрация: 26.01.2004
Адрес: Краснодар
Чудеса для меня не понятные: код приведенный ниже отрабатывает без ошибок, письмо создается и отправляется успешно, но в прикрепленном письме пропадает вложение!

X++:
using (CrmService service = new CrmService())
{
setServiceProperty(service);
Guid salesliteratureId = new Guid(@"{5B852BEB-B626-DF11-A36C-000423D90837}");
Guid accountId = new Guid("{231EF12D-6A25-DF11-A36C-000423D90837}");
Guid userId = new Guid("{2D2AD46B-5321-DF11-9B70-000423D90837}");
Guid templateId = new Guid("{339A1896-B526-DF11-A36C-000423D90837}");


ColumnSet colsAccount = new ColumnSet();
colsAccount.Attributes = new string [] {"emailaddress1"};

account account = (account) service.Retrieve(EntityName.account.ToString(), accountId, colsAccount);
if (account.emailaddress1.Length != 0)
{
					
InstantiateTemplateRequest templateReq = new InstantiateTemplateRequest();
templateReq.TemplateId              = templateId;
templateReq.ObjectId                = accountId;
templateReq.ObjectType              = EntityName.account.ToString();
templateReq.ReturnDynamicEntities   = false;
				
InstantiateTemplateResponse templateRes = (InstantiateTemplateResponse) service.Execute(templateReq);
					
email email = (email) templateRes.BusinessEntityCollection.BusinessEntities[0];
email.trackingtoken = " ";
email.ownerid       = new Owner();
email.ownerid.type  = EntityName.systemuser.ToString();
email.ownerid.Value = userId;
activityparty fromparty = new activityparty();
fromparty.partyid       = new Lookup();
fromparty.partyid.type  = EntityName.systemuser.ToString();
fromparty.partyid.Value = userId;
email.from = new activityparty[] {fromparty};
activityparty toparty = new activityparty();
toparty.partyid       = new Lookup();
toparty.partyid.type  = EntityName.account.ToString();
toparty.partyid.Value = accountId;
email.to = new activityparty[] {toparty};
Guid emailId = service.Create(email);

Console.WriteLine("emailId=" + emailId.ToString());

					
BusinessEntityCollection entities;
QueryExpression query = new QueryExpression();
query.EntityName = EntityName.salesliteratureitem.ToString();
ColumnSet cols = new ColumnSet();
cols.Attributes = new string[]{"filename", "title", "salesliteratureitemid", "mimetype"};
ConditionExpression condition = new ConditionExpression();
condition.AttributeName = "salesliteratureid";
condition.Values = new string[1]{salesliteratureId.ToString()};
condition.Operator = ConditionOperator.Equal;
FilterExpression filter = new FilterExpression();
filter.Conditions = new ConditionExpression[] {condition};
query.ColumnSet = cols;
query.Criteria = filter;
entities = service.RetrieveMultiple(query);
activitymimeattachment attach;
					
if (entities.BusinessEntities.Length !=0)
{
System.Net.WebClient webClient = new System.Net.WebClient();
webClient.Credentials = getNetworkCredential();
for(int i=0; i < entities.BusinessEntities.Length; i++)
{
salesliteratureitem entity = (salesliteratureitem)entities.BusinessEntities[i];
string attachmentUrl = getAttachmentUrl(entity.salesliteratureitemid.Value);
byte[] attachBody = webClient.DownloadData(attachmentUrl);
attach = new activitymimeattachment();
attach.attachmentnumber = new CrmNumber();
attach.attachmentnumber.Value = i;
attach.activityid = new Lookup();
attach.activityid.type = EntityName.email.ToString();
attach.activityid.Value = emailId;
attach.body       = System.Convert.ToBase64String(attachBody);
attach.subject    = entity.title;
attach.filename   = entity.filename;
attach.mimetype   = entity.mimetype;
Guid attachId = service.Create(attach);
Console.WriteLine("attachId=" + attachId.ToString());
					    
}
}
			
SendEmailRequest sendEmailReq = new SendEmailRequest();
sendEmailReq.EmailId       = emailId;
sendEmailReq.TrackingToken = " ";
sendEmailReq.IssueSend     = true;
SendEmailResponse sendEmailRes = (SendEmailResponse)service.Execute(sendEmailReq);
}
Теги
email, workflow, crm3

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
CRM DE LA CREME! CRM 4.0 Disaster Recovery Blog bot Dynamics CRM: Blogs 2 26.02.2016 08:23
Ошибка бизнес-процесса Tarasov E Dynamics CRM: Разработка 9 18.02.2010 14:02
CRM DE LA CREME! Configuring Microsoft Dynamics CRM 4.0 for Internet-facing deployment Blog bot Dynamics CRM: Blogs 0 18.08.2009 11:05
Microsoft Dynamics CRM Team Blog: List Web Part for Microsoft Dynamics CRM 4.0 Deployment Scenarios Blog bot Dynamics CRM: Blogs 0 30.01.2009 22:05
Microsoft Dynamics CRM Team Blog: Microsoft Dynamics CRM, Email correlation and smart matching Blog bot Dynamics CRM: Blogs 0 12.11.2008 04:08

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

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

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