2

Web 経由でレポートを作成するのに問題があります。レポートは HTML で実行すると期待どおりに動作しますが、一部のスクリプトは Web ビューアでは正しく動作しません。レポートの「初期化」フェーズでこのスクリプトを実行しています (多くの行が必要ではないことはわかっています。スクリプト構文エラーの可能性を確実に取り除きたいだけです)。

var inc_number;
var inc_number_old;
var contador;
var grupo;
var proveedor;
var contador_no_encaminadas;
var contador_encaminadas;
var contador_cerradas;
var estado;
var cliente_nombre;
var cliente_apellido;
contador = 0;
contador_no_encaminadas = 0;
contador_encaminadas = 0;
contador_cerradas = 0;
inc_number_old = 0;

そして、onRender トリガーを使用して、表の行で別の小さなスクリプトを実行しています。

inc_number =  row["Incident Number"];
grupo = row["Assigned Group"];
proveedor = row["Vendor Name"];
estado = row["Status"];
cliente_nombre = row["First Name"];
cliente_apellido = row["Last Name"];

if (inc_number != inc_number_old){

    contador++;

    if (proveedor != null && grupo != "SIGMA")
        contador_encaminadas++;

    if ((proveedor == null || proveedor == "") && (grupo == "SIGMA") && (estado != "Resolved" && estado != "Closed"))
        contador_no_encaminadas++;

    if (estado == "Resolved" || estado == "Closed")
        contador_cerradas++;
}   

inc_number_old = inc_number;

vars["contador_cerradas"] = contador_cerradas;
vars["contador_incidencias"] = contador;
vars["contador_no_encaminadas"] = contador_no_encaminadas;
vars["contador_encaminadas"] = contador_encaminadas;

お気づきかもしれませんが、これはすべて、さまざまなカウントのセットを表示するためのものです。この変数 (前のコード ブロックの最後の 4 行) を呼び出すテーブルにいくつかのデータ フィールドを設定して、レポートにこの数が表示されるようにします。ワークスペースのプレビュー タブを介して実行するか、[実行] メニューの html オプションを押すと、これらすべてが完全に機能しますが、Web ビューアーを介して実行しようとすると、すべてのカウントが 0 と表示されます (おそらくデフォルト変数の値)。誰かが私にこれを手伝ってくれたらとてもありがたいです。どういうわけか、選択したプレビューオプションに関係なく、セル上で実行されている他のスクリプトもいくつかあります。

ps私はBirt v2.5.1で作業しています。少し古いことは知っていますが、BMC Remedy ARSと統合するためにサポートされている唯一のバージョンであり、それが必要です。ありがとう!!

4

1 に答える 1

3

BIRT には、「直接」出力用と Web ビューアー用の異なるスクリプト フローがあります。レポート作成フェーズには、「生成」と「プレゼンテーション」の 2 つがあります。BIRT イベントのフロー図を参照してください。「直接」生成onCreateonRenderは、生成フェーズ (onCreate 行 1 ; onRender 行 1 ; onCreate 行 2 ; onRender 行 2 など) を通じてイベントが混合され、一緒にトリガーされます。initializeスクリプトは一度だけ実行されます。

反対に、Web Viewer は生成フェーズと表示フェーズに分かれています。最初にすべてonCreateが実行され、次にレポートが実質的に閉じられ (「すべてのスクリプト データが失われる」と考えてください)、次にすべてonRenderが実行されます。initialize1 回目は生成フェーズの前 (onCreate)、2 回目はプレゼンテーション フェーズの前 (onRender) の 2 回実行されます。onRender変数にはアクセスできない場合がありますrow['...']が、レポート要素の属性にはアクセスできますthis.foo

スクリプト変数は 1 つの一貫したフェーズに保持されるため、すべてのデータ操作をスクリプトでonCreateはなくスクリプトで行うことをお勧めします。onRender一部のページのプレゼンテーションは省略されている可能性があります (よくわかりません)。そのため、Web ビューアーでページ間をジャンプすると、間違った結果が生じる可能性があります。

生成フェーズとプレゼンテーション フェーズの間にデータを渡す必要がある場合は、それを永続的なグローバル変数に格納する必要があります。

setPersistentGlobalVariable("name", value); //in generation phase
...
var value = getPersistentGlobalVariable("name"); //in presentation phase

Report Designer でその変数を定義する必要はありません。上記の関数を使用するだけです。永続的なグローバル変数を使用する場合、小さなトラップが 1 つだけ発生する可能性があります。それらは Java でシリアライズ可能でなければなりません (一部の Java データ型では明らかな機能ではありません)。

于 2012-08-28T18:27:20.547 に答える