Переопределить стандартный метод, вызываемый событием двойного щелчка в сетке CRM. - PullRequest
3 голосов
/ 17 февраля 2012

Следующая ситуация в CRM 2011: Моя цель - показать несколько объектов в одной сетке.Поэтому мы создали объект-обертку, который ссылается на реальный объект (объект-обертка на объект A, B, C).Когда создается элемент в A, B или C, плагин также создает элемент-обертку.Таким образом, у меня может быть сетка, «смешивающая» все сущности, в то время как на самом деле отображаются только элементы сущности-обертки.

Но, разумеется, если я сделаю двойной щелчок или щелчок правой кнопкой мыши -> открыть в этой сетке, я не хочу открывать элемент сущности-обертки, я непосредственно хочу открыть окно, например, элемента сущности А,Кнопка ленты не проблема между прочим.

До сих пор я следовал по двум маршрутам:

a) Замена ссылки: После загрузки сетки я прошел DOM и заменил oid, otype и otypename значениями (real)целевой объект (объект A, B или C).У этой идеи есть два недостатка: во-первых, когда нужно выполнить процедуру замены (недостаточно только при загрузке, поскольку позже можно отсортировать, отфильтровать или перевернуть страницы).Вторая и мужская проблема - кнопки ленты.Я хочу удалить объекты-обертки, а не счет за ним.Вещи запутываются, когда я заменяю все эти идентификаторы.Я должен был бы заменить все кнопки пользовательскими кнопками.

b) Замена метода / события: было бы элегантно просто заменить событие, когда вызывается окно сведений о элементе.К сожалению, я еще не выяснил, как события реализованы в CRM, я надеялся отсоединить событие и заменить его моим, но это, кажется, скрытый секрет.CRMWeb_static_grid \ AppGrid_DefaultData.htc имеет событие dblclick, но я не понимаю, ищу ли это именно то, что мне нужно, и как его отсоединить.

Кто-нибудь когда-нибудь пытался заменить обработчик событий в crmсетка или есть идея, как это может работать?

Надеюсь, понятно, что я имею в виду ...

Большое спасибо за любую идею.

Ответы [ 2 ]

1 голос
/ 18 февраля 2012

События в интерфейсе обрабатываются так же, как IE обрабатывает все события (см. Вопрос SO Должен ли я назначать события JavaScript напрямую только для объединения кода? только для одного примера) .

Функциональность для отмены действия двойного щелчка по умолчанию может запускаться следующим образом:

function Load() {
    var grid = document.getElementById("myGridName");
    grid.ondblclick = DoubleClickAction;
}

function DoubleClickAction() {
    var id, url;
    //get the id of the entity in the row you double clicked
    id = GetId();

    //generate the entity form url
    url = GetUrl();

    //open the record window
    OpenRecordWindow(url);
}

function OpenRecordWindow(url) {
    var url;

    if (Xrm.Page.context.isOutlookClient()) {
        openStdWin(url, "Your Title", "width=1024,height=768,status=1");
    }
    else {
        window.open(url);
    }

}

Редактировать: Исходя из ваших комментариев, вы попадаете в довольно серьезную настройку DOM здесь. Вам придется изменять событие dblclick для каждой строки в сетке всякий раз, когда сетка обновляет , поскольку событие щелчка правой кнопкой мыши основано на событии dblclick строки. Таким образом, вам нужно найти сетку и также прикрепить событие refresh к сетке, которое присоединяет событие dblclick к любым найденным строкам.

Чтобы получить идентификатор сетки и потенциальные идентификаторы любых строк, вы можете использовать инструменты разработчика IE F12 для просмотра / поиска в HTML.

0 голосов
/ 17 февраля 2012

Можете ли вы отобразить эти данные, соединив А с В и А с С? Как связаны эти три сущности? От А до Б и от А до С? От А до Б до С?

Я спрашиваю, потому что вы должны быть в состоянии достичь своей цели с помощью стандартной функциональности объединения, предоставляемой представлениями, и вообще избежать этого переопределения. Если вам нужно настроить некоторые отношения между сущностями только для этого представления, вероятно, предпочтительнее, чем сущность-обертка.

(я бы предпочел добавить это как комментарий ... Не думаю, что у меня достаточно репутации)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...