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



我正在使用CRM 2016 ,并且我需要使用插件克隆记录,在谷歌搜索后,我发现我需要使用持有clone()函数的Microsoft.Xrm.Client - 由于MS的重组而不是在2016年SDK。此lib在2015年SDK。
我的问题是:
1.如果我从CRM 2015中拿出该释放,并在2016年使用它吗?
2.如果不支持它,我可以选择在服务器端克隆记录?

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

如MSDN所述,您确实需要一个深的克隆时,您可以考虑自己写一个。在大多数情况下,您只需要在属性集合中复制对象即可。在这些对象中,仅参考类型EntityReferenceOptionSetValueMoney需要您的特别注意。

我不建议使用折衷的库。

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

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

Microsoft公告说:

我们还从CRM 2016(8.X(SDK客户端中删除了Microsoft.xrm.client,因为它不符合OAuth的更改,并用Microsoft.xrm.tooling.connector替换了它。您可以使用当前的Microsoft Dynamics 365软件开发套件(SDK(来访问Microsoft Dynamics CRM返回6.x版,以获取AUTH和MEDAGIDE。

Dynamics 365 SDK向后兼容

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

,但我建议采用自定义操作,将父记录作为EntityReference输入参数,检索父记录数据 所需的相关实体&amp;手动创建(克隆(儿童记录 相关实体记录。

您可以从客户/服务器端执行/调用此操作。

相关内容

  • 没有找到相关文章

最新更新