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

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


MVP 2010, 2011
Оценить эту запись

Группировки в гридах CRM. v1.0

Запись от Артем Enot Грунин размещена 14.04.2010 в 15:28

Итак, все мы знаем, что в таблицах (гридах) CRM 3.0/4.0 нет возможности группировать записи. Судя по всему, в 5.0 такой возможности тоже не будет, поэтому восполнять данный недочет придется нам с вами. Вдохновленный примером из The Javascript Grid Editor я решил, что нет ничего невозможного и попытался реализовать задачу группировки внутри системного грида.
Действуем по аналогии: делаем на гриде 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 = &quot;/_static/_controls/PopupMenu/popupmenu.js&quot;;
var jsGrouping = &quot;/ISV/CRMGridGroup/grouping.js&quot;;
        
loadScript(jsPopup);
loadScript(jsGrouping);


var oThisButtonLabel = &quot;Group Test&quot;;
var oThisButton = null;

var oMenuBar = document.all.crmMenuBar;
var oMenus = oMenuBar.getElementsByTagName(&quot;LI&quot;);

for (var i=oMenus.length -1; i &gt; 0; i--)
{
    var oMenuItem = oMenus[i];
    if (oMenuItem.title == oThisButtonLabel)
    {
        oThisButton = oMenuItem;
        break;
    }
}

var oGrid = document.all[&quot;crmGrid&quot;];

InitButton(oThisButton, oGrid);

// Run custom code from /grouping.js
oThisButton.onclick();

function loadScript(oScriptURL)
{
    var xmlHttp=new ActiveXObject(&quot;Microsoft.XMLHTTP&quot;);
    xmlHttp.open(&quot;GET&quot;,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.js, который нужно поместить в папку ISV расположенную в каталоге с сайтом системы.
grouping.rar

Решение пока что промежуточное - еще есть ряд моментов, которые мне хотелось бы исправить.

Что умеет уже сейчас:
  • Отражает меню опций группировки
  • Группирует по одному полю
  • Корректно работает сортировка
  • Может схлапывать и раскрывать группы по клику на иконке или двойному клику на строке
  • Счетчик записей в группе (хотя реализация не вполне элегантна)
  • В гриде отражаются иконки состояния группы
Не реализовано:
  • Не всегда работает быстрый фильтр: при наличии группировки таблица сортируется по двум полям - по полю группировки и полю сортировки в таблице. Фильтр всегда работает по первому полю. Это ограничение системы, которое не побороть, можно только заменить.
  • Схлапывание/раскрытие групп с клавиатуры (сильно глючит)
  • Не прячется столбец группировки (сильно глючит)
  • Сохранение состояния группы (свернута/раскрыта) при обновлении грида (требуется рефакторинг)
Известные баги:
  • При схлапывании по двойному щелчку теряется выделение.
  • Если группы свернуты, то не корректно работает перемещение по таблице с клавиатуры
  • Если выделить группу и нажать пробел упадет системный скрипт открытия формы быстрого просмотра
  • После обновления грида навигация с клавиатуры не работает, пока строку не выделить мышью.
В целом, данное решение - не более чем доказательство концепции. Реализовать подобное возможно, но нужно больше сил и времени. Если у вас есть желание присоединиться к разработке или вы поймаете еще баги - пишите!

Как это выглядит:
Нажмите на изображение для увеличения
Название: group.jpg
Просмотров: 1194
Размер:	257.5 Кб
ID:	59
Размещено в CRM
Просмотров 36511 Комментарии 2
Всего комментариев 2

Комментарии

  1. Старый комментарий
    Аватар для a33ik
    Ты деман
    Запись от a33ik размещена 14.04.2010 в 18:00 a33ik is offline
  2. Старый комментарий
    Аватар для Артем Enot Грунин
    Йа только учусь!
    Запись от Артем Enot Грунин размещена 15.04.2010 в 08:49 Артем Enot Грунин is offline
 


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