Разработка
02
Сен
3

Создание записи через JS и конечную точку oData

Рассмотрим парочку способов создания записи через конечную точку oData. Начнем с самого наивного способа – JS + JSON:

function newRecord() {
    // Создаем объект для создания новой записи
    var newAcc = {};
    newAcc.Name = "Суперконтора";
    newAcc.Description = "Длинное описание...";
    newAcc.PrimaryContactId = { Id: "{80E25FE5-73E2-E111-B2D5-000C29CDB72E}", LogicalName: "contact", Name: "George Sullivan (sample)" }; // Задаем лукап
    newAcc.PreferredContactMethodCode = { Value: 2 }; // Пиклист
    newAcc.Revenue = { Value: "2000000.00" }; // Поле валюты
    newAcc.DoNotPhone = true; // Битовое поле
    // newAcc.new_DecimalField = 200.00.toString(); // Число с плавующей точкой

    // Формируем oData-запрос
    var oDataReq = Xrm.Page.context.getServerUrl() + "/XRMServices/2011/OrganizationData.svc/AccountSet";

    // Отправляем oData-запрос
    var createRec = new XMLHttpRequest();
    createRec.open("POST", oDataReq, true); // Синхронно
    createRec.setRequestHeader("Accept", "application/json");
    createRec.setRequestHeader("Content-Type", "application/json; charset=utf-8");
    createRec.onreadystatechange = function () { createCallBack(this); };
    createRec.send(JSON.stringify(newAcc));
}

function createCallBack(createReturnValue) {
    if (createReturnValue.readyState == 4 /* complete */) {
        if (createReturnValue.status == 201) {
            var createdRecord = JSON.parse(createReturnValue.responseText).d;
            if (createdRecord != null) {
                if (createdRecord.Name != null) {
                    alert("Создана запись с именем \"" + createdRecord.Name + "\" и Id \"" + createdRecord.AccountId + "\".");
                }
            }
        } else {
            alert("Ошибка во время создания записи.");
        }
    }
}

Тут две функции. В первой мы формируем запрос, а вторая обрабатывает ответ.


Тот же фокус с помощью JS + jQuery + JSON:

function createRec() {
    // Create an object to represent an Account record and set properties
    var acc = new Object();
    acc.Name = "Суперконтора"; // Текстовое поле
    acc.PrimaryContactId = { Id: "{80E25FE5-73E2-E111-B2D5-000C29CDB72E}", LogicalName: "contact", Name: "George Sullivan (sample)" }; // Лукап
    acc.PreferredContactMethodCode = { Value: 2 }; // Пиклист
    acc.Revenue = { Value: "2000000.00" }; // Валюта
    acc.DoNotPhone = true; // Битовое поле    
    // acc.new_DecimalField = 200.00.toString(); // Число с плавующей точкой

    // Парсим объект в JSON
    var jsonEntity = window.JSON.stringify(acc);

    // Формируем 
    var oDataReq = Xrm.Page.context.getServerUrl() + "/XRMServices/2011/OrganizationData.svc/" + "AccountSet";

    // Асинхронно создем запись
    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        datatype: "json",
        url: oDataReq,
        data: jsonEntity,
        beforeSend: function (XMLHttpRequest) {
            XMLHttpRequest.setRequestHeader("Accept", "application/json");
        },
        success: function (data, textStatus, XmlHttpRequest) {
            createComplete(data.d, textStatus, XmlHttpRequest);
        },
        error: function (XmlHttpRequest, textStatus, errorThrown) {
            alert("Ошибка при создании записи: " + errorThrown);
        }
    });
}

function createComplete(data, textStatus, XmlHttpRequest) {
    alert("Создана запись с Id: " + data.AccountId.toString());
}
Комментарии (3)
  • Ion 02.09.2012

    У меня как у начинающего консультанта вопрос: могу я использовать пример JS + JSON для вызова этой функции через кастомную кнопку и создании новой дочерней записи в которую буду копироваться данных из родительской?
    Я так понимаю надо будет использовать Rest запрос для того, чтобы копировать значение полей и присвоит их дочерней записи, правильно?
    Или какая логика?

  • Ion 02.09.2012

    Пример нашел http://ashwaniashwin.wordpress.com/2013/06/13/xrm-utility-open-entity-forms-and-html-webresource-in-dynamics-crm-2011/, но вот как в Looup записать ссылку на Родиительскую сущность?
    У меня есть примере Rest запроса, но тут не могу уловить как.

  • slivka_83 02.09.2012

    По-моему это ваш случай: http://mmcrm.ru/?p=4900

*

code