Как клонировать запись (на стороне сервера) в Dynamics crm 2016? - PullRequest
0 голосов
/ 25 апреля 2018

Я использую crm 2016 , и мне нужно клонировать запись с помощью плагина, после поиска в Google я обнаружил, что мне нужно использовать Microsoft.Xrm.Client с функцией clone(), чего нет в 2016 годуSDK из-за реорганизации MS. Эта библиотека находится в SDK 2015 года.
Мои вопросы:
1. Если я возьму эту библиотеку из CRM 2015 и буду использовать ее в 2016 году, будет ли она поддерживаться?
2.Если это не поддерживается, каковы мои варианты клонирования записи на стороне сервера?

Ответы [ 3 ]

0 голосов
/ 25 апреля 2018

Метод Clone() в Microsoft.Xrm.Client создает только копию объекта Entity в памяти.Он не создает копию в базе данных CRM.Когда вам нужно создать копию в базе данных, просто создайте новый объект Entity и передайте его методу Create() интерфейса IOrganizationService.

Когда вам действительно нужен глубокий клон, как описано в MSDN Вы можете написать его самостоятельно.В большинстве сценариев вам нужно будет только скопировать объекты в коллекции атрибутов.Из этих объектов только ссылочные типы EntityReference, OptionSetValue и Money потребуют вашего особого внимания.

Я бы не советовал использовать устаревшие библиотеки.

0 голосов
/ 26 апреля 2018

Мы используем следующий вспомогательный метод для клонирования сущности - это обновленная версия оригинала, которая правильно клонирует ссылочные типы и исключает системные атрибуты

public static Entity CloneEntitySandbox(Entity entityToClone)
    {
        var newEntity = new Entity(entityToClone.LogicalName);

        var systemAttributes = new List<string>();
        systemAttributes.Add("createdon");
        systemAttributes.Add("createdby");
        systemAttributes.Add("modifiedon");
        systemAttributes.Add("modifiedby");
        systemAttributes.Add("owninguser");
        systemAttributes.Add("owningbusinessunit");


        foreach (var attribute in entityToClone.Attributes
            .Where(x => x.Key != entityToClone.LogicalName + "id")
            .Where(x => !systemAttributes.Contains(x.Key))) 
        {

            switch (attribute.Value.GetType().Name)
            {
                case "Money":
                    var m = attribute.Value as Money;
                    newEntity[attribute.Key] = new Money(m.Value);
                    break;
                case "EntityReference":
                    var er = attribute.Value as EntityReference;
                    newEntity[attribute.Key] = new EntityReference(er.LogicalName, er.Id);
                    break;
                case "OptionSetValue":
                    var os = attribute.Value as OptionSetValue;
                    newEntity[attribute.Key] = new OptionSetValue(os.Value);
                    break;
                default:
                    newEntity[attribute.Key] = attribute.Value;
                    break;
            }

        }

        return newEntity;
    }

Обратите внимание, что это не выполняет сохранение для создания клонированной сущности в базе данных CRM, это ваше дело.

0 голосов
/ 25 апреля 2018

Объявление Microsoft гласит:

Мы также удалили Microsoft.Xrm.Client из клиента SDK CRM 2016 (8.x), поскольку он не соответствовал изменениям OAuth, и заменили его на Microsoft.Xrm.Tooling.Connector. Вы можете использовать текущий комплект средств разработки программного обеспечения Microsoft Dynamics 365 (SDK) для доступа к Microsoft Dynamics CRM до версии 6.x как для аутентификации, так и для обмена сообщениями.

Dynamics 365 SDK Обратная совместимость

Вы все еще можете использовать Microsoft.Xrm.Client.dll в своем проекте из более старого SDK, возможно, это поддерживается некоторое время.

Но я бы порекомендовал перейти к пользовательскому действию, приняв родительскую запись в качестве входного параметра EntityReference, получить данные родительской записи + необходимые связанные сущности и вручную создать (клонировать) дочернюю запись + записи связанных сущностей в Action.

Вы можете выполнить / вызвать это Действие со стороны клиента / сервера, где вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...