Этап 5. Автозаполнение предложения дня

В статье Этап 4. Валидация данных была добавлена валидация на поле «Код продукта». В этой статье реализуем наполнение детали «Продукт в предложении дня» из записи «Предложения дня». Для этого добавим действие на страницу редактирования предложения дня и создадим бизнес-процесс.

Алгоритм работы бизнес-процесса

Перед созданием процесса необходимо определить логику, по которой он будет работать:

  1. Процесс считывает количество продуктов с категорией товара равной категории товара предложения дня.
  2. Если продуктов не найдено, процесс завершает работу.
  3. Иначе создаются записи «Продукт в предложении дня» в количестве равной значению системной настройки «Количество продуктов в предложении дня».

Предварительные действия

Для реализации логики понадобятся следующие элементы бизнес-процесса:

Рисунок 1 — Необходимые элементы из панели инструментов

Рисунок 1 — Необходимые элементы из панели инструментов

Создание бизнес-процесса

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

Рисунок 2 — Создание бизнес-процесса

Рисунок 2 — Создание бизнес-процесса

  1. На вкладке «Настройки» заполните поля:
    • «Заголовок» — «Наполнение предложения дня»;
    • «Имя» — «BpmCompleteOfferLowCodeProcess».

Рисунок 3 — Настройка бизнес-процесса

Рисунок 3 — Настройка бизнес-процесса

  1. Из панели инструментов вынесите и соедините элементы процесса как показано на рисунке ниже. Настройки элементов описаны далее в шагах 7-18.

Рисунок 4 — Схема бизнес-процесса

Рисунок 4 — Схема бизнес-процесса

  1. В блоке «Параметры» настройки бизнес-процесса добавьте параметры из таблицы 1:

Таблица 1 — Параметры процесса

Название Код Тип данных Направление Значение
Идентификатор Категории товара ProcessBpmProductCategoryIdParameter Уникальный идентификатор Входящий  
Идентификатор Предложения дня ProcessBpmDealIdParameter Уникальный идентификатор Входящий  
Количество продуктов из системной настройки ProcessProductCountFromSysSettings Целое число Двунаправленный Формула (Рисунок 6)
Количество созданных записей ProcessCreatedProudctInDealCount Целое число Двунаправленный 0
Количество считанных продуктов в системе ProcessProductCountFromSystem Целое число Двунаправленный Формула (Рисунок 7)

Рисунок 5 — Параметры бизнес-процесса

Рисунок 5 — Параметры бизнес-процесса

Рисунок 6 — Параметр «Количество продуктов из системной настройки»

Рисунок 6 — Параметр «Количество продуктов из системной настройки»

Рисунок 7 — Параметр «Количество считанных продуктов в системе»

Рисунок 7 — Параметр «Количество считанных продуктов в системе»

  1. Настройте элемент «Читать данные».

Рисунок 8 — Элемент «Читать данные»

Рисунок 8 — Элемент «Читать данные»

  1. Настройте первый элемент ветвления: заполните название «Есть ли в системе продукты?».

Рисунок 9 — Элемент ветвления «Есть ли в системе продукты?»

Рисунок 9 — Элемент ветвления «Есть ли в системе продукты?»

  1. Настройте условный поток «Нет» элемента ветвления «Есть ли в системе продукты?»:
Условие перехода
[#Количество считанных продуктов в системе#] <= 0

Рисунок 10 — Условный поток «Нет» ветви «Есть ли в системе продукты?»

Рисунок 10 — Условный поток «Нет» ветви «Есть ли в системе продукты?»

  1. Настройте условный поток «Да» элемента ветвления «Есть ли в системе продукты?»:
Условие перехода
[#Количество считанных продуктов в системе#] > 0

Рисунок 11 — Условный поток «Да» ветви «Есть ли в системе продукты?»

Рисунок 11 — Условный поток «Да» ветви «Есть ли в системе продукты?»

  1. Настройте второй элемент ветвления: заполните название «Количество созданных записей меньше заданного?».

Рисунок 12 — Элемент ветвления «Количество созданных записей меньше заданного?»

Рисунок 12 — Элемент ветвления «Количество созданных записей меньше заданного?»

  1. Настройте условный поток «Да» элемента ветвления «Количество созданных записей меньше заданного?»:
Условие перехода
[#Количество созданных записей#] <= [#Количество продуктов из системной настройки#]

Рисунок 13 — Условный поток «Да» ветви «Количество созданных записей меньше заданного?»

Рисунок 13 — Условный поток «Да» ветви «Количество созданных записей меньше заданного?»

  1. Настройте элемент «Добавить данные».

Рисунок 14 — Элемент «Добавить данные»

Рисунок 14 — Элемент «Добавить данные»

  1. Настройте элемент «Формула»:
Значение формулы, передаваемое в параметр «Количество созданных записей»
[#Количество созданных записей#] + 1

Рисунок 15 — Элемент «Формула»

Рисунок 15 — Элемент «Формула»

  1. Настройте третий элемент ветвления: заполните название «Успешно созданы все записи?».

Рисунок 16 — Элемент ветвления «Успешно создано все записи?»

Рисунок 16 — Элемент ветвления «Успешно созданы все записи?»

  1. Настройте условный поток «Да» элемента ветвления «Успешно создано все записи?»:
Условие перехода
[#Количество созданных записей#] == [#Количество продуктов из системной настройки#]

Рисунок 17 — Условный поток «Да» ветви «Успешно созданы все записи?»

Рисунок 17 — Условный поток «Да» ветви «Успешно созданы все записи?»

  1. Настройте условный поток «Нет» элемента ветвления «Успешно создано все записи?»:
Условие перехода
[#Количество созданных записей#] <  [#Количество продуктов из системной настройки#]

Рисунок 18 — Условный поток «Нет» ветви «Успешно создано все записи?»

Рисунок 18 — Условный поток «Нет» ветви «Успешно создано все записи?»

  1. Настройте элемент «Задание-сценарий».

Рисунок 19 — Элемент «Задание-сценарий»

Рисунок 19 — Элемент «Задание-сценарий»

Вставьте код:

BPMSoft
	.Configuration
	.MsgChannelUtilities
	.PostMessage(UserConnection, "CompleteDeal", "");
return true;
  1. Сохраните и опубликуйте процесс.

Создание замещающей модели представления

Для обмена данными между процессом и страницей необходимо создать замещающую модель представления базовой схемы ClientMessageBridge. Обмен сообщениями между процессами и схемами осуществляется при помощи технологии WebSocket.

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

Рисунок 20 — Создание замещающей модели представления

Рисунок 20 — Создание замещающей модели представления

  1. В открывшемся окне заполните свойство «Родительский объект», указав значение ClientMessageBridge. Поля «Код» и «Заголовок» заполнятся автоматически после выбора родительского объекта.

Рисунок 21 — Свойства клиентского модуля

Рисунок 21 — Свойства клиентского модуля

  1. Добавьте следующий код:
define("ClientMessageBridge", ["ConfigurationConstants"],
	function(ConfigurationConstants) {
		return {
			/* Сообщения. */
			messages: {
				/* Имя сообщения. */
				"CompleteDeal": {
					/* Тип сообщения — широковещательное, без указания конкретного подписчика. */
					"mode": BPMSoft.MessageMode.BROADCAST,
					/* Направление сообщения — публикация. */
					"direction": BPMSoft.MessageDirectionType.PUBLISH
				}
			},
			methods: {
				/* Инициализация схемы. */
				init: function() {
					/* Вызов родительского метода. */
					this.callParent(arguments);
					/* Добавление нового конфигурационного объекта в коллекцию конфигурационных объектов. */
					this.addMessageConfig({
						/* Имя сообщения, получаемого по WebSocket. */
						sender: "CompleteDeal",
						/* Имя сообщения, с которым оно будет разослано. */
						messageName: "CompleteDeal"
					});
				}
			}
		};
	});
  1. Сохраните изменения.

Добавление действия на страницу

Для вызова созданного процесса добавим действие на страницу. Для этого:

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

Рисунок 22 — Страница редактирования: “Предложения дня”

Рисунок 22 — Страница редактирования: “Предложения дня”

  1. Измените исходный код:

Обратите внимание, в коде клиентского модуля выполнены следующие изменения:

  1. В массив зависимостей добавлен модуль ProcessModuleUtilities для запуска бизнес-процессов (Строка 1).
  2. Добавлено свойство messages с сообщением CompleteDeal для режима подписки (Строки 5-10).
  3. Добавлена бизнес-логика в методы свойства methods (Строки 38-88).

В свойстве diff находятся автоматически сгенерированные элементы, которые могут различаться на разных стендах. Рекомендуется оставить содержимое diff без изменений.

define("BpmDealsOfDayPage", ["ProcessModuleUtilities"], function(ProcessModuleUtilities) {
	return {
		entitySchemaName: "BpmDealsOfDay",
		/** Свойство messages */
		messages: {
			"CompleteDeal":{
				"mode": BPMSoft.MessageMode.BROADCAST,
				"direction": BPMSoft.MessageDirectionType.SUBSCRIBE
			}	
		},
        /** Свойство attributes */
		attributes: {},
        /** Свойство modules */
		modules: /**SCHEMA_MODULES*/{}/**SCHEMA_MODULES*/,
		/** Свойство details */
        details: /**SCHEMA_DETAILS*/{
			"Files": {
				"schemaName": "FileDetailV2",
				"entitySchemaName": "BpmDealsOfDayFile",
				"filter": {
					"masterColumn": "Id",
					"detailColumn": "BpmDealsOfDay"
				}
			},
			"BpmProductInDeal": {
				"schemaName": "BpmProductInDealSchema",
				"entitySchemaName": "BpmProductInDeal",
				"filter": {
					"detailColumn": "BpmDealsOfDay",
					"masterColumn": "Id"
				}
			}
		}/**SCHEMA_DETAILS*/,
		/** Свойство businessRules */
        businessRules: /**SCHEMA_BUSINESS_RULES*/{}/**SCHEMA_BUSINESS_RULES*/,
		/** Свойство methods */
        methods: {
			/* Переопределение базового метода init */
			init: function(){
				// Вызов родительского метода
				this.callParent(arguments);
				// Подписка на сообщение "CompleteDeal", после получения сообщения будет выполнен метод updateProducts
				this.sandbox.subscribe("CompleteDeal", this.updateProducts,this);
			},
			
			/* Обновление детали "Продукты в предложении дня" */
			updateProducts: function(){
				this.updateDetail({
					// Код детали.
					"detail": "BpmSchema0ddb2a98Detail68c9d3bb",
					"reloadAll": true
				});
			},
			
			/* Переопределение базового метода для добавление пользовательского действия */
			getActions: function(){
				// Получаем базовые действия страницы
				let actionMenuItems = this.callParent(arguments);
				// Добавляем новое действие
				actionMenuItems.addItem(this.getButtonMenuItem({
					"Caption": "Наполнить предложение",
					"Click": {bindTo: "compleateTheDeal"},
					"Enabled": true
				}));
				
				return actionMenuItems;
			},
			
			/* Вызов процесса наполнения детали "Продукты в предложении дня" */
			compleateTheDeal: function(){
				// Получаем идентификатор предложения дня, после передадим в качестве параметра процесса
				let offerId = this.get("Id");
				// Получаем идентификатор категории товара, полсе передадим в качестве параметра процесса
				let productCategoryId = this.get("BpmProductCategory").value;
				// Параметры для запуска процесса
				var args = {
					/* Имя созданного в предыдущих пунктах процесса. */
					sysProcessName: "BpmCompleteOfferLowCodeProcess",
					/* Входящие параметры процесса. */
					parameters: {
						ProcessBpmProductCategoryIdParameter: productCategoryId,
						ProcessBpmDealIdParameter:offerId,
					}
				};
				
				// Вызываем процесс. Для вызова необходимо подключить модель ProcessModuleUtilities					
				ProcessModuleUtilities.executeProcess(args);				
			}
		},
		/** Свойство dataModels */
        dataModels: /**SCHEMA_DATA_MODELS*/{}/**SCHEMA_DATA_MODELS*/,
		/** Свойство diff */
        diff: /**SCHEMA_DIFF*/[
			{
				"operation": "insert",
				"name": "BpmDealName",
				"values": {
					"layout": {
						"colSpan": 24,
						"rowSpan": 1,
						"column": 0,
						"row": 0,
						"layoutName": "ProfileContainer"
					},
					"bindTo": "BpmDealName",
					"enabled": true
				},
				"parentName": "ProfileContainer",
				"propertyName": "items",
				"index": 0
			},
			{
				"operation": "insert",
				"name": "BpmOfferDate",
				"values": {
					"layout": {
						"colSpan": 24,
						"rowSpan": 1,
						"column": 0,
						"row": 1,
						"layoutName": "ProfileContainer"
					},
					"bindTo": "BpmOfferDate",
					"enabled": true
				},
				"parentName": "ProfileContainer",
				"propertyName": "items",
				"index": 1
			},
			{
				"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": "insert",
				"name": "BpmIsActive",
				"values": {
					"layout": {
						"colSpan": 11,
						"rowSpan": 1,
						"column": 13,
						"row": 0,
						"layoutName": "Header"
					},
					"bindTo": "BpmIsActive",
					"enabled": true
				},
				"parentName": "Header",
				"propertyName": "items",
				"index": 1
			},
			{
				"operation": "insert",
				"name": "ProductTab",
				"values": {
					"caption": {
						"bindTo": "Resources.Strings.Tabf0eecf56TabLabelTabCaption"
					},
					"items": [],
					"order": 0
				},
				"parentName": "Tabs",
				"propertyName": "tabs",
				"index": 1
			},
			{
				"operation": "insert",
				"name": "BpmProductInDeal",
				"values": {
					"itemType": 2,
					"markerValue": "added-detail"
				},
				"parentName": "ProductTab",
				"propertyName": "items",
				"index": 0
			},
			{
				"operation": "remove",
				"name": "ESNTab"
			},
			{
				"operation": "remove",
				"name": "ESNFeedContainer"
			},
			{
				"operation": "remove",
				"name": "ESNFeed"
			}
		]/**SCHEMA_DIFF*/
	};
});
  1. Сохраните изменения.

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

Рисунок 23 — Действие «Наполнить предложение» на странице предложения дня

Рисунок 23 — Действие «Наполнить предложение» на странице предложения дня

Рисунок 24 — Результат наполнения

Рисунок 24 — Результат наполнения

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

Начало разработки
Этап 4. Валидация данных
Этап 6. Создание веб-сервиса
Настройка бизнес-процессов
Обучающий курс «Бизнес-процессы в BPMSoft»

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