2. IODファイル出力(連票形式 IODBDOC )¶
連票形式 IODBDOC を使用し、IODファイルを出力するタスクです。
構成 | ユーザ定義 |
---|---|
スタンドアローン構成 | im_cookbook_8005_user_iodbdoc |
分散構成 | im_cookbook_8005_user_iodbdoc_rest |
2.1. 入力値¶
im_cookbook_8005_user_iodbdoc/im_cookbook_8005_user_iodbdoc_rest <object>
├─ layoutFilePath <string>
├─ globalDataFilePath <string>
├─ colDataFilePath <string>
└─ outputIodFilePath <string>
項目名 | 必須/任意 | 型 | 配列/リスト | 説明 |
---|---|---|---|---|
layoutFilePath | 必須 | string | なし | IODBDOC レイアウトファイルのパブリックストレージパス |
globalDataFilePath | 任意 | string | なし | 外部変数用データファイルのパブリックストレージパス |
colDataFilePath | 必須 | string | なし | 行データ用データファイルのパブリックストレージパス |
outputIodFilePath | 必須 | string | なし | 出力IODファイルのパブリックストレージパス |
コラム
外部変数用データファイル、および、行データ用データファイルのフォーマットについては「 データファイル 」を参照してください。
注意
外部変数用データファイル、および、行データ用データファイル内で、画像データのファイルパスを指定する場合は、絶対パスで指定してください。
サンプル用の画像データは、パブリックストレージ配下に設置されたサンプル用データフォルダ内にあります。
注意
本サンプルでは、行データ用データファイルのオプションは対応していません。
注意
本サンプルでは、CSV形式の行データ用データファイルのみ対応しています。XML形式は対応していません。
2.2. 出力値¶
im_cookbook_8005_user_iodbdoc/im_cookbook_8005_user_iodbdoc_rest <object>
├─ status <boolean>
└─ message <string>
項目名 | 型 | 配列/リスト | 説明 |
---|---|---|---|
status | boolean | なし | true:IOD出力成功時
false:IOD出力失敗時
|
message | string | なし | IOD出力成功時:空文字
IOD出力失敗時:エラーメッセージ
|
2.3. スクリプト¶
次は、ユーザ定義「im_cookbook_8005_user_iodbdoc」のスクリプトです。
サンプル内で使用しているAPIについては「 API 」を参照してください。
コラム
ユーザ定義「im_cookbook_8005_user_iodbdoc_rest」のスクリプトの場合、14行目が次に変更となります。
const iodbdoc = new IODBDocRemote(input.layoutFilePath);
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | /**
* run.
*
* @param input {Object} - task input data.
* @return {Object} task result.
*/
function run(input) {
try {
if (!input.outputIodFilePath) {
throw new Error("出力IODファイルパスにnull、または、空文字が指定されています。");
}
const iodbdoc = new IODBDoc(input.layoutFilePath);
const colData = readDataFile(input.colDataFilePath, ",");
if (!!input.globalDataFilePath) {
const globalData = readDataFile(input.globalDataFilePath, "=");
// 外部変数値を設定
globalData.forEach(function(row) {
iodbdoc.setGlobal(row[0], row[1]);
});
}
// データ行にカラムを追加
for (let i = 0; i < colData.length; i++) {
iodbdoc.setColStart();
for (let j = 0; j < colData[i].length; j++) {
iodbdoc.setCol(colData[i][j]);
}
iodbdoc.setColEnd();
}
/* IODファイルを生成 */
const result = iodbdoc.toIOD(input.outputIodFilePath);
if (result >= 0) {
return {
status: true,
message: ""
};
} else {
return {
status: false,
message: "ErrorCode[" + result + "] ErrorMessage[" + iodbdoc.getMessage() + "]"
};
}
} catch (error) {
return {
status: false,
message: error.message
};
}
}
/**
* readDataFile
* 指定したデータファイルを読み込み、データを返します。
* @param dataFilePath {string} - 対象データファイルのパブリックストレージパス
* @param delimiter {string} - 区切り文字
* @return {Object} 対象データファイルのデータ群
*/
function readDataFile(dataFilePath, delimiter) {
if (!dataFilePath) {
throw new Error("読込対象データファイルパスにnull、または、空文字が指定されています。");
}
const storage = new PublicStorage(dataFilePath);
let data = [];
// データファイルを読み込む
storage.openAsText(function(reader, error) {
if (error !== null) {
throw error;
}
let i = 0;
// 1行ずつ読み込み、データを作成
reader.eachLine(function (line) {
if (i === 0) {
line = line.replace(/^\ufeff/, "");
}
data[i] = line.split(delimiter);
i++;
});
});
return data;
}
|