Этап 4. Валидация
данных
Изменение клиентской схемы
Для добавления валидации поля «Код продукта» необходимо модифицировать исходный код страницы редактирования. Изменения вносятся в свойство methods клиентской схемы. Свойство methods хранит реализацию логики схемы. Более подробно о клиентской схеме можно узнать в статье Клиентская схема.
- Откройте раздел «Конфигурация».
- Выберите ранее созданный пакет.
- Используя сортировку по типу схем, найдите «Страница редактирования: «Продукты»».
Рисунок 1 — Страница редактирования: «Продукты»

- Откройте схему «BpmProductPage».
- Добавьте новую локализуемую строку:
- «Код» = «BpmProductCodeValidatorInvalidMessage»;
- «Значение» = «Неверный шаблон кода продукта. Введите код в формате: П-**-001, где ** значение категории товара (БТ — бытовая техника, ПП — продукты питания, ОО — одежда и обувь)».
- Измените исходный код:
define("BpmProductPage", [], function() {
return {
entitySchemaName: "BpmProduct",
/** Свойство attributes */
attributes: {},
/** Свойство modules */
modules: /**SCHEMA_MODULES*/{}/**SCHEMA_MODULES*/,
/** Свойство details */
details: /**SCHEMA_DETAILS*/{
"Files": {
"schemaName": "FileDetailV2",
"entitySchemaName": "BpmProductFile",
"filter": {
"masterColumn": "Id",
"detailColumn": "BpmProduct"
}
}
}/**SCHEMA_DETAILS*/,
/** Свойство businessRules */
businessRules: /**SCHEMA_BUSINESS_RULES*/{}/**SCHEMA_BUSINESS_RULES*/,
/** Свойство methods */
methods: {
/* Переопределение базового метода setValidationConfig */
setValidationConfig: function(){
// Вызов родительского метода setValidationConfig.
this.callParent(arguments);
// Добавление валидации поля "BpmProductCode".
this.addColumnValidator("BpmProductCode", this.productCodeValidator);
},
/* Метод-валидатор поля "BpmProductCode" */
productCodeValidator: function(){
let invalidMessage = "";
// Создаем паттерн кода продукта.
let productCodePattern = /^[П]\-(БТ|ОО|ПП)\-(\d{3})$/;
// Получаем текущее значение кода продукта.
let productCode = this.get("BpmProductCode");
// Проверяем на соответствие кода шаблону.
let resultArray = productCodePattern.exec(productCode);
if (resultArray == null){
// Получаем значение новой локализуемой строки и записываем его в переменную invalidMessage.
invalidMessage = this.get("Resources.Strings.BpmProductCodeValidatorInvalidMessage");
}
return {
invalidMessage: invalidMessage
};
}
},
/** Свойство dataModels */
dataModels: /**SCHEMA_DATA_MODELS*/{}/**SCHEMA_DATA_MODELS*/,
/** Свойство diff */
diff: /**SCHEMA_DIFF*/[
{
"operation": "insert",
"name": "BpmProductName",
"values": {
"layout": {
"colSpan": 24,
"rowSpan": 1,
"column": 0,
"row": 0,
"layoutName": "ProfileContainer"
},
"bindTo": "BpmProductName",
"enabled": true
},
"parentName": "ProfileContainer",
"propertyName": "items",
"index": 0
},
{
"operation": "insert",
"name": "BpmProductRating",
"values": {
"layout": {
"colSpan": 24,
"rowSpan": 1,
"column": 0,
"row": 1,
"layoutName": "ProfileContainer"
},
"bindTo": "BpmProductRating",
"enabled": true
},
"parentName": "ProfileContainer",
"propertyName": "items",
"index": 1
},
{
"operation": "insert",
"name": "BpmProductPrice",
"values": {
"layout": {
"colSpan": 24,
"rowSpan": 1,
"column": 0,
"row": 2,
"layoutName": "ProfileContainer"
},
"bindTo": "BpmProductPrice",
"enabled": true
},
"parentName": "ProfileContainer",
"propertyName": "items",
"index": 2
},
{
"operation": "insert",
"name": "BpmProductCode",
"values": {
"layout": {
"colSpan": 24,
"rowSpan": 1,
"column": 0,
"row": 3,
"layoutName": "ProfileContainer"
},
"bindTo": "BpmProductCode",
"enabled": true
},
"parentName": "ProfileContainer",
"propertyName": "items",
"index": 3
},
{
"operation": "insert",
"name": "BpmProductCategory",
"values": {
"layout": {
"colSpan": 11,
"rowSpan": 1,
"column": 0,
"row": 0,
"layoutName": "Header"
},
"bindTo": "BpmProductCategory",
"enabled": true,
"contentType": 5
},
"parentName": "Header",
"propertyName": "items",
"index": 0
},
{
"operation": "merge",
"name": "ESNTab",
"values": {
"order": 0
}
}
]/**SCHEMA_DIFF*/
};
});
- Сохраните изменения.
В данном примере для валидации поля были использованы регулярные выражения. В BPMSoft поддерживается библиотека RegExp, которая предоставляет методы для работы с регулярными выражениями.
Результат выполнения задачи:
Рисунок 2 — Уведомления при попытке ввести неверный код продукта

Рисунок 3 — Уведомление при попытке сохранить измененную запись

Рекомендуем изучить
Клиентская схема
Начало разработки
Этап 3. Добавление данных
Этап 5. Автозаполнение предложения дня