简介
云 HCM 提供使用底层新一代 BOSS/Spectra 平台从 HCM 中提取数据的功能。
目标
完成本教程后,您将了解如何:
- 查询 Worker 提取视图及其对象层次结构
- 异步提交和跟踪提取作业请求,以检索选定的员工层次结构数据
- 下载提取输出文件
先决条件
开始之前:
- 请与 Oracle CoE 联系,确保在云池中预配 Spectra 平台(包括 RODS 数据复制)
- 执行必需的安全配置,包括:
- 数据安全设置
- OAuth 客户端应用程序设置
用例
此功能允许您解决以下用例。
完整数据提取
完全提取员工数据可以是一次性活动或定期活动。
您可以检索整个对象层次结构,也可以只检索其中的一部分。
完全数据提取将检索与筛选标准匹配的所有记录,并且输出文件可能非常大。
将从请求的有效日期检索有效对象,其中当前提取日期为默认值。
增量数据提取
Worker 数据的增量提取通常是定期计划的活动。
您可以检索整个对象层次结构,也可以只检索其中的一部分。
在此用例中,您希望仅检索自上一次提取运行以来发生更改的对象,其中第一次提取运行是基线。要实现此目的,必须在需要进行更改检测的任何级别应用 timeUpdated 属性筛选器。
增量数据提取查询可以应用其他筛选标准。与完全提取相比,输出文件通常较小,因为它们仅包含增量。
将仅检索属性的当前值。
将从请求的有效日期检索有效对象,其中当前提取日期为默认值。
注意:
物理删除的记录不会使用timeUpdated 筛选返回。
任务 1:选择提取视图
根据所需的对象和属性选择要使用的提取视图。下面列出了可用视图以及可提取的对象和属性。
员工分配提取
使用 workerAssignmentExtracts 提取员工的雇用分配数据。
| 视图路径 | workerAssignmentExtracts |
|---|
| 对象 | 属性 | 关系类型 |
|---|---|---|
| workerAssignmentExtract |
|
不适用 |
| workerAssignmentExtract.department |
|
一对一的 |
| workerAssignmentExtract.legalEmployer |
|
一对一的 |
| workerAssignmentExtract.legislation |
|
一对一的 |
| workerAssignmentExtract.position |
|
一对一的 |
| workerAssignmentExtract.grade |
|
一对一的 |
| workerAssignmentExtract.location |
|
一对一的 |
| workerAssignmentExtract.location.mainAddress |
|
一对一的 |
| workerAssignmentExtract.location.mainAddress.country |
|
一对一的 |
| workerAssignmentExtract.job |
|
一对一的 |
| workerAssignmentExtract.job.jobFamily |
|
一对一的 |
| workerAssignmentExtract.collectiveAgreement |
|
一对一的 |
| workerAssignmentExtract.personType |
|
一对一的 |
| workerAssignmentExtract.workerUnion |
|
一对一的 |
| workerAssignmentExtract.assignmentUserStatus |
|
一对一的 |
| workerAssignmentExtract.businessUnit |
|
一对一的 |
| workerAssignmentExtract.account |
|
一对一的 |
| workerAssignmentExtract.ledger |
|
一对一的 |
| workerAssignmentExtract.workRelationship |
|
一对一的 |
| workerAssignmentExtract.localName |
|
一对一的 |
| workerAssignmentExtract.globalName |
|
一对一的 |
| workerAssignmentExtract.personDetail |
|
一对一的 |
员工法规信息提取
使用 workerLegislativeInfoExtract 提取员工的法规信息数据。
| 视图路径 | 员工 /$views/workerLegislativeInfoExtract |
|---|
| 对象 | 属性 | 关系类型 |
|---|---|---|
| worker |
|
不适用 |
| worker.personDetail |
|
一对一的 |
| worker.legislativeInformation |
|
一对一的 |
| worker.legislativeInformation.legislation |
|
一对一的 |
提取员工姓名
使用 workerNamesExtract 提取员工的姓名数据。
| 视图路径 | 员工 /$views/workerNamesExtract |
|---|
| 对象 | 属性 | 关系类型 |
|---|---|---|
| worker |
|
不适用 |
| worker.personDetail |
|
一对一的 |
| worker.names |
|
一对多 |
| worker.names.legislation |
|
一对一的 |
| worker.names.language |
|
一对一的 |
员工电话提取
使用 workerPhonesExtract 提取员工的电话数据。
| 视图路径 | 员工 /$views/workerPhonesExtract |
|---|
| 对象 | 属性 | 关系类型 |
|---|---|---|
| worker |
|
不适用 |
| worker.personDetail |
|
一对一的 |
| worker.phones |
|
一对多 |
| worker.phones.legislation |
|
一对一的 |
员工电子邮件提取
使用 workerEmailsExtract 提取员工的电子邮件数据。
| 视图路径 | 员工 /$views/workerEmailsExtract |
|---|
| 对象 | 属性 | 关系类型 |
|---|---|---|
| worker |
|
不适用 |
| worker.personDetail |
|
一对一的 |
| worker.emails |
|
一对多 |
多语种:
此时,可转换属性只能使用英语。任务 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 |
sal > 1999.99 |
| 大于或等于测试 小于或等于测试 |
field >= value |
sal >= 1999.99 |
| 模式配对 | field LIKE 'pattern' |
job LIKE 'SALES%' |
| 成员资格测试 | field IN (value1, ..., valueN) |
deptno IN (10, 20, 40) |
| 不区分大小写 | field ~= value |
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
排序
定义如何对数据进行排序。排序由排序属性数组表示,包括排序方向(升序或降序)。例如:
"sortBy": [
{
"totalAmount": "desc"
},
{
"paidAmount": "asc"
}
]
页活动
定义如何分页数据。客户机可以通过提供限制和偏移参数来控制分页。例如:
"limit": 200, "offset": 400
默认限制为 25,最大限制为 1000。
默认偏移量为 0,表示结果的开头。
响应中的顶层 hasMore 属性指示是否需要提取更多结果。
分页不应用作提取数据的替代方法。查询此 API 时,无法保证数据不会在请求之间发生更改。使用异步 API 提取数据。
范例
下面的示例提取查询旨在检索分配信息以及合法雇主和部门详细信息,这些信息包括:
- 是主要分配
- 是“员工”类型
- 不属于 ID 为
10001和10002的合法雇主 - 截至提取日期有效
- 自上次运行以来已更新(或已创建)
请求示例
请注意 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 |
| 请求模板 |
对于 {
"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}}"
}
}
|
| 响应模板 |
成功提交后,将返回 202 Accepted
Location: {{jobRequestUrl}}
|
提取数据时分页:
虽然您可能已使用分页控件(即limit 和 offset 参数),但在构建和测试查询时,您不希望提取结果受到它们的约束。提交查询时删除 limit 和 offset 参数的任何用法。
传递查询:
提交提取作业请求时传递的查询必须采用标准 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.status 和 jobProgress.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 |
提示:
如果需要,您可以通过使用范围 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 帮助中心。