3

Eclipse Birt を使用して、JSON ファイルからレポートを生成しています。

私のJSONファイルは次のようになります:

{  
"cells":[  
  {  
     "type":"basic.Sensor",
     "custom":{  
     "identifier":[  
           {  
              "name":"Name1",
              "URI":"Value1"

           },
           {  
              "name":"Name4",
              "URI":"Value4"
           }
        ],
        "classifier":[  
           {  
              "name":"Name2",
              "URI":"Value2"
           }
        ],
        "output":[  
           {  
              "name":"Name3",
              "URI":"Value3"
           }
        ],

     },
           "image":{  
           "width":50,
           "height":50,
           "xlink:href":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAABEJAAARCQBQGfEVAAAABl0RVh0U29mdHdhcmUAd3Vi8f+k/EREURQtsda2Or/+nFLqP6T5Ecdi0aJFL85msz2Qxyf4JIumMAx/ClmWt23GmL1kO54CXANAVH+WiN4Sx7EoNVkU3Z41BDHMeXAxjvOxNr7RJjzHX7S/jAflwBxkJr/RwiOpWZ883Nzd+Wpld7tkBr/SJr7ZHZbHZeuVweSnPfniocMAWYwcGBafH0OoPamFGAaY4ZBZjmmFGAaY4ZBZjmmFGAaY4ZBZjmmFGAaY7/B94QnX08zxKLAAAAAElFTkSuQmCC"
        }
     }
  },
  {  
     "type":"basic.Sensor",

     "custom":{  
        "identifier":[  
           {  
              "name":"Name1",
              "URI":"Value1"

           },
           {  
              "name":"Name4",
              "URI":"Value4"
           }
        ],
        "classifier":[  
           {  
              "name":"Name2",
              "URI":"Value2"
           }
        ],
        "output":[  
           {  
              "name":"Name3",
              "URI":"Value3"
           }
        ],

     },

        "image":{  
           "width":50,
           "height":50,
           "xlink:href":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9igAQAAAgAIoAEAAAIACKABAAACAAigAQAAAgAIoAEAAAIACKABAAACAAigAQAAAgAIoAEAAAIADqhvprADeSsau00l5NAAAAAElFTkSuQmCC"
        }
     }
  },
  {  
     "type":"basic.Platform",

     "custom":{  
        "identifier":[  
           {  
              "name":"Name1",
              "URI":"Value1"

           }
        ],
        "classifier":[  
           {  
              "name":"Name2",
              "URI":"Value2"
           }
        ],
        "output":[  
           {  
              "name":"Name3",
              "URI":"Value3"
           }
        ],

        "image":{  
           "width":50,
           "height":50,
           "xlink:href":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAA6TH0jqtg6U8EsCdnm3SpevSK7Pb85xABEMBuLAn2hxjRve7SFzYEaB/HhytLQ4ABRwCWBPvBKnRk6U8EkBeOD9f7iwAGHAGEYEmwDxLvzNKfCCDP8NGLQd3lY7D0JwI4kmlwfHhX6dTSXxsRAAHsWR7aUjc7uM5Wg=="
        }
     }
  }
]
 }

私は3つのセルを持っており、それぞれに1つの画像、1つの名前、1つのタイプ、3つのテーブルが含まれています。これは私がこれまでに行ったことです:ここに画像の説明を入力

私が苦労しているのは、ネストされたループです。JSON の各オブジェクト (セル) に対して、次のように番号付けされた段落が必要です。

  • 2.x コンポーネント セルの名前:
    • 画像
    • 出力テーブル
    • 識別子テーブル
    • 分類表

したがって、これを行うには、各セルを反復処理してから、各テーブルの出力、識別子、および分類子を反復処理する必要があります。これを行う方法、ネストされたループがわかりません。セルの数を表すリストのように、3 つのテーブル、1 つの画像、1 つの名前を含みます。

**編集: **これはデータセットのオープンメソッドです

// Grab the JSON file and place it in a string
fisTargetFile = new FileInputStream(new File("C:/Users/Sample Reports/moe.json"));
input = IOUtils.toString(fisTargetFile, "UTF-8");

// Store the contents in a variable
jsonData = input;

// Convert the String to a JSON object
myJSONObject = eval( '(' + jsonData + ' )' );

// Get the length of the object
len = myJSONObject.cells.length;

// Counter
count = 0;

フェッチ方法:

if(count < len) {
var name     = myJSONObject.cells[count].attrs.text["text"];
var type    = myJSONObject.cells[count].type;
var icon =myJSONObject.cells[count].attrs.image["xlink:href"];



icon = icon.split(",");

icon= icon[1];
imageDataBytes = icon;

row["name"]     = name;
row["type"]    = type;
row["icon"]    = Base64ToBlob.toBytes(icon);



Logger.getAnonymousLogger().info( row["icon"]);
count++;
return true;
}

return false;
4

1 に答える 1

3

ネストされたテーブルを使用したい場合は、ネストされたテーブルを外部テーブルにリンクする方法を示す優れたチュートリアルがあります。最初にこのデモを注意深く見てください。特に、サブテーブルがデータセット パラメーターを介して外部テーブルにリンクされている方法を確認してください。

もちろん、スクリプト化されたデータセットと複数のサブテーブルでこれを行う必要があるため、ケースはより困難です。サブテーブルごとに 1 つのスクリプト化されたデータセットを作成する必要があります。キーポイントは次のとおりです。

  • 各サブデータセットの「パラメーター」セクションで、入力パラメーターを 1 つ作成し、「systemID」などの名前を付けます。
  • 外部テーブル内の各データセットを「ドラッグ アンド ドロップ」してサブテーブルを作成します
  • 各サブテーブルの「バインディング」セクションで、パラメーター「systemID」を外部テーブルの ID フィールドにリンクします。
  • サブデータセットの「open」イベントでは、次の式でパラメータの値にアクセスします: inputParams["systemID"]したがって、「 myJSONObject 」で関連する行をフィルタリングできます。
  • 「 myJSONObject」が一度だけ初期化されることを確認することが重要です。そうしないと、反復ごとに評価されると、パフォーマンスが劇的に低下する可能性があります。たとえば、レポートの「初期化」イベントで評価します。

それだけです。簡単ではありませんが、これらの要素がこのレポートの達成に役立つはずです。

于 2015-05-26T15:38:04.810 に答える