2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

UiPathプロセスの依存関係を抽出してみよう(Part2:Nupkg取得編)

Last updated at Posted at 2024-12-09

はじめに

認証編(Part1)では、Automation Cloudの外部アプリケーションを作成してトークンを取る方法をご紹介しました。本記事はその続編となり、APIコールを使って指定したテナント配下のすべてのフォルダにおけるプロセスが利用するアクティブなNupkgをダウンロードする方法について説明します。まだPart1をご覧になっていない方は、目を通しておきましょう。

環境準備

項目 バージョン
UiPath Studio 2024.10.6
UiPath.WebAPI.Activities 1.21.1
対応OS Windows

前回作成した「依存関係抽出ツール」プロジェクトの「Main.xaml」を開き、「ワークフローファイルを呼び出し」で「認証.xaml」を指定します。引数パネルで、「認証.xaml」の出力引数であるoutStTokenoutStTenantNameに、それぞれstTokenstTenantNameを指定して保存します。

image.png

続いて、その下にもう一つ「ワークフローファイルを呼び出し」を配置し、「パッケージダウンロード.xaml」を作成して呼び出します。引数を以下の通りに設定します。

image.png

完成したら、「パッケージダウンロード.xaml」を開きます。

フォルダ情報の取得

Part2の最終目標は利用中のパッケージをダウンロードすることです。利用中のパッケージは、アクティブパッケージとも呼ばれ、プロセスが利用するパッケージのことを指しております。プロセスの情報を取得すれば、当該プロセスはどのパッケージを利用しているのかがわかります。さらに、プロセスはフォルダ単位のリソースなので、プロセスの情報を取得する前提として、フォルダ情報の抽出が必要です。

本セッションは、APIコールでフォルダ情報を抽出する方法を説明します。

①フォルダの名称とIDを取得したいため、まず「データテーブルを構築」で情報を取得するための準備をします。

image.png

②APIコールでAutomation Cloud上のフォルダ情報を要求します。

image.png

「HTTP要求」を配置し、そのプロパティで、ア、イ、ウの情報を以下の通りに入力します。

ア、APIコールの際に、トークンをヘッダーとしてAutomation Cloudに渡す必要があるため、ヘッダーを開いて「認証.xaml」から受け取ったトークン。

image.png

トークン渡し
Authorization  "Bearer " & inStToken

イ、要求URLを入力します。

Automation CloudへのAPIコールは、ベースURLがhttps://cloud.uipath.com/Organization/Tenant/orchestrator_/です。ご自身の情報に合わせて書き換えてください。テナント名は、入力フォームで指定して変数に保存しているので、その変数を入れます。

筆者の情報
"https://cloud.uipath.com/oyb/" & inStTenantName & "/orchestrator_/"

そして、フォルダ情報を取得したいので、上記のベースURLの後ろに、odata/Foldersを追加する必要があります。そのため、要求URLは以下のようになります。

要求URL
"https://cloud.uipath.com/oyb/" & inStTenantName & "/orchestrator_/odata/Folders"

ウ、応答コンテンツのところで、変数stFolderInfoを作成してAPIコールの結果を保存します。

③応答コンテンツを逆シリアル化して情報を抽出します。

image.png

ゲットフォルダの応答コンテンツでどのような情報が入っているのかをSwaggerで確認しましょう。

image.png

FullyQualifiedNameIdのキーで、親フォルダの情報を含めたフォルダ名とIDが取得できますね。なお、Automation Cloud上のすべてのフォルダ情報を一一括取得したいため、応答コンテンツをループして情報をデータテーブルに保存する必要があります。設定方法は以下の通りです。

image.png

条件
Not String.IsNullOrEmpty(item("DisplayName").ToString)
※:フォルダ名が存在するかどうかを確認
列配列
{item("FullyQualifiedName").ToString, item("Id").ToString}

実行してフォルダ情報が正しく抽出されたかどうかを確認しましょう。

抽出の結果です。

image.png

左側はAutomation Cloud上のフォルダと一致していますね。右側のFoldeIDはプロセス抽出の際に必須な情報です。

image.png

プロセス情報の取得

プロセスはフォルダ単位のリソースのため、フォルダ情報を把握すれば、APIコールでプロセス情報の抽出が可能になります。

まず、プロセス情報格納用のdtProcessを構築します。

image.png

次に、「フォルダの情報を取得」で作成したdtFolderをループし、個々のフォルダに対してAPIを叩きます。

image.png

ア、プロセスを取得するためのエンドポイントは以下の通りです。

要求URL
"https://cloud.uipath.com/oyb/" & inStTenantName & "/orchestrator_/odata/Releases"

※組織名をご自身のAutomation Cloudの組織情報に置き換えてください

このAPIコールで返してくれる結果を確認しましょう。

image.png

たくさんありますが、*がついている項目に注目しまよう。

Nameでプロセス名が取得できます。

ProcessKeyは、上記のロセスの利用するパッケージが取得できます。

ProcessVersionは、上記のパッケージのバージョンが取得できます。

イ、ヘッダーに、トークンを入れるほか、X-UIPATH-OrganizationUnitIdという項目があるため、そこに上記で取得したFolderIDを埋め込む必要があります。

image.png

そのため、ヘッダーは以下の通りになります。

image.png

ウ、応答コンテンツで、変数stProcessInfoを作成し、「JSONを逆シリアル化」でそのjsonStringをjsonObject型のjsonProcessInfoに変換します。

image.png

さらに、jsonProcessInfoをループし、情報を取り出してdtProcessの行として追加します。

image.png

最後に、dtProcessを出力して結果を確認しましょう。

image.png

これで、プロセスの情報も抽出しました。

パッケージのダウンロード

以上で、プロセスが利用するパッケージ名とそのバージョンを手に入れたので、これからパッケージのダウンロード作業をご説明します。

①ダウンロード先のフォルダを作成します。デスクトップで、「Downloaded Nupkg」のフォルダを作成します。

image.png

フォルダパス
System.IO.Path.Combine(stDesktop,"Downloaded Nupkg")

出力結果をlrDownloadedPathに保存します。

image.png

dtProcessには各パッケージの情報を保存しているため、それをループして情報を取り出します。

image.png

③本文で、APIコールしてパッケージをダウンロードします。パッケージダウンロードのエンドポイントは以下の通りです。

要求URL
"https://cloud.uipath.com/oyb/" & inStTenantName & "/orchestrator_/odata/Processes/UiPath.Server.Configuration.OData.DownloadPackage

※組織名をご自身のAutomation Cloudの組織情報に置き換えてください

これに基づき、「HTTP要求」にパラメータを渡します。

image.png

ア、ヘッダー情報を渡します。

image.png

イ、要求URLを書きます。odata/Processes/UiPath.Server.Configuration.OData.DownloadPackage のコードは、Key(パス)が必要です。つまり、どのパッケージをダウンロードするのかを明確に指定しなければなりません。dtProcessRow("Package Name")Row("Version")はKeyに該当します。よって、要求URLは以下の通りです。

要求URL
"https://cloud.uipath.com/oyb/" & inStTenantName & "/orchestrator_/odata/Processes/UiPath.Server.Configuration.OData.DownloadPackage(key='" & Row("PackageName").ToString & ":" + Row("Version").Tostring &"')"

※組織名をご自身のAutomation Cloudの組織情報に置き換えてください

ウ、上記のAPIコールと違い、今回は「応答コンテンツ」を空欄にします。

エ、その代わりに、「応答の添付ファイルのファイル名」にダウンロード先の情報を記載します。

応答の添付ファイルのファイル名
lrDownloadedPath.LocalPath & "\" & Row("PackageName").ToString & "_" & Row("Version").ToString & ".nupkg"

結果を確認しましょう。すべてのパッケージがダウンロードされました!

image.png

終わりに

Part2はPart1の認証情報を利用して、フォルダ情報、プロセス情報及びNupkgを取得しました。次回の「依存関係解析編」で、Nupkg中のProject.jsonを解析して依存関係を抽出しようと思います。ぜひ楽しみにしてください。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?