D3WorkerのファイルアップロードをDataSpiderでしてみた

## はじめに

こんにちは、すぎもんです:smiley:　今回は、DataSpiderとD3Workerをつないでみます。

## D3Workerとは

D3Workerは、データを自動で仕分けし、複数のクラウドサービスと連携し合うことで、より効率的な業務を実現するオプロ社が提供するサービスです。
従来の帳票関連のシステムでは、帳票テンプレートや配信方法ごとに異なる処理や作業が必要でしたが、D3Workerを使うことで、データを帳票化する[oproarts](https://oproarts.opro.net/)の機能だけでなく、１つのインターフェースで、仕分けから配信までの工程をクラウドで実行、一括処理を可能にします。機能詳細は、[こちら](https://spc.opro.net/hc/ja/articles/360021620194--D3Worker-%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88%E4%B8%80%E8%A6%A7)をご参照ください。

＃＃帳票システム[oproartsとつないでみた記事 by sugimon](https://qiita.com/sugimon/items/505db7fed42efa0c9d25)も併せてご一読ください。

## 今回やること

DataSpiderでD3WorkerのAPIを使ってみます。今回は定義したCSVファイルをアップロードすることで対象の<strong>「ワーク」</strong>を実行するため<strong>「multipartでの実行要求」</strong>を使用します。

D3Workerでは、帳票関連の定義を「ワーク」という概念で管理し実行します。D3Workerへのリクエストは、どの「ワーク」を実行するか、実行したい「ワーク」に必要な情報は何か、を定義する必要があります。

##### ■D3WorkerのAPI利用
D3WorkerのAPIでは、やりとりし合うファイルについて定義した「ワーク」を実行させることでデータを帳票化します。

<strong>◇ワークとは</strong>
D3Worker自身が受け取るCSVの定義と帳票とのマッピングを定義したものです。「サービス（＝機能設定）」-「エンベロープ（＝処理設定）」-「ワーク（＝帳票定義）」を関連付けさせます。

:::note warn
今回の検証は、オプロ社に提供されたテスト環境で検証しています。本記事では、ワーク実行の観点で記載していますが、D3WorkerのAPI利用は本来、「サービス」-「エンベロープ」-「ワーク」の各設定が必要です。
:::

##### ■「multipartでの実行要求」とは

「multipart/form-data」形式 で、CSV ファイルをアップロード、もしくはPOSTすることで、指定した「ワーク」を実行します。

「multipartでの実行要求」には、まず「認証トークンの取得」が必要です。
そのため、DataSpiderのスクリプトは下記の2つを作成することにしました。
　　　　<strong>①「認証トークンの取得」</strong>
　　　　<strong>②「multipartでの実行要求」</strong>

:::note warn
[WebAPIマニュアル](https://spc.opro.net/hc/ja/articles/360021620194--D3Worker-%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88%E4%B8%80%E8%A6%A7)に記載がある通り、D3Workerとの接続検証は、オプロ社への申し込みが必要です。今回の検証では、ユーザーIDやパスワード含め、テンプレート、csvファイル、ワークなど、検証に必要なものは提供されたものを使用します。
:::

また、DataSpiderの設定で必要になる下記2点は事前に確認してメモしておきましょう。
　　・設定したワークの名称　　　　　　 ：　`TestWork`
　　・ワークの実行に必要なCSVファイル　：　`TestWorkRequestCSV.csv`

:::note info
ワーク実行に必要となるCSVファイルの作成もDataSpiderで実装可能です。
:::

## 検証手順
＜DataSpiderの設定＞
<strong>■「認証トークンの取得」スクリプトの作成</strong>
　　①スクリプト変数の作成
　　②GET実行の設定

<strong>■「multipartでの実行要求」のスクリプト作成</strong>
　　③POST実行の設定
　　④マッピングの設定

## DataSpiderの設定
### ■「認証トークンの取得」スクリプトの作成

###### ①スクリプト変数の作成
まず始めに、処理で使用するスクリプト変数を作成します。
下記の通り、「初期値」に提供された情報をセットして、処理内の設定で使います。

　　・名前　：　`d3woker_UID`　 　　値　：　`オプロ社から発行されたユーザーID`
　　・名前　：　`d3workwe_UPW`　　　値　：　`オプロ社から発行されたパスワード`
　　・名前　：　`リクエストcsv`　　　値　：　`オプロ社から発行されたCSV`
　　・名前　：　`application_id`　値　：　`オプロ社から発行されたapplicationID`
　　・名前　：　`ワーク名`　　　　　値　：　`オプロ社から発行されたワーク名`

###### ②GET実行の設定

デザイナ画面の右側「ツールパレット」から、[ネットワーク]＞[REST]＞[GET実行]より、
GET実行アイコンを、デザイナ中央にドラッグ＆ドロップし、設定画面を開きます。
「`認証トークンの取得`」という名前で、GET実行処理の設定をしていきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/af1c1ef8-0f0a-30f0-888a-44a03a05d872.png)
まずは、「必須設定」タブの設定をします。
「接続先」のプルダウンリストから[追加]を選択し、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/94df8cfe-ed7c-49d1-75a3-c3c4c390af66.png)
下記の通り設定します。「接続テスト」を押下し、入力したURLがDataSpiderと通信可能か確認してください。
　　　・接続名　：　`D3Worker`
　　　・URL　　 ：　`https://d3w.ap.oproarts.com/d3w/api/{テナント名}/`

:::note warn
RESTでの接続先URLを設定します。※使用した環境は、オプロ社にて事前に用意いただいた環境を使っています。テナント名等の設定に必要なD3Workerの情報は、オプロ社から受領した内容を設定します。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/ea26cc0e-800f-372c-af56-180f0fa2d2b0.png)

:::note info
「接続名」は、「コントロールパネル」>「グローバルリソースの設定」から
事前に設定することも可能です。
:::

「必須設定」タブの設定に戻ります。 [WebAPIマニュアル](https://www2.opro.net/jp/download/docs/d3w_api_manual.pdf?_ga=2.221124124.563872432.1675665628-977535922.1675665628)を確認し、認証トークンの取得に必要な値（`auth`)を「パス」に設定します。

「クエリパラメータ」を、下記の通り設定します。
　　　・名前①　　：　`UID`　　　　値①　：　`${d3woker_UID}`
　　　・名前②　　：　`UPW`　　　　値②　：　`${d3workwe_UPW}`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/bea99778-af80-6a57-4706-f01ef0fa5689.png)

:::note warn
「パス」は、「接続先」に設定したURLの後ろに付加する値です。
最終的なエンドポイントになります。
:::

次に、「レスポンス設定」タブです。実行時のレスポンスをどう扱うか設定します。
　　　・データ出力先　：　`データ`
　　　・ファイルパス　：　`JSON`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/5505c2d2-b7d6-0a05-3658-4428658459c8.png)
次に、「ヘッダ設定」タブです。
「追加」を押下し、`X-OPRO-D3W-Auth`と設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/e0f8c5d4-47a2-fd78-31b3-a0fcf304a96d.png)

:::note warn
「レスポンスヘッダ」に設定した値は、コンポーネント変数として定義されます。
:::

完了を押下して、「認証トークン取得」のためのスクリプト作成は完了です。

### ■「multipartでの実行要求」スクリプトの作成
###### ③POST実行の設定

デザイナ画面の右側「ツールパレット」から、[ネットワーク]＞[REST]＞[POST実行]より、
POST実行アイコンを、デザイナ中央にドラッグ＆ドロップし、設定画面を開きます。

「`multipart実行要求`」という名前でPOST実行処理の設定をします。
「接続先」は、「認証トークンの取得」で作成した「`D3Worker`」を指定します。
「パス」は、「`action/`」と設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/0b599503-3d87-cfd4-4628-3f6bc109955c.png)

次に「リクエスト設定」タブです。
データ形式は、「multipart/form-data」形式でリクエストします。

 [WebAPIマニュアル](https://www2.opro.net/jp/download/docs/d3w_api_manual.pdf?_ga=2.221124124.563872432.1675665628-977535922.1675665628)で、必要なパラメータを確認し、下記のように設定します。
　　・データ入力元　　：　　`データ`
　　・データ形式　　　：　　`マルチパートフォーム`

＜マルチパートフォーム設定＞
　　・名前：　`work`　　　　種類：`文字列`
　　・名前：　`aid`　　　　 種類：`文字列`
　　・名前：　`data`　　　　種類：`ファイル`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/b35574cd-e6bf-a550-4480-ee83b26168ae.png)
続いて、「レスポンス設定」タブです。下記の通り設定します。

　・データ出力先　：　`ファイル`
　・ファイルパス　：　`/data/d3worker/action_response.json`
　・レスポンスのステータスコードが4xx、5xxの場合エラーにする　：　`✓`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/61d8fff5-0978-42b1-1e71-8be0332bfd01.png)

次に、「ヘッダ設定」タブです。
「リクエストヘッダ」に下記の通り設定します。
　・名前　　：　　`X-OPRO-D3W-Auth`
　・値　　　：　　`${認証トークンの取得:X-OPRO-D3W-Auth}`※
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/55c02d58-4cac-51f4-68c6-9fb35eb627d9.png)
※　<strong>${認証トークンの取得:X-OPRO-D3W-Auth}</strong>
「認証トークンの取得」スクリプト作成のレスポンスヘッダの設定部分で、コンポーネント変数として定義した値です。

:::note info
コンポーネント変数は、スクリプト変数と同様に、入力欄で右端をダブルクリックして▶ボタンを押下することで、選択することもできます。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/7e606a04-6aa8-dc13-231b-1488181d5459.png)
:::
POST実行の設定はこれで完了です。

###### ④マッピングの設定
POST実行のためのデータのマッピングを設定します。

デザイナ右側の「ツールパレット」から[変換]>[基本]＞[マッピング]で、「マッピングアイコン」をデザイナ内の「POST実行アイコン」の左側に、ドラッグ＆ドロップします。

マッピングアイコンをクリックし、POST実行アイコン上にドラッグ＆ドロップして、アイコン同士をつなぎます。[フローの作成]ポップアップが表示されるので、[プロセスフローとデータフローを引く]を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/2bd18ec1-c630-4b97-feeb-b559f6aee21e.png)

次に、マッピングアイコンをダブルクリックして、マッピング設定をします。

マッピング画面の右側「出力先」に、POST実行の設定で追加した「マルチパートフォーム」の項目（`work,aid,data`）が設定されていることが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/8febd3c6-502a-a9c9-e426-ad4cde6fe25f.png)

それぞれの項目を線でつなぎデータをマッピングをしていきましょう。
各入力項目と出力項目は、下記の通り値を設定します。


|入力元|出力先|
|:-----------|:------------|
|スクリプト変数「リクエストCSV」|path|
|スクリプト変数「application_id」|aid-value|
|スクリプト変数「ワーク名」|work-value|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/8a240e7f-786f-209c-5e6e-304c35544885.png)

以上で、multipartでの実行要求のためのPOST実行の設定が完了しました。

## スクリプトの実行

完成スクリプトは下記の通りです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/dc8c0fb2-4487-62eb-0f91-fa6182177ce5.png)
スクリプトをデバック実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/6e11dd4e-e2ab-cafb-3b8b-d72626b66edc.png)
DataSpiderエクスプローラの「/data/d3worker」配下に、「`action_response.json`」が作成されていることが確認できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/fd98f6ef-8769-3251-4c42-bebcbaf3f87a.png)
また、`action_reponse.json`内に、指定したワークの実行情報（★）があることを確認できれば成功です。
　　　★　user_id　　　：　認証に使用したUID
　　　★　work_name　　：　ワークの名称
　　　★　create_data　：　実行した日時
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/cbeb50e1-945b-a7d0-085f-d78f4b3aaa83.png)
指定したワークの実行情報があることを無事確認できました。
<font color =blue>（見やすくするために「,」を「改行コード」に置換しています。）</font>


＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝
実行要求したワークの状況は、ブラウザ上で確認することも可能です。

D3Worker履歴用のURLにアクセスし、「action_response.json」 に記載された「process_id」をジョブIDに入力し検索することで確認します。
　　【URL】　：　https://d3w.ap.oproarts.com/d3w/a/｛テナント名｝/history/
＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝

## 最後に
いかがでしたでしょうか。今回は、DataSpiderでD3WorkerのAPIを使って<strong>「ワーク」</strong>を実行してみました。「ワーク」に必要なファイルの操作や中身のデータ項目のマッピング設定など、DataSpiderだと視覚的にそれらを確認することができ、それぞれの項目を線でつなぐことで、データの流れを作ることができるのは、とても分かりやすかったです。是非ご参考にしてみてください。

ここまで読んでいただきありがとうございました。ではまた！