считать длину поля поиска в динамике crm

1

Я создал fetchxml для фильтрации поля поиска контракта в 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 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);
            });
        
    }
Теги:
dynamics-crm
crm
fetchxml

1 ответ

1

Вы можете подсчитать записи, возвращаемые запросом FetchXML, используя атрибут count aggregate. См. Документацию здесь.

Поместите 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;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню