レポートパラメータから複数の値を渡そうとすると、BIRTに問題が発生します。
BIRT2.6.2とeclipseを使用しています。
カスケードパラメータグループの最後のパラメータ「JDSuser」から複数の値を入力しようとしています。パラメータは複数の値を持つことができ、リストボックスを使用しています。
これを可能にするために、テキストをjavascriptに置き換えるwhere-inステートメントを使用してSQLクエリを記述しています。そうしないと、BIRTsqlはレポートパラメータから複数の値を取得できません。
私の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' )
そして、beforeOpen状態のそのデータセットのJavaScriptコードは次のとおりです。
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);
}
さまざまな見積もりのバリエーションを試しましたが、これではエラーメッセージは表示されませんが、1つの値を選択するとデータベースからデータが取得されませんが、少なくとも2つの値を選択すると、最後に選択した値のデータが取得されます。
これらの追加の引用スクリプト行の1つをコメント解除すると、次のような構文エラーが発生します。
次の項目にエラーがあります。テーブル(id = 597):+処理中に例外が発生しました。詳細については、次のメッセージを参照してください。データセットのクエリ実行の準備に失敗しました:組織結果セットのメタデータを取得できません。org.eclipse.birt.report.data.oda.jdbc.JDBCException:SQLステートメントはResultSetオブジェクトを返しません。SQLエラー#1:SQL構文にエラーがあります。25行目の「rudolfs.sviklis」、「sample」) 'の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:SQL構文にエラーがあります。25行目の「rudolfs.sviklis」、「sample」) 'の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。
また、私は実際の例から見てこれを行っていることをお伝えする必要があります。すべてが同じで、前のコードで同じ構文エラーが発生しました。同じことを行うこのスクリプトに変更しました。例はここにあります:http://developer.actuate.com/community/forum/index.php? / files / file / 593-default-value-all-with-multi-select-parsmeter /
誰かが私に少なくとも私が何をすべきかについての手がかりを与えることができれば、それは素晴らしいことです。
パラメータのvalueプロパティを常に使用する必要があります。
var users = params["JDSuser"].value;
「userquery」を引用符で囲む必要はありません。これらの引用符は、「sample」の周りのSQLクエリにすでに配置されているためです。さらに、userqueryが次の行でまだ定義されていないため、間違いがあります。
var userquery = userquery + users.join("', '");
これにより、クエリに「null」などの文字列が導入される可能性があります。したがって、userquery変数へのすべての参照を削除し、最後に次の式を使用するだけです。
this.queryText=this.queryText.replaceAll('sample', users.join("','"));
結合式の空白スペースを削除したことに注意してください。最後に、正常に機能したら、値がnullかどうかをテストして、レポート入力をより堅牢にする必要があります。
if( params["JDSuser"].value!=null && params["JDSuser"].value[0] != "(All Users)" ){
//Do stuff...
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加