Вопрос

Валидация поля на странице

Коллеги, добрый день!

 

Такая ситуация:

 

к полю привязал атрибут, к которому подвязал вызов функции checkEpicId. Функция обращается к сервису, который в свою очередь обращается к стороннему сервису и возвращает строку для валидации. Получив ответ, функция анализирует респонс и устанавливает для колонки invalidMessage i isValid. На странице внизу колонки появляется установленный invalidMessage, но карточка все равно сохраняется с таким invalidMessage. Добавил ф-ю валидатор isInJiraValidator, но тоже не помогает.

 

В чем может быть проблема, подскажите пожста.

 

код:

setValidationConfig: function() {
                this.callParent(arguments);
                this.addColumnValidator("UsrCoEpicId", this.isInJiraValidator);
            },
isInJiraValidator: function(value) {
                var invalidMessage = "";
                return {
                    invalidMessage: invalidMessage
                };
            },
 checkEpicId: function() {
                  var newEpicIdTitle = "";
                  var epicId = this.get("UsrCoEpicId");
                  var invalidMessage = "";
                  var isValid = false;
                ServiceHelper.callService(
                    "UsrJiraApi",
                    "getEpicId",
                    function(response) {
                          var res = response.getEpicIdResult;
                          var epicResult = response.substring(10, 11);
                          if(epicResult == "t") {
                              newEpicIdTitle = response.substring(response.indexOf("summary") + 10, response.indexOf("assetId") - 3);
                              console.log("Length after assetId: " + response.substring(response.indexOf("assetId")).length);
                              if(response.substring(response.indexOf("assetId")).length > 15) {
                                  var jiraAssetId = response.substring(response.indexOf("assetId") + 10, response.indexOf("assetId") + 46);
                                  console.log("Asset in CRM: " + this.get("UsrAssetTypeGeneral").value);
                                  console.log("Asset in Jira: " + jiraAssetId);
                                  if(this.get("UsrAssetTypeGeneral") && (this.get("UsrAssetTypeGeneral").value == jiraAssetId)) {
                                    invalidMessage = "";
                                      isValid = true;
                                   } else {
                                    invalidMessage = "Asset Type in Jira is not the same as in CRM for current Epic Id."
                                          + " Please set correct values or refer to administrator.";
                                      isValid = false;
                                  }
                            } else {
                                invalidMessage = "";
                                  isValid = true;
                                  this.showMessage("Asset Type in Jira is not set for current Epic Id. Validation is not awailable.");
                            }
                              this.validationInfo.set("UsrCoEpicId",{invalidMessage: invalidMessage, isValid: isValid});
                              this.set("UsrJiraEpicName", newEpicIdTitle);
                        } else {
                              invalidMessage = epicId + " - there is no such Epic Id in Jira. Please enter correct Epic Id."
                                  + " In case the epic Id in Jira has not been yet created - please do it now";
                              isValid = false;
                              this.validationInfo.set("UsrCoEpicId",{invalidMessage: invalidMessage, isValid: isValid});
                              this.set("UsrJiraEpicName", newEpicIdTitle);
                        }
                    },epicId,
                this);
            },

Нравится

3 комментария

в ф-и валидаторе не получилось реализовать получение ответа от внешнего сервиса из-за ассинхронности.

Сергей, возможно, есть смысл пересмотреть логику и получать нужную информацию из Jira в момент открытия карточки или изменения поля UsrAssetTypeGeneral, а затем получать список подходящих для выбора значений справочника getEpicId и фильтровать справочное поле по нему? Тогда и валидация не потребеутся.

Александр, спасибо! Ваш совет помог.

Показать все комментарии