Этап 4. Валидация данных

В статье Этап 3. Добавление данных была добавлена системная настройка и справочник, после чего их данные были привязаны к пакету. Теперь рассмотрим добавление валидации поля.
Определим условие валидации: при добавлении или редактировании продукта должна проходить проверка поля «Код продукта» на соответствие определенному шаблону. Код продукта состоит из трех частей, разделенных знаками тире, например, (П-БТ-001). Первая часть — буква «П». Сокращение от «Продукт». Вторая часть сокращение от категории товара: БТ — бытовая техника, ПП — продукты питания, ОО — одежда и обувь. Третья часть — число из трех цифр.

Изменение клиентской схемы

Для добавления валидации поля «Код продукта» необходимо модифицировать исходный код страницы редактирования. Изменения вносятся в свойство methods клиентской схемы. Свойство methods хранит реализацию логики схемы. Более подробно о клиентской схеме можно узнать в статье Клиентская схема.

  1. Откройте раздел «Конфигурация».
  2. Выберите ранее созданный пакет.
  3. Используя сортировку по типу схем, найдите «Страница редактирования: «Продукты»».

Рисунок 1 — Страница редактирования: «Продукты»

Рисунок 1 — Страница редактирования Продукты

  1. Откройте схему «BpmProductPage».
  2. Добавьте новую локализуемую строку:
    • «Код» = «BpmProductCodeValidatorInvalidMessage»;
    • «Значение» = «Неверный шаблон кода продукта. Введите код в формате: П-**-001, где ** значение категории товара (БТ — бытовая техника, ПП — продукты питания, ОО — одежда и обувь)».
  1. Измените исходный код:
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*/
	};
});
  1. Сохраните изменения.

В данном примере для валидации поля были использованы регулярные выражения. В BPMSoft поддерживается библиотека RegExp, которая предоставляет методы для работы с регулярными выражениями.

Результат выполнения задачи:

Рисунок 2 — Уведомления при попытке ввести неверный код продукта

Рисунок 2 — Уведомление при попытке ввести неверный код продукта

Примечание. Полный текст ошибки выводится при наведении на сообщение под полем.

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

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

Рекомендуем изучить

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

Материал был полезен для вас?
Вебинар: 22 апреля в 11:00
Приглашаем вас на вебинар «BPMSoft – от выбора к реальным процессам», где покажем, как компании на практике сокращают time-to-market и масштабируют бизнес с помощью решений BPMSoft.
Регистрация на мероприятие
Готовы сделать выбор CRM?
Оставьте заявку, и наши эксперты бесплатно проконсультируют вас, подберут подходящую конфигурацию и рассчитают стоимость проекта.
Готовы сделать выбор CRM? (детальная)
Оставьте заявку, и наши эксперты бесплатно проконсультируют вас, подберут подходящую конфигурацию и рассчитают стоимость проекта.
Готовы сделать выбор CRM?
Оставьте заявку, и наши эксперты бесплатно проконсультируют вас, подберут подходящую конфигурацию и рассчитают стоимость проекта.
Готовы сделать выбор CRM? (детальная)
Оставьте заявку, и наши эксперты бесплатно проконсультируют вас, подберут подходящую конфигурацию и рассчитают стоимость проекта.
Оставить заявку
Оставьте свои контакты и наш менеджер свяжется с Вами в ближайшее время.
Демонстрационная версия BPMSoft
Заполните заявку для получения бесплатного доступа к демонстрационному стенду на 14 дней.
Типовое внедрение
Внедрите BPMSoft CRM в свою компанию всего за 8 рабочих дней по фиксированной цене! Заполните заявку для уточнения условий.
Заказать презентацию
Наш менеджер свяжется с Вами в ближайшее время.
Рассчитать стоимость
Задать вопрос
Карта сценариев использования ИИ для управления маркетингом, продажами и сервисом
Заполните форму и мы отправим исследование на E-mail
Присоединяйтесь к партнерской сети BPMSoft
Оставьте свои контакты и наш менеджер свяжется с Вами в ближайшее время
Тип партнерства*
Управление полным жизненным циклом клиента: от генерации лидов и продаж до внедрения, поддержки и продления подписки.
Разработка собственного Приложения – производного программного обеспечения, созданного на платформе BPMSoft (Базовое ПО).
Есть вопросы?
Не нашли для себя подходящую вакансию, или остались вопросы?
*
Есть вопросы?
Не нашли для себя подходящую вакансию, или остались вопросы?
*
Стать образовательным партнёром
Оставьте свои контакты и наш менеджер свяжется с Вами в ближайшее время.
Заявка на консультацию
Оставьте свои контакты и наш менеджер свяжется с Вами в ближайшее время.
Подписка
Спасибо!
Ваша заявка принята.
Наш сотрудник свяжется с вами в течение 1-2 рабочих дней.
Внимание!
Обнаружена ошибка.
Проверьте вашу почту
Для завершения подписки перейдите по ссылке в письме, которое мы только что отправили. Если письма нет во «Входящих», проверьте папку «Спам».
Telegram Подписаться
Уважаемые клиенты! Предупреждаем о случаях недобросовестной конкуренции и мошенничестве в сети Интернет.
Подробнее