AXForum  
Вернуться   AXForum > Блоги > Fighter
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

Оценить эту запись

Легкий тюнинг диаграмм - 04

Запись от Fighter размещена 08.01.2012 в 01:11
Теги chart, link-entity, outer

Строим диаграмму для связанных 1:N сущностей

Типичная задачка: требуется построить диаграмму, показывающую соотношение общего количества Организаций к Организациям, в отношении которых велись / ведутся Возможные сделки.
К сожалению, такой вид диаграммы в стандартном джентельменском наборе CRM отсутствует (понятно, что все остальные условия фильтрации: за период, по отделам, по регионам… можно возложить на кастомное представление Организаций).

Попробуем решить это задачку редактированием раздела <fetchcollection> определения диаграммы.
Логика наша будет выглядеть примерно следующим образом: нужно извлечь и подсчитать все Организации, параллельно построив запрос к связанным возможным сделкам (т.е. link entity и не забыть, чтобы запрос был “outer”!) и проведя второй подсчет Организаций, у которых есть возможные сделки. Опять же, группирование записей (group by) должно быть по тем параметрам, которые нас интересуют. Так как группирование и агрегирование (подсчет) будем выполнять внутри вложенного запроса, то и рассматривать поля группировки / агрегата нужно по отношению к Возможной сделке.
В самом простом случае (когда интересует только количество Организаций со сделками, без детализации состояния сделок) подойдет любое неиспользуемое поле в сущности Возможная сделка. Здесь фишка заключается в том, что это поле будет у всех сделок иметь одно и то же значение.
Я решил, что мне подойдет поле Приоритет (“prioritycode”). Если вы хотите детализировать состояние сделок по Организациям, используйте поле Состояние «statecode». Оно даст нам три дополнительных значения агрегата: Открыть, Потеряно и Реализовано.

Ну вот, хватит теории, переходим к практике.
Создаем кастомную круговую диаграмму Организации со сделками и без как показано на рис. ниже:
Нажмите на изображение для увеличения
Название: Chart_08.png
Просмотров: 964
Размер:	11.1 Кб
ID:	192
Сохраняем, экспортируем, отрываем в XML редакторе.
Находим раздел <fetchcollection>
Код:
<fetchcollection>
        <fetch mapping="logical" aggregate="true">
          <entity name="account">
            <attribute groupby="true" alias="_CRMAutoGen_groupby_column_Num_0" name="statuscode" />
            <attribute alias="_CRMAutoGen_aggregate_column_Num_0" name="name" aggregate="count" />
          </entity>
        </fetch>
      </fetchcollection>
Вставляем в этот раздел вложенный запрос от Организации к Возможным сделкам:
<link-entity name="opportunity" from="customerid" to="accountid" link-type="outer">
</link-entity>


А теперь берем и переносим

Код:
<attribute groupby="true" alias="_CRMAutoGen_groupby_column_Num_0" name="statuscode" />
<attribute alias="_CRMAutoGen_aggregate_column_Num_0" name="name" aggregate="count" />
Во вложенный запрос. Вот что должно получиться:
Код:
      <fetchcollection>
        <fetch mapping="logical" aggregate="true">
          <entity name="account">
            <link-entity name="opportunity" from="customerid" to="accountid" link-type="outer">
				<attribute groupby="true" alias="_CRMAutoGen_groupby_column_Num_0" name="statuscode" />
				<attribute alias="_CRMAutoGen_aggregate_column_Num_0" name="name" aggregate="count" />          
		 </link-entity>
             </entity>
        </fetch>
      </fetchcollection>
Наводим марафет.
Мы договорились, что считать будем по полю prioritycode. Поэтому меняем в группе attribute groupby значение поля name (теперь будет name=”prioritycode”).
Далее, так как агрегирование уже выполняется внутри вложенного запроса, то группа attribute aggregate должна ссылаться на существующее поле в сущности Возможная сделка. Так как поле name есть и в Организации, и в Возможной сделке, то все оставляем как есть.
Наводим лоск.
Поле prioritycode имеет одно значение, равное Значение по умолчанию. Которое и будет отображено на диаграмме. Как-то некрасиво. Поэтому лезем внутрь и меняем это значение на «Организации со сделками». Публикуемся, переходим на представление с Организациями и наслаждаемся
Нажмите на изображение для увеличения
Название: Chart_09.png
Просмотров: 964
Размер:	10.1 Кб
ID:	193
Размещено в CRM
Просмотров 58293 Комментарии 1
Всего комментариев 1

Комментарии

  1. Старый комментарий
    Аватар для Fighter
    Хм, совсем не учел, что у Организаций может быть несколько сделок. И такие Организации будут подсчитаны несколько раз. countcolumn и distinct не помогают :-(.
    Короче, нужно менять заглавие на Строим диаграмму для связанных 1:1 сущностей.
    Запись от Fighter размещена 08.01.2012 в 01:37 Fighter is offline
 


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