Пользовательские поля системных объектов в сценариях
Объектная модель системы ELMA позволяет расширять её с помощью пользовательских объектов и/или свойств. Свойства, созданные пользователями в Дизайнере ELMA, могут быть добавлены в системные объекты. Подробнее об этом см. в справке по системе ELMA.
Рассмотрим подробнее, как обращаться к пользовательским свойствам объектов, добавленным в системные объекты. В сценариях процессов пользовательские свойства доступны через класс объекта. Например, Contractor для Контрагента или Product для Товара и услуги. Но в сценариях документов и объектов данные классы не доступны, и работать необходимо через специальный интерфейс, расширяющий системный. Например, IContractorConfigExt для Контрагента или IProductConfigExt для Товара и услуги. Это связано с тем, что объекты и документы, в отличие от процессов, собираются при старте системы, и в этом случае доступны только интерфейсы классов – сами классы ещё не собраны. Общее правило: к названию интерфейса добавляется суффикс ConfigExt.
Разберём это правило на примере доступа к пользовательским полям системного объекта в сценарии документа.
Добавим в объект Товары и услуги (находится в папке Работа с клиентами) новое свойство Artikul. Опубликуем справочник в Дизайнере ELMA. Далее создадим новый тип документа Коммерческое предложение и добавим в него блок Позиции, в котором создадим свойство Tovar типа Товары и услуги и свойство Artikul, которое будем заполнять при выборе товара из справочника Товары и услуги. Укажем при изменении свойства блока Tovar сценарий SetArtikul.
public void SetArtikul(ISACommercialOffer entity, ISACommercialOffer_Pozicii item, EleWise.ELMA.Model.Views.FormViewBuilder<ISACommercialOffer_Pozicii> form) { // для получения доступа к пользовательскому свойству Artikul, приводим свойство блока Tovar к интерфейсу IProductConfigExt item.Artikul = (item.Tovar as IProductConfigExt).Arktikul; }
Аналогично правило работает и в объектах. Например, если добавить в контрагенте пользовательское свойство Название на родном языке (NativeName), то в сценариях документов и других объектов системы обратиться к нему можно будет через выражение (contractor as IContractorConfigExt).NativeName, где contractor – свойство типа Контрагент.