Этап 6. Создание веб-сервиса

В статье Этап 5. Автозаполнение предложения дня реализовано автоматическое добавление продуктов в предложение дня. В этой статье создадим сервис, который будет возвращать сумму товаров из предложения дня.

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

Для создания пользовательского сервиса необходимо наследоваться от базового класса «BaseService». Кроме наследования от базового класса также необходимо добавить атрибуты к классу и методу сервиса. Технология сервисов BPMSoft базируется на технологии WCF от Microsoft.

Алгоритм создания сервиса:

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

Рисунок 1 — Добавление элемента

Рисунок 1 — Добавление элемента

  1. Заполните поля следующим образом:

Рисунок 2 — Заполнение полей элемента «Исходный код»

Рисунок 2 — Заполнение полей элемента «Исходный код»

  1. Добавьте код:
namespace BPMSoft.Configuration.BpmDayOfferAmountService
{
	using System.ServiceModel;
	using System.ServiceModel.Web;
	using System.ServiceModel.Activation;
	using BPMSoft.Core;
	using BPMSoft.Web.Common;
	using BPMSoft.Core.Entities;
	using System.Linq;
	
	/// <summary>
	/// Сервис расчета стоимости товаров в предложении дня.
	/// </summary>
	[ServiceContract]
	[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
	public class BpmDayOfferAmountService : BaseService
	{
		/// <summary>
		/// Возвращает сумму товаров в предложении дня.
		/// </summary>
		/// <param name="offerName">Название предложения дня</param>
		[OperationContract]
		[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json)]
		public decimal GetOfferAmount(string offerName)
		{
			if (string.IsNullOrWhiteSpace(offerName))
			{
				return -1;
			}

			// Создаем экземпляр EntitySchemaQuery для создания запроса к объекту BpmProductInDeal
			var esqOfferOfTheDay = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "BpmProductInDeal");
			// Добавляем в результирующую выборку колонку BpmProductPrice объекта BpmProduct
			var price = esqOfferOfTheDay.AddColumn("BpmProduct.BpmProductPrice").Name;
			// Создаем фильтр записи "Продукт в предложении дня" по имени предложения дня
			var offerNameFilter = esqOfferOfTheDay.CreateFilterWithParameters(
			FilterComparisonType.Equal, "BpmDealsOfDay.BpmName", offerName);
			// Применяем созданный фильтр к выборке
			esqOfferOfTheDay.Filters.Add(offerNameFilter);
			// Получаем коллекцию записей
			var resultCollection = esqOfferOfTheDay.GetEntityCollection(UserConnection);

			if (resultCollection.Count() > 0)
			{
				decimal amount = 0;
				foreach (var entity in resultCollection)
				{
					// Суммируем цену продуктов из выборки
					amount += entity.GetTypedColumnValue<decimal>(price);
				}
				
				return amount;
			}

			return -1;
		}
	}
}
  1. Опубликуйте сервис, нажав кнопку «Опубликовать».

Рисунок 3 — Публикация сервиса

Рисунок 3 — Публикация сервиса

Вызов сервиса из клиентской схемы

Для вызова сервиса из страницы редактирования предложения дня, необходимо добавить кнопку и написать к ней обработчик нажатия.

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

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

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

  1. Откройте схему.
  2. Добавьте локализуемую строку.

Рисунок 5 — Создание новой локализуемой строки

Рисунок 5 — Создание новой локализуемой строки

  1. Измените исходный код:
// Для вызова пользовательского сервиса из клиентской части необходимо добавить модуль ServiceHelper
define("BpmDealsOfDayPage", ["ServiceHelper", "ProcessModuleUtilities"], function(ServiceHelper, ProcessModuleUtilities) {
	return {
		entitySchemaName: "BpmDealsOfDay",
		/** Свойство messages остается без изменений */
        messages: {},
		/** Свойство attributes остается без изменений */ 
        attributes: {},
        /** Свойство modules остается без изменений */ 
		modules: /**SCHEMA_MODULES*/{}/**SCHEMA_MODULES*/,
		/**  Свойство details остается без изменений */ 
        details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		/** Свойство businessRules остается без изменений */
        businessRules: /**SCHEMA_BUSINESS_RULES*/{}/**SCHEMA_BUSINESS_RULES*/,
		/** В свойство methods добавим обработчик нажатия на кнопку */ 
        methods: { 
            // Методы из шага 5 Автозаполенения предложения дня остаются без изменений.

			/* Обработчик нажатия кнопки */
			onCalculateAmountButtonClick: function(){
				// Получаем имя предложения дня
				let offerName = this.get("BpmName");
				// Параметры сервиса
				let data = {
					offerName : offerName
				};
				// Вызываем сервис, для вызова сервиса необходимо подключить модуль	ServiceHelper
				ServiceHelper.callService("BpmDayOfferAmountService", "GetOfferAmount", function(response){
					// Колбек функция.
					// Получаем результат работы сервиса
					let result = response.GetOfferAmountResult;
					// Выводим пользователю информацию
					this.showInformationDialog("Сумма продуктов в предложении дня " + result);
				}, data, this);
			}
		},
        /** Свойство dataModels остается без изменений */ 
		dataModels: /**SCHEMA_DATA_MODELS*/{}/**SCHEMA_DATA_MODELS*/,
		/** В свойство diff добавим кнопку.  */  
        diff: /**SCHEMA_DIFF*/[ 
			{
				"operation": "insert",
				"name": "CalculateAmountButton",
				"values": {
					"layout": {
						"colSpan": 24,
						"rowSpan": 1,
						"column": 0,
						"row": 2,
						"layoutName": "ProfileContainer"
					},
					"itemType": 5,
					"caption": {
						"bindTo": "Resources.Strings.BpmGetOfferAmountButtonName"
					},
					"click": {
						"bindTo": "onCalculateAmountButtonClick"
					}
				},
				"parentName": "ProfileContainer",
				"propertyName": "items",
				"index": 7
			},
            /** Остальные элементы свойства diff без изменений */ 
		]/**SCHEMA_DIFF*/
	};
});
  1. Сохраните изменения.

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

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

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

Рисунок 7 — Результат работы сервиса

Рисунок 7 — Результат работы сервиса

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

Начало разработки
Этап 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 Подписаться
Уважаемые клиенты! Предупреждаем о случаях недобросовестной конкуренции и мошенничестве в сети Интернет.
Подробнее