ページの先頭行へ戻る
Symfoware Analytics Server(Operational Data Store編) アプリケーション開発ガイド
FUJITSU Software

2.2.3 抽出結果取得

requestSelectメソッドで返却された抽出結果情報から、抽出したデータや蓄積添付ファイルを取得する方法について説明します。

2.2.3.1 抽出したデータをオブジェクトで取得する

requestSelectメソッドで返却された抽出結果情報から、抽出したデータのXML文書またはCSVレコードをStringとして、Stringの配列で取得します。
抽出したデータをStringの配列で取得する手順を以下に示します。

  1. openDataメソッドで抽出結果情報をオープン

  2. 以下のいずれかのメソッドで抽出したデータを取得

    • readDataメソッド

    • readDataExメソッド

  3. closeDataメソッドで抽出結果情報をクローズ


readDataメソッドを使用して抽出したデータを取得する場合の記述例

IisAPI api = new IisAPI();

:(環境設定)

// 抽出を依頼
String[] select_result = api.requestSelect(searchCode, resultCode);
// 戻り値を設定する変数
boolean ret = false;
// 抽出結果件数分、抽出結果を取得
int count = api.getDataCount();
if (count > 0) {
  // 抽出結果情報のオープン
  ret = api.openData(select_result);
  if (!ret) {
    // エラー処理
  }
  // 抽出したデータを取得
  int get_count = 10;
  String read_data[] = null;
  while(true) {
    read_data = api.readData(get_count);
    if (read_data == null) {
      if (api.getLastError() != 0) {
        // エラー処理
      }
      break;
    }
    :
  }
  // 抽出結果情報のクローズ
  ret = api.closeData();
  if (!ret) {
    // エラー処理
  }
}
// 抽出結果情報の破棄
ret = api.deleteInstance(select_result);
:

参考

readDataExメソッドは、抽出したデータに紐付く蓄積添付ファイルを取得したい場合に使用します。readDataExメソッドの使用方法については、 “2.2.3.3 蓄積添付ファイルを取得する”を参照してください。


2.2.3.2 抽出したデータをファイルに出力する

requestSelectメソッドで返却された抽出結果情報から抽出したデータをファイルに出力します。抽出したデータをファイルに出力するには、outputResultFileメソッドに抽出結果情報と出力先のファイル名を指定します。

記述例

IisAPI api = new IisAPI();

:(環境設定)

// 抽出を依頼
String[] select_result = api.requestSelect(searchCode, resultCode);
// 戻り値を設定する変数
boolean ret = false;
// 抽出したデータを出力するファイル名
String filePath = "/DATA/outfile.csv";
// 抽出したデータをファイルに出力
ret = api.outputResultFile(filePath, select_result);
:
// 抽出結果情報の破棄
ret = api.deleteInstance(select_result);
:

2.2.3.3 蓄積添付ファイルを取得する

requestSelectメソッドで返却された抽出結果情報から、蓄積添付ファイルを取得します。

蓄積添付ファイルを取得する手順を以下に示します。

  1. openDataメソッドで抽出結果情報をオープン

  2. readDataExメソッドでIisSelectedDataクラスを取得

  3. IisSelectedDataクラスから蓄積データファイル識別IDを取得

  4. getAttachedFileメソッドに蓄積データファイル識別IDおよび蓄積添付ファイルの出力先を指定して、蓄積添付ファイルを取得

  5. closeDataメソッドで抽出結果情報をクローズ

記述例

IisAPI api = new IisAPI();

:(環境設定)
api.setLabelLine(false);

// 抽出実行
// 抽出条件式:Dateの値が2008/01/01より前のデータを抽出
String searchCode = "$Date < '2008/01/01'";
// リターン式
String resultCode = "$pict1";

String[] select_result = api.requestSelect(searchCode, resultCode);
// 戻り値を設定する変数
boolean ret = false;
//抽出結果件数分、蓄積添付ファイルを取得
int count = api.getDataCount();
if (count > 0) {
  // 抽出結果情報のオープン
  ret = api.openData(select_result);
  if (!ret) {
    // エラー処理
  }
  // 抽出結果データを取得
  int get_count = 10;
  IisSelectedData[] selectedDataList = null;
  String outputPath = "/tmp/output/";
  while(true) {
    selectedDataList = api.readDataEx(get_count);
    if (selectedDataList == null) {
      if (api.getLastError() != 0) {
        // エラー処理
      }
      break;
    }
    for (int i = 0; i < selectedDataList.length; i++) {
      // 蓄積データファイル識別IDを取得
      int storedFileID = selectedDataList[i].getStoredFileID();
      // ファイル名設定
      String recordData = selectedDataList[i].getRecordData();
      // 二重引用符の削除
      String fileName = recordData.substring(1, recordData.length() - 1);
      // 蓄積添付ファイルを取得
      ret = api.getAttachedFile(storedFileID, fileName, outputPath);
      if (!ret) {
        // エラー処理
      }
    }
  }
  // 抽出結果情報のクローズ
  ret = api.closeData();
  if (!ret) {
    // エラー処理
  }
}
// 抽出結果情報の破棄
ret = api.deleteInstance(select_result);
:

注意

  • 蓄積添付ファイルのアーカイブ形式がtgz形式の場合、getAttachedFileメソッドにて解凍処理を行うため処理時間がかかります。そのため、複数の蓄積添付ファイルを取り出す処理では、蓄積データファイル識別IDごとにすべての添付ファイルを取り出してから目的のファイルを利用することを推奨します。

    // 抽出結果データを取得
      int get_count = 10;
      IisSelectedData[] selectedDataList = null;
      String outputPath = "/tmp/output/";
      int preStoredFileID = -1;
      while(true){
        selectedDataList = api.readDataEx(get_count);
        if (selectedDataList == null) {
          if (api.getLastError() != 0) {
             // エラー処理
          }
          break;
        }
        for (int i = 0; i < selectedDataList.length; i++) {
          // 蓄積データファイル識別IDを取得
          int storedFileID = selectedDataList[i].getStoredFileID();
          // 蓄積データファイル識別IDごとに蓄積添付ファイルを取得
          if (storedFileID != preStoredFileID) {
            // ファイル名はnull指定
            // 蓄積添付ファイルを取得
            ret = api.getAttachedFile(storedFileID, null, outputPath);
            preStoredFileID = storedFileID;
            if (!ret) {
              // エラー処理
            }
          }
        }
      }

  • getAttachedFileメソッドのパラメータ“fileName”は、データ格納時に実行したロードコマンド(dlofentry)のin_attachパラメタで指定したパスからの相対パスを設定してください。

ポイント

  • 蓄積添付ファイル名を取得する方法

    蓄積添付ファイル名は、あらかじめ蓄積データファイルのデータに設定しておくことを推奨します。

    蓄積添付ファイル名をgetRecordDataメソッドで取得できるようになり、抽出条件ごとの蓄積添付ファイルの取得が簡単にできます。

  • 蓄積データファイル識別IDが示す蓄積データファイルに紐付くすべての蓄積添付ファイルを取得する方法

    蓄積データファイル識別IDが示す蓄積データファイルに紐付くすべての蓄積添付ファイルを取得したい場合は、getAttachedFileメソッドのパラメータ“fileName”にnullを指定します。