Fore.NET, Fore и пользовательские функции в продукте «Форсайт. Аналитическая платформа»
В этой статье мы посмотрим, где можно использовать язык программирования Fore.NET, а также обратим внимание на пользовательские функции метабазы как один из вариантов применения Fore.NET и Fore.
Fore.NET в продукте «Форсайт. Аналитическая платформа»
Отличительной особенностью сборки Fore.NET от сборок Fore является точка входа, именно это позволяет запускать сборки Fore.NET непосредственно из навигатора объектов. Это может быть как статическая функция main, так и форма, имеющая пустой конструктор.
Непосредственно писать программный код для Fore.NET можно только в среде разработки. Несмотря на это, Fore.NET применяется во многих ключевых возможностях «Форсайт. Аналитическая платформа». Давайте взглянем на них поподробнее.
Зачастую 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.
Пользовательские функции платформы
Мы посмотрели основные места, где используется Fore.NET, однако в платформе есть не особо распространенная, но очень полезная функциональность, отвечающая на вопросы: «Что делать в том случае, если необходимо использовать различные функции из различных модулей, при этом не имея желания постоянно подключать сборки в отчетность? Или в том случае, когда такие функции необходимо использовать, например, в моделировании?» Для таких целей в продукте «Форсайт. Аналитическая платформа» есть пользовательские функции.
Прежде всего необходимо отметить, что пользовательские функции – часть глобальных объектов, которые являются специальными объектами метабазы.
Для того чтобы работать с глобальными 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 в продукте «Форсайт. Аналитическая платформа», а также научились делать платформу более удобной и гибкой за счет пользовательских методов.
Кстати, пользовательские функции добавляются в платформе прямо через графический интерфейс.
В случае возникновения вопрос к этому циклу статей всегда можно обратиться с вопросом в комментариях, ни один вопрос не останется без внимания 🙂