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"
Добрый день!
У меня вопрос: я использую Xrm.Utility.openEntityForm
Как мне связать эти записи дочернюю и родительскую запись? Киньте ссылку для чайников.