質問
外部からのAPIリクエストにより、HULFT Squareのスクリプトを実行する場合、スクリプトの実行結果を外部からリクエストを行ったクライアント側で確認することは可能でしょうか。
通常は「"result_status"」で確認することができると思いますが、スクリプトの実行時間が長い(29秒を超える)場合、この処理結果を受け取ることができなくなる認識です。
(参考:HTTP RESTリクエストを使用してスクリプトを実行してみよう)
この場合、リクエストヘッダーに「X-HSQ-Async」に「true」を指定することにより、非同期処理となり、「execution_id」を取得できますが、この情報をもとにスクリプトの実行結果を取得することはできますか。
回答
REST APIジョブにおけるリクエストタイムアウトを超える処理時間のスクリプトを実行する場合、リクエスト時に非同期実行を指定いただく必要があるため、スクリプトの実行結果を直接受領することはできません。
代替策としては、ジョブで実行するスクリプトでCSVファイル等に実行結果を出力し、そのCSVファイルから実行結果を取得するポーリング用APIプロジェクトを別途作成する方法があります。
以下にサポートにて検証済みのスクリプト実装例をご紹介いたします。あくまで一例となりますので、お客様のご要件に合わせて適宜ご調整ください。
■非同期実行用REST APIジョブの作成手順
1.[例外監視処理]フローを配置し、監視フローにメイン処理のスクリプトを呼び出す[スクリプト呼び出し処理]を配置する
2.スクリプト呼び出しフローの直後に、マッピングと[CSVファイル書き込み処理]を配置する
4.[CSVファイル書き込み処理]の列名に「実行ID」、「resultStatus」、「現在日時」を指定し、書き込み設定にて[追加書き込み]のチェックを入れる
3.マッピング内のロジックから「実行ID」と「現在日時」、スクリプト呼び出しのコンポーネント変数から「exitStatus」を取得してCSVファイルに書き込む
4.手順2~4で作成したマッピングと[CSVファイル書き込み処理]をコピーし、[例外監視処理]フローに配置する
5.上記スクリプトをAPIジョブで実行するスクリプトに指定する
※スクリプト実装イメージ
■ポーリング用REST APIジョブの作成手順
6.新規スクリプトを作成し、上記で結果データとして作成したファイルを読み込むために[CSVファイル読み込み処理]とマッピングを配置する
※スクリプト実装イメージ
7.入力スクリプト変数「execution_id」と、XML型の出力スクリプト変数「XML」を作成する
8.[条件による抽出]ロジックを利用し、変数「execution_id」と実行IDが一致するデータを抽出し、変数「XML」に格納する
9.APIプロジェクトにてGETメソッドを作成し、上記スクリプトを実行スクリプトに指定する
10.リクエスト設定のクエリーパラメーターに、変数「execution_id」に出力するクエリを設定する
11.レスポンス設定のレスポンス本文に、変数「XML」をレスポンスデータに指定する
12.上記APIプロジェクトでREST APIジョブを作成する
上記ポーリング用REST APIジョブに対して、クエリに「execution_id」を指定したRESTリクエストを同期実行することで、非同期実行でリクエストしたジョブの実行結果取得が可能となりますので、お試しください。
なお、実行結果を格納するCSVファイルは、ファイルサイズが大きくなるとポーリング用REST APIジョブでもリクエストタイムアウトが発生する可能性があります。
そのため、該当のCSVファイルは、スケジュールジョブで定期的に削除していただくことなどをご検討ください。
補足
スクリプトを実行後、返却されたデータのelementに不要なデータが挿入された場合は、マッピング内のelementにデータの型が設定されておらず、string型として扱われている可能性があります。
その場合、[単一行文字列定数]ロジックを使用して、element直下のtype(属性)に文字列「object」をマッピングし、明示的にデータの型をobject型に設定してください。
さらに、以下のようなマッピングコンポーネントを2つ含むポーリング用スクリプトを作成することで、elementを含まない、「execution_id」から「endtime」の4つの値を取得することが可能ですので、ご参考までにご確認ください。
※スクリプト実装イメージ
・mapping(2)
・mapping(1)
コメント
0件のコメント
記事コメントは受け付けていません。