Разработка
19
Сен
0

Обработка REST-запросов с помощью jQuery

На предыдущем занятии мы рассматривали, как с помощью JS обработать ответ REST-запроса. А сейчас рассмотрим несколько более продвинутый способ… помощью jQuery.
Для всех примеров нам понадобятся две библиотеки, загруженные в CRM в качестве Веб-ресурсов и подключенные на все формы, где используется нижеследующие примеры кода:

Пример #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-точек . Что не может не радовать 🙂 .

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

*

code