Динамические формы задач БП: Сценарий при изменении элемента блока
При создании сценария для элемента блока появляется дополнительный объект item:
public virtual void Calculate (Context context, P_RabotaSBlokamiVScenarii_Nomenclature item, EleWise.ELMA.Model.Views.FormViewBuilder<P_RabotaSBlokamiVScenarii_Nomenclature> form)
Этот объект предназначен для работы с полями редактируемого элемента. Дело в том, что для общего контекста процесса изменения, происходящие на форме редактирования элемента ещё не сохранены, если обратиться к блоку через объект context – данные будут неактуальными.
Также особенности сценариев на элементе блока не позволяют выполнять эти сценарии при редактировании элементов в табличном представлении.
Рассмотрим пример с двумя сценариями.
Данный код выполняется при редактировании блока (аналогично с предыдущим примером). Сценарий подсчитывает количество записей блока.
public virtual void CalculateCount (Context context, EleWise.ELMA.Model.Views.FormViewBuilder<Context> form)
{
context.Count = context.Nomenclature.Count;
}
Следующий сценарий выполняется на форме редактирования элемента блока.
В рамках сценария решаются две задачи:
- Получение информации из справочника Курс валюты.
- Вычисление цены и запись её в поле Цена в рублях элемента блока Номенклатура.
Следует отметить, что для такого использования фильтра необходимо в объекте Курс валюты установить флажок Генерировать фильтр и выбрать поле Валюта. Для этого в разделе Объекты необходимо открыть карточку объекта Курс валюты и на вкладке Дополнительные установить флажок Генерировать фильтр, а в карточке свойства Валюта на вкладке Дополнительно – флажок Участвует в поиске (фильтре). После публикации изменений потребуется перезапуск сервера.
Пример сценария:
public virtual void Calculate (Context context, P_RabotaSBlokamiVScenarii_Nomenclature item, EleWise.ELMA.Model.Views.FormViewBuilder<P_RabotaSBlokamiVScenarii_Nomenclature> form)
{
var manager = EntityManager<ExchangeCurrencyRate>.Instance;
var filter = InterfaceActivator.Create<ExchangeCurrencyRateFilter> ();
filter.CurrencyEstimated = item.Currency;
var result = manager.Find (filter, new FetchOptions (0, 1)).FirstOrDefault ();
item.PriceRubles = result.ExchangeRate * item.Sum;
}
Результат работы сценария: