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);