通过 javascript 在网格中检索 fetchxml
Posted
技术标签:
【中文标题】通过 javascript 在网格中检索 fetchxml【英文标题】:Retrieve the fetchxml in grid via javascript 【发布时间】:2018-02-23 17:24:15 【问题描述】:这可能看起来有点奇怪,所以我会尝试提供一些背景信息。我的 CRM 上有一个功能,它要求用户应该能够过滤视图,然后保存结果记录,以便单独的进程可以提取它们并定期处理它们,例如每天。
现在要注意了,他们希望这个进程在处理数据之前重新查询数据,所以基本上应该保存的是查询或过滤器,而不是视图中的数据。
之前编写了一些 javascript 代码,可以像这样在子网格上动态设置 fetchxml
Subgrid.getGrid().setParameter("fetchXml", fetchxml);
虽然在网格中检索 fetchxml 应该相当简单
Subgrid.getGrid().getParameter("fetchXml");
但这不起作用,我似乎找不到任何文档或任何可以为我指明正确方向的东西。我已经使用开发者工具检查了Mscrm.XrmControlGridWrapper
的属性,但我找不到任何有用的东西..
如果有人知道我如何使用 javascript 检索为子网格提供动力的 fetchxml,那会很有帮助吗?
编辑
我刚刚发现我可以做到这一点
Subgrid.getGrid().getFilter().$3_1.GetParameter("fetchXml")
这正是我想要的,但这只是骇人听闻和不受支持的尖叫。
$3_1
的类型为 [object (Mscrm.TurboGridControl)]
有没有一种方法可以让我以受支持的方式访问该对象?
【问题讨论】:
【参考方案1】:对此的一些想法:
您可以检索 SystemForm 记录,然后解析 FormXml 以获取 ViewId。然后您可以从 SavedQuery 实体中检索视图,并获取 FetchXML。下面是 FormXml 中 ViewId 的示例:
您可以向实体添加一个布尔字段,当用户保存他们想要处理的集合时,您可以标记这些记录以供以后的批处理检索。
当用户确定他们要处理的集合时,您可以使用 FetchXML 临时创建一个视图(SystemQuery 或 UserQuery),并使用带有 Guid 列表的“in”运算符来确定要处理的确切记录。使用视图检索和处理记录后,批处理可以删除视图。使用这种方法最多可以处理几十条记录,我可能会很自在。
<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false"> <entity name="account"> <filter type="and"> <condition attribute="accountid" operator="in"> <value>A1CC84F2-BE0D-E711-8104-00155D6FD705</value> <value>A3CC84F2-BE0D-E711-8104-00155D6FD705</value> <value>A5CC84F2-BE0D-E711-8104-00155D6FD705</value> </condition> </filter> </entity> </fetch>
-
如果您想通过在要处理的记录上设置布尔标志来避免更改修改信息,您可以创建一个 N:N 链接实体并将所选记录与该实体的实例相关联。
【讨论】:
【参考方案2】:你可以这样做:
既然你有之前设置为SubGrid
的过滤器的fetchxml
,为什么不直接存储这个变量。您可以将此变量保存在 localStorage 中,甚至可以保存在为此目的创建的虚拟字段中。并在所需的过程中使用它。
顺便说一句,获取 fetchXml 的支持方式:Xrm.Page.getControl(gridControlName).getFetchXml()
希望这会有所帮助...
【讨论】:
以上是关于通过 javascript 在网格中检索 fetchxml的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript、asp.net 和 Sql Server