20.11.2013, 08:57 | #1 |
Участник
|
Отображение организации в представлении: Мои Звонки
Доброго времени суток уважаемые!!!
В очередной раз обращаюсь к вам за консультацией. Сколько бы не обращался - всегда что то новое для себя открываю. В очередной раз возникла такая задача: Имеется представление - в котором отображаются Мои звонки, которые в свою очередь могут быть как в отношении Интереса, Возможной сделки, Действия Кампании, либо просто созданы в ручную. При ручном создании на форме звонка используется поле Получатель "to" а само поле "в отношении" в этот момент конечно же не заполнено. Так вот необходимо настроить представление таким образом чтоб видно было Организацию на которой находится то или иное действие. В Отношении может быть любая сущность, но в конечном итоге все равно можно дойти до организации. Каким образом я вижу все это: С помощью скрипта при загрузке формы - определить какая сущность находится в поле "В отношении" и в зависимости от нее создать тот или иной SOAP запрос на получение Организации. НА саму форму звонка вывести лукап организации и туда эти значения подставлять. Но ... как быть уже с существующими звонками? Можно их обновить с помощью БП, и опять же из разных сущностей получить данные об организации тоже возможно. Но столкнулся вот с такой сложностью: с помощью БП при попытке получить данные на форме в которой "В отношении" не заполнено но получатель как раз таки стоит сама организация, эту организацию я не могу добавить в поле в отношении так как лукап "to" имеет тип "Список сторон" (EntityCollection) и с помощью БП от туда никакие данные не получить. Я так понимаю что возможно все реализовать с помощью плагина - который на Update сообщении все сделал бы, распознал сущность и подставил значение туда как надо. Увы познаний в написании логики плагина для этой задачи пока не хватает, поэтому то и хотелось бы у вас проконсультироваться, как это реализовать, или сделать это немного по другому чтоб видеть организации на представлении. За ранее спасибо за любой совет!!! |
|
21.11.2013, 12:16 | #2 |
Еда - топливо, Одежда - н
|
Вопрос.
Вы хотите увидеть в представлении "Подразделение" или "Организацию", в которой находится пользователь, который ответственный за выполнение этого звонка? Или мы говорим о "Организация" = "Компания" = "Клиент" ? Не совсем понятно чего вы хотите.
__________________
Все что вам нужно - это мозК Еда - топливо... Одежда - необходимость... |
|
21.11.2013, 19:27 | #3 |
Участник
|
Да, мы имеем в виду Организация = компания - клиент (Бизнес партнер в 4.0) сущность называется account
|
|
21.11.2013, 21:16 | #4 |
Еда - топливо, Одежда - н
|
Стандартом никак. Если конечно, не выводить в представление поля всех связанных со звонком сущностей ))))) Если так, то можно.
В любом случае надо заполнять поле "в отношении". А вот реализация, это уже дело 2. Думаю вариант с созданием, еще одного поля на клиента - это максимум что можно сделать. И заполнять его плагином. (триггер - это вам решать тоже ) Ну а по описанию логики работы плагина не подскажу, нужно понимать структуру вашей БД.
__________________
Все что вам нужно - это мозК Еда - топливо... Одежда - необходимость... |
|
22.11.2013, 08:06 | #5 |
Участник
|
Я представлял себе это немного по другому, наоборот на все сущности добавить поле в которое подставлять Имя клиента, но не само поле на клиента.
У меня сейчас такая вот задача стоит: в представлении вывел все звонки, с максимальной информативностью, чтоб видны были и поля "Название Оргнизации" (account) и поле в отношении. И да, в поле в отношении видно все сущности в которых создан звонок, но есть звонки которые созданы без заполнения поля "В отношении", заполнено поле Получатель (to) и хотелось бы плагином обновить поле в отношении - подставив туда значение из поля получатель. Т.е. из "to" в "regardingobjectid" Бизнес процессом обновить не могу так как поле to имеет свойство EntityCollection а не EntityReference |
|
22.11.2013, 13:06 | #6 |
Kostya Afendikov
|
Я похоже делал очень давно еще для 4ки.
Суть: создаем дополнительное поля - Название организации, выводим его в представления. За его заполнение будет отвечать плагин. |
|
22.11.2013, 13:13 | #7 |
Еда - топливо, Одежда - н
|
Цитата:
Сообщение от Space-06
Я представлял себе это немного по другому, наоборот на все сущности добавить поле в которое подставлять Имя клиента, но не само поле на клиента.
У меня сейчас такая вот задача стоит: в представлении вывел все звонки, с максимальной информативностью, чтоб видны были и поля "Название Оргнизации" (account) и поле в отношении. И да, в поле в отношении видно все сущности в которых создан звонок, но есть звонки которые созданы без заполнения поля "В отношении", заполнено поле Получатель (to) и хотелось бы плагином обновить поле в отношении - подставив туда значение из поля получатель. Т.е. из "to" в "regardingobjectid" Бизнес процессом обновить не могу так как поле to имеет свойство EntityCollection а не EntityReference Удачи ))
__________________
Все что вам нужно - это мозК Еда - топливо... Одежда - необходимость... |
|
22.11.2013, 15:54 | #8 |
Участник
|
Цитата:
Сообщение от Bondonello
Я похоже делал очень давно еще для 4ки.
Я разберусь с логикой работы и думаю все будет работать. Маленькое уточнение: Если попытаться его адаптировать под 2011, на сколько сильно изменится код? |
|
23.11.2013, 00:53 | #9 |
Kostya Afendikov
|
|
|
|
За это сообщение автора поблагодарили: Space-06 (1). |
25.11.2013, 18:52 | #10 |
Участник
|
Пытаясь изменить код под свои нужды, столкнулся вот с какой проблемой, вроде все делаю так как надо:
X++: using Microsoft.Xrm.Sdk; using Microsoft.Xrm.Sdk.Client; using Microsoft.Xrm.Sdk.Query; using Microsoft.Xrm.Sdk.Messages; using Microsoft.Xrm.Sdk.Discovery; using Microsoft.Crm.Sdk.Messages; using System.ServiceModel; namespace SetAccountName { public class SetAccountName : IPlugin { public void Execute(IServiceProvider serviceProvider) { // Получаемо сервис CRM из контекста IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext)); IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory)); IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId); // Получаемо объект Target Entity entity = (Entity)context.InputParameters["Target"]; ColumnSet cs = new ColumnSet(); //try //{ if (entity.LogicalName == "phonecall") { if (entity.Contains("regardingobjectid")) { Guid phoneid = entity.Id; //Entity PhoneCall = service.Retrieve("phonecall", phoneid, new Microsoft.Xrm.Sdk.Query.ColumnSet(true)); Entity PhoneCall = service.Retrieve("phonecall", phoneid, cs); EntityReference regarding = ((EntityReference)PhoneCall.Attributes["regardingobjectid"]); switch (regarding.LogicalName.ToString()) { case "account": Entity account = service.Retrieve("account", regarding.Id, cs); entity.Attributes.Add("new_nameofaccount", account.FormattedValues.ToString()); //entity.Attributes["new_nameofaccount"] = account.FormattedValues["name"].ToString(); //entity.Attributes["new_nameofaccount"] = account.; //entity.Attributes["new_companyname"] = ((EntityReference)account.Attributes["name"]); break; case "lead": Entity lead = service.Retrieve("lead", regarding.Id, cs); entity.Attributes["new_nameofaccount"] = lead.FormattedValues["new_companyname"].ToString(); break; case "opportunity": Entity opport = service.Retrieve("opportunity", regarding.Id, cs); entity.Attributes["new_nameofaccount"] = opport.FormattedValues["customerid"].ToString(); break; } service.Update(PhoneCall); } } //catch (Exception ex) // { // throw new InvalidPluginExecutionException("An error occured in the Plugin.", ex); // } } } } Прошу сильно не пинать меня ногами. Это первый так сказать опыт по написанию своего собственного плагина, и как говорится сроки очень сильно поджимают. Подскажите - где мог ошибится и как все таки правильно реализовать получение значения имени организации в первом Кейсе. За ранее спасибо. |
|
|
|