ForeExecResult ForeExec(ForeId tFore, ForeExecArg tArg)
tFore. Моникёр объекта среды разработки, содержащего реализацию выполняемого метода.
tArg. Параметры выполнения операции.
Операция ForeExec выполняет методы, реализованные в Fore-модулях.
Для выполнения операции необходимо в поле tFore указать моникёр модуля/сборки, содержащего реализацию выполняемого метода. Моникёр может быть получен при выполнении операции GetObjects. В поле tArg.methodName укажите наименование выполняемого метода, а в поле tArg.args значения входных параметров метода. Реализация метода должна располагаться в глобальном пространстве имен.
Сигнатура метода должна содержать параметры простых типов и возвращать значение простого типа. Если метод возвращает какое-либо значение, то оно будет доступно в результате выполнения операции.
Если выполняемый метод содержит параметры с типом Object, то в качестве значения этих параметров должны передаваться строковые представления моникёров каких-либо объектов. При выполнении операции по моникёру будет получен и передан в выполняемый метод соответствующий объект репозитория. Для работы с этим объектом приведите его к интерфейсу, который описывает его структуру. Например, при передаче моникёра соединения с репозиторием параметр в методе будет иметь тип IMetabase, при передаче моникёра экспресс-отчета - IEaxAnalyzer и так далее.
Если передаётся моникёр бинарного объекта, сохранённого на сервере с помощью операции PutBin, то в выполняемом методе такой объект может быть приведён к интерфейсу IBinary.
При работе операции ForeExec не проверяется время изменения модулей/сборок, поэтому при первом выполнении метода в кэш сборок будет загружена текущая версия объекта из репозитория. Если в дальнейшем код метода изменяется, то его повторный запуск с помощью операции ForeExec приведёт к выполнению старой версии метода, которая уже имеется в кэше сборок. Для использования актуальной версии метода потребуется перезагрузка BI-сервера.
При разработке веб-приложения, из которого предполагается запуск на выполнение различных методов, используйте следующие рекомендации:
Используйте ForeExec для выполнения кода, который осуществляет простые вычисления или операции, не требующие затраты большого количества ресурсов и времени;
Если в коде выполняются ресурсоёмкие действия (вычисление отчетов, загрузка/преобразование больших объемов данных и другое), то рекомендуется рассмотреть возможность использования контейнера запланированных задач - создать задачу выполнения модуля и для управления задачей использовать операции для работы с контейнером запланированных задач;
При выборе конфигурации BI-сервера необходимо учитывать количество возможных ресурсоёмких действий, которые потребуется выполнить с помощью ForeExec параллельно. Количество ядер процессора (физических и логических) должно быть не меньше, чем количество возможных ресурсоёмких действий, запускаемых на выполнение в одном потоке.
Ввиду возможного использования операции ForeExec для выполнения кода, к которому конкретный пользователь не должен иметь доступа, существует ряд возможностей запрета выполнения операции:
Создание параметра Disallow со значением «1» в файле настроек BI-сервера settings.xml. Разрешение/запрет операции будет осуществляться BI-сервером.
Создание параметра foreExec со значением False в файле настроек веб-сервера PP.xml. Разрешение/запрет операции будет осуществляться веб-сервером. При этом для запрета операции в заголовке запроса будет автоматически формироваться параметр «p_h» со значением «1».
Примечание. Более подробно о месте расположения параметров читайте в описании соответствующих файлов конфигурации.
В заголовке запроса, выполняющего операцию ForeExec, сформировать параметр «p_h» или «p-h» со значением «1». Формирование параметра производится с использованием ресурсов того языка программирования, на котором ведется разработка в соответствии с прикладной логикой приложения. Например, при разработке на JavaScript код будет следующим:
<html>
<body>
<script language="javascript" type="text/javascript">
<!--...Предыдущий код приложения...-->
<!--...-->
<!--Функция для отправки JSON-запроса-->
function PostRequest(url, request) {
<!--...-->
var xhr = new XMLHttpRequest();
<!--...-->
xhr.setRequestHeader('p-h', '1');
<!--...-->
xhr.send(JSON.stringify(request));
<!--...-->
}
</script>
</body>
</html>
Различные варианты использования операции приведены в следующих примерах:
Наименование примера |
См. также: