Jexl#

Запись jexl-макросов#

Сервис записи jexl-макросов позволяет воспроизвести действия, выполненные пользователем.

Записываются только вызовы Api и „Pkg“. Таким образом в макросе не будут присутствовать вызовы интерактивной логики.

Использование#

  1. Выполните пункт гл. меню Сервис - Инструменты - Начать запись jexl-скрипта. В главном меню слева появится красный флаг, символизирующий запись макроса

    Примечание

    Для начала записи скриптов необходимо сохранить или откатить все несохраненные данные во всех формах. При наличии несохраненных данных будет выдана ошибка:

       Невозможно изменить активность перехвата вызовов методов Api/Pkg для сессии, с начатой транзакцией.
       Сохраните изменения во всех формах приложения перед включением/отключением режима.
    
  2. Выполните действия, которые требуется записать

  3. Остановите запись скрипта. Нажмите на красный флаг в главном меню или выполните Сервис - Инструменты - Закончить запись jexl-скрипта

  4. Отобразится окно, в котором будет в виде текста представлен записанный jexl-скрипт.

  5. При закрытии окна будет предложено сохранить этот скрипт в Библиотеке скриптов.

Пример сформированного 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-скриптов.

  1. Стандартные права на приложение и к пункту меню Сервис - Инструменты - Закончить запись jexl-скрипта

  2. Доступ к пункту меню Сервис - Инструменты дополнительно регулируется объектной привилегией Доступ к инструментам меню Сервиса администрируемого объекта 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);