- невозможно использовать переменные подстановки (Substitution varaibles) т.к. изменение переменной одним пользователем, может отразиться в расчете другого пользователя
- необходимо дополнительно создавать имена файлов выгрузок с уникальными именами
Предлагаю вам вариант выгрузки данных из одного куба в другой без использования переменных постановки.
Для это нам надо создать шаблон MaxL скрипта, который будет выполнять выгрузку/загрузку и shell-скрипт, который будет создавать копию MaxL c уникальным именем, выставлять необходимые переменные и запускать его.
Шаблон MaxL-скрипта Export.mxl
login user identified by 'password' on localhost; /* Export data from cube1 */ execute calculation ' FIX ( "VR_Work", "ACT", @RELATIVE("&vEntity",0) ) DATAEXPORT "File" " " "./export_data_&file_id.txt" "#MI"; ENDFIX' on Test.Cube1; /* Clear data to Cube2 */ execute calculation ' FIX ( "ACT", @RELATIVE("&vEntity",0) ) CLEARDATA "VR_Work"; ENDFIX' on TEST.Cube2; /* Import data to Cube2 */ import database TEST.Cube2 data from data_file "./export_data_&file_id.txt" /*using rules_file "some_rule_if_necessary"*/ on error write to "./export_data_&file_id.err"; exit;
Shell-скрипт Export.sh
#!/bin/bash #Создаем переменные R=$RANDOM #уникальный идентификатор файлов (можно в конец добавить $R) file_id=`date '+%Y%m%d_%H%M%S'` #создаем Maxl-скрипт из шаблона и проставляем переменые sed -e 's/&file_id/'${file_id}'/' ./export.mxl | sed -e 's/&vEntity/'$1'/' > ./export_${file_id}.mxl #запускаем MaxL ./startMax.sh ./export_${file_id}.mxl
Запускаем скрипт c параметром филиал:
./Export.sh EN_RUSSIA
У нас появятся файлы
- Export_20110909_180650.mxl (MaxL, все переменные уже проставлены)
- Export_20110909_180650.log
- Export_data_20110909_180650.txt - файл с данными
- открывает ./export.mxl
- заменяет &file_id на ${file_id} (в нашем случае 20110909_180650)
- заменяет &vEntity на $1 (в нашем случае EN_RUSSIA)
- записывает изменения в ./export_${file_id}.mxl
Листинг Export_20110909_180650.mxl
login user identified by 'password' on localhost; /* Export data from cube1 */ execute calculation ' FIX ( "VR_Work", "ACT", @RELATIVE("EN_RUSSIA",0) ) DATAEXPORT "File" " " "./export_data_20110909_180650.txt" "#MI"; ENDFIX' on Test.Cube1; /* Clear data to Cube2 */ execute calculation ' FIX ( "ACT", @RELATIVE("EN_RUSSIA",0) ) CLEARDATA "VR_Work"; ENDFIX' on TEST.Cube2; /* Import data to Cube2 */ import database TEST.Cube2 data from data_file "./export_data_20110909_180650.txt" /*using rules_file "some_rule_if_necessary"*/ on error write to "./export_data_20110909_180650.err"; exit;
P.S. Как запустить shell-скрипт из бизнес-правила читай CDF