Разработка
02
Фев
0

Использование стандартного диалога лукапа в JS

Когда-то была статейка как вызвать диалог лукапа из Веб-ресурса и вернуть в него выбранную запись (http://mmcrm.ru/?p=2174). Начиная с версии 2013 контрол лукапа изменился: лукап более не возвращает значений. Вместо этого Вы можете использовать функцию LookupObjectsWithCallback для получения фидбека.

При вызове ее из HTML Веб-ресурса Вы должны будете подключить файл «_static/_controls/lookup/lookup.js», в котором она определена.

Для примера создайте Веб-ресурс с таким кодом и поместите его на форму (в данном случае Организации):

<html>
<head>
    <script type="text/javascript" src="ClientGlobalContext.js.aspx"></script>
    <script type="text/javascript" src="../../../_static/_controls/lookup/lookup.js?ver=1029610289"></script>
</head>
<body>
    <input onclick="lookupContacts()" type="button" value="Find Contacts">
</body>
<script type="text/javascript">
 
    function lookupContacts() {
 
        // Получаем GUID текущей записи
        var accountId = window.parent.Xrm.Page.data.entity.getId();
 
        // Формируем Представление лукапа
        var objectCode = "2";
 
        var fetchxml = "<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>" +
            "<entity name='contact'>" +
            "<attribute name='fullname' />" +
            "<attribute name='telephone1' />" +
            "<attribute name='contactid' />" +
            "<order attribute='fullname' descending='false' />" +
            "<filter type='and'>" +
            "<condition attribute='parentcustomerid' operator='eq' uiname='Fourth Coffee (sample)' uitype='account' value='" + accountId + "' />" +
            "</filter>" +
            "</entity>" +
            "</fetch>";
 
        var layout = "<grid name='resultset' object='2' jump='fullname' select='1' preview='0' icon='1'>" +
            "<row name='result' id='contactid'>" +
            "<cell name='fullname' width='300' />" +
            "<cell name='emailaddress1' width='200' />" +
            "<cell name='telephone1' width='125' />" +
            "<cell name='parentcustomerid' width='150' />" +
            "<cell name='address1_city' width='100' />" +
            "<cell name='address1_telephone1' width='125' />" +
            "<cell name='fax' ishidden='1' width='100' />" +
            "<cell name='address1_name' ishidden='1' width='100' />" +
            "<cell name='address1_fax' ishidden='1' width='100' />" +
            "</row>" +
            "</grid>";
 
        var viewId = "{00000000-0000-0000-00AA-000010001002}"; // Любой фиктивный GUID
 
        // "Собираем" объект Представления
        var customView = {
            fetchXml: fetchxml,
            id: viewId,
            layoutXml: layout,
            name: "Contact Lookup",
            recordType: objectCode,
            Type: 0
        };
 
        Mscrm.Utilities.returnLookupItems = function (lookupItems, lookupField, bPopulateLookup, callbackReference) {
            // Выводим выбранные записи
            if (lookupItems != null) {
                if (lookupItems.items.length > 0) {
                    var lookupItemName = lookupItems.items[0].name;
                    var lookupItemId = lookupItems.items[0].id;
                    alert(lookupItemId + "_" + lookupItemName);
                }
            }
        };
 
        // Определяем, в какую функци возвращать выбранную запись
        var callbackFunctionObject = Mscrm.Utilities.createCallbackFunctionObject('returnLookupItems', Mscrm.Utilities, [null, null], false);
 
        // Открываем лукап
        LookupObjectsWithCallback(callbackFunctionObject, null, "single", objectCode, 0, null, "", "0", null, null, null, null, null, viewId, [customView], null, null, null, null, "1", "1", "1", null, null, null);
    }
</script>
</html>

Что тут у нас есть:

  • Сначала мы определяем Представление для открываемого лукапа.
  • Далее привязываем обработчик ответа лукапа.
  • Ну, и последней строкой открвыаем сам лукап.

Примечания:

  • Если в функции LookupObjectsWithCallback поменять параметр single на multi, то Вы сможете выбрать множество записей в лукапе.
  • Все параметры функции LookupObjectsWithCallback:
    LookupObjectsWithCallback(
        callbackReference,
        lookupField,
        lookupStyle, // "single" or "multi"
        lookupTypes,
        lookupBrowse,
        bindingColumns,
        additionalParams,
        showNew, // "0" or "1"
        showProp,
        bPopulateLookup,
        defaultType,
        searchString,
        dataProviderOverride,
        defaultViewId,
        customViews,
        filterRelationshipId,
        rId,
        rType,
        rDependAttr,
        allowFilterOff,
        disableQuickFind,
        disableViewPicker,
        viewsIds,
        additionalFetchFilter,
        additionalFetchFilterTypes
    );
    


Комментарии (0)

*

code