1 つの WorkItem の中で別々のスクリプトを連続して使用したい場合があります。
例えば、Design Automation API for AutoCAD の EXPORTTOAUTOCAD コマンドを使って、図面内の AEC オブジェクトを AutoCAD で扱える図面ファイルを出力させて、その後、出力されたファイルに対してカスタム コマンドで処理を加えるような場合です。EXPORTTOAUTOCAD コマンドは、処理結果を外部の図面ファイルに出力することしか出来ないため、Activity を個々に設定してしまうと、2 つの WorkItem 実行が必要になってしまいます。
この方法だと、WorkItem の実行毎に作成される仮想環境から見て、ストレージからの素材ファイルのダウンロードと、ストレージへの成果ファイルのスアップロードが合計 2 回発生してしまいます。図面が意図する内容は同じなので、冗長な印象が否めません。
ここで、Design Automation で Activity 登録で、commandLine 属性で指定する値が JSON の配列表現("[" ~ "]")になっている点に注意してみてください。
つまり、EXPORTTOAUTOCAD コマンドを最初のスクリプト ”Script1” で、カスタム コマンドを起動するスクリプトを ”Script2” として、1 の Activity で指定することが可能です。 Script2 で Script1 で出力したファイルを開くよう指定すれば、結果、1つの WorkItem で連続した処理を実現することが出来ます。
この例の Activity ペイロードは次のようになります。 Script1 で temp.dwg を出力し、Script2 が同 temp.dwg を開いていることがわかります。
// Create Activity
var payload =
{
"id": DA4A_UQ_ID,
"commandLine": [
'$(engine.path)\\accoreconsole.exe /i "$(args[DWGInput].path)" /s "$(settings[script1].path)" /recover',
'$(engine.path)\\accoreconsole.exe /i "temp.dwg" /al "$(appbundles[TestHarness].path)" /s "$(settings[script2].path)" /recover'
],
"parameters": {
"DWGInput": {
"zip": false,
"ondemand": false,
"verb": "get",
"description": "Source drawing",
"required": true
},
"Params": {
"zip": false,
"ondemand": false,
"verb": "get",
"description": "Input parameters to specify behavior",
"required": true,
"localName": "params.json"
},
"DWGOutput": {
"zip": false,
"ondemand": false,
"verb": "put",
"description": "Output DWG drawing",
"required": false,
"localName": "temp.dwg"
}
},
"settings": {
"script1": {
"value": "-EXPORTTOAUTOCAD\n\ntemp.dwg\n"
},
"script2": {
"value": "MyCommand\n"
}
},
"engine": DA4A_ENGINE,
"appbundles": [DA4A_FQ_ID],
"description": "DA4A Test harness"
};
この方法だと、WorkItem 起動時に作成された仮想環境内で、作業フォルダ内で成果ファイルに再利用が出来るので、ストレージからの素材ファイルのダウンロードと成果ファイルのアップロードが 1 度だけで済むことになります。Design Automation API の課金とコスト算出について のとおり、Design Automation API の課金計測には、このダウンロード/アップロードの時間も含まれるので、パフォーマンスだけでなく、コスト面でも有利なはずです。
By Toshiaki Isezaki
コメント