Несколько потоков в Интернете предлагают сделать это с помощью пользовательских плагинов, но мы хотели добиться того же с помощью рабочих процессов или 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.

  1. Получите идентификатор записи сущности проекта при сохранении.
  2. Получите идентификатор объекта прогноза, из которого необходимо выбрать вложения.
  3. Получите все записи из объекта «Аннотация», где идентификатор объекта соответствует идентификатору из шага 2.
  4. Обновите 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);
}
}
}

Наряду с этим мы использовали Плагин диспетчера вложений, который помогает хранить данные документов в больших двоичных объектах и ​​дает представление в виде сетки для просмотра всех заметок / вложений.

Надеюсь, поможет.

-Вижай