Пользовательские поля системных объектов в сценариях

Объектная модель системы ELMA позволяет расширять её с помощью пользовательских объектов и/или свойств. Свойства, созданные пользователями в Дизайнере ELMA, могут быть добавлены в системные объекты. Подробнее об этом см. в справке по системе ELMA.

Рассмотрим подробнее, как обращаться к пользовательским свойствам объектов, добавленным в системные объекты. В сценариях процессов пользовательские свойства доступны через класс объекта. Например, Contractor для Контрагента или Product для Товара и услуги. Но в сценариях документов и объектов данные классы не доступны, и работать необходимо через специальный интерфейс, расширяющий системный. Например, IContractorConfigExt для Контрагента или IProductConfigExt для Товара и услуги. Это связано с тем, что объекты и документы, в отличие от процессов, собираются при старте системы, и в этом случае доступны только интерфейсы классов – сами классы ещё не собраны. Общее правило: к названию интерфейса добавляется суффикс ConfigExt.

Разберём это правило на примере доступа к пользовательским полям системного объекта в сценарии документа.

Примечание
Перед началом работы со сценариями рекомендуется ознакомиться со стандартами написания программного кода на языке C#.

Добавим в объект Товары и услуги (находится в папке Работа с клиентами) новое свойство 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 – свойство типа Контрагент.