Разработка
08
Май
0

Deep Insert Technique

Обычно, при создании кодом родительских/дочерних записей, сначала создаются сами записи, а потом между ними устанавливаются отношения. И все это проходит минимум за две операции для каждой записи. Что, соответственно, увеличивает нагрузку на сервер. Но есть более эффективный подход.

Deep Insert Technique это метод, при котором множество родительских/дочерних записей создаются в одной операции.

Пример oData запроса:

// Объявляем Организацю
var account = new Object();
account.Name = "Sample Account";

// Объявляем Задачи
var task1 = new Object();
task1.Subject = "Sample Task 1";

var task2 = new Object();
task2.Subject = "Sample Task 2";

// Объявляем массив для хранения Задач
var tasks = new Array();
tasks.push(task1);
tasks.push(task2);

// Добавляем Задачи в Организацю, используя при этом имя связи
account.Account_Tasks = tasks;

// Переводим JS-объект в JSON формат
var jsonAccount = window.JSON.stringify(account);

var ODataPath = Xrm.Page.context.getClientUrl() + "/XRMServices/2011/OrganizationData.svc"

$.ajax({
    type: "POST",
    contentType: "application/json; charset=utf-8",
    datatype: "json",
    url: ODataPath + "/AccountSet",
    data: jsonAccount,
    beforeSend: function (XMLHttpRequest) {
        XMLHttpRequest.setRequestHeader("Accept", "application/json");
    },
    success: function (data, textStatus, XmlHttpRequest) { },
    error: function (XMLHttpRequest, textStatus, errorThrown) { alert(errorThrown); }
});

Здесь мы:

  • Создаем запись Организации;
  • Объявляем две записи Задач и помещаем их в массив;
  • Используя название связи добавляем массив задач в запись Организации;
  • Выполняем запрос.

Аналогичным образом можно создавать и другие связанные записи.


Примечание: Deep Insert Techniqueс работает с любой стороны связи. В предыдущем примере создавались Задачи в контексте Организации, а можно создать Организацию в контексте Задачи. Чтобы инвертировать запрос необходимо обратится к набору TaskSet.

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

*

code