2014-09-09 4 views
3

У меня проблема с BIRT, когда я пытаюсь передать несколько значений из параметра отчета.Множественные значения параметров

Я использую BIRT 2.6.2 и затмение.

Я пытаюсь поместить несколько значений из каскадного параметра группы последний параметр «JDSuser». Параметру разрешено иметь несколько значений, и я использую список.

Для того, чтобы это сделать, я пишу свой sql-запрос с инструкцией where-in, где я заменяю текст на javascript. В противном случае BIRT sql не может получить несколько значений из параметра отчета.

My SQL запрос

select jamacomment.createdDate, jamacomment.scopeId, 
jamacomment.commentText, jamacomment.documentId, 
jamacomment.highlightQuote, jamacomment.organizationId, 
jamacomment.userId, 
organization.id, organization.name, 
userbase.id, userbase.firstName, userbase.lastName, 
userbase.organization, userbase.userName, 
document.id, document.name, document.description, 
user_role.userId, user_role.roleId, 
role.id, role.name 

from jamacomment jamacomment left join 
userbase on userbase.id=jamacomment.userId 
left join organization on 
organization.id=jamacomment.organizationId 
left join document on 
document.id=jamacomment.documentId 
left join user_role on 
user_role.userId=userbase.id 
right join role on 
role.id=user_role.roleId 

where jamacomment.scopeId=11 
and role.name in ('sample grupa') 
and userbase.userName in ('sample') 

и мой Javascript код этого набора данных на beforeOpen состоянии:

if(params["JDSuser"].value[0] != "(All Users)"){ 
this.queryText=this.queryText.replaceAll('sample grupa', params["JDSgroup"]); 
var users = params["JDSuser"]; 
//var userquery = "'"; 
var userquery = userquery + users.join("', '"); 
//userquery = userquery + "'"; 
this.queryText=this.queryText.replaceAll('sample', userquery); 
} 

I судимое много различных вариантов цитаты, с этим я не получаю сообщения об ошибках, но если я выберу 1 значение, я не получаю никаких данных из базы данных, но если я выберу не менее двух значений, я получу последние данные выбранного значения.

Если я раскомментировать один из этих дополнительных линий цитаты сценария, то я получаю ошибку синтаксиса, как это:

Следующие элементы имеют ошибки: Таблицы (ID = 597): + Исключение во время обработки , Для получения дополнительной информации см. Следующее сообщение: Не удалось подготовить выполнение запроса для набора данных : Организация Не удается получить метаданные набора результатов. org.eclipse.birt.report.data.oda.jdbc.JDBCException: оператор SQL не возвращает объект ResultSet. Ошибка SQL # 1: у вас есть ошибка в ваш синтаксис SQL; проверьте руководство, соответствующее вашей серверной версии MySQL , для правильного синтаксиса для использования рядом с 'rudolfs.sviklis', 'sample') 'в строке 25; com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: У вас есть ошибка в синтаксисе SQL; проверьте руководство, которое соответствует вашей версии сервера MySQL для корректного синтаксиса использовать вблизи «rudolfs.sviklis», «образец»)»в строке 25

Кроме того, я должен сказать вам, что я делаю это глядя на рабочий пример. Все одно и то же, предыдущий код привел к той же синтаксической ошибке, я изменил его на этот скрипт, который делает то же самое. Пример можно найти здесь: http://developer.actuate.com/community/forum/index.php?/files/file/593-default-value-all-with-multi-select-parsmeter/

Если кто-то может дать мне хотя бы ключ к тому, что я должен делать, это было бы здорово.

ответ

3

Вы должны всегда использовать свойство значения параметра, т.е .:

var users = params["JDSuser"].value; 

Не надо окружить «userquery» в кавычках, потому что эти котировки уже введены в запросе SQL Arround «образец». Кроме того, существует ошибка, потому что userquery еще не определен в строке:

var userquery = userquery + users.join("', '"); 

Это может ввести строку, например «нуль» в запросе.Поэтому удалить все ссылки на userquery переменной, просто использовать это выражение в конце:

this.queryText=this.queryText.replaceAll('sample', users.join("','")); 

Примечание я удалил пробел в выражении объединения. Наконец, как только это будет прекрасно, вам, вероятно, нужно будет сделать ваш отчет более надежным, если значение будет null:

if(params["JDSuser"].value!=null && params["JDSuser"].value[0] != "(All Users)"){ 
    //Do stuff... 

} 
+0

Спасибо за ваш ответ, хотя это мне не помогло. Я не получаю никаких данных, либо я выбираю 1 значение или 2 значения. Думал, что вы спасете мне несколько строк кода, а не нулевое значение тоже хорошо. Любые другие идеи? – rudolfs

+0

Хм, это должно сработать. Я бы рекомендовал сохранить содержимое окончательного «this.queryText» в глобальной переменной и временно отобразить эту переменную в динамическом тексте отчета. Таким образом, вы увидите сгенерированный запрос, и, вероятно, вам будет легче узнать, что не так. – Dominique

+0

Спасибо Dominique, ваш совет по глобальным переменным помог мне, я узнал, что я оставил разные имена для замены для параметра группы, поэтому он не изменился. Это работает. Теперь я должен выяснить, как исправить проблему, чтобы показать всех пользователей, потому что она не работает. – rudolfs

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