Добро пожаловать в мой блог! Изначально он не задумывался как блог CRM разработчика, но жизнь сама внесла нужные коррективы. Тут я публикою все свои наблюдения относительно обозначенных в заголовке систем. Если Вы найдете в нем что-то интересное для Вас, как для заказчика, то буду рад сотрудничать с Вами! В моей компетенции 100% задач по MS CRM 3.0/4.0/2011:


MVP 2010, 2011
- Консалтинг
- Проектирование
- Разработка
- Обучение
MVP 2010, 2011
Группировки в гридах CRM. v1.0
Запись от Артем Enot Грунин размещена 14.04.2010 в 15:28
Теги dom, grid, isv, java script, unsupport
Итак, все мы знаем, что в таблицах (гридах) CRM 3.0/4.0 нет возможности группировать записи. Судя по всему, в 5.0 такой возможности тоже не будет, поэтому восполнять данный недочет придется нам с вами. Вдохновленный примером из The Javascript Grid Editor я решил, что нет ничего невозможного и попытался реализовать задачу группировки внутри системного грида.
Действуем по аналогии: делаем на гриде ISV кнопку, на ее нажатие вещаем обработчик, который переделает системный контрол до неузнаваемости.
Для испытаний я выбрал сущность Возможная сделка. Код ISV кнопки следующий:
По сути это тот же код, который я приводил в своем предыдущем посте. Он лишь инициализирует библиотеки и заменяет обработчик. Вся логика решения находится в файле grouping.js, который нужно поместить в папку ISV расположенную в каталоге с сайтом системы.
grouping.rar
Решение пока что промежуточное - еще есть ряд моментов, которые мне хотелось бы исправить.
Что умеет уже сейчас:
Как это выглядит:

Действуем по аналогии: делаем на гриде ISV кнопку, на ее нажатие вещаем обработчик, который переделает системный контрол до неузнаваемости.
Для испытаний я выбрал сущность Возможная сделка. Код ISV кнопки следующий:
Код:
<IsvConfig>
<configuration version="3.0.0000.0">
<Root />
<Entities>
<Entity name="opportunity">
<Grid>
<MenuBar>
<Buttons>
<Button Icon="/_imgs/ico_18_debug.gif" JavaScript="// Load Main Code
var jsPopup = "/_static/_controls/PopupMenu/popupmenu.js";
var jsGrouping = "/ISV/CRMGridGroup/grouping.js";
loadScript(jsPopup);
loadScript(jsGrouping);
var oThisButtonLabel = "Group Test";
var oThisButton = null;
var oMenuBar = document.all.crmMenuBar;
var oMenus = oMenuBar.getElementsByTagName("LI");
for (var i=oMenus.length -1; i > 0; i--)
{
var oMenuItem = oMenus[i];
if (oMenuItem.title == oThisButtonLabel)
{
oThisButton = oMenuItem;
break;
}
}
var oGrid = document.all["crmGrid"];
InitButton(oThisButton, oGrid);
// Run custom code from /grouping.js
oThisButton.onclick();
function loadScript(oScriptURL)
{
var xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
xmlHttp.open("GET",oScriptURL,false);
xmlHttp.send();
window.execScript(xmlHttp.responseText);
}" >
<Titles>
<Title LCID="1033" Text="Group Test" />
</Titles>
<ToolTips>
<ToolTip LCID="1033" Text="Group Test" />
</ToolTips>
</Button>
</Buttons>
</MenuBar>
</Grid>
</Entity>
</Entities>
</configuration>
</IsvConfig>
grouping.rar
Решение пока что промежуточное - еще есть ряд моментов, которые мне хотелось бы исправить.
Что умеет уже сейчас:
- Отражает меню опций группировки
- Группирует по одному полю
- Корректно работает сортировка
- Может схлапывать и раскрывать группы по клику на иконке или двойному клику на строке
- Счетчик записей в группе (хотя реализация не вполне элегантна)
- В гриде отражаются иконки состояния группы
- Не всегда работает быстрый фильтр: при наличии группировки таблица сортируется по двум полям - по полю группировки и полю сортировки в таблице. Фильтр всегда работает по первому полю. Это ограничение системы, которое не побороть, можно только заменить.
- Схлапывание/раскрытие групп с клавиатуры (сильно глючит)
- Не прячется столбец группировки (сильно глючит)
- Сохранение состояния группы (свернута/раскрыта) при обновлении грида (требуется рефакторинг)
- При схлапывании по двойному щелчку теряется выделение.
- Если группы свернуты, то не корректно работает перемещение по таблице с клавиатуры
- Если выделить группу и нажать пробел упадет системный скрипт открытия формы быстрого просмотра
- После обновления грида навигация с клавиатуры не работает, пока строку не выделить мышью.
Как это выглядит:
Всего комментариев 2
Комментарии
-
Запись от a33ik размещена 14.04.2010 в 18:00
-
Запись от Артем Enot Грунин размещена 15.04.2010 в 08:49





