[ELMA3] Пример работы со справочниками в сценариях
Для примера был создан справочник Город (имя свойства: City), имеющий свойство Наименование (имя свойства: Name) типа Строка. Рассмотрим загрузку городов по частичному совпадению имени. Переменная context.NazvanieGoroda - строка поиска. Список найденных городов записываем в переменную context.Goroda.
Примеры сценариев с использованием PublicAPI
Примечание
Актуальная документация по PublicAPI доступна по ссылке.
Внимание!
Сценарии, указанные ниже, актуальны для версий системы ELMA до 3.15.38 включительно.
Пространство имен:
1 | using EleWise.ELMA.API; |
Вариант 1: Использование менеджера объекта и фильтра
Текст сценария:
1 2 | var items = PublicAPI.Objects.UserObjects.UserCity.Filter().Name(context.NazvanieGoroda).Find(); context.Goroda.AddAll(items); |
Вариант 2: Загрузка записи справочника по Id
Текст сценария:
1 2 3 | var sprav = PublicAPI.CRM.Contractor.LoadOrNull(id); //- использован менеджер контрагентов, можно использовать любой //- в случае отсутствия записи в справочнике метод LoadOrNull вернет null var sprav = PublicAPI.CRM.Contractor.Load(id); // - в данном случае, при отсутствии записи справочника, возникнет исключение |
Примеры сценариев без использования PublicAPI
Сначала нужно подключить пространство имен:
1 2 3 4 5 6 | 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: Использование менеджера объекта и фильтра
1 2 3 4 5 6 7 | // Фильтр (класс 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
1 2 3 | var sprav = ContractorManager.Instance.LoadOrNull(id); //- использован менеджер контрагентов, можно использовать любой //- в случае отсутствия записи в справочнике метод LoadOrNull вернет null var sprav = ContractorManager.Instance.Load(id); // - в данном случае, при отсутствии записи справочника, возникнет исключение |
Вариант 3: Использование запросов на языке HQL (NHibernate)
1 2 3 4 5 | 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), но с типом связи Список. В этом случае после выполнения сценария эта переменная будет представлять собой список записей справочника, удовлетворяющих условиям поиска. В задачах результаты поиска в виде этой переменной удобнее и нагляднее отображать в режиме "только для чтения".