Коллеги, добрый день!
Такая ситуация:
к полю привязал атрибут, к которому подвязал вызов функции 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); },
Нравится
в ф-и валидаторе не получилось реализовать получение ответа от внешнего сервиса из-за ассинхронности.
Сергей, возможно, есть смысл пересмотреть логику и получать нужную информацию из Jira в момент открытия карточки или изменения поля UsrAssetTypeGeneral, а затем получать список подходящих для выбора значений справочника getEpicId и фильтровать справочное поле по нему? Тогда и валидация не потребеутся.
Сергей Хоменко пишет:
в ф-и валидаторе не получилось реализовать получение ответа от внешнего сервиса из-за ассинхронности.
А как сделать что бы return дождался ответа от внешнего сервиса?
Evgeniy Grigorev,
Здравствуйте, можно реализовать проверку полученного значения сообщения. Например, если получен ответ от сервера возвращать один результат, если значение отсутствует ошибку.
Задачу также можно решить с помощью ajax.