Возникла задача:
Необходимо установить признак обязательности поля UsrDeviationReason, если даты UsrDatePlan и UsrDateActual не равны друг другу и UsrDateActual заполнена:
Написали правило:
"BindParameterRequiredDeviationReason": {
"ruleType": BusinessRuleModule.enums.RuleType.BINDPARAMETER,
"property": BusinessRuleModule.enums.Property.REQUIRED,
"logical": Terrasoft.LogicalOperatorType.AND,
"conditions": [
{
"leftExpression": {
"type": BusinessRuleModule.enums.ValueType.ATTRIBUTE,
"attribute": "UsrDatePlan"
},
"comparisonType": Terrasoft.ComparisonType.NOT_EQUAL,
"rightExpression": {
"type": BusinessRuleModule.enums.ValueType.ATTRIBUTE,
"attribute": "UsrDateActual"
}
},
{
"leftExpression": {
"type": BusinessRuleModule.enums.ValueType.ATTRIBUTE,
"attribute": "UsrDateActual"
},
"comparisonType": Terrasoft.ComparisonType.IS_NOT_NULL
}
]
}
В итоге два вопроса:
1) По UsrDateActual IS_NOT_NULL работает (т.е., если поле UsrDateActual не заполнено, то признак обязательности не появляется).
Но при равенстве UsrDatePlan и UsrDateActual признак обязательности всё равно остаётся. Что указано не так?
2) Даже если признак обязательности исчезает, всё равно остаётся подсказка заполнить это поле и никак не исчезает.
Спасибо за помощь!
Нравится
Может, конечно, я тупость скажу, но условие "не равно" вроде бы без нижнего подчеркивания, просто NotEqual.
Информацию брал отсюда https://www.bpmonline.com/bpmonlinesdken/Terrasoft.Core~Terrasoft.Core…
Хотя и IsNotNull там тоже без нижних подчеркиваний написано, но у вас работает.
Владимир, добрый день!
Как вариант, данное поведение может возникать если у двух дат, с которыми происходит сравнение, разница, например, в миллисекундах. В приложении есть особенность, что даже если разница составляет миллисекунды, то приложение эти значения считает разными.
Проверьте, чтобы даты были абсолютно идентичными.
"Демьяник Алексей Олегович" написал:Проверьте, чтобы даты были абсолютно идентичными
Формат полей date, а не datetime, и в них нет времени.
"Сазанов Александр Владимирович" написал:Хотя и IsNotNull там тоже без нижних подчеркиваний написано, но у вас работает.
В логике карточек вижу, что с подчеркиваниями. и NOT_EQUAL тоже видел. А в процессах, кажется, без подчеркивания.
Владимир, добрый день!
Типы сравнений EQUAL и NOT_EQUAL не совсем корректно работают в случае сравнения дат, поскольку в JavaScript даты являются объектами, а два объекта никогда не будут равными друг другу, если это не один и тот же объект.
Рекомендую для изменения обязательности поля использовать не бизнес-правило, а создать отдельное свойство модели, значение которого связать с атрибутом isRequired нужного поля в блоке diff:
{ "operation": "insert", "parentName": "Header", "propertyName": "items", "name": "UsrDeviationReason", "values": { "layout": {"column": 12, "row": 0}, "isRequired": {"bindTo": "IsUsrDeviationReasonRequired"} } }
Инициализировать это свойство можно при инициализации страницы, а также при изменении полей плановой и фактической даты.
Поделюсь результатом:
IsUsrDeviationReasonRequired: function(columnName) { var endDate = this.get("EndDate"); var deadline = this.get("Deadline"); var isRequired = false; if ((endDate) && (deadline)) { isRequired = (endDate.toDateString() !== deadline.toDateString()); } var column = this.columns[columnName]; if (column) { column.isRequired = isRequired; this.validateColumn(columnName); } return isRequired; }