在Dynamics 365中使用子网格上的自定义视图进行查找时出现的问题

时间:2018-11-09 21:57:02

标签: javascript dynamics-crm dynamics-365 subgrid lookupfield

我正在处理一个表单,其中某个部分的可见性基于表单上的特定字段。有问题的部分还具有一个子网格(“ WorkingDataRequestsGrid”)。显示字段的逻辑运行良好。但是,它没有按预期进行过滤。子网格使用我专门为此功能设置的视图。它显示来自同一实体的具有特定类型和状态的记录。

Properties of the Subgrid

除了按类型和状态进行过滤之外,还应按与当前案例的关系来过滤结果。例如,系统中有3500个文档。在这3500个文档中,只有25个具有正确的类型/状态组合。在这25个案例中,只有3个案例适用于同一案例。内联查找应仅显示这三个文件。它仍然显示所有3500。当我点击“查找更多记录”按钮时,该按钮不会被我设置的自定义视图过滤。

由于过滤器使用的是案例(事件)的联接,因此无法使用addCustomFilter或preSearch。由于链接的实体,我仅限于“ addCustomView”功能。当我基于来自高级查找的获取XML设置自定义视图时,页面会产生此错误:

Alert for the Exception

文档的状态字段具有一个onChange事件,该事件会触发以下javascript:

function getCustomView() {
    try {
        var LookupControl = Xrm.Page.getControl("WorkingDataRequestsGrid");

        if (LookupControl != null) {
            var CaseId = Xrm.Page.getAttribute("confidentialdocuments").getValue()[0].id;
            var Casename = Xrm.Page.getAttribute("confidentialdocuments").getValue()[0].name;

            var fetch = "<fetch distinct='false' mapping='logical' output-format='xml-platform' version='1.0'>" +
            "   <entity name='confidentialdocument'>" +
            "       <attribute name='documenttitle'/>" +
            "       <attribute name='typeofrequest'/>" +
            "       <attribute name='createdby'/>" +
            "       <attribute name='respondingparty'/>" +
            "       <attribute name='noofquestions'/>" +
            "       <attribute name='dataresponseduedate'/>" +
            "       <attribute name='confidentialdocumentid'/>" +
            "       <order descending='false' attribute='documenttitle'/>" +
            "       <filter type='and'>" +
            "           <condition attribute='documenttype' value='{33F7488F-DE7C-E511-813B-1458D04E7900}' uitype='new_documenttype' uiname='Data Request' operator='eq'/>" +
            "           <condition attribute='documentstatus' value='413360000' operator='eq'/>" +
            "           <condition attribute='confidentialdocuments' value='" + CaseId + "' uitype='incident' uiname='" + Casename + "' operator='eq'/>" +
            "       </filter>" +
            "       <link-entity name='incident' alias='a_f409103f050fe71181091458d04dd6c8' link-type='outer' visible='false' to='confidentialdocuments' from='incidentid'>" +
            "           <attribute name='title'/>" +
            "       </link-entity>" +
            "   </entity>" +
            "</fetch>";

            //columns to display in the custom view (make sure to include these in the fetch query)
        var layout = "<layoutxml>" +
                "<grid name='resultset' icon='1' preview='1' select='1' jump='name' object='10013'>" +
                "    <row id='confidentialdocumentid' name='result'>" +
                "        <cell name='documenttitle' width='100'/>" +
                "        <cell name='a_f409103f050fe71181091458d04dd6c8.title' width='100' disableSorting='1'/>" +
                "        <cell name='createdby' width='100'/>" +
                "        <cell name='typeofrequest' width='100'/>" +
                "        <cell name='noofquestions' width='100'/>" +
                "        <cell name='respondingparty' width='100'/>" +
                "        <cell name='dataresponseduedate' width='100'/>" +
                "    </row>" +
                "</grid>" +
            "</layoutxml>";

            var viewId = "{00000000-0000-0000-0000-000000000009}";// add the randomly generated GUID for the view id
            var entityName = "confidentialdocument";//add the entity name
            var viewDisplayName = "Working Confidential Data Request Documents";// add the view display name

            //alert(viewId + " --- " + entityName + " --- " + viewDisplayName);
            Xrm.Page.getControl("WorkingDataRequestsGrid").addCustomView(viewId, entityName, viewDisplayName, fetch, layout, true);
        }
    }
    catch (error) {
        alert("Error in ConfidentialJs, Method Name: getCustomView(), Error: " + error.message);
    }
}

注意:我使用Solutions Customizations.xml中的xml更新了“布局” XML。

我在javaScript中有一些警报语句,因此我可以看到发生了什么。当字段更改为正确的状态时,将触发javaScript函数。它也会在onLoad事件期间触发,但“ LookupControl”显示为null,因此不会设置自定义视图。

我认为我一直在研究这个问题太久了。可能是我只是想念一个很小的问题。我需要换新的眼睛才能看到我看不到的东西。

我需要两个问题的帮助:

  1. 关于过滤器为何不使用指定视图的任何想法?
  2. 为什么onLoad事件无法访问查找控件?
      

    在表单属性中设置的多个javascript方法的执行顺序导致了“对象不支持”错误。一种方法是隐藏该节,使其找不到。该问题已解决。

         
        

    进一步检查后,执行顺序实际上并未解决问题。它从来没有调用过addCustomView逻辑,因为它找不到“ LookupControl”。因此,回到在这两个问题上都需要帮助!

      

非常感谢您的帮助!

0 个答案:

没有答案