通过javascript检索网格中的fetchxml

时间:2017-09-14 16:15:43

标签: dynamics-crm dynamics-crm-online

这可能看起来有点奇怪,所以我会尝试提供一些背景信息。我的CRM上有一个功能,要求用户应该能够过滤视图,然后保存结果记录,以便单独的过程可以接收它们并定期处理它们,例如每日。

现在这里是捕获,他们希望这个过程在处理数据之前重新查询数据,所以基本上应该保存的是查询或过滤器而不是视图中的数据。

之前已经编写过一些javascript代码,可以像这样在子网格上动态设置fetchxml

Subgrid.getGrid().setParameter("fetchXml", fetchxml);

我虽然应该可以直接检索网格中的fetchxml

Subgrid.getGrid().getParameter("fetchXml");

然而,这不起作用,我似乎无法找到任何可以指向正确方向的文件或任何内容。我使用Developer工具来检查Mscrm.XrmControlGridWrapper的属性,但我找不到任何有用的东西..

如果有人知道如何使用javascript检索为子网格提供动力的fetchxml,那会非常有帮助吗?

修改

我刚刚发现我可以做到这一点

Subgrid.getGrid().getFilter().$3_1.GetParameter("fetchXml")

然后返回我想要的东西,但这只是尖叫的hacky和不支持。 $3_1的类型为[object (Mscrm.TurboGridControl)]

有没有办法以受支持的方式访问此对象?

2 个答案:

答案 0 :(得分:0)

对此有一些想法:

  1. 您可以检索SystemForm记录,然后解析FormXml以获取ViewId。然后,您可以从SavedQuery实体中检索视图,并获取FetchXML。以下是FormXml中ViewId的示例: enter image description here

  2. 您可以向实体添加布尔字段,当用户保存他们想要处理的集合时,您可以标记这些记录以供稍后批处理过程检索。

  3. 当用户识别出他们想要处理的集合时,您可以使用带有Guid列表的“in”运算符临时创建一个带有FetchXML的视图(SystemQuery或UserQuery),以识别要处理的确切记录。使用视图检索和处理记录后,批处理可以删除视图。我可能会习惯使用这种方法达到几十条记录。

  4. <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>
    
    1. 如果要避免通过在要处理的记录上设置布尔标志来更改修改信息,可以创建N:N链接实体并将所选记录关联到该实体的实例。

答案 1 :(得分:0)

您可以这样做:

  • 由于您拥有先前设置为fetchxml的过滤器的SubGrid,所以为什么不直接存储此变量。您可以将此变量保存在localStorage中,甚至保存在为此目的而创建的虚拟字段中。并在所需的过程中使用它。

  • 顺便说一句,获取fetchXml的受支持方法:Xrm.Page.getControl(gridControlName).getFetchXml()

希望这对您有帮助...