Добро пожаловать в мой блог! Изначально он не задумывался как блог 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