Présentation
Cloud HCM permet d'extraire des données de HCM à l'aide de la plate-forme BOSS/Spectra de nouvelle génération sous-jacente.
Objectifs
À la fin de ce tutoriel, vous comprendrez comment :
- Interroger les vues d'extraction des travailleurs et leur hiérarchie d'objets
- Soumettre et suivre de manière asynchrone les demandes de tâche d'extraction pour l'extraction des données de la hiérarchie des travailleurs sélectionnés
- Télécharger les fichiers de sortie d'extraction
Préalables
Avant de commencer :
- Communiquez avec Oracle CoE pour vous assurer que la plate-forme Spectra, y compris la réplication des données RODS, est provisionnée dans votre pod
- Effectuer la configuration de sécurité requise, notamment :
- Configuration de la sécurité des données
- Configuration de l'application client OAuth
Cas d'utilisation
Cette fonctionnalité vous permet de traiter les cas d'utilisation suivants.
Extraction complète des données
L'extraction complète des données sur les travailleurs peut être ponctuelle ou périodique.
Vous pouvez extraire toute la hiérarchie d'objets ou simplement un sous-ensemble de celle-ci.
L'extraction complète des données extrait tous les enregistrements qui correspondent aux critères de filtrage et les fichiers de sortie peuvent être très volumineux.
Les objets avec date en vigueur seront extraits à la date en vigueur demandée, où la date d'extraction courante est la valeur par défaut.
Extraction incrémentielle des données
L'extraction incrémentielle des données sur les travailleurs est généralement une activité programmée périodique.
Vous pouvez extraire toute la hiérarchie d'objets ou simplement un sous-ensemble de celle-ci.
Dans ce cas d'utilisation, vous souhaitez extraire uniquement les objets qui ont été modifiés depuis l'exécution d'extraction précédente, où la première exécution d'extraction est la ligne de base. Pour ce faire, les filtres d'attributs timeUpdated
doivent être appliqués à tous les niveaux pouvant faire l'objet d'une détection de modification.
L'interrogation d'extraction de données incrémentielle peut appliquer des critères de filtrage supplémentaires. Les fichiers de sortie sont généralement plus petits par rapport à l'extraction complète, car ils ne contiennent que des delta.
Seules les valeurs courantes des attributs seront extraites.
Les objets avec date en vigueur seront extraits à la date en vigueur demandée, où la date d'extraction courante est la valeur par défaut.
Attention :
Les enregistrements physiquement supprimés ne seront pas retournés à l'aide du filtrage partimeUpdated
.
Tâche 1 : Choisir une vue d'extraction
Sélectionnez la vue d'extraction à utiliser, en fonction des objets et des attributs requis. Les vues disponibles sont listées ci-dessous, ainsi que les objets et les attributs qui peuvent être extraits.
Extractions d'affectation de travailleur
Utilisez workerAssignmentExtracts pour extraire les données d'affectation d'emploi des travailleurs.
Voir le chemin | workerAssignmentExtracts |
---|
Objets | Attributs | Type de relation |
---|---|---|
workerAssignmentExtract |
|
S.O. |
workerAssignmentExtract.department |
|
un à un |
workerAssignmentExtract.legalEmployer |
|
un à un |
workerAssignmentExtract.legislation |
|
un à un |
workerAssignmentExtract.position |
|
un à un |
workerAssignmentExtract.grade |
|
un à un |
workerAssignmentExtract.location |
|
un à un |
workerAssignmentExtract.location.mainAddress |
|
un à un |
workerAssignmentExtract.location.mainAddress.country |
|
un à un |
workerAssignmentExtract.job |
|
un à un |
workerAssignmentExtract.job.jobFamily |
|
un à un |
workerAssignmentExtract.collectiveAgreement |
|
un à un |
workerAssignmentExtract.personType |
|
un à un |
workerAssignmentExtract.workerUnion |
|
un à un |
workerAssignmentExtract.assignmentUserStatus |
|
un à un |
workerAssignmentExtract.businessUnit |
|
un à un |
workerAssignmentExtract.account |
|
un à un |
workerAssignmentExtract.ledger |
|
un à un |
workerAssignmentExtract.workRelationship |
|
un à un |
workerAssignmentExtract.localName |
|
un à un |
workerAssignmentExtract.globalName |
|
un à un |
workerAssignmentExtract.personDetail |
|
un à un |
Extraction des informations juridiques sur le travailleur
Utilisez workerLegislativeInfoExtract pour extraire les données juridiques des travailleurs.
Voir le chemin | travailleurs/$views/workerLegislativeInfoExtract |
---|
Objets | Attributs | Type de relation |
---|---|---|
travailleur |
|
S.O. |
worker.personDetail |
|
une à une |
worker.legislativeInformation |
|
une à une |
worker.legislativeInformation.legislation |
|
une à une |
Extraction des noms de travailleur
Utilisez workerNamesExtract pour extraire les données sur les noms des travailleurs.
Voir le chemin | travailleurs/$views/workerNamesExtract |
---|
Objets | Attributs | Type de relation |
---|---|---|
travailleur |
|
S.O. |
worker.personDetail |
|
une à une |
worker.names |
|
un à plusieurs |
worker.names.legislation |
|
une à une |
worker.names.language |
|
une à une |
Extraction de téléphones de travailleur
Utilisez workerPhonesExtract pour extraire les données sur les téléphones des travailleurs.
Voir le chemin | travailleurs/$views/workerPhonesExtract |
---|
Objets | Attributs | Type de relation |
---|---|---|
travailleur |
|
S.O. |
worker.personDetail |
|
une à une |
worker.phones |
|
un à plusieurs |
worker.phones.legislation |
|
une à une |
Extraction des courriels du travailleur
Utilisez workerEmailsExtract pour extraire les données des courriels des travailleurs.
Voir le chemin | travailleurs/$views/workerEmailsExtract |
---|
Objets | Attributs | Type de relation |
---|---|---|
travailleur |
|
S.O. |
worker.personDetail |
|
une à une |
worker.emails |
|
un à plusieurs |
Plusieurs langues :
Les attributs traduisibles ne sont disponibles qu'en anglais à ce stade.Tâche 2 : Préparer et tester une interrogation d'extraction
Chaque vue d'extraction dispose d'une API d'interrogation qui permet de créer et de tester des interrogations d'extraction.
URL | /api/boss/data/objects/ora/hcmHrCore/employment/v1/{{viewPath}}/$query |
---|---|
Méthode HTTP | POST |
Modèle de demande |
{ "collection": { "limit": {{limit}}, "offset": {{offset}}, "sortBy": [ {{sortAttributes}} ], "filter": "{{topLevelFilter}}" }, "fields": [ {{topLevelAttributes}} ], "accessors": { "{{childObject}}": { "collection": { "filter": "{{childLevelFilter}}" }, "fields": [ {{childLevelAttributes}} ], "accessors": { {{nestedChildAccessors}} } }, ... } } |
Modèle de réponse |
200 OK { "items": [ {{items}} ], "hasMore": {{hasMore}} } |
Objets et attributs
Définissez les données à extraire, c'est-à-dire les objets et les attributs à inclure. L'inclusion d'objets enfants nécessite l'ajout de méthodes d'accès alors que l'inclusion de champs spécifiques nécessite leur inscription dans le tableau fields
. Voir l'exemple complet.
Filtrage
Sert à définir le mode de filtrage des données. Vous pouvez utiliser les expressions suivantes pour créer des filtres pour votre interrogation.
Objet | Expression | Exemple |
---|---|---|
Test d'égalité | field = value |
ename = 'KING' |
Test d'inégalité | field != value |
activeFlag != true |
Test supérieur à Test inférieur à |
field > value |
sal > 1999.99 |
Supérieur ou égal à test Inférieur ou égal à test |
field >= value |
sal >= 1999.99 |
Mise en correspondance de motifs | field LIKE 'pattern' |
job LIKE 'SALES%' |
Test d'appartenance | field IN (value1, ..., valueN) |
deptno IN (10, 20, 40) |
Comparaison cas-insensibilité | field ~= value |
ename ~= 'king' |
Test d'existence (pour les relations un-à-plusieurs) | child[expression] |
assignments[startDate = null] |
Conjonction logique | expression AND expression |
|
Disjonction logique | expression OR expression |
|
Négation logique | !(expression) |
Filtrage par objets enfants dans une relation un-à-un :
Dans le cas de relations un à un, vous pouvez faire référence aux objets enfants et à leurs attributs dans la clause de filtre, tout comme aux attributs des autres objets parents, par exemplelegalEmployer.id in (1001, 1002)
.
Filtrage des objets enfants dans une relation un-à-plusieurs :
Dans le cas de relations un à plusieurs, le test d'existence dans le tableau ci-dessus filtre les parents qui ont au moins un enfant répondant aux critères. Toutefois, cela ne signifie pas que les enregistrements enfants, s'ils sont extraits, seront filtrés automatiquement. Si vous voulez vous assurer que vous obtenez uniquement des enregistrements enfants répondant aux critères, vous devez répéter le filtre au niveau enfant.Par exemple, si vous voulez extraire uniquement des téléphones de type W1
, vous devez appliquer les filtres suivants :
{ "collection": { "filter": "phones[type = 'W1']" }, "accessors": { "phones": { "collection": { "filter": "type = 'W1'" }, ...
Filtrage par date en vigueur :
Dans le cas d'objets avec date en vigueur, vous obtiendrez les données en vigueur à la date courante par défaut. Pour extraire les données en vigueur à une date spécifique, utilisez le paramètre d'interrogation HTTP$effectiveDate
.
Par exemple, si vous voulez extraire les données en vigueur à partir de 2023-01-01
, utilisez l'URL suivante pour votre interrogation :
/api/boss/data/objects/ora/hcmHrCore/employment/v1/{{viewPath}}/$query?$effectiveDate=2023-01-01
Tri
Définissez le mode de tri des données. Le tri est exprimé par un tableau d'attributs de tri, y compris la direction de tri (asc ou desc). Par exemple :
"sortBy": [ { "totalAmount": "desc" }, { "paidAmount": "asc" } ]
Pagination
Définir la façon dont les données doivent être paginées. Le client peut contrôler la pagination en fournissant des paramètres de limite et de décalage. Par exemple :
"limit": 200, "offset": 400
La limite par défaut est 25
et la limite maximale est 1000
.
Le décalage par défaut est 0
et indique le début des résultats.
L'attribut de niveau supérieur hasMore
dans la réponse indique s'il y a d'autres résultats à extraire.
La pagination ne doit pas être utilisée comme un autre moyen d'extraire des données. Lors de l'interrogation de cette API, il n'y a aucune garantie que les données ne changeront pas entre les demandes. Utilisez l'API asynchrone pour l'extraction de données.
Exemple
L'exemple d'interrogation d'extraction ci-dessous est conçu pour extraire les informations sur les affectations, ainsi que les détails de l'employeur légal et du service, qui :
- Sont des affectations principales
- Sont de type Employé
- N'appartient pas aux employeurs légaux ayant les ID
10001
et10002
- sont en vigueur à la date d'extraction
- Mise à jour (ou création) depuis l'exécution précédente
Exemple de demande
Notez la condition du paramètre limit
et de l'attribut timeUpdated
avec l'horodatage de l'exécution d'extraction précédente.
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" ] } } }
Exemple de réponse
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 }
Tâche 3 : Soumettre une demande de tâche d'extraction
Une fois l'interrogation définie, une demande de tâche d'extraction peut être soumise à l'aide de l'API du programmateur de tâches.
URL | /api/saas-batch/jobscheduler/v1/jobRequests |
---|---|
Méthode HTTP | POST |
Modèle de demande |
Pour la vue { "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}}" } } Pour les autres vues : { "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}}" } }
|
Modèle de réponse |
Lors de la soumission réussie, le code de réponse 202 Accepted Location: {{jobRequestUrl}} |
Pagination lors de l'extraction des données :
Bien que vous ayez utilisé des contrôles de pagination, c'est-à-dire des paramètreslimit
et offset
, lors de la création et du test de l'interrogation, vous ne voulez pas que les résultats d'extraction soient limités par ceux-ci. Supprimez toute utilisation des paramètres limit
et offset
lors de la soumission d'une interrogation.
Transmission de l'interrogation :
L'interrogation transmise lors de la soumission de la demande de tâche d'extraction doit se présenter sous la forme d'une chaîne JSON standard. Préparez et testez l'interrogation à l'aide du point d'extrémité de l'API$query
et :
- Échapper à toutes les guillemets (" → \")
- Supprimer les nouveaux caractères de ligne (\n)
- Réduire potentiellement d'autres espaces blancs (p. ex. indentations)
Dans l'ensemble, vous voulez aller, par exemple, de :
{ "collection": { "limit": 100, "filter": "totalAmount > 10000" }, "fields": [ "id", "totalAmount" ] }
Vers :
{\"collection\": {\"filter\": \"totalAmount > 10000\"},\"fields\": [ \"id\", \"totalAmount\" ]}
Exemple
Exemple de demande
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\" ]}}}" } }
Exemple de réponse
202 Accepted Location: https://example.com/api/saas-batch/jobscheduler/v1/jobRequests/42075
Tâche 4 : Vérification de l'achèvement de la tâche
La vérification de l'achèvement implique l'utilisation de l'API du programmateur de tâches pour scruter périodiquement les détails de la demande de tâche, jusqu'à ce qu'elle soit terminée avec succès ou en échec.
URL | /api/saas-batch/jobscheduler/v1/jobRequests/{{jobRequestId}} |
---|---|
Méthode HTTP | GET |
Réussite :
Une demande de travail est considérée comme terminée lorsque les conditions suivantes sont remplies :Attribué | Valeur prévue |
---|---|
jobDetails.jobProgress.completed |
true |
jobDetails.jobProgress.status |
SUCCEEDED |
Échec de l'achèvement :
Une demande de tâche est considérée comme ayant échoué lorsque la condition suivante est satisfaite. Dans ce cas, l'attributjobDetails.jobProgress.message
contiendra le message d'erreur.
Attribué | Valeur prévue |
---|---|
jobDetails.jobProgress.status |
FAILED |
Exemple
Exemple de demande
GET /api/saas-batch/jobscheduler/v1/jobRequests/42075
Exemples de réponse
Les réponses ci-dessous présentent les différentes étapes d'un travail soumis. Voir les attributs jobProgress.status
et jobProgress.completed
en particulier.
Accepté/En file d'attente
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" } } } }
En cours d'exécution
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" } } } }
Opération réussie
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" } } } }
Tâche 5 : Extraction des détails de sortie de l'extraction
Une fois le travail terminé avec succès, ses informations de fichier de sortie peuvent être extraites. Il s'agit d'utiliser l'API Job File Manager pour l'instance de demande de tâche d'extraction particulière.
La sortie est stockée dans des fragments compressés.
URL | /api/saas-batch/jobfilemanager/v1/jobRequests/{{jobRequestId}}/outputFiles |
---|---|
Méthode HTTP | GET |
Taille du fichier :
La taille du fichier est retournée dans l'attribut de réponseitems.fileSize
et exprimée en octets.
Lien de clôture :
L'URL du contenu réel du fichier est retournée dans l'attribut de réponseitems.$context.links.enclosure
.
Exemple
Exemple de demande
GET /api/saas-batch/jobfilemanager/v1/jobRequests/42075/outputFiles
Exemple de réponse
Dans l'exemple ci-dessous, la sortie complète est stockée dans deux fichiers compressés.
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" } } } }
Tâche 6 : Télécharger la sortie d'extraction
Enfin, les fichiers de sortie d'extraction peuvent être téléchargés à l'aide de l'API Job File Manager pour l'instance de demande de tâche d'extraction et le fichier de sortie particuliers.
URL | /api/saas-batch/jobfilemanager/v1/jobRequests/{{jobRequestId}}/outputFiles/{{fileName}}/content |
---|---|
Méthode HTTP | GET |
Conseil :
Si nécessaire, vous pouvez télécharger des fichiers volumineux plus efficacement en implémentant le téléchargement multithread à l'aide de l'en-tête Range HTTP comme ci-dessous.Range: {{startByte}}-{{endByte}}/{{fileSize}}
Exemple
Exemple de demande
GET /api/saas-batch/jobfilemanager/v1/jobRequests/42075/outputFiles/result_42075.json/content
Exemples de réponse
La réponse réelle est le contenu du fichier compressé binaire. Une fois décompressée, elle est complète ou partielle (en cas d'utilisation d'en-tête Range
), les données utiles JSON non formatées, avec des résultats complets ou partiels (en cas de fragment de fichier) de l'interrogation d'extraction.
Exemple de résultats complets non compressés
{"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"}}} ]}
Autres ressources d'apprentissage
Explorez d'autres laboratoires sur le site docs.oracle.com/learn ou accédez à plus de contenu d'apprentissage gratuit sur le canal Oracle Learning YouTube. De plus, visitez education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.
Pour obtenir la documentation sur le produit, visitez Oracle Help Center.
Extraire les données de HCM à l'aide des services Spectra
G38790-01
Juillet 2025