Разработка
03
Сен
1

Associate/Diassociate записей при помощи JS и oData

Сегодня рассмотрим как связывать и развязывать записи при помощи JS и oData.

Для связывания двух записей нам понадобится следующая функция и библиотека json2:

function associateRecords(firstEntity, firstEntityId, secondEntity, secondEntityId, relationshipName) {
    var assocReq = new XMLHttpRequest();
    assocReq.open("POST", Xrm.Page.context.getServerUrl() + "/XRMServices/2011/OrganizationData.svc/" + firstEntity + "Set(guid'" + firstEntityId + "')/$links/" + relationshipName, true); // Синхронно
    assocReq.setRequestHeader("Accept", "application/json");
    assocReq.setRequestHeader("Content-Type", "application/json; charset=utf-8");
    assocReq.onreadystatechange = function () {
        if (this.readyState == 4) {
            if (this.status == 204 || this.status == 1223 || this.status == 201) {
                alert("Записи связаны.");
            } else {
                alert("Ошибка : " + this.status + "; " + this.statusText + "; " + this.responseText);
            }
        }
    }
    var JSONEntity = {};
    JSONEntity.uri = Xrm.Page.context.getServerUrl() + "/XRMServices/2011/OrganizationData.svc/" + secondEntity + "Set(guid'" + secondEntityId + "')";
    assocReq.send(JSON.stringify(JSONEntity));
}

Эта функция принимает пять параметров:

  • Имя первого связываемого объекта;
  • GUID первой связываемой записи;
  • Имя второго связываемого объекта;
  • GUID второй связываемой записи;
  • Название связи.

Например так:

"Contact", "70E25FE5-73E2-E111-B2D5-000C29CDB72E", "Account", "1AE25FE5-73E2-E111-B2D5-000C29CDB72E", "new_contact_account"



А для развязывания можно использовать следующую функцию (тут json2 не нужна):

function disassociateRecords(firstEntity, firstEntityId, secondEntityId, relationshipName) {
    var disassocReq = new XMLHttpRequest();
    disassocReq.open("POST", Xrm.Page.context.getServerUrl() + "/XRMServices/2011/OrganizationData.svc/" + firstEntity + "Set(guid'" + firstEntityId + "')/$links/" + relationshipName + "(guid'" + secondEntityId + "')", true); // Синхронно
    disassocReq.setRequestHeader("Accept", "application/json");
    disassocReq.setRequestHeader("Content-Type", "application/json; charset=utf-8");
    disassocReq.setRequestHeader("X-HTTP-Method", "DELETE");
    disassocReq.onreadystatechange = function () {
        if (this.readyState == 4) {
            if (this.status == 204 || this.status == 1223 || this.status == 201) {
                alert("Записи развязаны.");
            } else {
                alert("Ошибка : " + this.status + "; " + this.statusText + "; " + this.responseText);
            }
        }
    }
    disassocReq.send();
}

Принимает она на один параметр меньше:

  • Имя первого связываемого объекта;
  • GUID первой связываемой записи;
  • GUID второй связываемой записи;
  • Название связи.

Пример:

"Contact", "70E25FE5-73E2-E111-B2D5-000C29CDB72E", "1AE25FE5-73E2-E111-B2D5-000C29CDB72E", "new_contact_account"


Комментарии (1)
  • Igor 03.09.2012

    Добрый день!

    У меня вопрос: я использую Xrm.Utility.openEntityForm
    Как мне связать эти записи дочернюю и родительскую запись? Киньте ссылку для чайников.

*

code