Обработка REST-запросов с помощью jQuery
На предыдущем занятии мы рассматривали, как с помощью JS обработать ответ REST-запроса. А сейчас рассмотрим несколько более продвинутый способ… помощью jQuery.
Для всех примеров нам понадобятся две библиотеки, загруженные в CRM в качестве Веб-ресурсов и подключенные на все формы, где используется нижеследующие примеры кода:
- jQuery (локальная копия jquery-1.6.3.min);
- json2 (локальное зеркало)
Пример #1
Цель: вернуть всех пользователей CRM.
if (typeof (MyFunctionsPack) == "undefined") { MyFunctionsPack = {}; } MyFunctionsPack.MyFunctions = { getFullName: function () { var oDataSelect = Xrm.Page.context.getServerUrl() + "/XRMServices/2011/OrganizationData.svc/SystemUserSet?$select=FullName"; $.ajax({ type: "GET", contentType: "application/json; charset=utf-8", datatype: "json", url: oDataSelect, beforeSend: function (XMLHttpRequest) { XMLHttpRequest.setRequestHeader("Accept", "application/json"); }, success: function (data, textStatus, XmlHttpRequest) { var records = data.d.results; for (var key in records) { alert(" FullName : { " + records[key].FullName + " }"); } }, error: function (xmlHttpRequest, textStatus, errorThrown) { alert("Status: " + textStatus + "; ErrorThrown: " + errorThrown); } }); } }
Код довольно простой: объявляем переменную с URL конечной точки REST, вызываем jQuery’ивскую функцию ajax, в которой формируем, отправляем запрос и обрабатываем ответ.
Пример #2
Цель: вернуть одного пользователя из CRM.
if (typeof (MyFunctionsPack) == "undefined") { MyFunctionsPack = {}; } MyFunctionsPack.MyFunctions = { getFullName: function () { var oDataSelect = Xrm.Page.context.getServerUrl() + "/XRMServices/2011/OrganizationData.svc/SystemUserSet(guid'3DCC5D39-F9D9-E011-AB01-000C29CDB72E')?$select=FullName,Address1_Telephone1,PersonalEMailAddress"; $.ajax({ type: "GET", contentType: "application/json; charset=utf-8", datatype: "json", url: oDataSelect, beforeSend: function (XMLHttpRequest) { XMLHttpRequest.setRequestHeader("Accept", "application/json"); }, success: function (data, textStatus, XmlHttpRequest) { var record = data.d; alert( " FullName = { " + record.FullName + " }\n" + " Telephone = { " + record.Address1_Telephone1 + " }\n" + " Email = { " + record.PersonalEMailAddress + " }" ); }, error: function (xmlHttpRequest, textStatus, errorThrown) { alert("Status: " + textStatus + "; ErrorThrown: " + errorThrown); } }); } }
Код почти полная аналогия предыдущего, за тем исключением, что полученный от конченой точки ответ содержит данные одной записи (а не массив записей).
Пример #3
Цель: создать запись Организации.
if (typeof (MyFunctionsPack) == "undefined") { MyFunctionsPack = {}; } MyFunctionsPack.MyFunctions = { createAcc: function () { var oDataCreate = Xrm.Page.context.getServerUrl() + "/XRMServices/2011/OrganizationData.svc/AccountSet"; var CRMObject = new Object(); CRMObject.Name = "TEST"; CRMObject.Telephone1 = "123"; CRMObject.Fax = "456"; var jsonEntity = window.JSON.stringify(CRMObject); $.ajax({ type: "POST", contentType: "application/json; charset=utf-8", datatype: "json", url: oDataCreate, data: jsonEntity, beforeSend: function (XMLHttpRequest) { XMLHttpRequest.setRequestHeader("Accept", "application/json"); }, success: function (data, textStatus, XmlHttpRequest) { var NewCRMRecordCreated = data["d"]; alert(" CRM GUID created: { " + NewCRMRecordCreated.AccountId + " }"); }, error: function (XMLHttpRequest, textStatus, errorThrown) { alert("Status: " + textStatus + "; ErrorThrown: " + errorThrown); } }); } }
Ну, тут два интересных отличия:
- Запрос отправляется методом POST;
- … и содержит в себе объект CRMObject, переведенных в нотацию JSON. Данные объект описывает поля создавай мой записи Организации.
Как видите, с использование jQuery код стал немного короче и намного читабельней по сравнению с традиционным вызовом REST-точек . Что не может не радовать 🙂 .