Обновление различных типов данных через 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); }
можно использовать готовую библиотеку в которой есть все необходимые методы — SDK.JQuery