Question
ジョブの実行をAssistantとOrchestratorのどちらから実行したかを判定する方法を教えてください。
Answer
以下のような方法が考えられます。
A. Orchestrator APIの /odata/jobs のリクエストからジョブの実行方法を取得する
概要
/odata/jobsのレスポンスに、ジョブの実行方法を示す "SourceType"のフィールドが含まれています。実行中のジョブの情報を上記のエンドポイントから取得し、 "SourceType"の値を参照することでジョブの実行方法を取得します。
ジョブの実行方法によって、当該フィールドの値が下表のようになります。
| Assistantから実行 | Agent |
| Orchestratorから手動実行 | Manual |
| タイムトリガーによる実行 | Schedule |
| キュートリガーによる実行 | Queue |
| イベントトリガーによる実行 | IntegrationTrigger |
| APIトリガーによる実行 | HttpTrigger |
尚、実行方法を取得するジョブの特定のため、『現在のジョブの情報を取得』アクティビティを使用し、ジョブの"Key"の値を取得の上、HTTP要求のフィルタ条件に使用します。
設定手順例
- ワークフローに『現在のジョブの情報を取得』アクティビティを配置し、出力変数をjobDataとします。
- 『OrchestratorへのHTTP要求』アクティビティを配置します。設定は以下のようにします。
メソッド:GET
相対エンドポイント:“/odata/jobs?$filter=Key%20eq%20” + jobData.Key
JSON応答:jobsResponse - 『JSONを逆シリアル化』アクティビティを配置し、入出力変数を以下のように設定します。
入力変数:jobsResponse
出力変数:jobsResponseJobj - 『代入』アクティビティ等を配置し、以下の構文で実行方法を示す値を文字列として取得します。
jobsResponseJobj(“value”)(0)(“SourceType”).ToString()
前提条件
- JSONの逆シリアル化のためにUiPath.WebAPI.Activitesパッケージのインストールが必要です。
参考
サンプルのワークフローはこちらです。
GetJobInfo_OC-API.zip (2.7 KB)
B. コード化されたワークフローのGetRunningJobInformationメソッドから取得する
概要
GetRunningJobInformationメソッドを使用してジョブの実行方法を取得します。InitiatedByのフィールドからジョブの実行元の情報を取得できます。
ジョブの実行方法によって、取得した値が下表のようになります。
| Studioからの実行 | Studio |
| Assistantからの実行 | Assistant |
| Orchestratorからの実行 | Orchestrator |
設定手順例
-
コード化されたワークフロー(GetJobInfo.cs)をプロジェクト(例:GetJobInfo_CodedWF)に追加します。
-
以下のような処理を記載します。
GetJobInfo
using UiPath.CodedWorkflows;
namespace GetJobInfo_CodedWF
{
public class GetJobInfo : CodedWorkflow
{
[Workflow]
public string Execute()
{
UiPath.Robot.Activities.Api.IRunningJobInformation Infomation = GetRunningJobInformation();
return Infomation.InitiatedBy;
}
}
}
- 呼び出し元のワークフローに『ワークフローファイルを呼び出し』アクティビティを配置し、出力変数としてジョブの実行方法を示す文字列を受け取ります。
前提条件
コード化されたワークフローがUiPath Studio/Robot v23.10以降で実装された機能であるため、ご利用頂くためにはそれ以降のバージョンである必要があります。
参考
サンプルのワークフローはこちらです。
GetJobInfo_CodedWF.zip (2.7 KB)