К сожелению Java-класс, описаный в первой части, имеет ряд ограничений:
- Невозможно передать значение переменной бизнес-правила
- Нельзя использовать внутри FIX, получать код возврата
Что нужно сделать, чтобы CDF работала:
- Настроить Essbase (см. часть I)
- Создать и скомпилировать Java-класс
- Настроить безопасность
- Зарегистрировать Java-функцию в Essbase
1. Настраиваем Essbase.
см. часть I
2. Создаем и компилируем Java-класс.
2.1. Создаем файл ARBORPATH/java/udf/RunCmd.java
import java.util.*; import java.io.*; public class EssbaseRuRunTime { public static void main(com.hyperion.essbase.calculator.Context ctx, String[] args) { int i, n = args.length; String Str = args[0]; for (i=1; i Str = Str + " " + args[i]; } try {Runtime rt = Runtime.getRuntime(); Process proc = rt.exec(Str); int exitVal = proc.waitFor(); System.out.println(args[0]+" ExitValue: " + exitVal); } catch(Exception e) { System.out.println(e.getMessage()); System.out.println(args[0]); } } }2.2 Компилируем класс из каталога, где он расположен
javac RunCmd.java jar cf RunCmd.jar RunCmd.classПримечание: компилировать версией Java, которая инсталирована с Essbase
3. Настраиваем безопасность
3.1. В файл ARBORPATH/java/udf.policy добавляем следующие строки:
grant codeBase "file:${java.home}/udf/RunCmd.jar" { permission java.security.AllPermission; };
4. Регистрируем Java-функцию в Essbase
4.1. Выполняем слудующий MaxL скрипт
create function '@jRunCmd' as 'RunCmd.jRun' spec '@jRunCmd(arg1, arg2); @jRunCmd(arg1, @List(arg2, arg3,...));' comment 'Execute shell command';
4.2. Перегружаем Essbase
Пример запуска CDF из бизнес-правила
Текст правила VAR vA; FIX(Act, BegBalance…..) "FY10" ( vA = @jRunCmd( "../java/udf/scripts/alter_sub_var.sh" , @LIST ("Cons_Scenario", @Name({vScenario})) ); ); ENDFIX Текст ALTER_SUB_VAR.SH: ./startMaxl.sh ../java/udf/scripts/alter_sub_var.mxl $1 $2 Текст ALTER_SUB_VAR.MXL: login LOGINNAME identified by PASSWORD on SERVER; alter system set variable $1 $2; exit;
Полезные ресурсы
Документация Developing defined calculation functions
Блог hack4essbase.wordpress.com
Блог essbaselabs.blogspot.com