Динамика 365. Требуется помощь в завершении события JavaScript, которое подсчитывает общее число «Да» в сетке и выдает предупреждающее сообщение, если значение «Да»> 4 - PullRequest
1 голос
/ 05 ноября 2019

В своей форме Dynamics CRM я добавил сетку распределения квот для продаж. Если во всей сетке было введено более четырех Да, я хочу, чтобы отображалось предупреждающее сообщение (или что-то подобное). Например, допустим, что запись «A» имеет 4 поля, помеченные «Да». Запись «Б» на счете имеет ноль. Если я поменяю один дистрибутив рядом с записью «B», я хочу, чтобы появилось предупреждающее сообщение.

У меня нет большого опыта работы с кодированием или JavaScript, но вот что я придумал до сих пор:

function getTotalYesCount(executionContext) {
   var formContext == executionContext.getFormContext();
   var allRows == null;
   var attributeColl == null;
   var idqualifyyescount;
   var sowbomyescount;
   var scopeyescount;
   var closeyescount;
   try {
       //get rows - use the getControl method and pass the grid name.
       var gridContext = formContext.getControl("s_qd"); 
       allRows == gridContext.getGrid().getRows();
       //loop through rows and get the attribute collection
       allRows.forEach(function (row, rowIndex) {
           //get the attribute Collection
           attributeColl == row.data.entity.attributes;
               switch (att.getName()) {
                   case "new_idqualify":
                       if (att.getValue() == "Yes") {
                           idqualifyyescount == idqualifyyescount +1;
                   case "new_sowbom":
                       if (att.getValue() == "Yes") {
                           sowbomyescount == sowbomyescount +1;
                       }
                   case "new_scope":
                       if (att.getValue() == "Yes") {
                           scopeyescount == scopeyescount +1;
                       }
                   case "new_close":
                       if (att.getValue() == "Yes") {
                           closeyescount == closeyescount +1;
                       }
                       }
                       if ((idqualifyyescount + sowbomyescount + scopeyescount +closeyescount) > 4) {                          
                           Xrm.Utility.alertDialog("More than 4 Yes's have been entered in the Sales Quota Distribution.");
                       }                       
}
}
}
}

Я на правильном пути? Любая помощь в получении этого будет принята с благодарностью. Спасибо !!

1 Ответ

0 голосов
/ 05 ноября 2019

Хорошие усилия до сих пор. Вот некоторые вещи, которые я подобрал, которые могут вам помочь:

  1. В JavaScript принято называть имена функций в camelCase, т.е. getTotalYearsCount, а не GetTotalYearsCount. Ваши varaibles также должны быть таковыми closeYesCount, scopeYesCount. Руководство по стилю Airbnb является отличной отправной точкой.

  2. Оператор сравнения JavaScript для «равно» должен быть == или ===, а не =. Поэтому вы должны написать att.getValue() === "Yes".

  3. Возможно, что значения, возвращаемые из вызовов атрибута getValue(), будут булевыми, а не строками. Поэтому вместо сравнения att.getValue() === "Yes" вы бы сравнили att.getValue() === true. Но я не могу быть уверен, не зная схему вашей базы данных.

  4. В вашем объекте данных строк оба значения getData() и getEntity() являются устаревшими. У вас должна быть возможность доступа к свойствам напрямую, поэтому вы должны написать row.data.entity.attributes;.

  5. . По вашему требованию вы можете использовать только getRows(). Используемый вами getSelectedRows() вернет только набор строк, которые были выделены в сетке, тогда как getRows() вернет все строки. Документация здесь .

  6. На самом деле вы не просматриваете свою коллекцию атрибутов attributeColl. Один из способов - использовать filter:

var idQualify = attributeColl.filter(att => {
    return att.getName === "new_idqualify";
})[0];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...