Добрий день. 

Умовно є два поля типу Дата\Час. Наприклад, TimeStart і TimeEnd

Потрібно налаштувати валідацію поля TimeStart, щоб значення не могло бути більшим за TimeEnd

До TimeStart прив'язаний валідатор. 

Як у коді валідатора отримати значення поля TimeEnd для порівняння

Підкажіть, будь ласка. 

Нравится

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

Ігорю, доброго дня!

На жаль, наразі немає можливості отримати у коді валідатора значення іншого поля (атрибуту) сторінки. Ми проінформували департамент R&D про необхідність додати таку можливість. 

Дякуємо, що допомагаєте покращувати нашу платформу!

Natalia Kalynovska,

Можливо є інші варіати вирішення мого завдання? підкажіть, будь ласка. 

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

Добрий день. 

Підкажіть, будь ласка, як у валідаторі поріняти значення поля до я кого прив'язаний валідатор з іншим полем. 

Приклад. На сторінці (Freedom UI) є дві дати:

Дата завершення проекту

Дата завершення завдання, 

Потрібно налаштувати валідацію поля "Дата завершення завдання", щоб вона не перевищувала дату завершення проетку. 







"usr.UniversalDateValidator": {

        validator: function (config) {

        return function (control) {

            let minValue = new Date(config.minValue);

            let controlDate = new Date(control.value);

            let isDateValid = controlDate >= minValue;

            var result;

            if (isDateValid) {

                result = null;

            } else {

                result = {

                    "usr.UniversalDateValidator": { 

                        message: config.message || "Введена дата не відповідає умовам"

                    }

                };

            }

            return result;

        };

    },

    params: [

        {

            name: "minValue"

        },

        {

            name: "message"

        }

    ],

    async: false

}

Нравится

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

Добрий день,

 

При умові, що дві дати отримано коректно, далі треба використати стандартний підхід до порівняння двох дат в JS (наприклад, як описано ось тут https://www.freecodecamp.org/news/javascript-date-comparison-how-to-com…), а на основі порівняння проставляти isDateValid значення.

Oscar Dylan,

Дякую, не зовісім коректно сформулював питання.  Мене цікавть якраз як коректно отримати другу дату у коді валідатора. Допоможіть, будь ласка. 

Oscar Dylan,

Я пробую отак:

var timeStartValue = control.parent.get("DateTimeAttribute_84s5bhk").value;

але отримую помилку Cannot read properties of undefined (reading 'get') Cannot read properties of undefined (reading 'get)

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

Допоможіть, будь ласка, розібратись з валідаторам.

Прив'язав валідатор до поля типу ДатаЧас у сторінці створення запису. Сторінка відкривається, алідатор працює,  але через частинку коду у блоці viewModelConfigDiff не відкривається дизайнер цієї сторінки (Якщо цю частину закоментувати - відкривається). Використаний код додаю. 



У блоці стоінки viewModelConfigDiff прив'язав валідатор до поля



"DateTimeAttribute_qc2mfzm": {

                        "modelConfig": {

                            "path": "UsrAppNewTasksDS.UsrDateDeadline"

                        },

                        

                        

                        "validators": {

                                   "MyDateValidator": {

                                        "type": "usr.UniversalDateValidator",

                                            "params": {

                                                        "minValue": new Date(new Date().getTime() + (3 * 60 * 60 * 1000)), 

                                                        "message": "Термін виконання завдання не може бути меншим ніж 3 години."

                                                    }

                                                        }

                                            }            

            

                        

                    },





В блоці validators: 



"usr.UniversalDateValidator": {

        validator: function (config) {

        return function (control) {

            let minValue = new Date(config.minValue);

            let controlDate = new Date(control.value);

            let isDateValid = controlDate >= minValue;

            var result;

            if (isDateValid) {

                result = null;

            } else {

                result = {

                    "usr.UniversalDateValidator": { 

                        message: config.message || "Введена дата не відповідає умовам"

                    }

                };

            }

            return result;

        };

    },

    params: [

        {

            name: "minValue"

        },

        {

            name: "message"

        }

    ],

    async: false

}

            

               

Нравится

2 комментария
Лучший ответ

Проблема в "minValue": new Date(new Date().getTime() + (3 * 60 * 60 * 1000)), в параметрах валідатора в атрибуті. Якщо його прописати текстом (наприклад "2023-12-10"), то дизайнер відкривається. Перенесіть, будь ласка, цю перевірку в середину логіки валідатора (там де if (isDateValid) {), а не передавайте в config.

Добрий день,

 

Яка помилка виникає при спробі відкрити дизайнер (в консолі)? Ви робили відладку помилки?

Проблема в "minValue": new Date(new Date().getTime() + (3 * 60 * 60 * 1000)), в параметрах валідатора в атрибуті. Якщо його прописати текстом (наприклад "2023-12-10"), то дизайнер відкривається. Перенесіть, будь ласка, цю перевірку в середину логіки валідатора (там де if (isDateValid) {), а не передавайте в config.

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