Кастомизация
22
Янв
1

Обновление различных типов данных через oData

Нижеследующий JS-код показывает как обновить (на примере записи Организации) различные типы данных (текстовые поля, пиклисты, lookup’ы) используя Odata Service CRM 2011, jQuery и JSON.

Для его работы Вам понадобятся библиотеки jQuery и json2.

function updateOptionset() {
    var entity = "Account"; // Имя объекта
    var id = Xrm.Page.data.entity.getId(); // Получаем GUID текущий записи

    // Формируем "пакет" обновлений
    var changes = {
        Telephone1: "123456789", // Текстовое поле
        Address1_AddressTypeCode: { Value: 3 }, // Пиклист
        ParentAccountId: { // Lookup
            Id: "A0B6D65B-C715-E111-B3AA-000C29CDB72E", // GUID записи которую мы хотим подставить в лукап
            LogicalName: "account"
        }
    };    
    /*
    Обновляем запись передаем следующие параметры:
    - ID записи;
    - "Пакет" изменений;
    - Имя объекта (из которого формируется набор данных oData);
    - Имя функции вызываемой при успешном выполнении обновления
    - Имя функции вызываемой при возникновении ошибки
    */
    updateRecord(id, changes, entity + "Set", updateAccountCompleted, errorHandler);
}

function updateRecord(id, entityObject, odataSetName, successCallback, errorCallback) {
    var ODATA_ENDPOINT = Xrm.Page.context.getServerUrl() + "/XRMServices/2011/OrganizationData.svc"; // Конечная точка OData

    // Вызываем асинхронную функцию AJAX для обновления записи CRM через OData
    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        datatype: "json",
        data: window.JSON.stringify(entityObject), // Парсим "пакет" обновлений
        url: ODATA_ENDPOINT + "/" + odataSetName + "(guid'" + id + "')",
        beforeSend: function (XMLHttpRequest) {
            XMLHttpRequest.setRequestHeader("Accept", "application/json"); // Определяем заголовок, чтобы результат был возвращен в формате JSON. 
            XMLHttpRequest.setRequestHeader("X-HTTP-Method", "MERGE"); // Определяем HTTP метод MERGE чтобы обновить только то что мы отправим.
        },
        success: function (data, textStatus, XmlHttpRequest) {
            // MERGE не возвращает никаких данных, поэтому мы добавляем id к объекту данных и передаем его в функцию обратного вызова
            data = new Object();
            data.id = id;
            successCallback(data, textStatus, XmlHttpRequest);
        },
        error: function (XmlHttpRequest, textStatus, errorThrown) {
            errorHandler(XmlHttpRequest, textStatus, errorThrown);
        }
    });
}

// Функция вызываемая при неудачном обновлении
function errorHandler(xmlHttpRequest, textStatus, errorThrow) {
    alert("Error : " + textStatus + ": " + xmlHttpRequest.statusText);
}

// Функция вызываемая при успешном обновлении
function updateAccountCompleted(data, textStatus, XmlHttpRequest) {
    alert("Обновлена Организация с id = " + data.id);
}


Комментарии (1)
  • Дмитрий 22.01.2012

    можно использовать готовую библиотеку в которой есть все необходимые методы — SDK.JQuery

*

code