14.10.2009, 14:08 | #121 |
Kostya Afendikov
|
Цитата:
Сообщение от moskalevas
Тут оказывается вот в чём проблема.В карточке ПРЕДЛОЖЕНИЕ есть поле Потенциальный клиент, в котором мы можем указывать либо Бизнес-партнёра(account), либо Контакт(Contact).
А у меня есть такой код: quote quo = (quote)crmservice.Retrieve(EntityName.quote.ToString(), workflowContext.PrimaryEntityId, new ColumnSet(new string[] { "customerid" })); activityparty toparty = new activityparty(); toparty.partyid = new Lookup(); toparty.partyid.type = EntityName.account.ToString(); toparty.partyid.Value = quo.customerid.Value; mail.to = new activityparty[] { toparty }; Здесь формируется поле карточки ЭЛЕКТРОННОГО ПИСЬМА "Кому". Надо бы сделать так,чтоб он заполнялось в зависимости от выбранного Потенциального клиента(то есть бизнес-партнёр или контакт). Не могу сообразить,как это сделать. new ColumnSet(new string[] { "customerid" })); activityparty toparty = new activityparty(); toparty.partyid = new Lookup(); toparty.partyid.type = EntityName.<account OR contact>.ToString(); toparty.partyid.Value = quo.customerid.Value; в SDK смотрите примеры |
|
14.10.2009, 14:09 | #122 |
Чайный пьяница
|
Попробуйте так - вместо строки
toparty.partyid.type = EntityName.account.ToString(); напишите toparty.partyid.type = quo.customerid.type;
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
19.10.2009, 10:00 | #123 |
Участник
|
Спасибо!Воспользовался вашим советом.Теперь в зависимости от потенциального клиента(бизнес-партнёр или контакт) соответсвенно заполняется поле КОМУ карточки электронного письма.В карточке же Бизнес-партнёр есть поле Основной контакт(не всегда заполнено).Хотелось бы чтоб в создаваемое письмо в поле КОМУ передовался ещё этот параметр(основной контакт).
|
|
19.10.2009, 10:08 | #124 |
Чайный пьяница
|
Цитата:
Сообщение от moskalevas
Спасибо!Воспользовался вашим советом.Теперь в зависимости от потенциального клиента(бизнес-партнёр или контакт) соответсвенно заполняется поле КОМУ карточки электронного письма.В карточке же Бизнес-партнёр есть поле Основной контакт(не всегда заполнено).Хотелось бы чтоб в создаваемое письмо в поле КОМУ передовался ещё этот параметр(основной контакт).
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
19.10.2009, 10:13 | #125 |
Участник
|
Цитата:
Сообщение от a33ik
Следовательно без ещё одного запроса к вебсервису не обойдёшься. Вам необходимо проанализировать, что поле customerid заполнено бизнес-партнёром, далее получить его идентификатор, далее - при помощи Retrieve метода получить поля данного бизнес-партнёра, проанализировать, что поле контакта заполнено и уже после этого добавлять в поле To письма.
Может подскажите?или хотя бы ссылочку какую-нибудь подкините |
|
19.10.2009, 10:22 | #126 |
Чайный пьяница
|
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
20.10.2009, 14:58 | #127 |
Участник
|
Так и не хочет работать.
Вот какой последний рабочий вариант заполнения поля To: quote quo = (quote)crmservice.Retrieve(EntityName.quote.ToString(), workflowContext.PrimaryEntityId, new ColumnSet(new string[] { "customerid" })); activityparty toparty = new activityparty(); toparty.partyid = new Lookup(); toparty.partyid.type = quo.customerid.type; toparty.partyid.Value = quo.customerid.Value; mail.to = new activityparty[] { toparty }; Help, please! Возникла бредовая идея создать поле в карточки предложения основной контакт. Туда с помощью яваскрипта и SOAP запроса передать значение с карточки контакта. И уже прям с карточки предложения выхватывать его и передавать в поле To. Но это не очень красиво и муторно. |
|
20.10.2009, 15:04 | #128 |
Чайный пьяница
|
Цитата:
Сообщение от moskalevas
Так и не хочет работать.
Вот какой последний рабочий вариант заполнения поля To: quote quo = (quote)crmservice.Retrieve(EntityName.quote.ToString(), workflowContext.PrimaryEntityId, new ColumnSet(new string[] { "customerid" })); activityparty toparty = new activityparty(); toparty.partyid = new Lookup(); toparty.partyid.type = quo.customerid.type; toparty.partyid.Value = quo.customerid.Value; mail.to = new activityparty[] { toparty }; Help, please! Возникла бредовая идея создать поле в карточки предложения основной контакт. Туда с помощью яваскрипта и SOAP запроса передать значение с карточки контакта. И уже прям с карточки предложения выхватывать его и передавать в поле To. Но это не очень красиво и муторно.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
20.10.2009, 16:37 | #129 |
Участник
|
Пытался просто в поле To записать бизнес-партнёра,основной контакт(выбирал бизнес-партнёра.у которого поле основного контакта не пусто)
quote quo = (quote)crmservice.Retrieve(EntityName.quote.ToString(), workflowContext.PrimaryEntityId, new ColumnSet(new string[] { "customerid" })); account acc = (account)crmservice.Retrieve(EntityName.account.ToString(), workflowContext.PrimaryEntityId, new ColumnSet(new string[] { "primarycontactid" })); activityparty toparty = new activityparty(); toparty.partyid = new Lookup(); toparty.partyid.type = quo.customerid.type; toparty.partyid.Value = quo.customerid.Value; activityparty toparty1 = new activityparty(); toparty1.partyid = new Lookup(); toparty1.partyid.type = EntityName.account.ToString(); toparty1.partyid.Value = acc.primarycontactid.Value; mail.to = new activityparty[] { toparty, toparty1 }; |
|
20.10.2009, 16:49 | #130 |
Чайный пьяница
|
Обращаю Ваше пристальное внимание на следующие две строчки:
toparty1.partyid.type = EntityName.account.ToString(); toparty1.partyid.Value = acc.primarycontactid.Value; Просто немного внимательности и всё бы заработало.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
21.10.2009, 11:46 | #131 |
Участник
|
Товарищи!Так и застрял на этой маленькой проблеме.
Немного подправил код,получил следующее: quote quo = (quote)crmservice.Retrieve(EntityName.quote.ToString(), workflowContext.PrimaryEntityId, new ColumnSet(new string[] { "customerid" })); Guid quoid = quo.customerid.Value; account acc = (account)crmservice.Retrieve(EntityName.account.ToString(), quoid, new ColumnSet(new string[] { "primarycontactid" })); activityparty toparty = new activityparty(); toparty.partyid = new Lookup(); toparty.partyid.type = quo.customerid.type; toparty.partyid.Value = quo.customerid.Value; activityparty toparty1 = new activityparty(); toparty1.partyid = new Lookup(); toparty1.partyid.type = acc.primarycontactid.type; toparty1.partyid.Value = acc.primarycontactid.Value; mail.to = new activityparty[] { toparty, toparty1 }; Почему не хочет отрабатывать,не пойму... |
|
21.10.2009, 11:51 | #132 |
Чайный пьяница
|
А какая ошибка? Приведите Detail.InnerText генерируемого исключения.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
21.10.2009, 11:56 | #133 |
Участник
|
А как получить Detail.InnerText исключения?
В логах асинхронного сервиса пишет: [2009-10-21 11:33:11.2] Process:CrmAsyncService |Organization:e26d7e2d-33b0-417e-8875-7e0c045fda3e |Thread: 10 |Category: Platform.Workflow |User: 00000000-0000-0000-0000-000000000000 |Level: Error | WorkflowHost.OnWorkflowTerminated >Workflow terminated: {5E625FCB-13BE-DE11-8F8D-003048743D04} - at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall) at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters) at Microsoft.Crm.SdkTypeProxy.CrmService.Create(BusinessEntity entity) at Microsoft.Crm.Asynchronous.SdkTypeProxyCrmServiceWrapper.Create(BusinessEntity entity) at E_mailFromQuote.SendReport.Execute(ActivityExecutionContext executionContext) at System.Workflow.ComponentModel.ActivityExecutor`1.Execute(T activity, ActivityExecutionContext executionContext) at System.Workflow.ComponentModel.CompositeActivityExecutor`1.Execute(T activity, ActivityExecutionContext executionContext) at System.Workflow.ComponentModel.ActivityExecutor`1.Execute(Activity activity, ActivityExecutionContext executionContext) at System.Workflow.ComponentModel.ActivityExecutorOperation.Run(IWorkflowCoreRuntime workflowCoreRuntime) at System.Workflow.Runtime.Scheduler.Run() Состояние бизнес-процесса:ожидание |
|
21.10.2009, 12:02 | #134 |
Чайный пьяница
|
Код обращения к вебсервису CRM оборачиваете конструкцией
try { //обращение к вебсервису } catch(SoapException sexc) { throw new Exception(sexc.Detail.InnerText); }
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
26.10.2009, 19:33 | #135 |
Участник
|
Способы обновить custom attribute из plugin'а
Коллеги, я знаю два способа обновить кастомный атрибут какой-то стандартной сущности через плагин, зарегистрированный на Post Stage:
1) TargetUpdate DynamicEntityА есть ли еще какие-нибудь способы? P.S. утомился каждый раз писать страницу кода для первого и задолбался для второго.
__________________
CRM programmer |
|
26.10.2009, 19:52 | #136 |
Чайный пьяница
|
Цитата:
Сообщение от SVK
Коллеги, я знаю два способа обновить кастомный атрибут какой-то стандартной сущности через плагин, зарегистрированный на Post Stage:
1) TargetUpdate DynamicEntityА есть ли еще какие-нибудь способы? P.S. утомился каждый раз писать страницу кода для первого и задолбался для второго. По поводу Update - зачем пользоваться TargetUpdate? Update метод может обрабатывать и DynamicEntity...
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
|
За это сообщение автора поблагодарили: SVK (1). |
27.10.2009, 08:56 | #137 |
Участник
|
Добрый день!
Программка заработала.Только не получается сделать проверку.Необходимо,если в карточке account поле primarycontactid пусто,то в карточке электронного письма заполнять поле to бизнес-партнёром,если же не пусто, то ещё заплнять поле cc(копия) основным контактом.Написал следующую проверку,но запуская бизнес процесс на выполнение в состоянии пишется ожидание и всё. quote quo = (quote)crmservice.Retrieve(EntityName.quote.ToString(), workflowContext.PrimaryEntityId, new ColumnSet(new string[] { "customerid" })); Guid quoid = quo.customerid.Value; account acc = (account)crmservice.Retrieve(EntityName.account.ToString(), quoid, new ColumnSet(new string[] { "primarycontactid" })); activityparty toparty = new activityparty(); toparty.partyid = new Lookup(); toparty.partyid.type = quo.customerid.type; toparty.partyid.Value = quo.customerid.Value; mail.to = new activityparty[] { toparty }; if (acc.primarycontactid.IsNull == false) { activityparty toparty1 = new activityparty(); toparty1.partyid = new Lookup(); toparty1.partyid.type = EntityName.contact.ToString(); toparty1.partyid.Value = acc.primarycontactid.Value; mail.cc = new activityparty[] { toparty1 }; } else { mail.cc = new activityparty[] { toparty }; } Для варианта,когда у бизнес-партнёра заполнено поле "основной контакт" - работает. |
|
27.10.2009, 10:02 | #138 |
Чайный пьяница
|
Цитата:
Сообщение от moskalevas
Добрый день!
Программка заработала.Только не получается сделать проверку.Необходимо,если в карточке account поле primarycontactid пусто,то в карточке электронного письма заполнять поле to бизнес-партнёром,если же не пусто, то ещё заплнять поле cc(копия) основным контактом.Написал следующую проверку,но запуская бизнес процесс на выполнение в состоянии пишется ожидание и всё. quote quo = (quote)crmservice.Retrieve(EntityName.quote.ToString(), workflowContext.PrimaryEntityId, new ColumnSet(new string[] { "customerid" })); Guid quoid = quo.customerid.Value; account acc = (account)crmservice.Retrieve(EntityName.account.ToString(), quoid, new ColumnSet(new string[] { "primarycontactid" })); activityparty toparty = new activityparty(); toparty.partyid = new Lookup(); toparty.partyid.type = quo.customerid.type; toparty.partyid.Value = quo.customerid.Value; mail.to = new activityparty[] { toparty }; if (acc.primarycontactid.IsNull == false) { activityparty toparty1 = new activityparty(); toparty1.partyid = new Lookup(); toparty1.partyid.type = EntityName.contact.ToString(); toparty1.partyid.Value = acc.primarycontactid.Value; mail.cc = new activityparty[] { toparty1 }; } else { mail.cc = new activityparty[] { toparty }; } Для варианта,когда у бизнес-партнёра заполнено поле "основной контакт" - работает. Код: if (acc.primarycontactid.IsNull == false) Код: if (acc.primarycontactid != null)
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
27.10.2009, 10:32 | #139 |
Участник
|
Я имел ввиду xml обновление, не фетч, конечно.
А вот за Update - спасибо!
__________________
CRM programmer |
|
Теги |
c#, custom workflow action, plugin, workflow, reporting services, report |
|
|