В этой статье мы посмотрим, где можно использовать язык программирования Fore.NET, а также обратим внимание на пользовательские функции метабазы как один из вариантов применения Fore.NET и Fore.
Fore.NET в Prognoz Platform
Отличительной особенностью сборки Fore.NET от сборок Fore является точка входа, именно это позволяет запускать сборки Fore.NET непосредственно из навигатора объектов. Это может быть как статическая функция main, так и форма, имеющая пустой конструктор.
Непосредственно писать программный код для Fore.NET можно только в среде разработки. Несмотря на это, Fore.NET применяется во многих ключевых возможностях Prognoz Platform. Давайте взглянем на них поподробнее.
Зачастую Fore.NET применяется в задачах планирования. Мы можем создать задачу «Выполнение сборки .NET», указать необходимые нам параметры и запустить планировщик задач. Таким образом, мы можем заставить Fore.NET работать по расписанию или по различным событиям, тем самым увеличивая гибкость системы и автоматизируя циклические процессы:

Следующая огромная область применения Fore.NET – отчетность. Мы подробнее остановимся на регламентных отчетах.
Создадим сборку Fore.NET «GLOBALSUBS», добавим в нее модуль, добавим программный код, вычисляющий разность двух целых чисел:
Теперь привяжем модуль Fore.NET к созданному нами регламентному отчету:

Теперь в необходимую ячейку можно добавить ссылку на нашу функцию «ForeNetDiffer», для этого достаточно выбрать ячейку и нажать на карандаш:
Далее в мастере функций заполнить параметры:

И получить ожидаемый результат:

Также можно в ячейку отчета добавлять гиперссылку, в дальнейшем на нее можно будет нажать, что приведет к вызову функции. В качестве имени функции необходимо указать ту же ссылку, которую нам собрал карандаш.
Разберем подробнее эту ссылку:
GLOBALSUBS.GlobalSubs.MyForeNETFunctions.ForeNetDiffer(10, 5)
GLOBALSUBS – имя нашей сборки. Для работы с гиперссылкой его указывать не надо т.к. мы указываем модуль, откуда будет выполняться процедура. Подробнее можно почитать в статье про Fore.
GlobalSubs – namespace самой сборки, задается в параметрах сборки, там же где и точка входа:

MyForeNETFunctions – имя namespace, которое мы указали.
MyForeNETFunctions – имя класса, содержащее в себе публичную статичную функцию Fore.NET. Публичные функции, которые не лежат в классах, автоматически помещаются в класс __Globals и помечаются как shared.
ForeNetDiffer – непосредственно имя нашей функции.
Также имеется возможность обрабатывать события отчетности в Fore.NET, это делается аналогично обработке событий Fore.
Пользовательские функции Prognoz Platform
Мы посмотрели основные места, где используется Fore.NET, однако в Prognoz Platform есть не особо распространенная, но очень полезная функциональность, отвечающая на вопросы: «Что делать в том случае, если необходимо использовать различные функции из различных модулей, при этом не имея желания постоянно подключать сборки в отчетность? Или в том случае, когда такие функции необходимо использовать, например, в моделировании?» Для таких целей в Prognoz Platform есть пользовательские функции. Прежде всего необходимо отметить, что пользовательские функции – часть глобальных объектов, которые являются специальными объектами метабазы.
Для того чтобы работать с глобальными Fore-функциями, нам необходимо получить Methods объекта ISharedParams текущей метабазы. Работа с глобальными Fore.NET функциями ведется через NETMethods объекта ISharedParamsEx текущей метабазы. Для получения этих объектов можно выполнить следующий программный код:
Теперь рассмотрим подробнее интерфейс коллекции методов Fore – IForeMethods:
Item(Key): IForeMethod – данная функция позволяем получить пользовательскую Fore-функцию по ее ключу
Count: Integer – количество пользовательских функций
Add: IForeMethod – добавить пользовательскую функцию
Remove(Key) – удалить пользовательскую функцию из коллекции
Clear – отчистить коллекцию
RemoveByKey(Key) – удалить пользовательскую функцию по ключу
Коллекция методов Fore.NET имеет сходные методы, но она работает с IForeNETMethod.
Теперь рассмотрим непосредственно строение IForeMethod и IForeNETMethod, они оба наследуются от IBaseMethod:
Свойства:
Assembly – имя сборки, в котором находится метод
Method – название метода в сборке
Category – имя категории, в которой будет хранится метод
Name – имя пользовательского метода
Description – описание пользовательского метода
ResultType – возвращаемый тип
Tag – тэг
Только для чтения:
Key – ключ метода
Методы:
Bind – инициализирует пользовательский метод
Помимо выше перечисленного, в IForeMethod присутствуют свойства Params (параметры пользовательского метода) и Type (тип пользовательского метода). В IForeNETMethod присутствуют свойства Namespace и Params.
Теперь перейдем непосредственно к примеру применения пользовательских методов.
Прежде всего добавим эти методы, для этого добавим Fore-сборку «FFUNCS» со следующим программным кодом:
И Fore.NET-сборку «FNETFUNCS» со следующим программным кодом:
Обратим внимание на следующие моменты:
1. Мы можем итерировать пользовательские коллекции методов оператором For Each.
2. В начале идет добавление метода в коллекцию, а потом его настройка.
3. После любых манипуляций с глобальными объектами необходимо их сохранять: (Shp(Ex) As IMetabaseobject).Save;
Теперь добавим нашу глобальную функцию Fore:
И Fore.NET:
Обратим внимание, что если метод находится в классе, то необходимо имя метода указывать как имя_класса.имя_метода.
После данных манипуляций у нас в глобальных параметрах метабазы будут храниться наши Fore-метод и Fore.NET-метод.
Теперь посмотрим где и как мы можем это использовать.
Прежде всего глобальные методы применяются в отчетности, для их автоматического прописывания также необходимо нажать на карандаш и выбрать нужный метод. Обратим внимание, что никакие сборки к отчету не подключены:


Ну и как результат:

Аналогично все работает и с Fore:

Кроме того, пользовательские методы подключены в некоторых универсальных редакторах формул, например, в моделировании:

Заключение
Мы рассмотрели использование языка Fore.NET в Prognoz Platform, а также научились делать платформу более удобной и гибкой за счет пользовательских методов.
Кстати, если вы работаете с 9 версией платформы, то в ней пользовательские функции добавляются прямо через графический интерфейс.

В случае возникновения вопрос к этому циклу статей всегда можно обратиться с вопросом в комментариях, ни один вопрос не останется без внимания 🙂
Комментарии