BIRT: Как получить доступ к значениям внешней таблицы во внутренней таблице события Onprepare ().? - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть две таблицы.Я не могу получить доступ к значению внешней таблицы строка ["Значение"] внутри Onprepare () событие внутренней таблицы в отчете BIRT.поэтому я могу использовать это значение для динамической установки ширины внутреннего столбца таблицы.как получить доступ к значению внешней таблицы в событии Onprepare ()?

Нет метода для столбца.Если я поместил ячейку, ширина выдает ошибку 12 см stacktrace: org.eclipse.birt.report.engine.api.EngineException: существуют ошибки при оценке скрипта "this.width =" 12cm ";": Wrapped java.lang.UnsupportedOperationException: Невозможно установить ширину ячейки, вместо этого установите ширину столбца.(/ Отчет / тело / таблица [@ ID = "3482"] / подробно / строке [@ ID = "3485"] / клетка [@ ID = "3486"] / таблица [@ ID = "98041"] / детали /строка [@ ID = "98063"] / клетка [@ ID = "98066"] / метод [@ имя = "OnCreate"] # 1)

1 Ответ

0 голосов
/ 26 ноября 2018

В строке внешней таблицы вы можете записать некоторые значения строки в переменную.
Во внутренней таблице вы можете получить доступ к этой переменной.

edit: вам нужна «переменная» с глобальнымобласть доступа.Один из способов сделать это - инициализировать переменную в скрипте initialize () отчета (beforeFactory () или onPrepare () также являются допустимыми параметрами)

myVar1 = 0;     //has global scope
var myVar2 = 0; //has only local scope

→ Попробуйте переместить скрипт вашей внутренней таблицы изonPrpare () для onCreate ()

вот простой пример отчета (обновленный связанный пример с динамической шириной)

В этом примере я передаю значение1 | 2 | 3 от внешнего до внутреннего стола.В onCreate () внутренней таблицы вы можете объединить это значение с соответствующей единицей, например.cm или in.Также убедитесь, что у вас есть «Фиксированный макет» (а не «Авто макет») для отчета.

//"this" is the table
this.width = myVar1 + ' cm'; // set inner table width

edit: установка ширины столбца внутренней таблицы вместо самой ширины таблицы также может быть выполнена из onCreate() этой внутренней таблицы.

/* initialize() of Report */
dynColWidth = null; // initialize a var with global scope to store an array

/* onCreate() of outerTable's Cell (using a DynamicText Field makes it more obvious) */
dynColWidth = [1*row["ID"], 2*row["ID"]];  // create the array with your 12 values here

/* onCreate() of innerTable ("this" is the table) */
var i;
for(i=0; i<this.getColumnCount(); i++) {
  this.getColumn(i).width = dynColumnWidth[i] + 'cm';
}
...