如何在 RetrieveMultiple 消息中使用 Dynamics CRM 插件获取当前实体详细信息?

How to get current Entity detail using Dynamics CRM plugins in RetrieveMultiple message?

我在自定义实体之一的 RetrieveMultiple 消息中添加了一个插件。现在,该自定义实体的子网格被放置在 AccountsContacts 上。现在我想让这个插件执行以下操作:

  1. 对联系人执行
  2. 限制插件在帐户上执行
  3. 检索联系人的上下文

下面是我的源代码: if (context.MessageName.Equals("RetrieveMultiple")) { Guid budgetID = (Guid)context.PrimaryEntityId; }

以上源代码return 没有 guid。正如 RetrieveMultiple 上下文中的 运行 一样。如何获取实体上下文?

In general, it is not recommended to register plug-ins for these messages due to the risks associated with slowing down the requests to return an entity record or records from various entry points.

这是提供更多说明的官方文档。 Link

现在您希望从此 retreivemultiple 消息中获取联系人的 Guid,这不可能是 RetreiveMultiple 独立于任何父级或关联实体工作的原因,还有一个示例,如视图上的 retreivemultiple 运行 以及如何您可以从 View 中找到任何联系人指南等。因此你不会Guid。

如果您将插件注册为自定义实体的 retrievemultiple,它不会考虑您的 gird 来自哪个实体,原因与上述相同。因此,您将无法根据其他实体对其进行限制。

我宁愿建议您尝试不同的方式来实现您想要的要求。 也许 JS 可以派上用场,这取决于您希望实现的目标。

另一种使用 RetreiveMultiple 的方法

当您使用 RetreiveMultiple 并调试您的插件时,您将获得 FetchxmlExpression 查询,即基于查询的 CRM returns 数据。当您将此查询转换为 queryexpression 时,您将看到不同的查询。

例如:如果您的自定义实体是 1:N 或 N:1 与帐户或联系人相关,那么在您的查询中您将有类似 Select * 来自 customentity where accountid="abcd" 要么 Select * 来自 customentity where contact="abcd"

如果您有 N:N 关系,那么您的查询将向其添加 link 实体,而不是像上面那样直接过滤。

现在您可以决定查询是否对您感兴趣,即帐户或联系方式(如果是) 您可以根据您的关系从过滤器或 linked 中获取 guid,然后更改您的 fetchxml 查询以仅显示相关记录(如果不按原样进行查询的话)。

同样,如果您没有找到来自任何记录的查询,则按原样放弃查询。

但是以上所有过程都需要一些调试和多次调用服务器。

另外w.r.t评论中提到的Js看看下面的帖子可能会对你有所帮助。

https://community.dynamics.com/crm/f/microsoft-dynamics-crm-forum/307291/is-there-a-supported-method-to-filter-subgrid-based-on-a-main-form-lookup-v9-online