ネスト構造のODataフィルター記述方法

いつもお世話になっております。
下記の事柄について、ご教示いただけましたら幸いです。
【やりたい事】
対象Jobから抽出したBatchExecutionKey(Jobデータで一意であればBatchExecutionKeyでなくても可)をフィルター条件に、OrchestratorへのHTTP要求アクティビティで「監査(Audit)」の情報を取得したい。
【課題】
監査データのJSON構造が下記の場合のエンドポイントの相対パスに記載するフィルターの仕方が上手くいきません。
(監査の1データのJSON)
※一部マスキングしてます
※filterしたい箇所を太字にします

{
“ServiceName”: “UiPath.Orchestrator.Web.Api.OData.Controllers.JobsController”,
“MethodName”: “StartJobs”,
“Parameters”: “{"startJobParameters":{"startInfo":{"ReleaseKey":"################","Strategy":#,"RobotIds":[###],"MachineSessionIds":[###],"NoOfRobots":#,"JobsCount":#,"Source":#,"JobPriority":#,"RuntimeType":#,"InputArguments":"{}","Reference":null}}}”,
“ExecutionTime”: “yyyy-MM-ddThh:mm:ss.sssZ”,
“Action”: “StartJob”,
“Component”: “Jobs”,
“DisplayName”: “HOGEProcessName”,
“EntityId”: null,
“OperationText”: “ユーザー HOGEHOGE がプロセス HOGEProcess のジョブ を開始しました”,
“UserName”: “HOGEHOGE”,
“UserType”: “TypeType”,
“UserId”: ##,
“UserIsDeleted”: false,
“Id”: ####,
Entities”: [
{
“AuditLogId”: ####,
CustomData”: “{"TenantId":#,"OrganizationUnitId":##,"Key":"################",------途中略------,"BatchExecutionKey":"########################",------途中略------,"Id":*****,"FolderPath":"#######"}”,
“EntityId”: null,
“EntityName”: “UiJob”,
“Action”: “Create”,
“Id”: ++++
},
{
“AuditLogId”: ####,
“CustomData”: “{"Id":[****]}”,
“EntityId”: null,
“EntityName”: “JobBatchInfo”,
“Action”: “Create”,
“Id”: ++++
}
]
}

【自身の記述】

“/odata/AuditLogs?$top=1 $expand=Entities/CustomData($filter=BatchExecutionKey eq’”+対象jobのkey+“')”

中々上手く、対象の監査データが取り出せません(レスポンスの文字列が空です)。Entities自体が2つデータ保持しているのですが、その中の一つのCustomData内の対象項目をフィルターしたいのですが、階層が多く混乱してしまっております。もし、どなたかフィルター方法などご教示いただけましたら嬉しいです。

宜しくお願いします

こんにちは。

対象Jobから抽出したBatchExecutionKey(Jobデータで一意であればBatchExecutionKeyでなくても可)をフィルター条件

結論を言うと、たぶんこの方式だと実装はむずかしそうな気がします。
というのは、 CustomData プロパティの値は、よく見るとJSON「オブジェクト」ではなくJSON「文字列」だからですね。
(だからたぶん$filterで指定できないんじゃないかなと)

自分はJavaScriptで同じようなコードを書いていましたが、
component: ‘Jobs’,
methodName: ‘StartJobs’
なAuditを期間指定で取得して、CustomData をJSONオブジェクトに変換してからBatchExecutionKeyを取りだして探す、とかをやってました

うまくいくといいですねー。

2 Likes

@masatomix さん
お世話になります。
貴重なお返事いただき、ありがとうございます!
一つのアクティビティにフィルター条件入れて一回で取れればと思っていたのですが、
期間指定して複数Auditデータ取得→デシリアライズしてCustomData情報とJob情報を突合していく方法で試してみようと思います!

1 Like

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.