Jexl
Contents
Jexl#
Запись jexl-макросов#
Сервис записи jexl-макросов
позволяет воспроизвести действия, выполненные пользователем.
Записываются только вызовы Api
и „Pkg“. Таким образом в макросе не будут присутствовать вызовы интерактивной логики.
Использование#
Выполните пункт гл. меню
Сервис
-Инструменты
-Начать запись jexl-скрипта
. В главном меню слева появится красный флаг, символизирующий запись макросаПримечание
Для начала записи скриптов необходимо сохранить или откатить все несохраненные данные во всех формах. При наличии несохраненных данных будет выдана ошибка:
Невозможно изменить активность перехвата вызовов методов Api/Pkg для сессии, с начатой транзакцией. Сохраните изменения во всех формах приложения перед включением/отключением режима.
Выполните действия, которые требуется записать
Остановите запись скрипта. Нажмите на красный флаг в главном меню или выполните
Сервис
-Инструменты
-Закончить запись jexl-скрипта
Отобразится окно, в котором будет в виде текста представлен записанный
jexl-скрипт
.При закрытии окна будет предложено сохранить этот скрипт в
Библиотеке скриптов
.
Пример сформированного jexl-скрипта
(Создание печатной формы и ее версии):
var rop_Rpt_Report1 = Rpt_ReportApi.insert();
Btk_ObjectGroupApi.register(rop_Rpt_Report1, 27851L, 1B, 1B);
Rpt_ReportApi.setsSystemName(rop_Rpt_Report1, 'SomeReportName');
Rpt_ReportApi.setsCaption(rop_Rpt_Report1, 'Отчет');
Rpt_ReportApi.setidModule(rop_Rpt_Report1, 901L);
var rop_Rpt_ReportVersion1 = Rpt_ReportVersionApi.insertByParent(rop_Rpt_Report1);
Rpt_ReportVersionApi.setidReportType(rop_Rpt_ReportVersion1, 451L);
В сформированном скрипте все идентификаторы имеют исходный вид. Т.е. если этот скрипт предполагается использовать
на других базах данных
, где идентификаторы будут отличаться, то требуется заменить их получение в скрипте.
Например, на метод findByMnemoCode
.
Пример видоизмененного скрипта:
var rop_Rpt_Report1 = Rpt_ReportApi.insert();
Btk_ObjectGroupApi.register(rop_Rpt_Report1, 27851L, 1B, 1B);
Rpt_ReportApi.setsSystemName(rop_Rpt_Report1, 'SomeReportName');
Rpt_ReportApi.setsCaption(rop_Rpt_Report1, 'Отчет');
Rpt_ReportApi.setidModule(rop_Rpt_Report1, Btk_ModuleApi.findByMnemoCode('btk'));
var rop_Rpt_ReportVersion1 = Rpt_ReportVersionApi.insertByParent(rop_Rpt_Report1);
Rpt_ReportVersionApi.setidReportType(rop_Rpt_ReportVersion1, Rpt_ReportTypeApi.findByMnemoCode('jasper'));
Права#
Перечень необходимых привилегий для записи jexl-скриптов
.
Стандартные права на приложение и к пункту меню
Сервис
-Инструменты
-Закончить запись jexl-скрипта
Доступ к пункту меню
Сервис
-Инструменты
дополнительно регулируется объектной привилегиейДоступ к инструментам меню Сервиса
администрируемого объектаBtk_ManagementPkg
Обработка xlsx#
Для работы с xlsx
в jexl
используется библиотека poi.apache.org
Для удобства загрузки файлов написана функциональная библиотека Bts_XlsxPkg
.
Метод uploadParseFiles
открывает диалог выбора файла, а затем выбранный файл парсит, предоставляя разработчику возможность
кго обработки. Создается объект класса org.apache.poi.ss.usermodel.Workbook
.
Пример обработки xlsx:
var fun = x -> {
var sheet = x.getSheet("Материалы");
var lastRowNum = sheet.getLastRowNum();
var i = 1;
while (i <= lastRowNum ){
var svNomName = sheet.getRow(i).getCell(3).getStringCellValue(); // Условное наименование
var idvMSRItem = sheet.getRow(i).getCell(4).getNumberCellValue().toBigDeсimal(); // ЕИ
var idvGost = sheet.getRow(i).getCell(5).getStringCellValue(); // ГОСТ
var idvSortamentType = sheet.getRow(i).getCell(6).getNumberCellValue().toBigDeсimal(); // Тип сортамента
var rop_Bs_Goods1 = Bs_GoodsApi.insert();
Bs_GoodsApi.setsNomName(rop_Bs_Goods1, svNomName); // установка условного наименования
Bs_GoodsApi.setidMeasureItem(rop_Bs_Goods1, idvMSRItem); // установка ЕИ
Bs_GoodsApi.setsGost(rop_Bs_Goods1, svNomName); // установка условного наименования
Bs_GoodsApi.setsNomName(rop_Bs_Goods1, svNomName); // установка условного наименования
commit();
i = i+1;
}
true;
}
lib("Btk_XlsxLib").uploadParseFiles(fun);