【问题标题】:How to delete entity and its dependencies programmatically?如何以编程方式删除实体及其依赖项?
【发布时间】:2023-03-26 10:22:01
【问题描述】:

我的客户要求我以编程方式删除自定义实体及其依赖项(防止删除此实体)。

我已经使用 RetrieveDependenciesForDeleteRequest 检索了自定义实体的依赖项。此请求为我提供了依赖项集合,必须在删除该自定义实体之前将其删除。

                RetrieveDependenciesForDeleteResponse resp =
                    (RetrieveDependenciesForDeleteResponse) service.Execute(req);

                //A more complete report requires more code
                foreach (Entity dependencyEntity in resp.EntityCollection.Entities)
                {
                    service.Delete(d.LogicalName, dependencyEntity.Id);
                }

现在我在这里面临的问题是 dependencyEntity.Id 始终为空 GUID,而不是有效的 GUID。

谁能帮我实现这个功能?

【问题讨论】:

  • 您要删除所有依赖项还是只删除依赖项?例如,如果要删除的实体有一个关系,它被用作对另一个实体的表单的查找,这是依赖关系,您必须在删除实体之前解决。大概您不想删除该实体或实体的表单(只是表单上的查找控件-顺便说一句,需要发布。)如果您知道没有此类依赖项(表单、视图、仪表板等),您' 可能会没事 - 如果不是,这将很难在代码中实现。因此,为什么 MSFT 还没有处理它。
  • 实际上我们已经删除了这个自定义实体的所有已知依赖项(关系、插件、视图等).. 但是当我们尝试从 UI 中删除这个实体时.. 它会显示弹出消息并说仍有一些依赖项..现在我们无法从 UI 中找到这些依赖项..所以我们考虑以编程方式将其删除。从 UI.. 它说有一些“SDK 消息处理步骤”类型的依赖项......但正如我所提到的,我们找不到它。
  • 这些将是插件步骤注册。您可以通过 UI 查看它们或启动 PluginRegistrationTool.exe 将它们删除。
  • 是的。我已经使用 PluginregistrationTool 注销了所有插件(插件步骤).. 但仍然遇到这个奇怪的问题。

标签: dynamics-crm microsoft-dynamics dynamics-crm-2015


【解决方案1】:

响应中的Entity 项仅充当数据传输对象。它们不是真实的实体。您正在寻找的是名为“dependentcomponentobjectid”的属性(这是一个 Guid 类型,而不是 EntityReference)。属性 "dependentcomponenttype" (OptionSetValue) 为您提供有关您正在处理的组件类型的线索。

请注意,依赖组件又可以是其他组件所依赖的必需组件。 (例如,工作流依赖于工作流活动,而工作流活动又依赖于插件程序集。)因此,强大的删除工具需要遵循递归策略。

【讨论】:

  • 如何迭代依赖项?不能使用依赖,因为依赖不是类,但是 MS 示例在 docs.microsoft.com/en-us/dotnet/api/… 中使用这种方法,使用 var 给了我逻辑名称依赖并且没有填充属性。奇怪。
猜你喜欢
  • 2021-06-12
  • 2019-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多