Introduction
Cloud HCM provides a capability to extract data from HCM using underlying new generation BOSS/Spectra platform.
Objectives
Upon completing this tutorial, you will understand how to:
- Query Worker extraction views and their hierarchy of objects
- Asynchronously submit and track extraction job requests for retrieval of selected Worker hierarchy data
- Download extract output files
Prerequisites
Before you begin:
- Contact Oracle CoE to make sure that Spectra platform, including RODS data replication, is provisioned in your pod
- Perform required security configuration, including:
- Data security setup
- OAuth client app setup
Use Cases
This functionality allows you to address the following use cases.
Full Data Extraction
Full extraction of Worker data can be either one-off or periodic activity.
You can retrieve entire object hierarchy or just a subset of it.
Full data extraction will retrieve all the records that match the filtering criteria and output files may be very large.
Date effective objects will be retrieved as of requested effective date, where current extraction date is the default.
Incremental Data Extraction
Incremental extraction of Worker data is typically a periodic, scheduled activity.
You can retrieve entire object hierarchy or just a subset of it.
In this use case you want to retrieve only objects that got changed since the previous extraction run where the first extraction run is the baseline. To achieve this, timeUpdated
attributes filters have to be applied at any level that is subject to change detection.
Incremental data extraction query can apply additional filtering criteria. Output files will be typically smaller comparing to full extraction since they will contain delta only.
Only current values of attributes will be retrieved.
Date effective objects will be retrieved as of requested effective date, where current extraction date is the default.
Caution:
Physically deleted records will not be returned using filtering bytimeUpdated
.
Task 1: Choosing an Extraction View
Choose which extraction view to use, depending on required objects and attributes. Available views are listed below, along with the objects and attributes that can be extracted.
Worker Assignment Extracts
Use workerAssignmentExtracts to extract workers' employment assignment data.
View Path | workerAssignmentExtracts |
---|
Object | Attributes | Relationship Type |
---|---|---|
workerAssignmentExtract |
|
n/a |
workerAssignmentExtract.department |
|
one-to-one |
workerAssignmentExtract.legalEmployer |
|
one-to-one |
workerAssignmentExtract.legislation |
|
one-to-one |
workerAssignmentExtract.position |
|
one-to-one |
workerAssignmentExtract.grade |
|
one-to-one |
workerAssignmentExtract.location |
|
one-to-one |
workerAssignmentExtract.location.mainAddress |
|
one-to-one |
workerAssignmentExtract.location.mainAddress.country |
|
one-to-one |
workerAssignmentExtract.job |
|
one-to-one |
workerAssignmentExtract.job.jobFamily |
|
one-to-one |
workerAssignmentExtract.collectiveAgreement |
|
one-to-one |
workerAssignmentExtract.personType |
|
one-to-one |
workerAssignmentExtract.workerUnion |
|
one-to-one |
workerAssignmentExtract.assignmentUserStatus |
|
one-to-one |
workerAssignmentExtract.businessUnit |
|
one-to-one |
workerAssignmentExtract.account |
|
one-to-one |
workerAssignmentExtract.ledger |
|
one-to-one |
workerAssignmentExtract.workRelationship |
|
one-to-one |
workerAssignmentExtract.localName |
|
one-to-one |
workerAssignmentExtract.globalName |
|
one-to-one |
workerAssignmentExtract.personDetail |
|
one-to-one |
Worker Legislative Information Extract
Use workerLegislativeInfoExtract to extract workers' legislative information data.
View Path | workers/$views/workerLegislativeInfoExtract |
---|
Object | Attributes | Relationship Type |
---|---|---|
worker |
|
n/a |
worker.personDetail |
|
one-to-one |
worker.legislativeInformation |
|
one-to-one |
worker.legislativeInformation.legislation |
|
one-to-one |
Worker Names Extract
Use workerNamesExtract to extract workers' names data.
View Path | workers/$views/workerNamesExtract |
---|
Object | Attributes | Relationship Type |
---|---|---|
worker |
|
n/a |
worker.personDetail |
|
one-to-one |
worker.names |
|
one-to-many |
worker.names.legislation |
|
one-to-one |
worker.names.language |
|
one-to-one |
Worker Phones Extract
Use workerPhonesExtract to extract workers' phones data.
View Path | workers/$views/workerPhonesExtract |
---|
Object | Attributes | Relationship Type |
---|---|---|
worker |
|
n/a |
worker.personDetail |
|
one-to-one |
worker.phones |
|
one-to-many |
worker.phones.legislation |
|
one-to-one |
Worker Emails Extract
Use workerEmailsExtract to extract workers' emails data.
View Path | workers/$views/workerEmailsExtract |
---|
Object | Attributes | Relationship Type |
---|---|---|
worker |
|
n/a |
worker.personDetail |
|
one-to-one |
worker.emails |
|
one-to-many |
Multiple languages:
Translatable attributes are only available in English at this point.Task 2: Preparing and Testing an Extraction Query
Each extraction view has a query API that allows to build and test extraction queries.
URL | /api/boss/data/objects/ora/hcmHrCore/employment/v1/{{viewPath}}/$query |
---|---|
HTTP method | POST |
Request template |
{ "collection": { "limit": {{limit}}, "offset": {{offset}}, "sortBy": [ {{sortAttributes}} ], "filter": "{{topLevelFilter}}" }, "fields": [ {{topLevelAttributes}} ], "accessors": { "{{childObject}}": { "collection": { "filter": "{{childLevelFilter}}" }, "fields": [ {{childLevelAttributes}} ], "accessors": { {{nestedChildAccessors}} } }, ... } } |
Response template |
200 OK { "items": [ {{items}} ], "hasMore": {{hasMore}} } |
Objects and Attributes
Define what data to extract, i.e. which objects and attributes should be included. Including child objects requires adding accessors whereas including specific fields requires listing them in the fields
array. See the complete example.
Filtering
Define how data should be filtered. You can use following expressions to build filters for your query.
Purpose | Expression | Example |
---|---|---|
Equality test | field = value |
ename = 'KING' |
Inequality test | field != value |
activeFlag != true |
Greater-than test Less-than test |
field > value |
sal > 1999.99 |
Greater-than-or-equal-to test Less-than-or-equal-to test |
field >= value |
sal >= 1999.99 |
Pattern-matching | field LIKE 'pattern' |
job LIKE 'SALES%' |
Membership test | field IN (value1, ..., valueN) |
deptno IN (10, 20, 40) |
Case-insensitivity comparison | field ~= value |
ename ~= 'king' |
Existence test (for one-to-many relationships) | child[expression] |
assignments[startDate = null] |
Logical conjunction | expression AND expression |
|
Logical disjunction | expression OR expression |
|
Logical negation | !(expression) |
Filtering by child objects in one-to-one relationship:
In case of one-to-one relationships you can refer to child objects and their attributes in the filter clause just as to other parent object's attributes, for examplelegalEmployer.id in (1001, 1002)
.
Filtering child objects in one-to-many relationship:
In case of one-to-many relationships, the existence test in the table above will filter parents that have at least one child meeting the criteria. However, it doesn't mean that child records, if retrieved, will be filtered automatically. If you want to ensure that you only get child records meeting the criteria, you have to repeat the filter at the child level too.For example, if you want to retrieve only phones of type W1
, you need to apply the following filters:
{ "collection": { "filter": "phones[type = 'W1']" }, "accessors": { "phones": { "collection": { "filter": "type = 'W1'" }, ...
Filtering by effective date:
In case of date-effective objects, you will get data effective as of current date by default. In order to retrieve data effective as of specific date, use$effectiveDate
HTTP query parameter.
For example, if you want to retrieve data effective as of 2023-01-01
, use the following URL for your query:
/api/boss/data/objects/ora/hcmHrCore/employment/v1/{{viewPath}}/$query?$effectiveDate=2023-01-01
Sorting
Define how data should be sorted. Sorting is expressed by an array of sort attributes including the sorting direction (asc or desc). For example:
"sortBy": [ { "totalAmount": "desc" }, { "paidAmount": "asc" } ]
Paging
Define how data should be paginated. Client can control the paging by providing limit and offset parameters. For example:
"limit": 200, "offset": 400
Default limit is 25
and maximum limit is 1000
.
Default offset is 0
and indicates the beginning of the results.
The top level hasMore
attribute in the response indicates if there are more results to be fetched.
Paginating should not be used as an alternative way to extract data. When querying this API, there is no guarantee that the data won't change in-between the requests. Use the asynchronous API for data extraction.
Example
The example extract query below is designed to retrieve assignments information along with legal employer and department details, that:
- Are primary assignments
- Are of type Employee
- Do not belong to Legal Employers with IDs
10001
and10002
- Are effective as of extraction date
- Got updated (or created) since the previous run
Request Example
Notice the limit
parameter and timeUpdated
attribute condition with the timestamp of the previous extract run.
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" ] } } }
Response Example
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 }
Task 3: Submitting an Extract Job Request
Once the query is defined, an extract job request can be submitted using Job Scheduler API.
URL | /api/saas-batch/jobscheduler/v1/jobRequests |
---|---|
HTTP method | POST |
Request template |
For { "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}}" } } For other views: { "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}}" } }
|
Response template |
On successful submission, 202 Accepted Location: {{jobRequestUrl}} |
Paging when extracting data:
While you might have used pagination controls, i.e.limit
and offset
parameters, when building and test the query, you don't want the extraction results to be constrained by them. Remove any usage of limit
and offset
parameters when submitting a query.
Passing the query :
The query passed when submitting the extraction job request must be in the form of a standard JSON string. Take the query prepared and tested using$query
API endpoint and:
- Escape all double quotes (" → \")
- Remove any newline characters (\n)
- Potentially reduce other whitespaces (e.g. indentations)
Overall you want to go, for example, from:
{ "collection": { "limit": 100, "filter": "totalAmount > 10000" }, "fields": [ "id", "totalAmount" ] }
To:
{\"collection\": {\"filter\": \"totalAmount > 10000\"},\"fields\": [ \"id\", \"totalAmount\" ]}
Example
Request Example
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\" ]}}}" } }
Response Example
202 Accepted Location: https://example.com/api/saas-batch/jobscheduler/v1/jobRequests/42075
Task 4: Checking for Job Completion
Checking for completion involves using the Job Scheduler API to periodically poll the job request details, until it completes successfully or fails.
URL | /api/saas-batch/jobscheduler/v1/jobRequests/{{jobRequestId}} |
---|---|
HTTP method | GET |
Successful completion:
A job request is considered successfully completed when the following conditions are met:Attribtue | Expected value |
---|---|
jobDetails.jobProgress.completed |
true |
jobDetails.jobProgress.status |
SUCCEEDED |
Failed completion:
A job request is considered failed when the following condition is met. In such a case, thejobDetails.jobProgress.message
attribute will contain the error message.
Attribtue | Expected value |
---|---|
jobDetails.jobProgress.status |
FAILED |
Example
Request Example
GET /api/saas-batch/jobscheduler/v1/jobRequests/42075
Response Examples
Below responses show different stages of a submitted job. See the jobProgress.status
and jobProgress.completed
attributes in particular.
Accepted / Enqueued
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" } } } }
Running
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" } } } }
Successfully 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": "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" } } } }
Task 5: Fetching Extract Output Details
Once the job completes successfully, its output file information can be fetched. It involves using the Job File Manager API for the particular extract job request instance.
Output is stored in compressed chunks.
URL | /api/saas-batch/jobfilemanager/v1/jobRequests/{{jobRequestId}}/outputFiles |
---|---|
HTTP method | GET |
File size:
File size is returned in theitems.fileSize
response attribute and expressed in bytes.
Enclosure link:
The URL to the actual file contents is returned in theitems.$context.links.enclosure
response attribute.
Example
Request Example
GET /api/saas-batch/jobfilemanager/v1/jobRequests/42075/outputFiles
Response Example
In the example below, the complete output is stored in two compressed files.
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" } } } }
Task 6: Downloading Extract Output
Finally the extract output files can be downloaded using the Job File Manager API for the particular extract job request instance and output file.
URL | /api/saas-batch/jobfilemanager/v1/jobRequests/{{jobRequestId}}/outputFiles/{{fileName}}/content |
---|---|
HTTP method | GET |
Tip:
If needed, you can download large files more efficiently by implementing multithreaded download using the Range HTTP header as below.Range: {{startByte}}-{{endByte}}/{{fileSize}}
Example
Request Example
GET /api/saas-batch/jobfilemanager/v1/jobRequests/42075/outputFiles/result_42075.json/content
Response Examples
Actual response is binary compressed file contents. Once uncompressed, it is full or partial (in case of Range
header usage), unformatted JSON payload, with full or partial (in case of a file-chunk) results of the extraction query.
Full Uncompressed Results Example
{"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"}}} ]}
More Learning Resources
Explore other labs on docs.oracle.com/learn or access more free learning content on the Oracle Learning YouTube channel. Additionally, visit education.oracle.com/learning-explorer to become an Oracle Learning Explorer.
For product documentation, visit Oracle Help Center.
Extract Data from HCM Using Spectra Services
G38643-01
July 2025