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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 20.11.2013, 08:57   #1  
Space-06 is offline
Space-06
Участник
 
57 / 10 (1) +
Регистрация: 23.01.2013
Отображение организации в представлении: Мои Звонки
Доброго времени суток уважаемые!!!

В очередной раз обращаюсь к вам за консультацией. Сколько бы не обращался - всегда что то новое для себя открываю.

В очередной раз возникла такая задача:

Имеется представление - в котором отображаются Мои звонки, которые в свою очередь могут быть как в отношении Интереса, Возможной сделки, Действия Кампании, либо просто созданы в ручную. При ручном создании на форме звонка используется поле Получатель "to" а само поле "в отношении" в этот момент конечно же не заполнено.

Так вот необходимо настроить представление таким образом чтоб видно было Организацию на которой находится то или иное действие.

В Отношении может быть любая сущность, но в конечном итоге все равно можно дойти до организации.

Каким образом я вижу все это:
С помощью скрипта при загрузке формы - определить какая сущность находится в поле "В отношении" и в зависимости от нее создать тот или иной SOAP запрос на получение Организации. НА саму форму звонка вывести лукап организации и туда эти значения подставлять. Но ... как быть уже с существующими звонками? Можно их обновить с помощью БП, и опять же из разных сущностей получить данные об организации тоже возможно.
Но столкнулся вот с такой сложностью: с помощью БП при попытке получить данные на форме в которой "В отношении" не заполнено но получатель как раз таки стоит сама организация, эту организацию я не могу добавить в поле в отношении так как лукап "to" имеет тип "Список сторон" (EntityCollection) и с помощью БП от туда никакие данные не получить.

Я так понимаю что возможно все реализовать с помощью плагина - который на Update сообщении все сделал бы, распознал сущность и подставил значение туда как надо. Увы познаний в написании логики плагина для этой задачи пока не хватает, поэтому то и хотелось бы у вас проконсультироваться, как это реализовать, или сделать это немного по другому чтоб видеть организации на представлении.


За ранее спасибо за любой совет!!!
Старый 21.11.2013, 12:16   #2  
-O_o- is offline
-O_o-
Еда - топливо, Одежда - н
Аватар для -O_o-
Лучший по профессии 2015
Лучший по профессии 2014
 
727 / 80 (4) ++++
Регистрация: 11.05.2012
Адрес: Киев
Вопрос.
Вы хотите увидеть в представлении "Подразделение" или "Организацию", в которой находится пользователь, который ответственный за выполнение этого звонка?
Или мы говорим о "Организация" = "Компания" = "Клиент" ?

Не совсем понятно чего вы хотите.
__________________
Все что вам нужно - это мозК
Еда - топливо... Одежда - необходимость...
Старый 21.11.2013, 19:27   #3  
Space-06 is offline
Space-06
Участник
 
57 / 10 (1) +
Регистрация: 23.01.2013
Да, мы имеем в виду Организация = компания - клиент (Бизнес партнер в 4.0) сущность называется account
Старый 21.11.2013, 21:16   #4  
-O_o- is offline
-O_o-
Еда - топливо, Одежда - н
Аватар для -O_o-
Лучший по профессии 2015
Лучший по профессии 2014
 
727 / 80 (4) ++++
Регистрация: 11.05.2012
Адрес: Киев
Стандартом никак. Если конечно, не выводить в представление поля всех связанных со звонком сущностей ))))) Если так, то можно.
В любом случае надо заполнять поле "в отношении".
А вот реализация, это уже дело 2.
Думаю вариант с созданием, еще одного поля на клиента - это максимум что можно сделать.
И заполнять его плагином. (триггер - это вам решать тоже )
Ну а по описанию логики работы плагина не подскажу, нужно понимать структуру вашей БД.
__________________
Все что вам нужно - это мозК
Еда - топливо... Одежда - необходимость...
Старый 22.11.2013, 08:06   #5  
Space-06 is offline
Space-06
Участник
 
57 / 10 (1) +
Регистрация: 23.01.2013
Я представлял себе это немного по другому, наоборот на все сущности добавить поле в которое подставлять Имя клиента, но не само поле на клиента.

У меня сейчас такая вот задача стоит: в представлении вывел все звонки, с максимальной информативностью, чтоб видны были и поля "Название Оргнизации" (account) и поле в отношении.

И да, в поле в отношении видно все сущности в которых создан звонок, но есть звонки которые созданы без заполнения поля "В отношении", заполнено поле Получатель (to) и хотелось бы плагином обновить поле в отношении - подставив туда значение из поля получатель.

Т.е. из "to" в "regardingobjectid" Бизнес процессом обновить не могу так как поле to имеет свойство EntityCollection а не EntityReference
Старый 22.11.2013, 13:06   #6  
Bondonello is offline
Bondonello
Kostya Afendikov
Аватар для Bondonello
MCBMSS
Лучший по профессии 2009
 
510 / 106 (5) +++++
Регистрация: 06.06.2008
Адрес: Украина
Я похоже делал очень давно еще для 4ки.
Суть: создаем дополнительное поля - Название организации, выводим его в представления. За его заполнение будет отвечать плагин.
Старый 22.11.2013, 13:13   #7  
-O_o- is offline
-O_o-
Еда - топливо, Одежда - н
Аватар для -O_o-
Лучший по профессии 2015
Лучший по профессии 2014
 
727 / 80 (4) ++++
Регистрация: 11.05.2012
Адрес: Киев
Цитата:
Сообщение от Space-06 Посмотреть сообщение
Я представлял себе это немного по другому, наоборот на все сущности добавить поле в которое подставлять Имя клиента, но не само поле на клиента.

У меня сейчас такая вот задача стоит: в представлении вывел все звонки, с максимальной информативностью, чтоб видны были и поля "Название Оргнизации" (account) и поле в отношении.

И да, в поле в отношении видно все сущности в которых создан звонок, но есть звонки которые созданы без заполнения поля "В отношении", заполнено поле Получатель (to) и хотелось бы плагином обновить поле в отношении - подставив туда значение из поля получатель.

Т.е. из "to" в "regardingobjectid" Бизнес процессом обновить не могу так как поле to имеет свойство EntityCollection а не EntityReference
Ну да, тут только плагином, потому что в поле "TO" может быть несколько разных сущностей и несколько записей )
Удачи ))
__________________
Все что вам нужно - это мозК
Еда - топливо... Одежда - необходимость...
Старый 22.11.2013, 15:54   #8  
Space-06 is offline
Space-06
Участник
 
57 / 10 (1) +
Регистрация: 23.01.2013
Цитата:
Сообщение от Bondonello Посмотреть сообщение
Я похоже делал очень давно еще для 4ки.
Это именно то что мне как раз таки и необходимо.

Я разберусь с логикой работы и думаю все будет работать.

Маленькое уточнение: Если попытаться его адаптировать под 2011, на сколько сильно изменится код?
Старый 23.11.2013, 00:53   #9  
Bondonello is offline
Bondonello
Kostya Afendikov
Аватар для Bondonello
MCBMSS
Лучший по профессии 2009
 
510 / 106 (5) +++++
Регистрация: 06.06.2008
Адрес: Украина
Цитата:
Сообщение от Space-06 Посмотреть сообщение
на сколько сильно изменится код?
не сильно
За это сообщение автора поблагодарили: Space-06 (1).
Старый 25.11.2013, 18:52   #10  
Space-06 is offline
Space-06
Участник
 
57 / 10 (1) +
Регистрация: 23.01.2013
Пытаясь изменить код под свои нужды, столкнулся вот с какой проблемой, вроде все делаю так как надо:

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);
//                }        
        
        }

    }   
    }
и все равно поле не обновляется.

Прошу сильно не пинать меня ногами. Это первый так сказать опыт по написанию своего собственного плагина, и как говорится сроки очень сильно поджимают. Подскажите - где мог ошибится и как все таки правильно реализовать получение значения имени организации в первом Кейсе.

За ранее спасибо.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Проблема выбора импортированной организации для клиента Outlook (Аутлук) CRM 2011 Likefire Dynamics CRM: Администрирование 4 29.10.2012 14:05
Добавление карты Яндекс на форму организации в MS CRM 2011 Dmitrij777 Dynamics CRM: Разработка 0 05.06.2012 12:03
CRM 2011, создание дочерней организации - недостаточно прав [решено] mistah Dynamics CRM: Функционал 2 10.01.2012 14:06
Отображение Организаций для ответственного с привилегиями "читать только свои организации" Lazarus Dynamics CRM: Администрирование 7 03.09.2009 18:06
Отображение списка контактов на вкладке организации SLK Dynamics CRM: Разработка 39 19.03.2008 15:16

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

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

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