簡介

雲端 HCM 提供使用新一代 BOSS/Spectra 平台從 HCM 擷取資料的功能。

目標

完成本教學課程後,您將瞭解如何:

  • 查詢職工擷取檢視與其物件階層
  • 非同步提交與追蹤擷取工作要求,以擷取選取的職工階層資料
  • 下載擷取輸出檔案

必要條件

在您開始之前:

  1. 請聯絡 Oracle CoE,確定已在您的 Pod 中佈建 Spectra 平台,包括 RODS 資料複製
  2. 執行必要的安全組態,包括:
    • 資料安全性設定
    • OAuth 用戶端應用程式設定

使用案例

此功能可讓您解決下列使用案例。

完整資料擷取

職工資料的完整擷取可以是一次性或定期活動。

您可以擷取整個物件階層或僅擷取其子集。

完整資料擷取會擷取符合篩選準則的所有記錄,而輸出檔案可能會非常大。

系統將從要求的生效日期擷取生效日期,其中預設為目前擷取日期。

增量資料擷取

職工資料的遞增擷取通常是定期的排定活動。

您可以擷取整個物件階層或僅擷取其子集。

在此使用案例中,您只要擷取自上次擷取執行後變更的物件,其中第一個擷取執行是基準線。若要達到此目的,必須將 timeUpdated 屬性篩選套用至任何受變更偵測影響的層次。

增量資料擷取查詢可套用其他篩選準則。輸出檔案通常會比完整擷取小,因為它們只會包含差異。

只會擷取目前的屬性值。

系統將從要求的生效日期擷取生效日期,其中預設為目前擷取日期。

警示:

將不會使用 timeUpdated 篩選傳回實體刪除的記錄。

作業 1:選擇擷取檢視

根據必要的物件和屬性,選擇要使用的擷取檢視。下方列出可用的檢視,以及可擷取的物件與屬性。

職工指派擷取

使用 workerAssignmentExtracts 來擷取職工的僱用指派資料。

檢視途徑 workerAssignmentExtracts


物件 屬性 關係類型
workerAssignmentExtract
  • ID
  • effectiveStartDate
  • effectiveEndDate
  • effectiveSequence
  • effectiveLatestChange
  • assignmentType
  • assignmentNumber
  • primaryFlag
  • businessTitle
  • workAtHomeFlag
  • officeBuilding
  • officeFloor
  • officeMailStop
  • officeNumber
  • primaryAssignmentFlag
  • primaryWorkRelationshipFlag
  • timeUpdated
  • updatedBy
  • timeCreated
  • createdBy
  • systemPersonType
  • labourUnionMemberFlag
  • managerFlag
  • probationEndDate
  • probationPeriod
  • probationPeriodUnit
  • normalHours
  • 頻率
  • endTime
  • startTime
  • noticePeriod
  • noticePeriodUOM
  • workerCategory
  • assignmentCategory
  • hourlyPaidOrSalaried
  • projectedEndDate
  • projectedStartDate
  • assignmentStatusType
  • expenseCheckSendToAddress
  • retirementAge
  • retirementDate
  • synchronizeFromPositionFlag
  • fullTimeOrPartTime
  • permanentAssignmentFlag
  • seniorityBasis
  • overtimePeriod
  • adjustedFullTimeEquivalent
  • annualWorkingDuration
  • annualWorkingDurationUnit
  • annualWorkingRatio
  • standardFrequency
  • standardWorkingHours
  • standardAnnualWorkingDuration
  • 順序
n/a
workerAssignmentExtract.department
  • ID
  • 名稱
  • title
  • effectiveStartDate
  • effectiveEndDate
一對一
workerAssignmentExtract.legalEmployer
  • ID
  • 名稱
  • effectiveStartDate
  • effectiveEndDate
一對一
workerAssignmentExtract.legislation
  • territoryCode
  • territoryShortName
一對一
workerAssignmentExtract.position
  • ID
  • effectiveStartDate
  • effectiveEndDate
  • 名稱
  • 程式碼
一對一
workerAssignmentExtract.grade
  • ID
  • effectiveStartDate
  • effectiveEndDate
  • 名稱
  • 程式碼
一對一
workerAssignmentExtract.location
  • ID
  • effectiveStartDate
  • effectiveEndDate
  • 名稱
  • 程式碼
一對一
workerAssignmentExtract.location.mainAddress
  • ID
  • effectiveStartDate
  • effectiveEndDate
  • 縣別
  • 狀況
  • 省別
  • townOrCity
  • 郵遞區號
  • countryCode
  • longPostalCode
  • addressLine1
  • addressLine2
  • addressLine3
  • addressLine4
一對一
workerAssignmentExtract.location.mainAddress.country
  • territoryCode
  • territoryShortName
一對一
workerAssignmentExtract.job
  • ID
  • effectiveStartDate
  • effectiveEndDate
  • 名稱
  • 程式碼
  • jobFunctionCode
  • managerLevel
一對一
workerAssignmentExtract.job.jobFamily
  • ID
  • effectiveStartDate
  • effectiveEndDate
  • 名稱
  • 程式碼
一對一
workerAssignmentExtract.collectiveAgreement
  • ID
  • effectiveStartDate
  • effectiveEndDate
  • 名稱
一對一
workerAssignmentExtract.personType
  • ID
  • userPersonType
一對一
workerAssignmentExtract.workerUnion
  • ID
  • effectiveStartDate
  • effectiveEndDate
  • 名稱
一對一
workerAssignmentExtract.assignmentUserStatus
  • ID
  • userStatus
一對一
workerAssignmentExtract.businessUnit
  • ID
  • effectiveStartDate
  • effectiveEndDate
  • 名稱
一對一
workerAssignmentExtract.account
  • codeCombinationId
  • concatenatedSegments
  • chartOfAccountsId
一對一
workerAssignmentExtract.ledger
  • ledgerId
  • 名稱
一對一
workerAssignmentExtract.workRelationship
  • ID
  • startDate
  • workerType
  • timeCreated
  • timeUpdated
一對一
workerAssignmentExtract.localName
  • ID
  • effectiveStartDate
  • effectiveEndDate
  • lastName
  • firstName
  • displayName
  • listName
  • timeCreated
  • timeUpdated
一對一
workerAssignmentExtract.globalName
  • ID
  • effectiveStartDate
  • effectiveEndDate
  • lastName
  • firstName
  • displayName
  • listName
  • timeCreated
  • timeUpdated
一對一
workerAssignmentExtract.personDetail
  • ID
  • personNumber
  • effectiveStartDate
  • effectiveEndDate
  • timeCreated
  • timeUpdated
一對一

職工法規資訊擷取

使用 workerLegislativeInfoExtract 來擷取職工的法規資訊資料。

檢視途徑 工作人員 /$views/workerLegislativeInfoExtract


物件 屬性 關係類型
職工
  • ID
n/a
worker.personDetail
  • ID
  • effectiveStartDate
  • effectiveEndDate
  • personNumber
一對一
worker.legislativeInformation
  • ID
  • effectiveStartDate
  • effectiveEndDate
  • 性別
  • maritalStatus
  • maritalStatusChangeDate
  • highestEducationLevel
  • timeUpdated
  • updatedBy
  • timeCreated
  • createdBy
一對一
worker.legislativeInformation.legislation
  • territoryCode
  • territoryShortName
一對一

職工姓名擷取

使用 workerNamesExtract 擷取職工的姓名資料。

檢視途徑 工作人員 /$views/workerNamesExtract


物件 屬性 關係類型
職工
  • ID
n/a
worker.personDetail
  • ID
  • effectiveStartDate
  • effectiveEndDate
  • personNumber
一對一
worker.names
  • ID
  • effectiveStartDate
  • effectiveEndDate
  • lastName
  • firstName
  • middleNames
  • title
  • 前置碼
  • 字尾
  • knownAs
  • previousLastName
  • 榮譽
  • militaryRank
  • displayName
  • fullName
  • listName
  • orderName
  • nameLanguage
  • 類型
  • timeUpdated
  • updatedBy
  • timeCreated
  • createdBy
一對多
worker.names.legislation
  • territoryCode
  • territoryShortName
一對一
worker.names.language
  • languageCode
一對一

職工電話擷取

使用 workerPhonesExtract 來擷取職工的電話資料。

檢視途徑 工作人員 /$views/workerPhonesExtract


物件 屬性 關係類型
職工
  • ID
n/a
worker.personDetail
  • ID
  • effectiveStartDate
  • effectiveEndDate
  • personNumber
一對一
worker.phones
  • ID
  • 類型
  • primaryFlag
  • phoneNumber
  • areaCode
  • countryCodeNumber
  • extension
  • 有效性
  • timeUpdated
  • updatedBy
  • timeCreated
  • createdBy
一對多
worker.phones.legislation
  • territoryCode
  • territoryShortName
一對一

職工電子郵件擷取

使用 workerEmailsExtract 擷取職工的電子郵件資料。

檢視途徑 工作人員 /$views/workerEmailsExtract


物件 屬性 關係類型
職工
  • ID
n/a
worker.personDetail
  • ID
  • effectiveStartDate
  • effectiveEndDate
  • personNumber
一對一
worker.emails
  • ID
  • 類型
  • primaryFlag
  • emailAddress
  • timeUpdated
  • updatedBy
  • timeCreated
  • createdBy
一對多

多國語言:

可翻譯的屬性目前只能使用英文。

工作 2:準備與測試擷取查詢

每個擷取檢視都有一個查詢 API,可以建立和測試擷取查詢。

URL /api/boss/data/objects/ora/hcmHrCore/employment/v1/{{viewPath}}/$query
HTTP 方法 POST
要求範本
{
    "collection": {
        "limit": {{limit}},
        "offset": {{offset}},
        "sortBy": [ {{sortAttributes}} ],
        "filter": "{{topLevelFilter}}"
    },
    "fields": [ {{topLevelAttributes}} ],
    "accessors": {
        "{{childObject}}": {
            "collection": {
                "filter": "{{childLevelFilter}}"
            },
            "fields": [ {{childLevelAttributes}} ],
            "accessors": {
                {{nestedChildAccessors}}               
            }
        },
        ...
    }
}
回應樣板
200 OK

{
	"items": [
		{{items}}
	],
	"hasMore": {{hasMore}}
}

物件和屬性

定義要擷取的資料,亦即應包含哪些物件與屬性。包含子項物件需要新增存取子項,而包含特定欄位則需要在 fields 陣列中列出。請參閱完整範例

篩選

定義資料篩選方式。您可以使用下列表示式來建立查詢的篩選。

目的 表示式 範例
相等測試 field = value ename = 'KING'
不平等測試 field != value activeFlag != true
大於測試
小於測試
field > value
field < value
sal > 1999.99
hireDate < '2000-01-01'
timeUpdated> '1900-01-01T13:51:54Z'
高於或等於測試
低於或等於測試
field >= value
field <= value< code>
sal >= 1999.99
hireDate <= '2000-01-01'
timeUpdated >= '1900-01-01T13:51:54Z'
樣式比對 field LIKE 'pattern' job LIKE 'SALES%'
會員資格測試 field IN (value1, ..., valueN) deptno IN (10, 20, 40)
不區分大小寫比較 field ~= value
field ~!= value
field ~> value
field ~< value
field ~>= value
field ~<= value
field ~LIKE 'pattern'
field ~IN (value1, ..., valueN)
ename ~= 'king'
存在性測試 (適用於一對多關係) child[expression] assignments[startDate = null]
邏輯結合 expression AND expression  
邏輯分離 expression OR expression  
邏輯否定 !(expression)  

依一對一關係中的下階物件篩選:

如果是一對一關係,您可以在篩選子句中參照子項物件及其屬性,就像其他父項物件的屬性一樣,例如 legalEmployer.id in (1001, 1002)

篩選一對多關係中的子項物件:

若為一對多關係,上表中的存在測試將篩選至少有一個下階符合準則的上階。不過,這並不表示如果擷取下階記錄,將會自動篩選。如果您想要確保只取得符合準則的下階記錄,則也必須在下階層級重複篩選。

例如,如果您只想擷取 W1 類型的電話,則需要套用下列篩選:


{
    "collection": {
        "filter": "phones[type = 'W1']"
    },
    "accessors": {
        "phones": {
            "collection": {
                "filter": "type = 'W1'"
            },
...
                

依生效日期篩選:

如果是生效日期物件,依預設您將取得自目前日期起生效的資料。若要擷取自特定日期起生效的資料,請使用 $effectiveDate HTTP 查詢參數。

例如,如果您要擷取自 2023-01-01 起生效的資料,請使用下列 URL 進行查詢:

/api/boss/data/objects/ora/hcmHrCore/employment/v1/{{viewPath}}/$query?$effectiveDate=2023-01-01

排序

定義資料的排序方式。排序是以包含排序方向 (asc 或 desc) 的排序屬性陣列來表示。舉例而言:

"sortBy": [
    {
        "totalAmount": "desc"
    },
    {
        "paidAmount": "asc"
    }
]

分頁

定義資料分頁的方式。從屬端可以提供限制和偏移參數來控制分頁。舉例而言:

"limit": 200,
"offset": 400

預設限制為 25,上限為 1000

預設偏移量為 0,代表結果的開頭。

回應中的最上層 hasMore 屬性會指出是否有更多要擷取的結果。

不應使用分頁作為擷取資料的替代方式。查詢此 API 時,無法保證資料不會在要求之間變更。使用非同步 API 擷取資料。

範例

下方的範例擷取查詢旨在擷取指派資訊以及法定雇主與部門詳細資料,如下所示:

  • 是主要指派
  • 類型為 Employee
  • 不屬於 ID 為 1000110002 的法定雇主
  • 自擷取日期起生效
  • 自上次執行後已更新 (或已建立)

要求範例

請注意具有上一個擷取執行之時戳的 limit 參數和 timeUpdated 屬性條件。

POST /api/boss/data/objects/ora/hcmHrCore/employment/v1/workerAssignmentExtracts/$query
 
{
    "collection": {
        "limit": 10,
        "filter": "primaryFlag = true and timeUpdated > '2025-05-01T00:00:00Z' and assignmentType = 'E' and !(legalEmployer.id in (10001, 10002))"
    },
    "fields": [ "id", "assignmentType", "assignmentStatusType", "effectiveStartDate", "effectiveEndDate", "businessTitle", "workAtHomeFlag", "assignmentNumber", "timeUpdated" ],
    "accessors": {
        "personDetail": {
            "fields": [ "personNumber" ]
        },
        "globalName": {
            "fields": [ "firstName", "lastName" ]
        },
        "department": {
            "fields": [ "id", "name", "title" ]
        },
        "legalEmployer": {
            "fields": [ "id", "name" ]
        },
        "workRelationship": {
            "fields": [ "id" ]
        }
    }
}
				

回應範例

200 OK
 
{
    "items": [
        {
            "id": "300000795682243",
            "assignmentType": "E",
            "assignmentStatusType": "ACTIVE",
            "effectiveStartDate": "2018-06-14",
            "effectiveEndDate": "4712-12-31",
            "businessTitle": "Aeronautical Engineer Level-9352",
            "workAtHomeFlag": false,
            "assignmentNumber": "EHDLWorker_190903_1637",
            "timeUpdated": "2025-05-06T11:42:17.821Z",
            "$id": "300000795682243",
            "$context": {
                "etag": "89"
            },
            "personDetail": {
                "personNumber": "HDLWorker_190903_1637",
                "$id": "100000329366771",
                "$context": {
                    "etag": ""
                }
            },
            "globalName": {
                "firstName": "Raymond-Olivier",
                "lastName": "Beer-Tröst",
                "$id": "300000795668871",
                "$context": {
                    "etag": ""
                }
            },
            "department": {
                "id": "300000044556980",
                "name": "South - Venaria DC-GROUP/SFIELESOIT74155",
                "title": null,
                "$id": "300000044556980",
                "$context": {
                    "etag": "13",
                    "links": {
                        "$self": {
                            "href": "https://example.com/api/boss/data/objects/ora/hcmHrCore/workStructures/v1/departments/300000044556980?$effectiveDate=2025-05-13"
                        }
                    }
                }
            },
            "legalEmployer": {
                "id": "300000046740247",
                "name": "PSR_US_LE_1",
                "$id": "300000046740247",
                "$context": {
                    "etag": "15",
                    "links": {
                        "$self": {
                            "href": "https://example.com/api/boss/data/objects/ora/hcmHrCore/workStructures/v1/legalEmployers/300000046740247?$effectiveDate=2025-05-13"
                        }
                    }
                }
            },
            "workRelationship": {
                "id": "100000329414679",
                "$id": "100000329414679",
                "$context": {
                    "etag": "1"
                }
            }
        },
        {
            "id": "300000795670049",
            "assignmentType": "E",
            "assignmentStatusType": "ACTIVE",
            "effectiveStartDate": "2018-05-28",
            "effectiveEndDate": "4712-12-31",
            "businessTitle": "Civil Engineer-6864",
            "workAtHomeFlag": false,
            "assignmentNumber": "EHDLWorker_190903_11128",
            "timeUpdated": "2025-05-06T11:42:25.787Z",
            "$id": "300000795670049",
            "$context": {
                "etag": "89"
            },
            "personDetail": {
                "personNumber": "HDLWorker_190903_11128",
                "$id": "100000329383875",
                "$context": {
                    "etag": ""
                }
            },
            "globalName": {
                "firstName": "Charlotte-Pénélope",
                "lastName": "Beer-Tröst",
                "$id": "300000795669677",
                "$context": {
                    "etag": ""
                }
            },
            "department": {
                "id": "300000044582197",
                "name": "Human Resources-GROUP/AT081000101",
                "title": null,
                "$id": "300000044582197",
                "$context": {
                    "etag": "13",
                    "links": {
                        "$self": {
                            "href": "https://example.com/api/boss/data/objects/ora/hcmHrCore/workStructures/v1/departments/300000044582197?$effectiveDate=2025-05-13"
                        }
                    }
                }
            },
            "legalEmployer": {
                "id": "300000046740247",
                "name": "PSR_US_LE_1",
                "$id": "300000046740247",
                "$context": {
                    "etag": "15",
                    "links": {
                        "$self": {
                            "href": "https://example.com/api/boss/data/objects/ora/hcmHrCore/workStructures/v1/legalEmployers/300000046740247?$effectiveDate=2025-05-13"
                        }
                    }
                }
            },
            "workRelationship": {
                "id": "100000329453488",
                "$id": "100000329453488",
                "$context": {
                    "etag": "1"
                }
            }
        },
        ...
    ],
    "hasMore": true
}

任務 3:提交擷取職務要求

定義查詢之後,即可使用「工作排程器 API」提交擷取工作要求。

URL /api/saas-batch/jobscheduler/v1/jobRequests
HTTP 方法 POST
要求範本

對於 workerAssignmentExtracts 檢視:

{
    "jobDefinitionName": "AsyncDataExtraction",
    "serviceName": "boss",
    "requestParameters": {
        "boss.module": "oraHcmHrCoreEmployment",
        "boss.resource.name": "workerAssignmentExtracts",
        "boss.resource.version": "v1",
        "boss.outputFormat": "json",
        "boss.request.system.param.effectiveDate": "{{effectiveDate}}",
        "boss.advancedQuery": "{{query}}"
    }
}

對於其他檢視:

{
    "jobDefinitionName": "AsyncDataExtraction",
    "serviceName": "boss",
    "requestParameters": {
        "boss.module": "oraHcmHrCoreEmployment",
        "boss.resource.name": "workers",
        "boss.resource.version": "v1",
        "boss.businessView": "{{viewName}}",
        "boss.outputFormat": "json",
        "boss.request.system.param.effectiveDate": "{{effectiveDate}}",
        "boss.advancedQuery": "{{query}}"
    }
}

boss.request.system.param.effectiveDate 是選擇性參數,只有在您要擷取與目前日期不同的資料生效基準日期時,才應提供此參數。

回應樣板

成功提交時,會傳回 202 回應代碼,以及指向特定工作要求例項的 URL Location 標頭。

202 Accepted
 
Location: {{jobRequestUrl}}

擷取資料時的分頁:

雖然您可能已使用分頁控制項 (例如 limitoffset 參數),但在建置和測試查詢時,您不想讓擷取結果受到限制。送出查詢時,請移除 limitoffset 參數的任何用法。

通過查詢:

送出擷取工作要求時所傳送的查詢必須是標準 JSON 字串的形式。使用 $query API 端點準備並測試查詢,然後:
  • 遁離所有雙引號 (「 → \」)
  • 移除任何換行字元 (\n)
  • 可能減少其他空格 (例如縮排)

整體而言,例如從:

{
    "collection": {
        "limit": 100,
        "filter": "totalAmount > 10000"
    },
    "fields": [ "id", "totalAmount" ]
}

若要:

{\"collection\": {\"filter\": \"totalAmount > 10000\"},\"fields\": [ \"id\", \"totalAmount\" ]}

範例

要求範例

POST /api/saas-batch/jobscheduler/v1/jobRequests
 
{
    "jobDefinitionName": "AsyncDataExtraction",
    "serviceName": "boss",
    "requestParameters": {
        "boss.module": "oraHcmHrCoreEmployment",
        "boss.resource.name": "workerAssignmentExtracts",
        "boss.resource.version": "v1",
        "boss.outputFormat": "json",
        "boss.advancedQuery": "{\"collection\": {\"filter\": \"primaryFlag = true and timeUpdated > '2025-05-01T00:00:00Z' and assignmentType = 'E' and !(legalEmployer.id in (10001, 10002))\"},\"fields\": [ \"id\", \"assignmentType\", \"assignmentStatusType\", \"effectiveStartDate\", \"effectiveEndDate\", \"businessTitle\", \"workAtHomeFlag\", \"assignmentNumber\", \"timeUpdated\" ],\"accessors\": {\"personDetail\": {\"fields\": [ \"personNumber\" ]},\"globalName\": {\"fields\": [ \"firstName\", \"lastName\" ]},\"department\": {\"fields\": [ \"id\", \"name\", \"title\" ]},\"legalEmployer\": {\"fields\": [ \"id\", \"name\" ]},\"workRelationship\": {\"fields\": [ \"id\" ]}}}"
    }
}

回應範例

202 Accepted
 
Location: https://example.com/api/saas-batch/jobscheduler/v1/jobRequests/42075

作業 4:檢查工單完成

檢查是否完成需要使用「工作排程器 API」定期輪詢工作要求詳細資訊,直到工作要求詳細資訊順利完成或失敗為止。

URL /api/saas-batch/jobscheduler/v1/jobRequests/{{jobRequestId}}
HTTP 方法 GET

成功完成:

當符合下列條件時,工作要求會被視為成功完成:
屬性 預期值
jobDetails.jobProgress.completed true
jobDetails.jobProgress.status SUCCEEDED

完成失敗 :

符合下列條件時,工作要求會被視為失敗。在此情況下,jobDetails.jobProgress.message 屬性將包含錯誤訊息。
屬性 預期值
jobDetails.jobProgress.status FAILED

範例

要求範例

GET /api/saas-batch/jobscheduler/v1/jobRequests/42075

回應範例

回覆下方會顯示已提交工作的不同階段。特別參閱 jobProgress.statusjobProgress.completed 屬性。

已接受 / 已排入佇列
200 OK
 
{
    "jobDetails": {
        "jobRequestId": 42075,
        "jobRequest": {
            "jobDefinitionName": "AsyncDataExtraction",
            "serviceName": "boss",
            "systemDerivedVersion": "90",
            "jobSubmitter": "TM-MFITZIMMONS",
            "requestParameters": {
                "boss.module": "oraHcmHrCoreEmployment",
                "boss.resource.name": "workerAssignmentExtracts",
                "boss.resource.version": "v1",
                "boss.outputFormat": "json",
                "boss.advancedQuery": "{\"collection\": {\"filter\": \"primaryFlag = true and timeUpdated > '2025-05-01T00:00:00Z' and assignmentType = 'E' and !(legalEmployer.id in (10001, 10002))\"},\"fields\": [ \"id\", \"assignmentType\", \"assignmentStatusType\", \"effectiveStartDate\", \"effectiveEndDate\", \"businessTitle\", \"workAtHomeFlag\", \"assignmentNumber\", \"timeUpdated\" ],\"accessors\": {\"personDetail\": {\"fields\": [ \"personNumber\" ]},\"globalName\": {\"fields\": [ \"firstName\", \"lastName\" ]},\"department\": {\"fields\": [ \"id\", \"name\", \"title\" ]},\"legalEmployer\": {\"fields\": [ \"id\", \"name\" ]},\"workRelationship\": {\"fields\": [ \"id\" ]}}}"
            },
            "jobRetryNumber": 0,
            "timeoutThreshold": 14400
        },
        "jobStatus": "ENQUEUED",
        "jobProgress": {
            "status": "ACCEPTED",
            "message": "Job is submitted",
            "startTime": "2025-05-25T13:39:01Z",
            "endTime": "2025-05-25T13:39:15Z",
            "completedPercentage": "0",
            "completed": false
        }
    },
    "$context": {
        "links": {
            "$self": {
                "href": "https://example.com/api/saas-batch/jobscheduler/v1/jobRequests/42075"
            }
        }
    }
}
執行中
200 OK
 
{
    "jobDetails": {
        "jobRequestId": 42075,
        "jobRequest": {
            "jobDefinitionName": "AsyncDataExtraction",
            "serviceName": "boss",
            "systemDerivedVersion": "90",
            "jobSubmitter": "TM-MFITZIMMONS",
            "requestParameters": {
                "boss.module": "oraHcmHrCoreEmployment",
                "boss.resource.name": "workerAssignmentExtracts",
                "boss.resource.version": "v1",
                "boss.outputFormat": "json",
                "boss.advancedQuery": "{\"collection\": {\"filter\": \"primaryFlag = true and timeUpdated > '2025-05-01T00:00:00Z' and assignmentType = 'E' and !(legalEmployer.id in (10001, 10002))\"},\"fields\": [ \"id\", \"assignmentType\", \"assignmentStatusType\", \"effectiveStartDate\", \"effectiveEndDate\", \"businessTitle\", \"workAtHomeFlag\", \"assignmentNumber\", \"timeUpdated\" ],\"accessors\": {\"personDetail\": {\"fields\": [ \"personNumber\" ]},\"globalName\": {\"fields\": [ \"firstName\", \"lastName\" ]},\"department\": {\"fields\": [ \"id\", \"name\", \"title\" ]},\"legalEmployer\": {\"fields\": [ \"id\", \"name\" ]},\"workRelationship\": {\"fields\": [ \"id\" ]}}}"
            },
            "jobRetryNumber": 0,
            "timeoutThreshold": 14400
        },
        "jobStatus": "RUNNING",
        "jobProgress": {
            "jobRequestId": 42075,
            "status": "RUNNING",
            "message": "Job status is changed to RUNNING",
            "startTime": "2025-05-25T13:39:27Z",
            "endTime": "2025-05-25T13:40:25Z",
            "completedPercentage": "50",
            "completed": false
        }
    },
    "$context": {
        "links": {
            "$self": {
                "href": "https://example.com/api/saas-batch/jobscheduler/v1/jobRequests/42075"
            }
        }
    }
}
200 OK
 
{
    "jobDetails": {
        "jobRequestId": 42075,
        "jobRequest": {
            "jobDefinitionName": "AsyncDataExtraction",
            "serviceName": "boss",
            "systemDerivedVersion": "90",
            "jobSubmitter": "TM-MFITZIMMONS",
            "requestParameters": {
                "boss.module": "oraHcmHrCoreEmployment",
                "boss.resource.name": "workerAssignmentExtracts",
                "boss.resource.version": "v1",
                "boss.outputFormat": "json",
                "boss.advancedQuery": "{\"collection\": {\"filter\": \"primaryFlag = true and timeUpdated > '2025-05-01T00:00:00Z' and assignmentType = 'E' and !(legalEmployer.id in (10001, 10002))\"},\"fields\": [ \"id\", \"assignmentType\", \"assignmentStatusType\", \"effectiveStartDate\", \"effectiveEndDate\", \"businessTitle\", \"workAtHomeFlag\", \"assignmentNumber\", \"timeUpdated\" ],\"accessors\": {\"personDetail\": {\"fields\": [ \"personNumber\" ]},\"globalName\": {\"fields\": [ \"firstName\", \"lastName\" ]},\"department\": {\"fields\": [ \"id\", \"name\", \"title\" ]},\"legalEmployer\": {\"fields\": [ \"id\", \"name\" ]},\"workRelationship\": {\"fields\": [ \"id\" ]}}}"
            },
            "jobRetryNumber": 0,
            "timeoutThreshold": 14400
        },
        "jobStatus": "RUNNING",
        "jobProgress": {
            "jobRequestId": 42075,
            "status": "RUNNING",
            "message": "Publishing BOSS job progress: JobProgress(jobRequestId=42075, resourcePath=oraHcmHrCoreEmployment/v1/workers, dataDocName=null, deploymentId=null, jobStatus=RUNNING, startTime=2025-05-25T13:40:18Z, endTime=2025-05-25T13:40:38Z, completedPercentage=30, completed=false, error=null)",
            "startTime": "2025-05-25T13:40:40Z",
            "endTime": "2025-05-25T13:40:40Z",
            "completedPercentage": "30",
            "completed": false
        }
    },
    "$context": {
        "links": {
            "$self": {
                "href": "https://example.com/api/saas-batch/jobscheduler/v1/jobRequests/42075"
            }
        }
    }
}
已成功完成
200 OK
 
{
    "jobDetails": {
        "jobRequestId": 42075,
        "jobRequest": {
            "jobDefinitionName": "AsyncDataExtraction",
            "serviceName": "boss",
            "systemDerivedVersion": "90",
            "jobSubmitter": "TM-MFITZIMMONS",
            "requestParameters": {
                "boss.module": "oraHcmHrCoreEmployment",
                "boss.resource.name": "workerAssignmentExtracts",
                "boss.resource.version": "v1",
                "boss.outputFormat": "json",
                "boss.advancedQuery": "{\"collection\": {\"filter\": \"primaryFlag = true and timeUpdated > '2025-05-01T00:00:00Z' and assignmentType = 'E' and !(legalEmployer.id in (10001, 10002))\"},\"fields\": [ \"id\", \"assignmentType\", \"assignmentStatusType\", \"effectiveStartDate\", \"effectiveEndDate\", \"businessTitle\", \"workAtHomeFlag\", \"assignmentNumber\", \"timeUpdated\" ],\"accessors\": {\"personDetail\": {\"fields\": [ \"personNumber\" ]},\"globalName\": {\"fields\": [ \"firstName\", \"lastName\" ]},\"department\": {\"fields\": [ \"id\", \"name\", \"title\" ]},\"legalEmployer\": {\"fields\": [ \"id\", \"name\" ]},\"workRelationship\": {\"fields\": [ \"id\" ]}}}"
            },
            "jobRetryNumber": 0,
            "timeoutThreshold": 14400
        },
        "jobStatus": "SUCCEEDED",
        "jobProgress": {
            "jobRequestId": 42075,
            "status": "SUCCEEDED",
            "message": "Job status is changed to SUCCEEDED",
            "startTime": "2025-05-25T13:39:27Z",
            "endTime": "2025-05-25T13:41:26Z",
            "completedPercentage": "100",
            "completed": true
        }
    },
    "$context": {
        "links": {
            "$self": {
                "href": "https://example.com/api/saas-batch/jobscheduler/v1/jobRequests/42075"
            }
        }
    }
}

作業 5:提取摘錄輸出明細

工作順利完成之後,即可擷取其輸出檔案資訊。它涉及使用特定擷取工作要求實例的「工作檔案管理員 API」。

輸出儲存於壓縮的區塊中。

URL /api/saas-batch/jobfilemanager/v1/jobRequests/{{jobRequestId}}/outputFiles
HTTP 方法 GET

檔案大小:

檔案大小會在 items.fileSize 回應屬性中傳回,並以位元組表示。

機箱連結:

實際檔案內容的 URL 會以 items.$context.links.enclosure 回應屬性傳回。

範例

要求範例

GET /api/saas-batch/jobfilemanager/v1/jobRequests/42075/outputFiles

回應範例

在下面的範例中,完整輸出儲存在兩個壓縮檔案中。

200 OK
 
{
    "items": [
        {
            "fileName": "result_1_json.zip",
            "fileSize": 9390419,
            "timeCreated": "2025-04-22T22:04:22.667Z",
            "$context": {
                "links": {
                    "enclosure": {
                        "href": "https://example.com/api/saas-batch/jobfilemanager/v1/jobRequests/40071/outputFiles/result_1_json.zip/content"
                    },
                    "$self": {
                        "href": "https://example.com/api/saas-batch/jobfilemanager/v1/jobRequests/40071/outputFiles/result_1_json.zip"
                    }
                }
            }
        },
        {
            "fileName": "result_2_json.zip",
            "fileSize": 4462724,
            "timeCreated": "2025-04-22T22:04:36.565Z",
            "$context": {
                "links": {
                    "enclosure": {
                        "href": "https://example.com/api/saas-batch/jobfilemanager/v1/jobRequests/40071/outputFiles/result_2_json.zip/content"
                    },
                    "$self": {
                        "href": "https://example.com/api/saas-batch/jobfilemanager/v1/jobRequests/40071/outputFiles/result_2_json.zip"
                    }
                }
            }
        }
    ],
    "totalItems": 2,
    "$context": {
        "links": {
            "$self": {
                "href": "https://example.com/api/saas-batch/jobfilemanager/v1/jobRequests/40071/outputFiles"
            }
        }
    }
}

任務 6:下載擷取輸出

最後,可以針對特定擷取工作要求例項與輸出檔案,使用「工作檔案管理員 API」來下載擷取輸出檔案。

URL /api/saas-batch/jobfilemanager/v1/jobRequests/{{jobRequestId}}/outputFiles/{{fileName}}/content
HTTP 方法 GET

秘訣:

如有需要,您可以使用 Range HTTP 標頭實作多重執行緒下載,以更有效率地下載大型檔案。

Range: {{startByte}}-{{endByte}}/{{fileSize}}

範例

要求範例

GET /api/saas-batch/jobfilemanager/v1/jobRequests/42075/outputFiles/result_42075.json/content

回應範例

實際回應為二進位壓縮檔案內容。解壓縮之後,即為完整或部分 (如果是 Range 標頭使用)、未格式化的 JSON 有效負載,以及擷取查詢的完整或部分 (如果是檔案區塊) 結果。

完整未壓縮結果範例
{"items": [
    {"id":"300008335145001","assignmentType":"E","assignmentStatusType":"ACTIVE","effectiveStartDate":"2025-05-02","effectiveEndDate":"4712-12-31","businessTitle":"E7356262523","workAtHomeFlag":false,"assignmentNumber":"E7356262523","timeUpdated":"2025-05-01T07:53:15.722Z","$id":"300008335145001","$context":{"etag":"1"},"personDetail":{"personNumber":"7356262523","$id":"300008335144985","$context":{"etag":""}},"globalName":{"firstName":null,"lastName":"oracle","$id":"300008335144986","$context":{"etag":""}},"department":null,"legalEmployer":{"id":"300001939234024","name":"AORT Oracle United States","$id":"300001939234024","$context":{"etag":"6","links":{"$self":{"href":"/ora/hcmHrCore/workStructures/v1/$en-US/legalEmployers/300001939234024?$effectiveDate=2025-05-13"}}}},"workRelationship":{"id":"300008335144995","$id":"300008335144995","$context":{"etag":"1"}}},
    {"id":"300000310085281","assignmentType":"E","assignmentStatusType":"ACTIVE","effectiveStartDate":"2018-03-04","effectiveEndDate":"4712-12-31","businessTitle":"Medical Technologist Corporate Level-35321","workAtHomeFlag":false,"assignmentNumber":"EHDLWorker_190409_467490","timeUpdated":"2025-05-07T15:29:46.59Z","$id":"300000310085281","$context":{"etag":"90"},"personDetail":{"personNumber":"HDLWorker_190409_467490","$id":"100000127293313","$context":{"etag":""}},"globalName":{"firstName":"Martin-David","lastName":"Oestrovsky-Krein","$id":"300000310075057","$context":{"etag":""}},"department":{"id":"300000041568062","name":"GFIN Global Controlling-GROUP/GFINGC74155","title":null,"$id":"300000041568062","$context":{"etag":"13","links":{"$self":{"href":"/ora/hcmHrCore/workStructures/v1/$en-US/departments/300000041568062?$effectiveDate=2025-05-13"}}}},"legalEmployer":{"id":"300000046740247","name":"PSR_US_LE_1","$id":"300000046740247","$context":{"etag":"15","links":{"$self":{"href":"/ora/hcmHrCore/workStructures/v1/$en-US/legalEmployers/300000046740247?$effectiveDate=2025-05-13"}}}},"workRelationship":{"id":"100000127362395","$id":"100000127362395","$context":{"etag":"1"}}}
]}

其他學習資源

docs.oracle.com/learn 上探索其他實驗室,或在 Oracle Learning YouTube 頻道上存取更多免費學習內容。此外,請造訪 education.oracle.com/learning-explorer 以成為 Oracle Learning Explorer。

如需產品文件,請造訪 Oracle Help Center