[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), но с типом связи Список. В этом случае после выполнения сценария эта переменная будет представлять собой список записей справочника, удовлетворяющих условиям поиска. В задачах результаты поиска в виде этой переменной удобнее и нагляднее отображать в режиме "только для чтения".