Introduzione
Cloud HCM offre la possibilità di estrarre i dati da HCM utilizzando la piattaforma BOSS/Spectra di nuova generazione sottostante.
Obiettivi
Dopo aver completato questo tutorial, capirete come:
- Esegui query sulle viste di estrazione del worker e sulla relativa gerarchia di oggetti
- Sottomette e tiene traccia in modo asincrono delle richieste di job di estrazione per il recupero dei dati della gerarchia dei lavoratori selezionati
- Scarica file di output estrazione
Prerequisiti
Prima di iniziare:
- Contattare l'Oracle CoE per assicurarsi che il provisioning della piattaforma Spectra, inclusa la replica dei dati RODS, venga eseguito nel pod
- Eseguire la configurazione di sicurezza richiesta, tra cui:
- Impostazione sicurezza dati
- Impostazione applicazione client OAuth
Casi d'uso
Questa funzionalità consente di risolvere i seguenti casi d'uso.
Estrazione dati completa
L'estrazione completa dei dati del lavoratore può essere un'attività singola o periodica.
È possibile recuperare l'intera gerarchia di oggetti o solo un subset di essa.
L'estrazione completa dei dati recupererà tutti i record che corrispondono ai criteri di filtro e i file di output potrebbero essere molto grandi.
La data di validità degli oggetti verrà recuperata alla data di validità richiesta, dove la data di estrazione corrente è quella predefinita.
Estrazione dati incrementale
L'estrazione incrementale dei dati del lavoratore è in genere un'attività periodica pianificata.
È possibile recuperare l'intera gerarchia di oggetti o solo un subset di essa.
In questo caso d'uso si desidera recuperare solo gli oggetti modificati dopo l'esecuzione dell'estrazione precedente, dove la prima esecuzione dell'estrazione è la baseline. A tale scopo, i filtri degli attributi timeUpdated
devono essere applicati a qualsiasi livello soggetto al rilevamento delle modifiche.
La query di estrazione dati incrementale può applicare criteri di filtro aggiuntivi. I file di output saranno in genere più piccoli rispetto all'estrazione completa poiché conterranno solo delta.
Verranno recuperati solo i valori correnti degli attributi.
La data di validità degli oggetti verrà recuperata alla data di validità richiesta, dove la data di estrazione corrente è quella predefinita.
Attenzione
I record eliminati fisicamente non verranno restituiti mediante l'applicazione di filtri mediantetimeUpdated
.
Task 1: scelta di una vista di estrazione
Scegliere la vista di estrazione da utilizzare, a seconda degli oggetti e degli attributi richiesti. Le viste disponibili sono elencate di seguito, insieme agli oggetti e agli attributi che è possibile estrarre.
Estrazioni assegnazione lavoratore
Utilizzare workerAssignmentExtracts per estrarre i dati di assegnazione impiego dei lavoratori.
Visualizza percorso | workerAssignmentExtracts |
---|
Oggetto | Attributi | Tipo di relazione |
---|---|---|
workerAssignmentExtract |
|
n/d |
workerAssignmentExtract.department |
|
uno-a-uno |
workerAssignmentExtract.legalEmployer |
|
uno-a-uno |
workerAssignmentExtract.legislation |
|
uno-a-uno |
workerAssignmentExtract.position |
|
uno-a-uno |
workerAssignmentExtract.grade |
|
uno-a-uno |
workerAssignmentExtract.location |
|
uno-a-uno |
workerAssignmentExtract.location.mainAddress |
|
uno-a-uno |
workerAssignmentExtract.location.mainAddress.country |
|
uno-a-uno |
workerAssignmentExtract.job |
|
uno-a-uno |
workerAssignmentExtract.job.jobFamily |
|
uno-a-uno |
workerAssignmentExtract.collectiveAgreement |
|
uno-a-uno |
workerAssignmentExtract.personType |
|
uno-a-uno |
workerAssignmentExtract.workerUnion |
|
uno-a-uno |
workerAssignmentExtract.assignmentUserStatus |
|
uno-a-uno |
workerAssignmentExtract.businessUnit |
|
uno-a-uno |
workerAssignmentExtract.account |
|
uno-a-uno |
workerAssignmentExtract.ledger |
|
uno-a-uno |
workerAssignmentExtract.workRelationship |
|
uno-a-uno |
workerAssignmentExtract.localName |
|
uno-a-uno |
workerAssignmentExtract.globalName |
|
uno-a-uno |
workerAssignmentExtract.personDetail |
|
uno-a-uno |
Estrazione informazioni legislative lavoratore
Utilizzare workerLegislativeInfoExtract per estrarre i dati delle informazioni legislative dei lavoratori.
Visualizza percorso | worker/$views/workerLegislativeInfoExtract |
---|
Oggetto | Attributi | Tipo di relazione |
---|---|---|
processo operativo |
|
n/d |
worker.personDetail |
|
uno-a-uno |
worker.legislativeInformation |
|
uno-a-uno |
worker.legislativeInformation.legislation |
|
uno-a-uno |
Estrazione nomi lavoratore
Utilizzare workerNamesExtract per estrarre i dati dei nomi dei lavoratori.
Visualizza percorso | worker/$views/workerNamesExtract |
---|
Oggetto | Attributi | Tipo di relazione |
---|---|---|
processo operativo |
|
n/d |
worker.personDetail |
|
uno-a-uno |
worker.names |
|
alcuni-a-molti |
worker.names.legislation |
|
uno-a-uno |
worker.names.language |
|
uno-a-uno |
Estrazione telefoni lavoratore
Utilizzare workerPhonesExtract per estrarre i dati dei telefoni dei lavoratori.
Visualizza percorso | worker/$views/workerPhonesExtract |
---|
Oggetto | Attributi | Tipo di relazione |
---|---|---|
processo operativo |
|
n/d |
worker.personDetail |
|
uno-a-uno |
worker.phones |
|
alcuni-a-molti |
worker.phones.legislation |
|
uno-a-uno |
Estrazione e-mail lavoratore
Utilizzare workerEmailsExtract per estrarre i dati delle e-mail dei lavoratori.
Visualizza percorso | worker/$views/workerEmailsExtract |
---|
Oggetto | Attributi | Tipo di relazione |
---|---|---|
processo operativo |
|
n/d |
worker.personDetail |
|
uno-a-uno |
worker.emails |
|
alcuni-a-molti |
Multilingua:
A questo punto, gli attributi traducibili sono disponibili solo in inglese.Task 2: Preparazione e test di una query di estrazione
Ogni vista di estrazione dispone di un'API di query che consente di creare e testare query di estrazione.
URL | /api/boss/data/objects/ora/hcmHrCore/employment/v1/{{viewPath}}/$query |
---|---|
Metodo HTTP | POST |
Modello di richiesta |
{ "collection": { "limit": {{limit}}, "offset": {{offset}}, "sortBy": [ {{sortAttributes}} ], "filter": "{{topLevelFilter}}" }, "fields": [ {{topLevelAttributes}} ], "accessors": { "{{childObject}}": { "collection": { "filter": "{{childLevelFilter}}" }, "fields": [ {{childLevelAttributes}} ], "accessors": { {{nestedChildAccessors}} } }, ... } } |
Modello di risposta |
200 OK { "items": [ {{items}} ], "hasMore": {{hasMore}} } |
Oggetti e attributi
Definire i dati da estrarre, ovvero gli oggetti e gli attributi da includere. L'inclusione di oggetti figlio richiede l'aggiunta di accessori, mentre l'inclusione di campi specifici richiede l'inserimento di un elenco nell'array fields
. Vedere l'esempio completo.
Applicazione del filtro
Definire la modalità di filtraggio dei dati. È possibile utilizzare le espressioni riportate di seguito per creare filtri per la query.
Scopo | Espressione | Esempio |
---|---|---|
Test di uguaglianza | field = value |
ename = 'KING' |
Test disuguaglianza | field != value |
activeFlag != true |
Test di livello superiore meno di |
field > value |
sal > 1999.99 |
Test maggiore di o uguale a test minore di o uguale a |
field >= value |
sal >= 1999.99 |
Corrispondenza pattern | field LIKE 'pattern' |
job LIKE 'SALES%' |
Test appartenenza | field IN (value1, ..., valueN) |
deptno IN (10, 20, 40) |
Confronto casi-insensibilità | field ~= value |
ename ~= 'king' |
Test di esistenza (per relazioni uno-a-molti) | child[expression] |
assignments[startDate = null] |
Congiunzione logica | expression AND expression |
|
Disgiunzione logica | expression OR expression |
|
Negazione logica | !(expression) |
Applicazione di filtri in base agli oggetti figlio nella relazione uno-a-uno:
In caso di relazioni uno a uno, è possibile fare riferimento agli oggetti figlio e ai relativi attributi nella clausola di filtro, così come agli attributi di altri oggetti padre, ad esempiolegalEmployer.id in (1001, 1002)
.
Applicazione di filtri agli oggetti figlio nella relazione uno-a-molti:
In caso di relazioni uno-a-molti, il test dell'esistenza nella tabella precedente filtrerà i genitori che hanno almeno un figlio che soddisfa i criteri. Tuttavia, ciò non significa che i record figlio, se recuperati, verranno filtrati automaticamente. Se si desidera assicurarsi di ottenere solo record figlio che soddisfano i criteri, è necessario ripetere il filtro anche a livello figlio.Ad esempio, se si desidera recuperare solo i telefoni di tipo W1
, è necessario applicare i filtri seguenti:
{ "collection": { "filter": "phones[type = 'W1']" }, "accessors": { "phones": { "collection": { "filter": "type = 'W1'" }, ...
Filtro in base alla data di validità:
In caso di oggetti con data di validità, per impostazione predefinita i dati saranno validi a partire dalla data corrente. Per recuperare i dati validi a partire da una data specifica, utilizzare il parametro di query HTTP$effectiveDate
.
Ad esempio, se si desidera recuperare i dati validi a partire da 2023-01-01
, utilizzare il seguente URL per la query:
/api/boss/data/objects/ora/hcmHrCore/employment/v1/{{viewPath}}/$query?$effectiveDate=2023-01-01
Ordinamento
Definire la modalità di ordinamento dei dati. L'ordinamento è espresso da un array di attributi di ordinamento, inclusa la direzione di ordinamento (asc o desc). Ad esempio:
"sortBy": [ { "totalAmount": "desc" }, { "paidAmount": "asc" } ]
Paging
Definire la modalità di impaginazione dei dati. Il client può controllare il paging fornendo parametri di limite e offset. Ad esempio:
"limit": 200, "offset": 400
Il limite predefinito è 25
e il limite massimo è 1000
.
L'offset predefinito è 0
e indica l'inizio dei risultati.
L'attributo hasMore
di livello superiore nella risposta indica se sono presenti altri risultati da recuperare.
Paginare non dovrebbe essere usato come un modo alternativo per estrarre i dati. Quando si esegue una query su questa API, non vi è alcuna garanzia che i dati non cambieranno tra le richieste. Utilizza l'API asincrona per l'estrazione dei dati.
Esempio
La query di estrazione di esempio riportata di seguito è progettata per recuperare le informazioni sulle assegnazioni insieme ai dettagli relativi a datore di lavoro legale e reparto.
- Sono assegnazioni principali
- Sono di tipo Dipendente
- Non appartenere a datori di lavoro legali con ID
10001
e10002
- Validità alla data di estrazione
- Aggiornato (o creato) dall'esecuzione precedente
Esempio di richiesta
Osservare il parametro limit
e la condizione dell'attributo timeUpdated
con l'indicatore orario dell'esecuzione dell'estrazione precedente.
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" ] } } }
Esempio di risposta
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: Sottomissione di una richiesta di job di estrazione
Una volta definita la query, è possibile sottomettere una richiesta di job di estrazione utilizzando l'API Scheduler job.
URL | /api/saas-batch/jobscheduler/v1/jobRequests |
---|---|
Metodo HTTP | POST |
Modello di richiesta |
Per la vista { "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}}" } } Per altre viste: { "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}}" } }
|
Modello di risposta |
Una volta completata la sottomissione, verrà restituito il codice di risposta 202 Accepted Location: {{jobRequestUrl}} |
Paging durante l'estrazione dei dati:
Sebbene siano stati utilizzati controlli di impaginazione, ad esempio parametrilimit
e offset
, durante la creazione e il test della query non si desidera che i risultati dell'estrazione siano vincolati da tali controlli. Rimuovere qualsiasi utilizzo dei parametri limit
e offset
durante la sottomissione di una query.
Passaggio della query:
La query passata quando si sottomette la richiesta del job di estrazione deve avere il formato di una stringa JSON standard. Eseguire la query preparata e testata utilizzando l'endpoint API$query
e:
- Fuga tutte le virgolette doppie (" → \")
- Rimuovere i caratteri di nuova riga (\n)
- Ridurre potenzialmente altri spazi bianchi (ad es. rientranze)
Nel complesso si desidera procedere, ad esempio:
{ "collection": { "limit": 100, "filter": "totalAmount > 10000" }, "fields": [ "id", "totalAmount" ] }
Azione da eseguire
{\"collection\": {\"filter\": \"totalAmount > 10000\"},\"fields\": [ \"id\", \"totalAmount\" ]}
Esempio
Esempio di richiesta
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\" ]}}}" } }
Esempio di risposta
202 Accepted Location: https://example.com/api/saas-batch/jobscheduler/v1/jobRequests/42075
Task 4: Controllo completamento OdL
Il controllo per il completamento implica l'utilizzo dell'API dello scheduler di job per eseguire periodicamente il polling dei dettagli della richiesta di job, fino al completamento o al completamento dell'operazione.
URL | /api/saas-batch/jobscheduler/v1/jobRequests/{{jobRequestId}} |
---|---|
Metodo HTTP | GET |
Operazione completata correttamente:
Una richiesta di job viene considerata completata correttamente quando vengono soddisfatte le seguenti condizioni:Attribuzione | Valore previsto |
---|---|
jobDetails.jobProgress.completed |
true |
jobDetails.jobProgress.status |
SUCCEEDED |
Completamento non riuscito:
Una richiesta di job viene considerata non riuscita quando viene soddisfatta la condizione seguente. In tal caso, l'attributojobDetails.jobProgress.message
conterrà il messaggio di errore.
Attribuzione | Valore previsto |
---|---|
jobDetails.jobProgress.status |
FAILED |
Esempio
Esempio di richiesta
GET /api/saas-batch/jobscheduler/v1/jobRequests/42075
Esempi di risposta
Le risposte riportate di seguito mostrano le diverse fasi di un job sottomesso. Vedere in particolare gli attributi jobProgress.status
e jobProgress.completed
.
Accettata/accodata
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" } } } }
In esecuzione
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" } } } }
Completamento riuscito
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: Recupero dettagli output estrazione
Una volta completato correttamente il job, è possibile recuperare le informazioni sul file di output. Implica l'utilizzo dell'API File Manager job per la specifica istanza di richiesta del job di estrazione.
L'output viene memorizzato in blocchi compressi.
URL | /api/saas-batch/jobfilemanager/v1/jobRequests/{{jobRequestId}}/outputFiles |
---|---|
Metodo HTTP | GET |
Dimensione del file:
La dimensione del file viene restituita nell'attributo di rispostaitems.fileSize
ed espressa in byte.
Collegamento allegato:
L'URL del contenuto effettivo del file viene restituito nell'attributo di rispostaitems.$context.links.enclosure
.
Esempio
Esempio di richiesta
GET /api/saas-batch/jobfilemanager/v1/jobRequests/42075/outputFiles
Esempio di risposta
Nell'esempio seguente, l'output completo viene memorizzato in due file compressi.
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: Download dell'output di estrazione
Infine, è possibile scaricare i file di output di estrazione utilizzando l'API Job File Manager per l'istanza di richiesta del job di estrazione e il file di output specifici.
URL | /api/saas-batch/jobfilemanager/v1/jobRequests/{{jobRequestId}}/outputFiles/{{fileName}}/content |
---|---|
Metodo HTTP | GET |
Suggerimento
Se necessario, è possibile scaricare file di grandi dimensioni in modo più efficiente implementando il download multithread utilizzando l'intestazione HTTP Range come di seguito.Range: {{startByte}}-{{endByte}}/{{fileSize}}
Esempio
Esempio di richiesta
GET /api/saas-batch/jobfilemanager/v1/jobRequests/42075/outputFiles/result_42075.json/content
Esempi di risposta
La risposta effettiva è il contenuto del file compresso binario. Una volta non compresso, è pieno o parziale (nel caso dell'uso dell'intestazione Range
), payload JSON non formattato, con risultati completi o parziali (nel caso di un file-chunk) della query di estrazione.
Esempio completo di risultati non compressi
{"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"}}} ]}
Altre risorse di apprendimento
Esplora altri laboratori su docs.oracle.com/learn o accedi a più contenuti di formazione gratuiti sul canale YouTube di Oracle Learning. Inoltre, visitare education.oracle.com/learning-explorer per diventare Oracle Learning Explorer.
Per la documentazione del prodotto, visitare Oracle Help Center.
Estrai dati da HCM mediante i servizi Spectra
G38792-01
Luglio 2025