logo

[ELMA3] Пример работы со справочниками в сценариях

Для примера был создан справочник Город (имя свойства: City), имеющий свойство Наименование (имя свойства: Name) типа Строка. Рассмотрим загрузку городов по частичному совпадению имени. Переменная context.NazvanieGoroda - строка поиска. Список найденных городов записываем в переменную context.Goroda.

Примеры сценариев с использованием PublicAPI

Примечание
Актуальная документация по PublicAPI доступна по ссылке.
Внимание!
Сценарии, указанные ниже, актуальны для версий системы ELMA до 3.15.38 включительно.

Пространство имен:

using EleWise.ELMA.API;

Вариант 1: Использование менеджера объекта и фильтра

Текст сценария:

var items = PublicAPI.Objects.UserObjects.UserCity.Filter().Name(context.NazvanieGoroda).Find();
context.Goroda.AddAll(items);

Вариант 2: Загрузка записи справочника по Id

Текст сценария:

var sprav = PublicAPI.CRM.Contractor.LoadOrNull(id);     //- использован менеджер контрагентов, можно использовать любой
                                                         //- в случае отсутствия записи в справочнике метод LoadOrNull вернет null
var sprav = PublicAPI.CRM.Contractor.Load(id);         // - в данном случае, при отсутствии записи справочника, возникнет исключение

Примеры сценариев без использования PublicAPI

Сначала нужно подключить пространство имен:

using EleWise.ELMA.ConfigurationModel;
using EleWise.ELMA.Model.Managers;
using EleWise.ELMA.Model.Services;
using EleWise.ELMA.Runtime.Managers;
using EleWise.ELMA.Runtime.NH;
using EleWise.ELMA.Services;

Вариант 1: Использование менеджера объекта и фильтра

// Фильтр (класс CityFilter) создается, если для объекта поставлена галочка "Генерировать фильтр".
         // Свойство в фильтре (filter.Name) доступно, если для свойства Name в объекте поставлена галочка "Участвует в поиске (фильтре)".
         var manager = EntityManager<City>.Instance;
         var filter = InterfaceActivator.Create<CityFilter>();
         filter.Name = context.NazvanieGoroda;
         var items = manager.Find(filter, null);
         context.Goroda.AddAll(items);
В менеджере доступен набор методов для работы с данным объектом (например: поиск, загрузка по идентификатору, сохранение, удаление).
Список методов можно узнать если набрать в редакторе сценариев "manager.". Должен появиться список доступных методов и комментариев к ним.

Вариант 2: Загрузка записи справочника по Id

var sprav = ContractorManager.Instance.LoadOrNull(id); //- использован менеджер контрагентов, можно использовать любой
                                                       //- в случае отсутствия записи в справочнике метод LoadOrNull вернет null
var sprav = ContractorManager.Instance.Load(id); // - в данном случае, при отсутствии записи справочника, возникнет исключение

Вариант 3: Использование запросов на языке HQL (NHibernate)

var session = Locator.GetServiceNotNull<ISessionProvider>().GetSession("");
var items = session.CreateQuery("from City where Name like :Name")
.SetParameter("Name", "%" + context.NazvanieGoroda + "%")
.List<City>();
context.Goroda.AddAll(items); 
Переменная Goroda должна иметь тип того справочника, в котором осуществляется поиск (в приведенном примере это объект City), но с типом связи Список. В этом случае после выполнения сценария эта переменная будет представлять собой список записей справочника, удовлетворяющих условиям поиска. В задачах результаты поиска в виде этой переменной удобнее и нагляднее отображать в режиме "только для чтения".