2014-08-28 2 views
0

У меня есть отчет BIRT для Maximo с двумя наборами сценариев. Основной набор данных для запросов на покупку и набор данных для строк запроса на покупку. Проблема в том, что набор поддисков работает нормально для одного запроса на покупку и печатает правильные данные для любого PR, но если вы запускаете отчет для нескольких PR, для каждого PR печатаются строки pr для первого PR.Набор данных BIRT печатает одинаковые данные для каждого элемента

Так что я получаю что-то вроде этого.

PR 10

Линия 1

Линия 2

PR 20

Линия 1

Линия 2

Когда PR 20 должен иметь 10 строк, это только дает мне два, а те два - те же строки, что и PR 10. Я установил отчет для распечатки SQL, который создается набором данных, путем заполнения глобальной переменной mySQL и печати в отчете. SQL выглядит отлично, и я могу вырезать и вставить его в свой редактор SQL и получить правильные результаты, но это не то, что распечатывается в отчете. Я проверил привязки таблиц, я попытался исключить набор данных в скрипте и заставить его повторно заселять, но это не влияет. Я создал новый набор данных, но новый набор данных делает то же самое.

Кто-нибудь сталкивался с этим раньше? Любые идеи вообще о том, что проверить? Или как я могу разобраться в наборе данных для каждого PR, чтобы набор данных PRLINE был чистым для каждого PR?

Это открытый сценарий для набора данных.

lineDataSet = MXReportDataSetProvider.create(this.getDataSource().getName(),   this.getName()); 
lineDataSet.open(); 

var sqlText = new String(); 

// Add query to sqlText variable. 
sqlText = "select orderqty, orderunit, itemnum, description, unitcost, linecost, prnum, prlinenum, refwo, assetnum, location, project,tasknum, siteid from maximo.prline_vw " 
+ " where prnum = '" + rows[0]["prnum"].replace(/'/g,"''") + "'" 
+ " and siteid = '" + rows[0]["siteid"] + "'" 
//+ " where prnum = '" + row._outer["prnum"] + "'" 
//+ " and siteid = '" + row._outer["siteid"] + "'" 
// Include the Maximo where clause 
//+ " and " + params["where"] 
; 

lineDataSet.setQuery(sqlText); 

mySQL = sqlText; 

И это сценарий выборки.

if (!lineDataSet.fetch()) 
return (false); 

// Add a line for each output column 
// The specific get method should match the data type of the output column. 
row["prlinenum"] = lineDataSet.getString("prlinenum"); 
row["orderqty"] = lineDataSet.getFloat("orderqty"); 
row["orderunit"] = lineDataSet.getString("orderunit"); 
row["unitcost"] = lineDataSet.getFloat("unitcost"); 
row["linecost"] = lineDataSet.getFloat("linecost"); 
row["prnum"] = lineDataSet.getString("prnum"); 
row["itemnum"] = lineDataSet.getString("itemnum"); 
row["refwo"] = lineDataSet.getString("refwo"); 
row["siteid"] = lineDataSet.getString("siteid"); 
row["description"] = lineDataSet.getString("description"); 
row["project"] = lineDataSet.getString("project"); 
row["tasknum"] = lineDataSet.getString("tasknum"); 
row["assetnum"] = lineDataSet.getString("assetnum"); 
row["location"] = lineDataSet.getString("location"); 


return (true); 
+0

Вы пытались отключить кеш для набора данных через Properties-> Dataset-> Advanced-> Нужный кеш для data-engine = false? – SiMemon

+0

Я не могу найти эту недвижимость SiMemon. Я на BIRT 3.7.1 Является ли это свойство доступным для моей версии? – user3393181

+0

Вы правы, он недоступен в BIRT 3.7.1. Почему бы вам не перейти на более новую версию? – SiMemon

ответ

0

не прочитав детали:

Общая причина этого заключается в том, что ваш сценарий набор данных использует переменную. То есть результаты зависят от значения переменной, но BIRT этого не знает. Кэширование результатов набора данных BIRTs зависит от параметров DS. Если вы добавите глобальную переменную в качестве параметра DS в DS, тогда механизмы кэширования знают, что результаты зависят от нее, и все готово. Если нет, BIRT считает, что результаты всегда одинаковы.

+0

Привет, hvb. Можете ли вы быть более гибким? Вы говорите, что мне нужно добавить переменную для набора данных в качестве глобальной переменной? Если это так, мне просто нужно объявить переменную как глобальную в инициализации отчета? Или мне нужно переместить всю строку toolDataSet = MXReportDataSetProvider.create (this.getDataSource(). GetName(), this.getName()); Выйти из отчета? Единственная переменная, которую использует набор сценариев данных, - это строки [0] ["wonum"]. Что печатает в отчете? Хотя он не работает в наборе данных, по-видимому. – user3393181

+0

Ваша подробная информация DataSet (для PR-линий) зависит от текущей строки основного DataSet (для PR). Точнее, на объекте Java «lineDataSet». Таким образом, вы должны либо отключить кеширование, либо создать DS-параметр «ds» для подробных DS, использовать * это * в подробных событиях DS с this.getInputParameterValue («ds») и привязать его к объекту lineDataSet в макете. – hvb

+0

Ты нахожусь над моей головой hvb. :) Я не мог найти способ отключить кеширование в BIRT 3.7.1 А что касается остальных. Я не знаю, что такое DS Parameter? Разве это отличается от обычного параметра отчета? И когда вы говорите, привяжите его к объекту lineDataSet в макете, вы говорите, что у вас есть только скрытое поле, которое устанавливает «ds» в номер заказа на работу (или что бы я ни делал)? – user3393181

0

Это, похоже, происходит только при просмотре отчета от разработчика Eclipse BIRT. Если я загружу отчет в рабочую среду и протестирую его, он работает нормально. Значит, это должно быть связано с тем, как кэшируются сценарии источников данных и как разработчик справляется с этим?

Смежные вопросы