Этап 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. Автозаполнение предложения дня

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