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

问题描述 投票:0回答:4

我正在使用 crm 2016,我需要使用插件克隆记录,谷歌搜索后我发现我需要使用

Microsoft.Xrm.Client
来保存
clone()
功能 - 由于 MS 重组,该功能不在 2016 SDK 中。该库位于 2015 SDK 中。
我的问题是:
1. 如果我从 CRM 2015 获取该库并在 2016 年使用它,它会受到支持吗?
2. 如果不支持,我可以选择在服务器端克隆记录吗?

dynamics-crm dynamics-crm-2016 cloning
4个回答
2
投票

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

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

EntityReference
OptionSetValue
Money
需要您特别注意。

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


2
投票

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

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


1
投票

微软公告称:

我们还从 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 向后兼容性

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

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

您可以从客户端/服务器端执行/调用此操作,无论您想要在哪里。


0
投票

虽然 CRM 不提供开箱即用的简单克隆功能,但您可以查看这个漂亮的解决方案。 Inogic 将其称为“Click2Clone”。 以下是有关它如何让您的生活更轻松的独家新闻:

进行设置:首先下载 Click2Clone 并在 Dynamics CRM 中
    进行设置
  1. 选择您的记录:选择您想要克隆的记录 - 它适用于任何实体,无论是标准实体还是更自定义的实体。
  2. 选择您的克隆风格:决定是否要按照您喜欢的方式携带相关记录并调整特定字段。
  3. 点击克隆按钮:一切就绪后,现在是 Click2Clone 的时候了。它会完成繁重的工作,创建原始记录的副本,并附带您选择的所有选项。 老实说,这对于 CRM 用户来说可能会改变游戏规则,不仅可以节省您的时间,还可以让您在处理类似记录时更加灵活。 您可以在 Inogic 网站上探索有关
  4. Click2Clone 的更多信息
  5. – 有详细的文档来指导您完成整个过程。
  6. 谢谢!

© www.soinside.com 2019 - 2024. All rights reserved.