Создание пользовательского конфигурационного сервиса
Glossary Item Box
Описание примера
Создать пользовательский конфигурационный сервис, возвращающий идентификатор контакта по предоставленному имени. Если найденных контактов несколько, то необходимо возвратить идентификатор только первого найденного контакта. Если контакт не найден, сервис должен вернуть пустую строку.
Исходный код
Пакет с реализацией примера можно скачать по ссылке.
Алгоритм реализации примера
1. Создать схему [Исходный код]
В разделе [Конфигурация] на вкладке [Схемы] выполните действие [Добавить] — [Исходный код] ([Add] — [Source code]) (рис. 1).
Рис. 1. — Добавление схемы [Исходный код] ([Source Code])
Установите для схемы следующие свойства:
- Название ([Name]) — UsrCustomConfigurationService.
- Заголовок ([Title]) — UsrCustomConfigurationService.
2. Создать класс сервиса
На вкладке [Исходный код] (Source code) добавьте:
- Пространство имен, вложенное в Terrasoft.Configuration. Название может быть любым, например, UsrCustomConfigurationService.
- Пространства имен, типы данных которых будут задействованы в вашем классе. Для этого используется директива using. Полный перечень пространств имен приведен в исходном коде ниже.
- Класс, например, UsrCustomConfigurationService, унаследованный от Terrasoft.Nui.ServiceModel.WebService.BaseService. Пометьте класс атрибутами [ServiceContract] и [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)].
Пример исходного кода с объявлением класса приведен ниже.
3. Реализовать методы, соответствующие конечным точкам сервиса
Для реализации конечной точки возврата идентификатора контакта по его имени, добавьте в класс метод public string GetContactIdByName(string Name). Параметр Name должен принимать имя контакта. После обращения к базе данных с помощью EntitySchemaQuery, метод возвратит приведенный к строке идентификатор первого найденного контакта или значение "" (пустую строку).
Полностью исходный код с реализацией класса сервиса:
namespace Terrasoft.Configuration.UsrCustomNamespace { using System; using System.ServiceModel; using System.ServiceModel.Web; using System.ServiceModel.Activation; using Terrasoft.Core; using Terrasoft.Web.Common; using Terrasoft.Core.Entities; [ServiceContract] [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)] public class UsrCustomConfigurationService: BaseService { // Метод, возвращающий идентификатор контакта по его имени. [OperationContract] [WebInvoke(Method = "GET", RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json)] public string GetContactIdByName(string Name) { // Результат по умолчанию. var result = ""; // Экземпляр EntitySchemaQuery, обращающийся в таблицу Contact базы данных. var esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "Contact"); // Добавление колонок в запрос. var colId = esq.AddColumn("Id"); var colName = esq.AddColumn("Name"); // Фильтрация данных запроса. var esqFilter = esq.CreateFilterWithParameters(FilterComparisonType.Equal, "Name", Name); esq.Filters.Add(esqFilter); // Получение результата запроса. var entities = esq.GetEntityCollection(UserConnection); // Если данные получены. if (entities.Count > 0) { // Возвратить значение колонки "Id" первой записи результата запроса. result = entities[0].GetColumnValue(colId.Name).ToString(); // Также можно использовать такой вариант: // result = entities[0].GetTypedColumnValue<string>(colId.Name); } // Возвратить результат. return result; } } }
После внесения изменений сохраните и опубликуйте схему.
В результате выполнения примера в Creatio станет доступен новый конфигурационный сервис UsrCustomConfigurationService. При обращении к конечной точке GetContactIdByName этого сервиса, например, из браузера, будет возвращен идентификатор контакта (рис. 2) или значение "" (рис. 3).
Обратите внимание на формат результата вызова. В ответе о сервиса передается объект, содержащий свойство, название которого составлено из имени вызываемого метода и суффикса “Result”. Значение свойства объекта содержит возвращенное сервисом значение идентификатора контакта или пустую строку.
Рис. 2. — Результат выполнения запроса. Идентификатор контакта найден.
Рис. 3. — Результат выполнения запроса. Идентификатор контакта не найден.
При обращении к сервису без предварительного входа в приложение возникнет ошибка отсутствия авторизации (рис. 4).
Рис. 4. — Результат выполнения запроса. Нет авторизации.
Смотрите также: