如何在Dynamics crm 2016中克隆记录(服务器端)?

时间:2018-04-25 09:26:36

标签: dynamics-crm dynamics-crm-2016 cloning

我正在使用crm 2016 ,我需要使用插件克隆记录,在谷歌搜索后我发现我需要使用clone()来保存input { kafka { bootstrap_servers => 'localhost:9092' topics => 'quickstart-data' } } output { elasticsearch { hosts => [ 'elasticsearch'] user => 'elastic' password => 'changeme' } stdout {} } 函数 - 由于MS重组,这不是2016年的SDK。这个库是2015年的SDK 我的问题是:
1.如果我从CRM 2015中获取该库并在2016年使用它,是否会受到支持? 2.如果不支持我在服务器端克隆记录的选项是什么?

3 个答案:

答案 0 :(得分:1)

Clone()中的方法Microsoft.Xrm.Client仅在内存中创建Entity对象的副本。它不会在CRM数据库中创建副本。当您需要在数据库中创建副本时,只需实例化一个新的Entity对象并将其传递给Create()接口的IOrganizationService方法。

当您真正需要MSDN所述的深度克隆时,您可以考虑自己编写一个。在大多数情况下,您只需要复制属性集合中的对象。在这些对象中,只有引用类型EntityReferenceOptionSetValueMoney需要您特别注意。

我不建议使用已弃用的库。

答案 1 :(得分:0)

微软公告称:

  

我们还从CRM 2016(8.x)SDK客户端删除了Microsoft.Xrm.Client,因为它不符合OAuth更改,并将其替换为Microsoft.Xrm.Tooling.Connector。您可以使用当前的Microsoft Dynamics 365软件开发工具包(SDK)将Microsoft Dynamics CRM重新访问版本6.x以进行身份​​验证和消息传递。

Dynamics 365 SDK Backwards Compatibility

您仍然可以在旧版SDK的项目中使用Microsoft.Xrm.Client.dll,这可能会支持一段时间。

但我建议使用自定义Action,将父记录作为EntityReference输入参数,检索父记录数据+所需的相关实体&在Action中手动创建(克隆)子记录+相关实体记录。

您可以从客户端/服务器端执行/调用此Action,无论您想要什么。

答案 2 :(得分:0)

我们使用以下帮助方法来克隆实体 - 这是原始版本的更新版本,它正确克隆了引用类型,并排除了系统属性

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数据库中创建克隆实体,这取决于您。