1

ユーザーが(Ctrlキーを押しながら)複数の値を選択してレポートを表示できるMultiSelect List Box(Dynamic one)を使用することになっていました。

そのため、実装中にBeforeOpenメソッドで param 値を取得して DataSet に渡し、IN 演算子を使用して where 句に追加しようとしました。画面に SQL エラーが表示されました。したがって、param値を出力すると、 [Ljava.lang.Object;@26ba26ba]のようなもので、クエリでエラーが発生しました。スクリプトでその複数選択パラメータ値を処理してクエリに渡すことはできないと思いました。だからそのアイデアを落とした。

今、私はData set で BIRT の組み込みフィルター機能を使用しています。Beforeopen Methodでスクリプトを使用して SQL で行っていたことは、データセット Filter で同じことを行っています。row["dataColumn"]IN param["param"].valueを使用しましたが、正常に動作しています。フィルター画面から 1 つまたは複数の値を選択し、レポートを実行して適切な結果を得ることができます。

ここでもう 1 つ実装する必要があるのは、フィルター リスト ボックスに [すべて選択] が必要です。これにより、ユーザーは他の値を選択する代わりに、[すべて選択] を選択してすべてのデータのレポートを表示できるようになります。Select All に対して'%'を渡しています。IN 演算子を使用しているため、レポートでデータを取得できません。

複数選択とともにすべて選択機能を提供したいのですが、上記の制限のためにそれを行うことができません。別の方法として、Ctrl+A を使用してすべてを選択することもできますが、それも機能していますが、これは実装する必要がある要件によるものです。

BIRT version="3.2.17"を使用しています

どんなアイデアでも歓迎されます..事前に感謝します..:)

4

1 に答える 1

1

パラメータの選択肢に「すべて選択」オプションを追加できますか? これは、パラメーター クエリでユニオンを使用し、クエリ結果に「すべて選択」を追加するだけで実行しました。

通常、私が行うことは、パラメーターを簡単に置き換えることができる何かをクエリに追加することです。何かのようなもの:

SELECT myStuff
FROM myTables
/**where**/

その後、beforeOpen ステートメントで DataSet クエリを変更できます。

次のようなもの:

if(params["myParam"]!='Select All'){
    this.queryText=this.queryText.replace("/**where**/","WHERE myStuff IN ('" + params["myParams"].join("','") + "')");
} 

これは明らかに非常に単純化されていますが、求めていることを許可するために何らかの形式を使用できるはずです。

于 2013-04-13T16:21:21.090 に答える