Легкий тюнинг диаграмм - 04
Запись от Fighter размещена 08.01.2012 в 01:11
Теги chart, link-entity, outer
Строим диаграмму для связанных 1:N сущностей
Типичная задачка: требуется построить диаграмму, показывающую соотношение общего количества Организаций к Организациям, в отношении которых велись / ведутся Возможные сделки.
К сожалению, такой вид диаграммы в стандартном джентельменском наборе CRM отсутствует (понятно, что все остальные условия фильтрации: за период, по отделам, по регионам… можно возложить на кастомное представление Организаций).
Попробуем решить это задачку редактированием раздела <fetchcollection> определения диаграммы.
Логика наша будет выглядеть примерно следующим образом: нужно извлечь и подсчитать все Организации, параллельно построив запрос к связанным возможным сделкам (т.е. link entity и не забыть, чтобы запрос был “outer”!) и проведя второй подсчет Организаций, у которых есть возможные сделки. Опять же, группирование записей (group by) должно быть по тем параметрам, которые нас интересуют. Так как группирование и агрегирование (подсчет) будем выполнять внутри вложенного запроса, то и рассматривать поля группировки / агрегата нужно по отношению к Возможной сделке.
В самом простом случае (когда интересует только количество Организаций со сделками, без детализации состояния сделок) подойдет любое неиспользуемое поле в сущности Возможная сделка. Здесь фишка заключается в том, что это поле будет у всех сделок иметь одно и то же значение.
Я решил, что мне подойдет поле Приоритет (“prioritycode”). Если вы хотите детализировать состояние сделок по Организациям, используйте поле Состояние «statecode». Оно даст нам три дополнительных значения агрегата: Открыть, Потеряно и Реализовано.
Ну вот, хватит теории, переходим к практике.
Создаем кастомную круговую диаграмму Организации со сделками и без как показано на рис. ниже:
Сохраняем, экспортируем, отрываем в XML редакторе.
Находим раздел <fetchcollection>
Вставляем в этот раздел вложенный запрос от Организации к Возможным сделкам:
<link-entity name="opportunity" from="customerid" to="accountid" link-type="outer">
</link-entity>
А теперь берем и переносим
Во вложенный запрос. Вот что должно получиться:
Наводим марафет.
Мы договорились, что считать будем по полю prioritycode. Поэтому меняем в группе attribute groupby значение поля name (теперь будет name=”prioritycode”).
Далее, так как агрегирование уже выполняется внутри вложенного запроса, то группа attribute aggregate должна ссылаться на существующее поле в сущности Возможная сделка. Так как поле name есть и в Организации, и в Возможной сделке, то все оставляем как есть.
Наводим лоск.
Поле prioritycode имеет одно значение, равное Значение по умолчанию. Которое и будет отображено на диаграмме. Как-то некрасиво. Поэтому лезем внутрь и меняем это значение на «Организации со сделками». Публикуемся, переходим на представление с Организациями и наслаждаемся
Типичная задачка: требуется построить диаграмму, показывающую соотношение общего количества Организаций к Организациям, в отношении которых велись / ведутся Возможные сделки.
К сожалению, такой вид диаграммы в стандартном джентельменском наборе CRM отсутствует (понятно, что все остальные условия фильтрации: за период, по отделам, по регионам… можно возложить на кастомное представление Организаций).
Попробуем решить это задачку редактированием раздела <fetchcollection> определения диаграммы.
Логика наша будет выглядеть примерно следующим образом: нужно извлечь и подсчитать все Организации, параллельно построив запрос к связанным возможным сделкам (т.е. link entity и не забыть, чтобы запрос был “outer”!) и проведя второй подсчет Организаций, у которых есть возможные сделки. Опять же, группирование записей (group by) должно быть по тем параметрам, которые нас интересуют. Так как группирование и агрегирование (подсчет) будем выполнять внутри вложенного запроса, то и рассматривать поля группировки / агрегата нужно по отношению к Возможной сделке.
В самом простом случае (когда интересует только количество Организаций со сделками, без детализации состояния сделок) подойдет любое неиспользуемое поле в сущности Возможная сделка. Здесь фишка заключается в том, что это поле будет у всех сделок иметь одно и то же значение.
Я решил, что мне подойдет поле Приоритет (“prioritycode”). Если вы хотите детализировать состояние сделок по Организациям, используйте поле Состояние «statecode». Оно даст нам три дополнительных значения агрегата: Открыть, Потеряно и Реализовано.
Ну вот, хватит теории, переходим к практике.
Создаем кастомную круговую диаграмму Организации со сделками и без как показано на рис. ниже:
Сохраняем, экспортируем, отрываем в 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 имеет одно значение, равное Значение по умолчанию. Которое и будет отображено на диаграмме. Как-то некрасиво. Поэтому лезем внутрь и меняем это значение на «Организации со сделками». Публикуемся, переходим на представление с Организациями и наслаждаемся
Всего комментариев 1
Комментарии
-
Запись от Fighter размещена 08.01.2012 в 01:37