UiPath x DX Suite APIバージョンアップ(APIv1→APIv2)の対応方法

## DX Suiteが新UIに
どうも新UIに変更されるときにAPIの仕様が変わるみたい
基本的に2024/02/02までに対応しないといけないとのこと
https://help-dxsuite.inside.ai/hc/ja/articles/24642918658713-%E6%97%A7UI-%E3%81%AF%E3%81%84%E3%81%A4%E3%81%BE%E3%81%A7%E5%88%A9%E7%94%A8%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%81%8B-

## UiPathの部品に対応しているものあるの？
UiPathマーケットプレースの「AI-OCR workflow for AI inside - DX Suite」はAPIv1のため現状対応している部品はない模様
https://marketplace.uipath.com/listings/ai-ocr-workflow-for-ai-inside-dx-suite

APIv2の対応ってありますか？というコメントも放置されている状況

## APIv2難民が発生
### やべえ！難民でてるじゃん、救済しないと！
ということで当記事は難民救済記事となります。
井戸の掘り方を伝えます。
既存の部品をAPIv2用に改造しまっせ
(UiPathマーケットプレースに投稿するのは気が向いたらやります。)

## APIv2版に改造する方法

### まずはAPI仕様の確認
DX SuiteのWebページに APIv1 と APIv2 の比較表があるので確認
https://drive.google.com/file/d/1xCd0CVVhmJmB6ESpsMGFqhRPIddV6pDf/view

## 読み取りユニット登録
ほーんそういうことね
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3630106/8cd44528-f8e6-53d0-f2ac-bd8786281de8.png)

:::note info
基本的に赤字のところ変えていけばいいから！
:::
UiPathの部品だと「Reading_Pages_Add.xaml」が該当

### 1. ユニットID廃止
`*V2では既存ユニットへの追加はできません`
あいわかったってことで

これを
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3630106/d6948c1c-9377-d8c8-b0ef-d47537d49ae0.png)
こう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3630106/e026a7d1-c676-1d6e-b35e-ce37e70a1fd7.png)
まあこのIFはいらんわな

引数も消しとこ
これを
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3630106/f22f0abd-ff54-bef7-02eb-02974aeabfb6.png)
こう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3630106/0bf91d67-8864-9d52-985a-bdba7f5fe8e3.png)


:::note warn
型をintからStringに変更
APIv2で吐き出されるID系は形式が数値から文字列に代わってるから対応必須
今後出てくるID系すべてに同じ対応が必要
:::

ついでに名前が↓のように変わるからやさしさで引数名も変更

`in_DocumentID → in_WorkflowId`


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3630106/bc10e8d0-f7a3-ee7e-5ba3-8830160c4078.png)




### 2. HTTPリクエストの修正
エンドポイント
`in_URL.TrimEnd("/"c, " "c, "　"c) + "/ConsoleWeb/api/v1/reading/pages/add"`
↓
`in_URL.TrimEnd("/"c, " "c, "　"c) + "wf/api/standard/v2/workflows/" + in_WorkflowId + "/units"`

ヘッダ名
* `X-ConsoleWeb-ApiKey → apikey`
* `documentId → workflowId`

添付ファイル

* `file → files`

こんな感じ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3630106/4cd45444-26b3-5722-869b-f570ea3c3c70.png)


:::note warn
応答ヘッダの仕様も変わってるから注意！
成功時は空でエラー時だけ値が入ってるとのこと

逆に応答コンテンツは成功してる時だけ値入ってる
:::

:::note warn
応答コンテンツの仕様も変わってるから受け取るとき注意！

今はout_JsonResponse.("id").ToStringみたいな感じで使ってると思うけど
out_JsonResponse.("unitId")ってな感じに変わるね
:::
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3630106/11a5fadf-7567-2631-e300-c9d2cb9fed46.png)


## 読取ユニット検索
出来上がり待ちに使うやつ
UiPathの部品だと「Reading_Units.xaml」が該当

### まずはAPI仕様を確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3630106/4e98f323-bf22-935d-3cdd-2d70419bc562.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3630106/3e89c0b6-1f38-9ba6-0a7f-d6530f7430c5.png)
ほーんそういうことね

### 引数名と型をどんどん変えてこ
:::note warn
型は全部Stringにする必要あり
:::

やさしさで引数名もAPIv2に合わせとこ
`in_DocumentID → in_WorkflowId`
`in_DocsetID → in_FolderId`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3630106/92b9f7a3-d72b-ac1b-8149-ae279971d6c9.png)

ほんでIF関連が数値で判定してるんでString版に変更
これを
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3630106/bc66b1b5-fde1-8f14-a5bd-715aaec9f799.png)
こう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3630106/2b94b9d3-ef5f-d606-ffb5-e19bb81e11aa.png)

### HTTPリクエスト
* ユニットIDの指定がある場合
エンドポイント
`in_URL.TrimEnd("/"c, " "c, "　"c) + "/ConsoleWeb/api/v1/reading/units"`
↓
`in_url.TrimEnd("/"c, " "c, "　"c) + "/wf/api/standard/v2/units"`
ヘッダ名
`X-ConsoleWeb-ApiKey → apikey`
`readingUnitId → unitId`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3630106/f6400335-0690-3b70-2b0f-9ebc915fd72b.png)

* ドキュメントIDの指定がある場合
エンドポイント
`in_URL.TrimEnd("/"c, " "c, "　"c) + "/ConsoleWeb/api/v1/reading/units"`
↓
`in_url.TrimEnd("/"c, " "c, "　"c) + "/wf/api/standard/v2/units"`
ヘッダ名
`X-ConsoleWeb-ApiKey → apikey`
`documentId → workflowId`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3630106/f69bd2e3-34b8-a325-1f9c-39cfee567dc1.png)

* フォルダIDの指定がある場合
エンドポイント
`in_URL.TrimEnd("/"c, " "c, "　"c) + "/ConsoleWeb/api/v1/reading/units"`
↓
`in_url.TrimEnd("/"c, " "c, "　"c) + "/wf/api/standard/v2/units"`
ヘッダ名
`X-ConsoleWeb-ApiKey → apikey`
`docsetId → folderId`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3630106/90cdf0d7-1e1b-6bc8-bdfd-ad0d156f24e9.png)

* パラメータ指定無し
:::note warn
警告
確認してないですがパラメータ指定無しだと新APIではエラーになるかも
そんときはコメントアウトするなりなんなりしてください
:::

エンドポイント
`in_URL.TrimEnd("/"c, " "c, "　"c) + "/ConsoleWeb/api/v1/reading/units"`
↓
`in_url.TrimEnd("/"c, " "c, "　"c) + "/wf/api/standard/v2/units"`
ヘッダ名
`X-ConsoleWeb-ApiKey → apikey`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3630106/aed5775b-4d76-4476-9d8c-dd80aa715f46.png)

### 応答ヘッダ/
応答コンテンツ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3630106/cfe21303-2f13-3ddb-a184-790d716ac829.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3630106/6682bb53-4255-0e7a-0c07-e48b225a7ba1.png)

:::note warn
考え方は読取ユニット検索と一緒
形式が変わってるから応答結果を使うときに注意！
:::

## CSVダウンロード
### まずはAPI仕様を確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3630106/9d699394-3aa6-0936-5ee1-3069cf25d6d6.png)
ほーんそういうことね

### 引数の型を変更
intは死滅しました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3630106/7f89e93d-9da4-69ae-0d82-aec10ecafe8d.png)

### HTTPリクエスト
エンドポイント
`in_URL.TrimEnd("/"c, " "c, "　"c) + "/ConsoleWeb/api/v1/reading/units/" + in_UnitID.ToString + "/export"`
↓
`in_URL.TrimEnd("/"c, " "c, "　"c) + "/wf/api/standard/v2/units/" + in_UnitID + "/csv"`
ヘッダ名
`X-ConsoleWeb-ApiKey → apikey`

### 応答コンテンツ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3630106/427feb52-a419-df4e-08c8-8f4d4825aa37.png)

:::note warn
考え方は読取ユニット検索と一緒
形式が変わってるから応答結果を使うときに注意！
:::

## まとめ
今回はこれくらいで
書きなぐっただけなのでミスがあったら指摘してください。

ファイルアップロード、待ち受け、結果Csvダウンロードの3つができれば他も全く同じ考え方で修正できるとおもいます。GLFH