Несколько потоков в Интернете предлагают сделать это с помощью пользовательских плагинов, но мы хотели добиться того же с помощью рабочих процессов или javascript. С рабочими процессами мы не смогли найти способ, поскольку они не работают с заметками.
После некоторого анализа стало ясно, что все примечания и вложения хранятся в объекте «Аннотация» с «ObjectId» в качестве основного идентификатора хранящейся записи. Вы можете просмотреть все аннотации в odata по этой ссылке -
https://‹‹имя экземпляра››.api.crm.dynamics.com/api/data/v9.1/annotations
На этом изображении этот документ был частью моей сущности с идентификатором записи — ac35f1e4–85fc-e811-a972–000d3a30d104.
Поскольку нашим требованием было просто переместить документы из первого объекта в другой, мы подумали о том, чтобы просто обновить ObjectId в этом объекте первичным идентификатором окончательной записи, и это сработало как шарм.
Примеры кода —
Предположим, у нас есть 2 сущности — Прогноз и Проект. Прогноз может быть преобразован в проект. После того, как это будет сделано, мы хотели переместить все вложения и заметки из прогноза в запись проекта. Таким образом, в событии загрузки формы проекта мы можем запустить наш javascript, поскольку OnLoad срабатывает при загрузке, а также при сохранении формы. мы используем CRM Javascript sdk для операций CRUD.
- Получите идентификатор записи сущности проекта при сохранении.
- Получите идентификатор объекта прогноза, из которого необходимо выбрать вложения.
- Получите все записи из объекта «Аннотация», где идентификатор объекта соответствует идентификатору из шага 2.
- Обновите ObjectId в каждой записи аннотации с идентификатором шага 1.
функция handleDocuments() {
// Идентификатор объекта проекта
var projectEntityId = Xrm.Page.data.entity.getId();
if (projectEntityId)
{
var прогноз = Xrm.Page.getAttribute( "src_relatedforecastid").getValue();
if(прогноз)
{
// Идентификатор объекта прогноза
var прогнозId = Xrm.Page.getAttribute(“src_relatedforecastid”).getValue()[0].id;
var select = “$select=AnnotationId”;
var filter = "$filter=ObjectId/Id eq (guid'"+forecastId+"')";
var query = select+"&"+filter;
// Все записи объекта Annotation, соответствующие идентификатору прогноза.
SDK.REST.retrieveMultipleRecords("Annotation", query, retrieveAttachmentSuccess, errorHandler, retrieveAttachmentComplete);
}
}
}
function retrieveAttachmentSuccess(returnData){
if (returnData != null && returnData.length › 0) {
var i;
var intervalId = Xrm.Page.getAttribute («src_relatedprojectid»).getValue()[0].id;
for (i = 0; i ‹ returnData.length; i++)
{
// Обновить объект аннотации с идентификатором проекта.
var data = {};
data.ObjectId = {};
data.ObjectId.Id = Xrm.Page.data.entity.getId( );
data.ObjectId.LogicalName = «src_sourcingproject»;
SDK.REST.updateRecord(returnData[i].AnnotationId, data, «Annotation», function() {}, errorHandler);
}
}
}
Наряду с этим мы использовали Плагин диспетчера вложений, который помогает хранить данные документов в больших двоичных объектах и дает представление в виде сетки для просмотра всех заметок / вложений.
Надеюсь, поможет.
-Вижай