ルーティング構成およびレポートAPI

26B以降、フィールド・サービスでは、構成プロバイダ・マイクロサービス内に新しいパブリック・ルーティングAPIエンドポイントが導入され、ユーザーはルーティング・プロファイルを検出して、特定のプロファイルに関連付けられたバケットをリストできます。 さらに、ルーティング・プランのインポートおよびエクスポート・エンドポイントの新しい実装により、Oracle Fusion AI Studioによって管理されるものを含め、ルーティング・プランの変更の自動化が合理化されます。

次のエンドポイントが導入されました。

機能の説明

  エンドポイント 説明
1

GET /api/field-service/routing/v1/routingProfiles/

ページ区切りおよびHATEOASリンクをサポートして、ルーティング・プロファイル・ラベルおよびメタデータのページ区切りコレクションを取得します。

2

GET /api/field-service/routing/v1/routingProfiles/{profileLabel}/buckets

指定されたルーティング・プロファイル・ラベルに関連付けられたバケット(リソース)のページ区切りリスト(メタデータおよびHATEOASリンクを含む)を取得します。

3

GET /api/field-service/routing/v1/routingRuns/{resourceExternalId}/{date} 

ルーティング・サマリーに必要な、指定したリソースおよび日付のルーティング実行およびキー統計のページ区切りリストを取得します。
4

GET /api/field-service/routing/v1/routingProfiles/{profileLabel}/plans/{planLabel}/custom-actions/export

ルーティング・プランをJSON形式でエクスポートします。 レスポンスは、scheduling_planプロパティの下のプラン・オブジェクトを返します。 条件

ダウンロード=true

は、APIが添付ファイル(HATEOASリンクなし)で応答します。それ以外の場合、応答にはHATEOASリンクが含まれ、添付ヘッダーは含まれません。
5

POST /api/field-service/routing/v1/routingProfiles/{routingProfileLabel}/plans/custom-actions/import

ルーティング・プランをルーティング・プロファイルにインポートします。 ペイロードは、scheduling_planプロパティの下にラップする必要があります。 インポート時に、参照ラベルが検証および解決されます。 計画が存在しない場合は、新規として挿入されます。同じラベルの計画が存在する場合は、409レスポンスが返されます(使用

forceImport

既存のプランを上書きする)。
6

POST /api/field-service/routing/v1/routingProfiles/{routingProfileLabel}/plans/custom-actions/forceImport

ルーティング・プロファイルにルーティング・プランを挿入します。ルーティング・プランが欠落している場合は挿入し、存在する場合は更新します(重複の場合は409エラーなし)。 パラメータおよびセマンティクスは、カスタム・アクション/インポート・エンドポイントと同じです。
7

GET /api/field-service/routing/v1/routingRuns/{runId}/custom-actions/report

集計統計およびHATEOASカテゴリ・リンクを含む、指定されたルーティング実行のサマリー・レポートおよび詳細なアクティビティごとの割当てメトリックを取得します。

ルーティング・プロファイルの取得

GET /api/field-service/routing/v1/routingProfiles/
  • 目的: ルーティング・プロファイル・ラベル(および関連するメタデータ/リンク)のコレクションを返します。
  • Auth: JWT Bearer。ルーティング・プロファイル・メタデータのスコープを読み取ります。
  • 問合せパラメータ:
    • limit: integer; オプション; デフォルトが適用されます。 ページ当たりの最大アイテム数。
    • offset: integer; optional; default 0. 最初の項目のゼロベースの索引。

リクエストの例:

curl -u '<CLIENT-ID>@<INSTANCE-NAME>:<CLIENT-SECRET>' -H 'Accept: application/json' 'https://<instance_name>/routingProfiles/?limit=2&offset=2'

レスポンスの例:

  • 本文: アイテム、totalResults、制限、オフセット、hasMoreおよびリンクを含むコレクション。 リンクにはdescribedbyとcanonicalが含まれます。
  • エラー処理:
    • 400無効なページ区切りパラメータに対する不正なリクエスト(負のオフセット、無効な制限など)。
    • 401認証の欠落/無効に対する未承認。

レスポンス・スキーム:

{
    "description":"The collection of routing profile labels.",
    "properties":{
        "items":{
            "type":"array",
            "description":"An array of routing profile labels.",
            "items":{
                "title":"Routing Profile Label",
                "type":"string",
                "minLength":1,
                "maxLength":160
            }
        },
        "totalResults":{
            "type":"integer",
            "description":"The total number of the resource type records in the collection. "
        },
        "hasMore":{
            "type":"boolean",
            "description":"Contains one of the following values: true or false. The default value is true.<p>True indicates there are more results that can be retrieved with successive paging requests. False or the value is not present, indicates, there are no more results or this is the final page.</p>"
        },
        "offset":{
            "type":"integer",
            "description":"The offset value specified in the request."
        },
        "limit":{
            "type":"integer",
            "description":"The limit value specified in the request. If the value is not specified in the request or if the specified value is not accepted, then it defaults to 100."
        }
    }
}

レスポンスの例:

{
 "totalResults": 8,
    "offset": 0,
    "items": [
      {
        "profileLabel": "AUTOTESTforActionLinksMethods"
      },
      {
         "profileLabel": "AutoTestGroupActionDeleteCancel"
      },
     {
        "profileLabel": "AutoTestGroupActionDeleteOk"
     },
     {
      "profileLabel": "AutoTestGroupActionActivateCancel"
     },
    {
      "profileLabel": "AutoTestGroupActionActivateOk"
    },
    {
      "profileLabel": "AutoTestGroupActionDeactivateCancel"
    },
    {
      "profileLabel": "AutoTestGroupActionDeactivateOk"
    },
    {
     "profileLabel": "ResInfoRoutingProfile"
    }
 ],
 "links": [
  {
    "rel": "describedby",
    "href": "http://configuration-provider.ofsc.team/metadata-catalog/routing"
  },
  {
   "rel": "canonical",
   "href": "http://configuration-provider.ofsc.team/routingProfiles"
  }
 ] }

指定されたプロファイルに関連付けられたバケットの取得

GET /api/field-service/routing/v1/routingProfiles/{profileLabel}/buckets

指定されたルーティング・プロファイル・ラベルに関連付けられたバケット(リソース)のページ区切りリスト(メタデータおよびHATEOASリンクを含む)を取得します。

  • 認証: JWT Bearer。ルーティング・プロファイル・メタデータのスコープを読み取ります。
  • パス・パラメータ:
    • profileLabel: 文字列。必須。 ルーティング・プロファイルのラベル。
  • 問合せパラメータ:
    • limit: integer; オプション; デフォルト10。 返すバケットの最大数。
    • offset: integer; オプション; デフォルト0。 最初の項目のゼロベースの索引。

リクエストの例:

curl -u '<CLIENT-ID>@<INSTANCE-NAME>:<CLIENT-SECRET>' -H 'Accept: application/json' 'https://<instance_name>/api/field-service/routing/v1/routingProfiles/BulkWithImmediate/buckets' 

レスポンス:

  • メディア・タイプ: application/schema+json、application/json。
  • 本文: ページ化されたコレクション(アイテム、totalResults、hasMore、オフセット、制限)およびHATEOASリンク(該当する場合は、正規、次を参照)。
  • エラー処理:
    • 401認証の欠落/無効に対する未承認。
    • 404指定したラベルのルーティング・プロファイルが存在しないか、コール元に表示されていない場合に見つかりません。
    • 400 profileLabelが長さ制約に違反した場合の不正なリクエスト。
    • 400無効なページ区切りパラメータに対する不正なリクエスト。

スキーマ:

{
  "description": "A collection of buckets assigned to the routing profile.",
  "properties": {
    "items": {
      "type": "array",
      "description": "An array of resource objects representing the buckets.",
      "items": {
        "type": "object",
        "properties": {
          "externalId": {
            "type": "string",
            "description": "The external identifier of the resource (bucket)."
          },
          "name": {
            "type": "string",
            "description": "The display name of the resource."
          },
          "schedulingProfileId": {
            "type": "integer",
            "description": "The ID of the routing profile this bucket is associated with."
          }
        }
      }
    },
    "totalResults": {
      "type": "integer",
      "description": "The total number of bucket records in the collection."
    },
    "hasMore": {
      "type": "boolean",
      "description": "True if more results are available for paging; false otherwise."
    },
    "offset": {
      "type": "integer",
      "description": "The offset value specified in the request."
    },
    "limit": {
      "type": "integer",
      "description": "The limit value specified in the request. Defaults to 10."
    }
  }
}

レスポンスの例:

{
    "totalResults": 3,
    "limit": 10,
    "offset": 0,
    "hasMore": false,
    "items": [
        {
            "externalId": "BundledActivity",
            "name": "BundledActivity",
            "schedulingProfileId": 118
        },
        {
            "externalId": "bulk_routing_bucket",
            "name": "Bulk Routing Bucket",
            "schedulingProfileId": 118
        },
        {
            "externalId": "Bucket_LA",
            "name": "Bucket_LA",
            "schedulingProfileId": 118
        }
    ],
    "links": [
        {
            "rel": "describedby",
            "href": "http://configuration-provider.ofsc.team/metadata-catalog/routing"
        },
        {
            "rel": "canonical",
            "href": "http://configuration-provider.ofsc.team/routingProfiles/BulkWithImmediate/buckets"
        },
        {
            "rel": "next",
            "href": "http://configuration-provider.ofsc.team/routingProfiles/BulkWithImmediate/buckets?offset=10&limit=10"
        }
    ]
}

日付別のルーティング実行のリストの取得

GET /api/field-service/routing/v1/routingRuns/{resourceExternalId}/{date}

ルーティング・サマリーに必要な、指定したリソースおよび日付のルーティング実行およびキー統計のページ区切りリストを取得します。

  • 認証: JWT Bearer、ルーティング実行メタデータの読取りスコープ。
  • パス・パラメータ
    • resourceExternalId: 文字列(必須)。 リソース(バケット)の外部識別子。
    • date: date (yyyy-MM-dd); 必須。 スケジューリング実行の日付。
  • 問合せパラメータ
    • limit: integer; オプション。 返されるレコードの最大数。
    • offset: integer; オプション。 レコードの返却を開始する前にスキップするレコード数。

リクエストの例

curl -u '<CLIENT-ID>@<INSTANCE-NAME>:<CLIENT-SECRET>' -H 'Accept: application/json' 'https://api/field-service/routing/v1/routingRuns/bulk_routing_bucket/2025-08-01?limit=2&offset=0'

レスポンス

  • メディア・タイプ: application/schema+json、application/json。
  • 本文: ページ化されたコレクション(アイテム、totalResults、hasMore、オフセット、制限)およびHATEOASリンク(説明は、正規、該当する場合は次)
    • items[]: 開始されたrunId(ISO日時)、resourceExternalId、schedulingPlanId、planName、planLabel、schedulingRunType、runStartType、activitiesToBeAssigned、assignedActivities、totalResources、resourcesChangedRoutes、resultStatusを含むオブジェクト。
  • エラー処理
    • 400不正な要求:
      • 制限またはオフセットが無効です(符号なし整数である必要があります)。
      • resourceExternalIdの長さが160文字を超えています。
      • 無効な日付書式(yyyy-MM-ddである必要があります)または無効なカレンダ値(13月など)です。
    • 404 Not Found:
      • 指定されたリソース/日付(またはこのコンテキストにリソースが見つかりません)のルーティング実行はありません。

スキーマ

{
   "description":"The collection of routing runs for the specified resource and date.",
   "properties":{
      "items":{
         "type":"array",
         "description":"An array of routing runs.",
         "items":{
            "title":"Routing Run",
            "type":"object",
            "properties":{
               "runId":{
                  "type":"integer",
                  "description":"Unique identifier of the routing run."
               },
               "started":{
                  "type":"string",
                  "format":"date-time",
                  "description":"Run start timestamp in ISO-8601 format."
               },
               "resourceExternalId":{
                  "type":"string",
                  "minLength":1,
                  "maxLength":160,
                  "description":"External identifier of the resource."
               },
               "schedulingPlanId":{
                  "type":"integer",
                  "description":"Identifier of the scheduling plan."
               },
               "planName":{
                  "type":"string",
                  "description":"Name of the scheduling plan."
               },
               "planLabel":{
                  "type":"string",
                  "description":"Label of the scheduling plan."
               },
               "schedulingRunType":{
                  "type":"string",
                  "description":"Run type derived from plan profile and creator.",
                  "enum":[
                     "manual",
                     "onceaday",
                     "recurrent",
                     "immediate",
                     "continuous"
                  ]
               },
               "runStartType":{
                  "type":"string",
                  "description":"How the run was started.",
                  "enum":[
                     "automatic",
                     "manual"
                  ]
               },
               "activitiesToBeAssigned":{
                  "type":"integer",
                  "description":"Number of activities to be assigned."
               },
               "assignedActivities":{
                  "type":"integer",
                  "description":"Number of activities assigned."
               },
               "totalResources":{
                  "type":"integer",
                  "description":"Total number of resources considered in the run."
               },
               "resourcesChangedRoutes":{
                  "type":"integer",
                  "description":"Number of resources with changed routes."
               },
               "resultStatus":{
                  "type":"string",
                  "description":"Current status of the run.",
                  "enum":[
                     "undefined",
                     "rolledback",
                     "scheduled",
                     "running",
                     "completed",
                     "waiting",
                     "stopped",
                     "skipped",
                     "failed"
                  ]
               }
            },
            "required":[
               "runId"
            ]
         }
      },
      "totalResults":{
         "type":"integer",
         "description":"The total number of the resource type records in the collection."
      },
      "hasMore":{
         "type":"boolean",
         "description":"Contains one of the following values: true or false. The default value is true. True indicates there are more results that can be retrieved with successive paging requests. False or the value is not present, indicates, there are no more results or this is the final page."
      },
      "offset":{
         "type":"integer",
         "description":"The offset value specified in the request."
      },
      "limit":{
         "type":"integer",
         "description":"The limit value specified in the request. If the value is not specified in the request or if the specified value is not accepted, then it defaults to 10."
      }
   }
}

レスポンスの例

{
    "totalResults": 31,
    "limit": 2,
    "offset": 0,
    "hasMore": true,
    "items": [
        {
            "runId": 1039023,
            "started": "2025-08-01T13:49:46",
            "resourceExternalId": "bulk_routing_bucket",
            "schedulingPlanId": 1000,
            "planName": "bulk",
            "planLabel": "bulk",
            "schedulingRunType": "onceaday",
            "runStartType": "automatic",
            "activitiesToBeAssigned": 0,
            "assignedActivities": 0,
            "totalResources": 2,
            "resourcesChangedRoutes": 0,
            "resultStatus": "skipped"
        },
        {
            "runId": 1039019,
            "started": "2025-08-01T13:49:46",
            "resourceExternalId": "bulk_routing_bucket",
            "schedulingPlanId": 1002,
            "planName": "123",
            "planLabel": "123",
            "schedulingRunType": "recurrent",
            "runStartType": "automatic",
            "activitiesToBeAssigned": 2,
            "assignedActivities": 0,
            "totalResources": 2,
            "resourcesChangedRoutes": 0,
            "resultStatus": "skipped"
        }
    ],
    "links": [
        {
            "rel": "describedby",
            "href": "http://configuration-provider.ofsc.team/metadata-catalog/routingRuns"
        },
        {
            "rel": "canonical",
            "href": "http://configuration-provider.ofsc.team/routingRuns/bulk_routing_bucket/2025-08-01?limit=2"
        },
        {
            "rel": "next",
            "href": "http://configuration-provider.ofsc.team/routingRuns/bulk_routing_bucket/2025-08-01?offset=2&limit=2"
        }
    ]
}

AI対応のJSONとしてのルーティング・プランのエクスポート

GET /api/field-service/routing/v1/routingProfiles/{profileLabel}/plans/{planLabel}/custom-actions/export

ルーティング・プランをJSON形式でエクスポートします。 レスポンスは、scheduling_planプロパティの下のプラン・オブジェクトを返します。 download=trueの場合、APIは添付ファイル(HATEOASリンクなし)で応答します。それ以外の場合、レスポンスにはHATEOASリンクが含まれ、添付ヘッダーは含まれません。

  • 認証: JWT Bearer、ルーティング・プラン・メタデータの読取りスコープ。
  • パス・パラメータ
    • profileLabel: 文字列、必須、minLength: 1、maxLength: 40。
    • planLabel: 文字列、必須、minLength: 1、maxLength: 40。
  • 問合せパラメータ
    • download: boolean;optional;default:false trueの場合、ペイロードを添付ファイルとして返します。falseの場合、HATEOASリンクを含むJSONを出力します。

リクエストの例

curl -H 'Authorization: Bearer <JWT>' -H 'Accept: application/json' 'https://<instance_name>/v2/routingProfiles/AutoTestGroupActionDeleteOk/plans/BulkRouting/custom-actions/export?download=true' 

レスポンス

  • メディア・タイプ: application/schema+json、application/json。
  • 本文: JSON
    • scheduling_plan: エクスポートされたプラン定義(ルーティング・プラン・モデル内のフィールド)。
    • download=falseの場合、トップレベルのHATEOASリンクが含まれます。download=trueの場合、content-dispositionアタッチメント・ヘッダーが設定され、リンクは省略されます。
  • エラー処理
    • 400不正な要求:
      • profileLabelまたはplanLabelの長さが[1、 40]にありません。
    • 401未承認:
      • 認可ベアラー・トークンがないか、無効です。
    • 404 Not Found:
      • ルーティング・プロファイル・ラベルが見つからないか、プラン・ラベルがプロファイル内に見つかりません。

ノート V2エンドポイントによってエクスポートされたプランは、V1の署名として提供されないため、適切な自動化(Oracle Fusion AI Studioなど)を使用して顧客が簡単に変更でき、その後再インポートできます。

レスポンスの例

{
    "scheduling_plan": {
        "label": "manual_plan",
        "name": "manual plan",
        "description": null,
        "active": true,
        "type": "manual",
        "start_day_offset": 0,
        "from_time": null,
        "to_time": null,
        "interval": null,
        "weekdays": {
            "Sun": false,
            "Mon": false,
            "Tue": false,
            "Wed": false,
            "Thu": false,
            "Fri": false,
            "Sat": false
        },
        "time_limit": 5,
        "time_limit_percent_slt": 70,
        "auto_ordering": 1,
        "uniformity_coeff": 0,
        "home_zone_overstep_wght": 4,
        "resource_overtime": 0,
        "unacceptable_travel_time": 240,
        "unacceptable_travel_distance": 200,
        "travel_optimization_strategy": "shortest",
        "use_slt": false,
        "limit_work_by_points": false,
        "default_home_zone_radius": 1,
        "home_zone_enable": false,
        "reopt_enable": 0,
        "reopt_reduce_overdue_thold": null,
        "immediate_scheduling_type": null,
        "bundling_from": 0,
        "bundling_to": 1,
        "assignment_to": 1,
        "immediate_scheduling_subtype": "normal",
        "collab_routing_time_limit": 0,
        "reopt_move_cost_override": 0,
        "reopt_move_cost": 10,
        "sw_reservation_override": false,
        "sw_reservation": 20,
        "scheduling_to_contractor": false,
        "ignore_work_zone_mismatch": false,
        "only_internal_resources": true,
        "goal_based_optimization": "balanced",
        "inventory_required_days": 99,
        "daily_distance_limit_is_used": false,
        "unacceptable_daily_distance": null,
        "use_machine_learning": false,
        "recomm_min_time_limit": -1,
        "recomm_max_time_limit": -1,
        "recomm_balanced_time_limit": -1,
        "message_flow_label": null,
        "predecessor_label": null,
        "trigger_filter_label": null,
        "activity_groups": [
            {
                "activity_location": "bucket_non_scheduled",
                "unacceptable_overdue": 0,
                "overdue_cost": 50,
                "non_assignment_cost": 1500,
                "sla_cost_coeff": 3,
                "sla_overdue_cost": -1,
                "sla_violation_fact_cost": -1,
                "is_multiday": false,
                "autoordering_type": 1,
                "sla_policy": 0,
                "bundling_policy": 0,
                "filter_label": "Other",
                "provider_groups": [
                    {
                        "priority": "1.0",
                        "filter_label": "Other"
                    }
                ]
            },
            {
                "activity_location": "bucket_routing_date",
                "unacceptable_overdue": 0,
                "overdue_cost": 50,
                "non_assignment_cost": 1500,
                "sla_cost_coeff": 3,
                "sla_overdue_cost": -1,
                "sla_violation_fact_cost": -1,
                "is_multiday": false,
                "autoordering_type": 1,
                "sla_policy": 0,
                "bundling_policy": 0,
                "filter_label": "Other",
                "provider_groups": [
                    {
                        "priority": "1.0",
                        "filter_label": "Other"
                    }
                ]
            },
            {
                "activity_location": "resource_non_scheduled",
                "unacceptable_overdue": 0,
                "overdue_cost": 50,
                "non_assignment_cost": 1500,
                "sla_cost_coeff": 3,
                "sla_overdue_cost": -1,
                "sla_violation_fact_cost": -1,
                "is_multiday": false,
                "autoordering_type": 1,
                "sla_policy": 0,
                "bundling_policy": 0,
                "filter_label": "Other",
                "provider_groups": [
                    {
                        "priority": "1.0",
                        "filter_label": "Other"
                    }
                ]
            },
            {
                "activity_location": "resource_routing_date",
                "unacceptable_overdue": 0,
                "overdue_cost": 50,
                "non_assignment_cost": 1500,
                "sla_cost_coeff": 3,
                "sla_overdue_cost": -1,
                "sla_violation_fact_cost": -1,
                "is_multiday": false,
                "autoordering_type": 1,
                "sla_policy": 0,
                "bundling_policy": 0,
                "filter_label": "Other",
                "provider_groups": [
                    {
                        "priority": "1.0",
                        "filter_label": "Other"
                    }
                ]
            }
        ],
        "reoptimization_filters": []
    }
}

署名なしルーティング・プランのインポート

POST /api/field-service/routing/v1/routingProfiles/{routingProfileLabel}/plans/custom-actions/import

ルーティング・プランをルーティング・プロファイルにインポートします。 ペイロードは、scheduling_planプロパティの下にラップする必要があります。 インポート時に、参照ラベルが検証および解決されます。 プランが存在しない場合は新規として挿入されます。同じラベルのプランが存在する場合は、409レスポンスが返されます(forceImportを使用して既存のプランを上書きします)。

  • 認証: JWT Bearer。ルーティング・プラン・メタデータのスコープを記述します。
  • パス・パラメータ
    • routingProfileLabel: 文字列、必須、minLength: 1、maxLength: 40。
  • リクエスト本文- JSONの形式:
    • scheduling_plan: オブジェクト(必須)。 インポートするフル・ルーティング・プラン定義。

リクエストの例

curl -X POST -H "Authorization: Bearer <JWT>" -H "Content-Type: application/json" "https://<instance_name>/api/field-service/routing/v1/routingProfiles/AutoTestGroupActionDeleteOk/plans/custom-actions/import" -d '{ "scheduling_plan": { "label": "manual_plan", "name": "manual plan", "type": "manual" } }' 

レスポンス

  • メディア・タイプ: application/schema+json、application/json。
  • 成功
    • 200件の成功のサマリー: planLabel、profileLabel、created|updated、warning、count、links.export
  • エラー処理
    • 400不正な要求:
      • routingProfileLabelの長さが[1、 40]にないか、ペイロードが無効です。
    • 401未承認:
      • 認可ベアラー・トークンがないか、無効です。
    • 404 Not Found:
      • 不明なルーティング・プロファイル・ラベルです。
    • 409 競合:
      • 同じラベルのプランがすでに存在します(インポート・バリアントのみ)。

未署名ルーティング・プランの強制インポート

POST /api/field-service/routing/v1/routingProfiles/{routingProfileLabel}/plans/custom-actions/forceImport

ルーティング・プロファイルにルーティング・プランを挿入します。ルーティング・プランが欠落している場合は挿入し、存在する場合は更新します(重複の場合は409エラーなし)。 パラメータおよびセマンティクスは、カスタム・アクション/インポート・エンドポイントと同じです。

  • 認証: JWT Bearer。ルーティング・プラン・メタデータのスコープを記述します。
  • パス・パラメータ
    • routingProfileLabel: 文字列、必須、minLength: 1、maxLength: 40。
  • リクエスト本文- JSONの形式:
    • scheduling_plan: オブジェクト(必須)。 インポートするフル・ルーティング・プラン定義。

リクエストの例

curl -X POST -H "Authorization: Bearer <JWT>" -H "Content-Type: application/json" "https://<instance_name>/api/field-service/routing/v1/routingProfiles/AutoTestGroupActionDeleteOk/plans/custom-actions/forceImport" -d '{ "scheduling_plan": { "label": "manual_plan", "name": "manual plan", "type": "manual" } }' 

レスポンス

  • メディア・タイプ: application/schema+json、application/json。
  • 成功
    • 200件の成功のサマリー: planLabel、profileLabel、created|updated、warning、count、links.export
  • エラー処理
    • 400不正な要求:
      • routingProfileLabelの長さが[1、 40]にないか、ペイロードが無効です。
    • 401未承認:
      • 認可ベアラー・トークンがないか、無効です。
    • 404 Not Found:
      • 不明なルーティング・プロファイル・ラベルです。
    • 409 競合:
      • オーバーライドできない競合の場合のみ(通常は、forceImportの単純な重複の場合は返されません)。

割当レポートおよび工順の要約

GET /api/field-service/routing/v1/routingRuns/{runId}/custom-actions/report

集計統計およびHATEOASカテゴリ・リンクを含む、指定されたルーティング実行のサマリー・レポートおよび詳細なアクティビティごとの割当てメトリックを取得します。

  • 割当済
  • notAssigned
  • 再割当済
  • 順序変更済
  • 未割当。

リクエスト

  • 認証: JWT Bearer。ルーティング・プラン・メタデータのスコープを記述します。
  • パス・パラメータ:
    • runId: 数値。必須。 取得するルーティング実行のID。
  • 問合せパラメータ: なし

リクエストの例

curl -u '<CLIENT-ID>@<INSTANCE-NAME>:<CLIENT-SECRET>' -H 'Accept: application/json' 'https://<instance_name>/routingRuns/{runId}/custom-actions/report'

レスポンス

  • メディア・タイプ: application/schema+json、application/json。
  • 本体- 次のプロパティを持つオブジェクト:
    • runId: 数値
    • resourceId: 数値
    • resourceExternalId: 文字列
    • schedulingPlanId: 数値
    • planName: 文字列
    • planLabel: 文字列
    • schedulingPlanType: enum [手動、1日1回、繰返し、即時、連続]
    • averageWaitingTimeMinutes、averageMileageKmなどの集計メトリックと、割当て済、notAssigned、再割当て済、順序変更済、未割当てのリンク・オブジェクト(それぞれrel: canonical)。 トップレベルのリンクには、正規および説明が含まれます。
  • エラー処理
    • 400不正な要求:
      • runIdは正の整数ではありません(または解析できません)。
    • 404 Not Found:
      • 指定されたrunIdのルーティング実行は存在しません。

スキーマ

{
   "description":"The routing run report.",
   "properties":{
      "runId":{
         "type":"number",
         "description":"The ID of the routing run."
      },
      "resourceId":{
         "type":"number",
         "description":"The ID of the resource."
      },
      "resourceExternalId":{
         "type":"string",
         "description":"The external ID of the resource."
      },
      "schedulingPlanId":{
         "type":"number",
         "description":"The ID of the scheduling plan."
      },
      "planName":{
         "type":"string",
         "description":"The name of the scheduling plan."
      },
      "planLabel":{
         "type":"string",
         "description":"The label of the scheduling plan."
      },
      "schedulingPlanType":{
         "type":"string",
         "description":"The type of the scheduling plan/run.",
         "enum":[
            "manual",
            "onceaday",
            "recurrent",
            "immediate",
            "continuous"
         ]
      },
      "runStartType":{
         "type":"string",
         "description":"How the run was started.",
         "enum":[
            "automatic",
            "manual"
         ]
      },
      "runDate":{
         "type":"string",
         "format":"date",
         "description":"The date of the run."
      },
      "routeDateStart":{
         "type":"string",
         "format":"date",
         "description":"The start date of the route."
      },
      "started":{
         "type":"string",
         "format":"date-time",
         "description":"The start date and time of the run."
      },
      "finished":{
         "type":"string",
         "format":"date-time",
         "description":"The finish date and time of the run."
      },
      "durationSeconds":{
         "type":"number",
         "description":"The duration of the run in seconds."
      },
      "totalResources":{
         "type":"number",
         "description":"The total number of resources."
      },
      "resourcesChangedRoutes":{
         "type":"number",
         "description":"The number of resources that changed routes."
      },
      "activitiesToBeAssigned":{
         "type":"number",
         "description":"The number of activities to be assigned."
      },
      "totalActivitiesChanged":{
         "type":"number",
         "description":"The total number of activities changed."
      },
      "assignedActivities":{
         "type":"number",
         "description":"The number of assigned activities."
      },
      "notAssignedActivities":{
         "type":"number",
         "description":"The number of not assigned activities."
      },
      "reassignedActivities":{
         "type":"number",
         "description":"The number of reassigned activities."
      },
      "reorderedActivities":{
         "type":"number",
         "description":"The number of reordered activities."
      },
      "unassignedActivities":{
         "type":"number",
         "description":"The number of unassigned activities."
      },
      "assurance":{
         "type":"number",
         "description":"The assurance level."
      },
      "resultStatus":{
         "type":"string",
         "description":"The result status of the run.",
         "enum":[
            "undefined",
            "rolledback",
            "scheduled",
            "running",
            "completed",
            "waiting",
            "stopped",
            "skipped",
            "failed"
         ]
      },
      "resultDescription":{
         "type":"string",
         "description":"The result description of the run."
      },
      "averageWorkTimeMinutes":{
         "type":"number",
         "description":"The average work time in minutes."
      },
      "averageOvertimeMinutes":{
         "type":"number",
         "description":"The average overtime in minutes."
      },
      "averageTravelTimeMinutes":{
         "type":"number",
         "description":"The average travel time in minutes."
      },
      "averageWaitingTimeMinutes":{
         "type":"number",
         "description":"The average waiting time in minutes."
      },
      "averageMileageKm":{
         "type":"number",
         "description":"The average mileage in kilometers."
      },
      "assigned":{
         "type":"object",
         "description":"Links to assigned activities."
      },
      "notAssigned":{
         "type":"object",
         "description":"Links to not assigned activities."
      },
      "reassigned":{
         "type":"object",
         "description":"Links to reassigned activities."
      },
      "reordered":{
         "type":"object",
         "description":"Links to reordered activities."
      },
      "unassigned":{
         "type":"object",
         "description":"Links to unassigned activities."
      }
   }
}

レスポンスの例

{
    "runId": 1038866,
    "resourceId": 20399,
    "resourceExternalId": "bulk_routing_bucket",
    "schedulingPlanId": 186,
    "planName": "Bulk Routing",
    "planLabel": "BulkRouting",
    "schedulingPlanType": "manual",
    "runStartType": "manual",
    "runDate": "2025-08-01",
    "routeDateStart": "2025-08-01",
    "started": "2025-07-31T11:41:35",
    "finished": "2025-07-31T11:45:38",
    "durationSeconds": 243,
    "totalResources": 2,
    "resourcesChangedRoutes": 2,
    "activitiesToBeAssigned": 4,
    "totalActivitiesChanged": 7,
    "assignedActivities": 3,
    "notAssignedActivities": 1,
    "reassignedActivities": 1,
    "reorderedActivities": 1,
    "unassignedActivities": 1,
    "assurance": 99.900000000000006,
    "resultStatus": "completed",
    "resultDescription": null,
    "averageWorkTimeMinutes": 480.0,
    "averageOvertimeMinutes": 0.0,
    "averageTravelTimeMinutes": 20.0,
    "averageWaitingTimeMinutes": 330.0,
    "averageMileageKm": 2.0,
    "assigned": {
        "links": [
            {
                "rel": "canonical",
                "href": "http://configuration-provider.ofsc.team/routingRuns/1038866/custom-actions/report/assigned"
            }
        ]
    },
    "notAssigned": {
        "links": [
            {
                "rel": "canonical",
                "href": "http://configuration-provider.ofsc.team/routingRuns/1038866/custom-actions/report/notAssigned"
            }
        ]
    },
    "reassigned": {
        "links": [
            {
                "rel": "canonical",
                "href": "http://configuration-provider.ofsc.team/routingRuns/1038866/custom-actions/report/reassigned"
            }
        ]
    },
    "reordered": {
        "links": [
            {
                "rel": "canonical",
                "href": "http://configuration-provider.ofsc.team/routingRuns/1038866/custom-actions/report/reordered"
            }
        ]
    },
    "unassigned": {
        "links": [
            {
                "rel": "canonical",
                "href": "http://configuration-provider.ofsc.team/routingRuns/1038866/custom-actions/report/unassigned"
            }
        ]
    },
    "links": [
        {
            "rel": "canonical",
            "href": "http://configuration-provider.ofsc.team/routingRuns/1038866"
        },
        {
            "rel": "describedby",
            "href": "http://configuration-provider.ofsc.team/metadata-catalog/routingRuns"
        }
    ]
}

割当済サブエンドポイント

スキーマ

{
  "description": "The list of assigned activities.",
  "properties": {
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "activityId": {
            "type": "number",
            "description": "The ID of the activity."
          },
          "fromResource": {
            "type": "string",
            "description": "The external ID of the resource from which the activity was moved."
          },
          "toResource": {
            "type": "string",
            "description": "The external ID of the resource to which the activity was moved."
          },
          "fromDate": {
            "type": "string",
            "description": "The date from which the activity was moved.",
            "format": "date"
          },
          "toDate": {
            "type": "string",
            "description": "The date to which the activity was moved.",
            "format": "date"
          },
          "travelEstimationMethod": {
            "type": "number",
            "description": "The travel estimation method used."
          }
        }
      }
    },
    "totalResults": {
      "type": "integer",
      "description": "The total number of items in the collection."
    },
    "hasMore": {
      "type": "boolean",
      "description": "True if more results are available for paging; false otherwise."
    },
    "offset": {
      "type": "integer",
      "description": "The offset value specified in the request."
    },
    "limit": {
      "type": "integer",
      "description": "The limit value specified in the request. Defaults to 10."
    }
  }
}

割当済サブエンドポイント

結果の例

{
    "totalResults": 3,
    "limit": 10,
    "offset": 0,
    "hasMore": false,
    "items": [
        {
            "activityId": 8769454,
            "fromResourceExternalId": "bulk_routing_bucket",
            "toResourceExternalId": "resource_phoenix",
            "fromDate": "2025-08-01",
            "toDate": "2025-08-01",
            "travelEstimationMethod": 12
        },
        {
            "activityId": 8769455,
            "fromResourceExternalId": "bulk_routing_bucket",
            "toResourceExternalId": "resource_phoenix",
            "fromDate": "2025-08-01",
            "toDate": "2025-08-01",
            "travelEstimationMethod": 105
        },
        {
            "activityId": 8769465,
            "fromResourceExternalId": "bulk_routing_bucket",
            "toResourceExternalId": "resource_phoenix",
            "fromDate": "2025-08-01",
            "toDate": "2025-08-01",
            "travelEstimationMethod": 12
        }
    ],
    "links": [
        {
            "rel": "describedby",
            "href": "http://configuration-provider.ofsc.team/metadata-catalog/routingRuns"
        },
        {
            "rel": "canonical",
            "href": "http://configuration-provider.ofsc.team/routingRuns/1038866/custom-actions/report/assigned"
        },
        {
            "rel": "next",
            "href": "http://configuration-provider.ofsc.team/routingRuns/1038866/custom-actions/report/assigned?offset=10&limit=10"
        }
    ]
}

サブエンドポイントが割り当てられていません

スキーマ

{
  "description": "The list of not assigned activities.",
  "properties": {
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "activityId": {
            "type": "number",
            "description": "The ID of the activity."
          },
          "initialResource": {
            "type": "string",
            "description": "The external ID of the initial resource."
          },
          "notAssignedReasonCode": {
            "type": "number",
            "description": "The reason code for not assigning the activity."
          },
          "errorMessage": {
            "type": "string",
            "description": "The error message for not assigning the activity."
          }
        }
      }
    },
    "totalResults": {
      "type": "integer",
      "description": "The total number of items in the collection."
    },
    "hasMore": {
      "type": "boolean",
      "description": "True if more results are available for paging; false otherwise."
    },
    "offset": {
      "type": "integer",
      "description": "The offset value specified in the request."
    },
    "limit": {
      "type": "integer",
      "description": "The limit value specified in the request. Defaults to 10."
    }
  }
}

サブエンドポイントが割り当てられていません

レスポンスの例

{
    "totalResults": 1,
    "limit": 10,
    "offset": 0,
    "hasMore": false,
    "items": [
        {
            "activityId": 8769456,
            "resourceExternalId": "bulk_routing_bucket",
            "notAssignedReasonCode": 6068,
            "notAssignedReason": "Field Resources with required Work Skills are not found."
        }
    ],
    "links": [
        {
            "rel": "describedby",
            "href": "http://configuration-provider.ofsc.team/metadata-catalog/routingRuns"
        },
        {
            "rel": "canonical",
            "href": "http://configuration-provider.ofsc.team/routingRuns/1038866/custom-actions/report/notAssigned"
        },
        {
            "rel": "next",
            "href": "http://configuration-provider.ofsc.team/routingRuns/1038866/custom-actions/report/notAssigned?offset=10&limit=10"
        }
    ]
}

再割当て済サブエンドポイント

スキーマ

{
  "description": "The list of reassigned activities.",
  "properties": {
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "activityId": {
            "type": "number",
            "description": "The ID of the activity."
          },
          "fromResource": {
            "type": "string",
            "description": "The external ID of the resource from which the activity was moved."
          },
          "toResource": {
            "type": "string",
            "description": "The external ID of the resource to which the activity was moved."
          },
          "fromDate": {
            "type": "string",
            "description": "The date from which the activity was moved.",
            "format": "date"
          },
          "toDate": {
            "type": "string",
            "description": "The date to which the activity was moved.",
            "format": "date"
          },
          "travelEstimationMethod": {
            "type": "number",
            "description": "The travel estimation method used."
          }
        }
      }
    },
    "totalResults": {
      "type": "integer",
      "description": "The total number of items in the collection."
    },
    "hasMore": {
      "type": "boolean",
      "description": "True if more results are available for paging; false otherwise."
    },
    "offset": {
      "type": "integer",
      "description": "The offset value specified in the request."
    },
    "limit": {
      "type": "integer",
      "description": "The limit value specified in the request. Defaults to 10."
    }
  }
}

再割当て済サブエンドポイント

レスポンスの例

{
    "totalResults": 1,
    "limit": 10,
    "offset": 0,
    "hasMore": false,
    "items": [
        {
            "activityId": 8769459,
            "fromResourceExternalId": "bulk_routing_technician",
            "toResourceExternalId": "resource_phoenix",
            "fromDate": "2025-08-01",
            "toDate": "2025-08-01",
            "travelEstimationMethod": 12
        }
    ],
    "links": [
        {
            "rel": "describedby",
            "href": "http://configuration-provider.ofsc.team/metadata-catalog/routingRuns"
        },
        {
            "rel": "canonical",
            "href": "http://configuration-provider.ofsc.team/routingRuns/1038866/custom-actions/report/reassigned"
        },
        {
            "rel": "next",
            "href": "http://configuration-provider.ofsc.team/routingRuns/1038866/custom-actions/report/reassigned?offset=10&limit=10"
        }
    ]
}

並べ替えられたサブエンドポイント

スキーマ

{
  "description": "The list of reordered activities.",
  "properties": {
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "activityId": {
            "type": "number",
            "description": "The ID of the activity."
          },
          "resourceExternalId": {
            "type": "string",
            "description": "The external ID of the resource."
          },
          "routeDate": {
            "type": "string",
            "description": "The date of the route.",
            "format": "date"
          },
          "fromPreviousActivityId": {
            "type": "number",
            "description": "The ID of the previous activity before reordering."
          },
          "toPreviousActivityId": {
            "type": "number",
            "description": "The ID of the previous activity after reordering."
          },
          "travelEstimationMethod": {
            "type": "number",
            "description": "The travel estimation method used."
          }
        }
      }
    },
    "totalResults": {
      "type": "integer",
      "description": "The total number of items in the collection."
    },
    "hasMore": {
      "type": "boolean",
      "description": "True if more results are available for paging; false otherwise."
    },
    "offset": {
      "type": "integer",
      "description": "The offset value specified in the request."
    },
    "limit": {
      "type": "integer",
      "description": "The limit value specified in the request. Defaults to 10."
    }
  }
}

並べ替えられたサブエンドポイント

レスポンスの例

{
    "totalResults": 1,
    "limit": 10,
    "offset": 0,
    "hasMore": false,
    "items": [
        {
            "activityId": 8769457,
            "resourceExternalId": "bulk_routing_technician",
            "routeDate": "2025-08-01",
            "fromPreviousActivityId": 8769458,
            "toPreviousActivityId": 8769467,
            "travelEstimationMethod": 12
        }
    ],
    "links": [
        {
            "rel": "describedby",
            "href": "http://configuration-provider.ofsc.team/metadata-catalog/routingRuns"
        },
        {
            "rel": "canonical",
            "href": "http://configuration-provider.ofsc.team/routingRuns/1038866/custom-actions/report/reordered"
        },
        {
            "rel": "next",
            "href": "http://configuration-provider.ofsc.team/routingRuns/1038866/custom-actions/report/reordered?offset=10&limit=10"
        }
    ]
}

未割当てのサブエンドポイント

スキーマ

{
  "description": "The list of unassigned activities.",
  "properties": {
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "activityId": {
            "type": "number",
            "description": "The ID of the activity."
          },
          "fromResource": {
            "type": "string",
            "description": "The external ID of the resource from which the activity was moved."
          },
          "toResource": {
            "type": "string",
            "description": "The external ID of the resource to which the activity was moved."
          },
          "fromDate": {
            "type": "string",
            "description": "The date from which the activity was moved.",
            "format": "date"
          },
          "toDate": {
            "type": "string",
            "description": "The date to which the activity was moved.",
            "format": "date"
          },
          "travelEstimationMethod": {
            "type": "number",
            "description": "The travel estimation method used."
          }
        }
      }
    },
    "totalResults": {
      "type": "integer",
      "description": "The total number of items in the collection."
    },
    "hasMore": {
      "type": "boolean",
      "description": "True if more results are available for paging; false otherwise."
    },
    "offset": {
      "type": "integer",
      "description": "The offset value specified in the request."
    },
    "limit": {
      "type": "integer",
      "description": "The limit value specified in the request. Defaults to 10."
    }
  }
}

未割当てのサブエンドポイント

レスポンスの例

{
    "totalResults": 1,
    "limit": 10,
    "offset": 0,
    "hasMore": false,
    "items": [
        {
            "activityId": 8769464,
            "fromResourceExternalId": "resource_phoenix",
            "toResourceExternalId": "bulk_routing_bucket",
            "fromDate": "2025-08-01",
            "toDate": "2025-08-01",
            "travelEstimationMethod": 14
        }
    ],
    "links": [
        {
            "rel": "describedby",
            "href": "http://configuration-provider.ofsc.team/metadata-catalog/routingRuns"
        },
        {
            "rel": "canonical",
            "href": "http://configuration-provider.ofsc.team/routingRuns/1038866/custom-actions/report/unassigned"
        },
        {
            "rel": "next",
            "href": "http://configuration-provider.ofsc.team/routingRuns/1038866/custom-actions/report/unassigned?offset=10&limit=10"
        }
    ]
}

ビジネス上の利点

  • 将来に対応した検出と統合:一貫したパブリックなページ区切りエンドポイントにより、ルーティング・プロファイルとそれに関連付けられたバケットをシームレスに検出できるため、新しいUI開発および自動化のユース・ケースがサポートされます。
  • 運用効率の向上:ルーティング・データおよびプランへのAPI主導の合理化されたアクセスにより、手作業を削減し、ビジネス・プロセスを加速します。
  • データ可視性の向上:詳細な取得およびレポート・エンドポイントにより、ルーティング・アクティビティの透明性が確保され、より優れたモニタリングおよび分析が可能になります。
  • 標準化されたAPI契約とエラー処理:統一されたインタフェースと予測可能なエラー・レスポンスにより、統合ツールと内部ツールの信頼性が向上し、メンテナンスのオーバーヘッドが低減されます。
  • 自動化と統合の強化:インポート/エクスポートおよびアップサート・エンドポイントにより、AIベースのツールを含む環境および外部システム間でのルーティング・プランの自動デプロイメントおよび同期が容易になります。

有効化および構成ステップ

  • 特別な有効化は必要ありません。これらのエンドポイントには、標準のプラットフォーム認証および認可を使用してアクセスできます。
    • JWT Bearerトークンが必要です。
    • 読取りスコープは、メタデータ・エンドポイント(platform:metadata_api_routing_profile:readなど)に適用されます。
  • クライアント・アプリケーションは、有効なlimitおよびoffset 値を提供し、サービスの収集契約に従ってページ区切りリンクおよびhasMore フラグを正しく処理する必要があります。
  • 内部またはサードパーティのツールと統合する前に、すべての使用がOracleのセキュリティ、プライバシおよびコンプライアンスのガイドラインに準拠していることを確認してください。

ヒントと考慮事項

リクエスト/レスポンスの詳細
コレクションを返すすべてのリスト・エンドポイントは、次のような一貫性のあるレスポンス構造を共有します:

  • items: 結果の配列
  • totalResults (Integer): 使用可能な項目の合計数
  • limit(Integer): ページごとに返されるアイテムの最大数
  • offset(Integer): 結果の最初の項目のゼロベースの索引
  • hasMore (ブール): 追加の結果が使用可能かどうかを示します。
  • links: canonical およびdescribedbyを含むHATEOASリンク。さらに結果が存在する場合は、次のリンクが含まれます。

認証および認可

  • JWT Bearerトークンは必須です。
  • 読取りスコープplatform:metadata_api_routing_profile:readは、これらのGETエンドポイントに適用されます。

ページ区切り

  • デフォルト制限が適用されます。limit はサポートされている範囲内にあり、offset greater than or equal toゼロである必要があります。
  • ページ区切りパラメータの値が無効になると、400 Bad Request errorが発生します。

ラベル検証

  • ラベルは空ではなく、許可される長さ内にする必要があります。
  • 無効なラベル値は、説明メッセージを含む400 Bad Requestレスポンスを返します。

エラー処理

  • 標準化された4xx/5xxエラー・コードが使用されます。
  • 呼出し側はエラー・メッセージを表示し、べき等なGETリクエストの再試行のみを考慮する必要があります。

セキュリティ

  • これらのエンドポイントを自動化またはツールに統合する前に、トークンおよびスコープがOracleの内部セキュリティ、プライバシおよびコンプライアンスのガイドラインに準拠していることを確認します。

主なリソース

NA

アクセス要件

NA