2017-06-07 57 views
0

我創建了一個fetchxml來過濾CRM中的合同查找字段。我希望能夠查看合同查找字段中有多少條記錄。如果只有一條記錄,我希望能夠自動填充該查找字段。動態crm中查找字段的計數長度

嘗試使用API​​函數能夠遍歷fetchxml記錄,但沒有任何運氣返回計數。還有另外一種方法可以獲得我需要的結果嗎?

function buildCustomView() { 
 
     // Some GUID but only needs to be unique among the other available views for the lookup 
 
     var viewId = "{00000000-0000-0000-0000-000000000001}"; 
 
     var viewDisplayName = "Contracts for This Account"; 
 

 
     //Only need Contracts for the selected Worksite and buisness unit if filled in 
 
     var worksite = getFieldValue("hc_worksite"); 
 

 
     if (!worksite) { return; } 
 
     if (!worksite[0]) { return; } 
 
     if (!worksite[0].id) { return; } 
 
     //check if buisness unit is availble and if it is can filter lookup further 
 
     var buisnessUnit = getFieldValue("hc_businessunit"); 
 
     var condition; 
 
     if (buisnessUnit != null) { 
 
      condition = "<filter type='and'>" + 
 
            "<condition attribute='hc_businessunit' operator='eq' value='" + buisnessUnit[0].id + "' />" + 
 
           "</filter>"; 
 
      ///if take out the account name, contract lookup will still be filteredl 
 
     } else { 
 
      condition = ""; 
 
     } 
 

 
     //Get all Contracts that pertain to the selected worksite 
 
     var fetchXml = "<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='true' >" + 
 
         "<entity name='contract'>" + 
 
          "<attribute name='title' />" + 
 
          "<attribute name='customerid' />" + 
 
          "<attribute name='contractid' />" + 
 
          "<attribute name='hc_contracttype' />" + 
 
          "<attribute name='hc_contractsubtype' />" + 
 
          "<attribute name='activeon' />" + 
 
          "<attribute name='hc_contractlevel' />" + 
 
          "<attribute name='expireson' />" + 
 
          "<attribute name='hc_contractaccount' />" + 
 
          "<attribute name='hc_contract' />" + 
 
          "<order attribute='title' descending='false' />" + condition + 
 
          "<link-entity name='hc_account_contract' from='contractid' to='contractid' visible='false' intersect='true'>" + 
 
           "<link-entity name='account' from='accountid' to='accountid' alias='ab'>" + 
 
           "<filter type='and'>" + 
 
            "<condition attribute='accountid' operator='eq' value='" + worksite[0].id + "' />" + 
 
           "</filter>" + 
 
           "</link-entity>" + 
 
          "</link-entity>" + 
 
          "</entity>" + 
 
         "</fetch>"; 
 
     //Set up the whole view's UI 
 
     var layoutXml = "<grid name='resultset' object='1' jump='hc_contract' select='1' icon='1' preview='2'>" + 
 
         "<row name='result' id='contractid'>" + 
 
          "<cell name='title' width='300' />" + 
 
          "<cell name='hc_contractaccount' width='200' />" + 
 
          "<cell name='hc_contracttype' width='100' />" + 
 
          "<cell name='hc_contractsubtype' width='100' />" + 
 
          "<cell name='hc_contractlevel' width='100' />" + 
 
          "<cell name='activeon' width='100' />" + 
 
          "<cell name='expireson' width='100' />" + 
 
          "<cell name='customerid' width='150' />" + 
 
          "<cell name='hc_contract' width='100' />" + 
 
         "</row>" + 
 
         "</grid>"; 
 

 
     try { 
 
      //Set the view 
 
      Xrm.Page.getControl("hc_contract").addCustomView(viewId, "contract", viewDisplayName, fetchXml, layoutXml, true); 
 
     } catch (e) { 
 
      Xrm.Utility.alertDialog("Error: " + e.message); 
 
     } 
 
     var count = 0; 
 
     //count results of fetch xml 
 
     SDK.WEBAPI.executeFetchSync("contract", fetchXml, 
 
      function (results) { 
 
       
 
       for (i=0;i<results.length; i++){ 
 
        count++; 
 
       } 
 
       Xrm.Utility.alertDialog(count); 
 
      }, 
 
      function (error) { 
 
       //Show error 
 
       alertDialog("Error: " + error.message); 
 
      }); 
 
     
 
    }

+0

您可以嘗試使用fetchxml支持的聚合方法 - https:// msdn .microsoft.com/EN-US /庫/ gg309565.aspx –

回答

1

你可以指望通過計數聚合屬性的FetchXML查詢返回的記錄。見documentation here

aggregate='true'在你的第一行提取:

<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='true' aggregate='true'> 

,然後添加一個計數綜合屬性:

<attribute name='contractid' alias='contract_count' aggregate='count' /> 

然後在你的executeFetchSync成功回調獲得的價值:

results.entities[0].contract_count;