Introduction
Cloud HCM permet d'extraire des données de HCM à l'aide de la plate-forme sous-jacente BOSS/Spectra nouvelle génération.
Objectifs
A la fin de ce tutoriel, vous saurez comment :
- Interroger les vues d'extraction des salariés et leur hiérarchie d'objets
- Soumettre et suivre de manière asynchrone les demandes de travail d'extraction pour l'extraction des données de la hiérarchie des salariés sélectionnée
- Télécharger les fichiers de sortie d'extraction
Prérequis
Avant de commencer :
- Contactez Oracle CoE pour vous assurer que la plate-forme Spectra, y compris la réplication de 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
- OAuth configuration de l'application client
Cas d'emploi
Cette fonctionnalité vous permet de répondre aux cas d'utilisation suivants.
Extraction complète des données
L'extraction complète des données de salarié peut être une activité ponctuelle ou périodique.
Vous pouvez extraire toute la hiérarchie d'objets ou seulement 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 à date d'effet seront extraits à la date d'effet demandée, où la date d'extraction actuelle est la valeur par défaut.
Extraction incrémentielle des données
L'extraction incrémentielle des données du salarié est généralement une activité périodique planifiée.
Vous pouvez extraire toute la hiérarchie d'objets ou seulement un sous-ensemble de celle-ci.
Dans ce cas d'utilisation, vous souhaitez extraire uniquement les objets qui ont été modifiés depuis la précédente exécution d'extraction, où la première est la ligne de base. Pour ce faire, les filtres d'attribut timeUpdated
doivent être appliqués à n'importe quel niveau soumis à la détection des modifications.
Une requête 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 contiennent uniquement des delta.
Seules les valeurs actuelles des attributs seront extraites.
Les objets à date d'effet seront extraits à la date d'effet demandée, où la date d'extraction actuelle est la valeur par défaut.
Attention :
Les enregistrements supprimés physiquement ne seront pas renvoyés à l'aide du filtrage partimeUpdated
.
Tâche 1 : choisir une vue d'extraction
Choisissez la vue d'extraction à utiliser, en fonction des objets et des attributs requis. Les vues disponibles sont répertoriées ci-dessous, ainsi que les objets et attributs pouvant être extraits.
Extractions Affectation du salarié
Utilisez workerAssignmentExtracts pour extraire les données d'affectation d'emploi des salariés.
Chemin de vue | workerAssignmentExtracts |
---|
Objet | Attributs | Type de relation |
---|---|---|
workerAssignmentExtract |
|
N/A |
workerAssignmentExtract.department |
|
de type 1 à 1 |
workerAssignmentExtract.legalEmployer |
|
de type 1 à 1 |
workerAssignmentExtract.legislation |
|
de type 1 à 1 |
workerAssignmentExtract.position |
|
de type 1 à 1 |
workerAssignmentExtract.grade |
|
de type 1 à 1 |
workerAssignmentExtract.location |
|
de type 1 à 1 |
workerAssignmentExtract.location.mainAddress |
|
de type 1 à 1 |
workerAssignmentExtract.location.mainAddress.country |
|
de type 1 à 1 |
workerAssignmentExtract.job |
|
de type 1 à 1 |
workerAssignmentExtract.job.jobFamily |
|
de type 1 à 1 |
workerAssignmentExtract.collectiveAgreement |
|
de type 1 à 1 |
workerAssignmentExtract.personType |
|
de type 1 à 1 |
workerAssignmentExtract.workerUnion |
|
de type 1 à 1 |
workerAssignmentExtract.assignmentUserStatus |
|
de type 1 à 1 |
workerAssignmentExtract.businessUnit |
|
de type 1 à 1 |
workerAssignmentExtract.account |
|
de type 1 à 1 |
workerAssignmentExtract.ledger |
|
de type 1 à 1 |
workerAssignmentExtract.workRelationship |
|
de type 1 à 1 |
workerAssignmentExtract.localName |
|
de type 1 à 1 |
workerAssignmentExtract.globalName |
|
de type 1 à 1 |
workerAssignmentExtract.personDetail |
|
de type 1 à 1 |
Extraction Informations réglementaires sur le salarié
Utilisez workerLegislativeInfoExtract pour extraire les données d'informations réglementaires des salariés.
Chemin de vue | workers/$views/workerLegislativeInfoExtract |
---|
Objet | Attributs | Type de relation |
---|---|---|
processus actif |
|
N/A |
worker.personDetail |
|
de type 1 à 1 |
worker.legislativeInformation |
|
de type 1 à 1 |
worker.legislativeInformation.legislation |
|
de type 1 à 1 |
Extraction des noms des salariés
Utilisez workerNamesExtract pour extraire les données de nom des salariés.
Chemin de vue | workers/$views/workerNamesExtract |
---|
Objet | Attributs | Type de relation |
---|---|---|
processus actif |
|
N/A |
worker.personDetail |
|
de type 1 à 1 |
worker.names |
|
d'un à plusieurs |
worker.names.legislation |
|
de type 1 à 1 |
worker.names.language |
|
de type 1 à 1 |
Extraction des téléphones du salarié
Utilisez workerPhonesExtract pour extraire les données de téléphone des salariés.
Chemin de vue | workers/$views/workerPhonesExtract |
---|
Objet | Attributs | Type de relation |
---|---|---|
processus actif |
|
N/A |
worker.personDetail |
|
de type 1 à 1 |
worker.phones |
|
d'un à plusieurs |
worker.phones.legislation |
|
de type 1 à 1 |
Extraction des courriels du salarié
Utilisez workerEmailsExtract pour extraire les données de courriel des salariés.
Chemin de vue | workers/$views/workerEmailsExtract |
---|
Objet | Attributs | Type de relation |
---|---|---|
processus actif |
|
N/A |
worker.personDetail |
|
de type 1 à 1 |
worker.emails |
|
d'un à plusieurs |
Plusieurs langues:
Les attributs traduisibles ne sont disponibles qu'en anglais à ce stade.Tâche 2 : préparer et tester une requête d'extraction
Chaque vue d'extraction dispose d'une API de requête qui permet de créer et de tester des requêtes 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 attributs à inclure. L'inclusion d'objets enfant nécessite l'ajout de méthodes d'accès, tandis que l'inclusion de champs spécifiques nécessite leur énumération dans le tableau fields
. Reportez-vous à l'exemple complet.
Filtrage
Définir le mode de filtrage des données. Vous pouvez utiliser les expressions suivantes pour créer des filtres pour votre requête.
Description | 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 |
Test supérieur à ou égal à Test inférieur à ou égal à |
field >= value |
sal >= 1999.99 |
Correspondance de modèle | field LIKE 'pattern' |
job LIKE 'SALES%' |
Test d'adhésion | field IN (value1, ..., valueN) |
deptno IN (10, 20, 40) |
Comparaison d'insensibilité à la casse | field ~= value |
ename ~= 'king' |
Test d'existence (pour les relations de un à plusieurs) | child[expression] |
assignments[startDate = null] |
Conjonction logique | expression AND expression |
|
Disjonction logique | expression OR expression |
|
Négation logique | !(expression) |
Filtrage par objet enfant dans une relation un-à-un :
Dans le cas de relations un à un, vous pouvez faire référence aux objets enfant et à leurs attributs dans la clause de filtre tout comme aux attributs d'autres objets parent, par exemplelegalEmployer.id in (1001, 1002)
.
Filtrage des objets enfant dans une relation de 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 enfant, s'ils sont extraits, seront filtrés automatiquement. Si vous voulez vous assurer que seuls les enregistrements enfant répondent aux critères, vous devez également répéter le filtre au niveau enfant.Par exemple, si vous voulez extraire uniquement les 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 d'effet :
Dans le cas d'objets à date d'effet, les données entrent en vigueur à la date du jour par défaut. Pour extraire les données en vigueur à une date spécifique, utilisez le paramètre de requête HTTP$effectiveDate
.
Par exemple, si vous voulez extraire les données effectives à partir de 2023-01-01
, utilisez l'URL suivante pour votre requête :
/api/boss/data/objects/ora/hcmHrCore/employment/v1/{{viewPath}}/$query?$effectiveDate=2023-01-01
Tri
Définir le mode de tri des données. Le tri est exprimé par un tableau d'attributs de tri, y compris le sens de tri (asc ou desc). Exemple :
"sortBy": [ { "totalAmount": "desc" }, { "paidAmount": "asc" } ]
Pagination
Définir le mode de pagination des données. Le client peut contrôler la pagination en fournissant des paramètres de limite et de décalage. 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 si d'autres résultats doivent être extraits.
La pagination ne doit pas être utilisée comme alternative pour extraire des données. Lors de l'interrogation de cette API, il n'y a aucune garantie que les données ne changent pas entre les demandes. Utilisez l'API asynchrone pour l'extraction des données.
Exemple
L'exemple de requête d'extraction ci-dessous est conçu pour extraire les informations sur les affectations, ainsi que les détails sur la société juridique et le service, qui :
- Sont des affectations principales
- Sont de type Employé
- N'appartient pas aux sociétés juridiques avec les ID
10001
et10002
- sont en vigueur à la date d'extraction
- Mis à jour (ou créé) depuis l'exécution précédente
Exemple de demande
Observez le paramètre limit
et la condition d'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 travail d'extraction
Une fois la requête définie, une demande de travail d'extraction peut être soumise à l'aide de l'API du planificateur de travaux.
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 d'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 |
Une fois 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 peut-être utilisé des contrôles de pagination, c'est-à-dire des paramètreslimit
et offset
, lors de la création et du test de la requête, vous ne voulez pas que les résultats d'extraction soient limités par ces paramètres. Enlevez toute utilisation des paramètres limit
et offset
lors de la soumission d'une requête.
Transmission de la requête :
La requête transmise lors de la soumission de la demande de travail d'extraction doit être au format d'une chaîne JSON standard. Effectuez la préparation et le test de la requête à l'aide de l'adresse d'API$query
et effectuez les opérations suivantes :
- Évitez toutes les guillemets ("→ \")
- Supprimer les caractères de nouvelle ligne (\n)
- Réduire potentiellement les autres espaces blancs (par exemple, les indentations)
Dans l'ensemble, vous voulez aller, par exemple, de :
{ "collection": { "limit": 100, "filter": "totalAmount > 10000" }, "fields": [ "id", "totalAmount" ] }
Pour :
{\"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 la fin du travail
La vérification de la fin implique l'utilisation de l'API du planificateur de travaux pour interroger périodiquement les détails de la demande de travail, jusqu'à ce qu'elle aboutisse ou échoue.
URL | /api/saas-batch/jobscheduler/v1/jobRequests/{{jobRequestId}} |
---|---|
Méthode HTTP | GET |
Terminé avec succès :
Une demande de travail est considérée comme terminée avec succès lorsque les conditions suivantes sont remplies :Attribution | Valeur attendue |
---|---|
jobDetails.jobProgress.completed |
true |
jobDetails.jobProgress.status |
SUCCEEDED |
Echec de l'exécution :
Une demande de travail est considérée comme ayant échoué lorsque la condition suivante est remplie. Dans ce cas, l'attributjobDetails.jobProgress.message
contiendra le message d'erreur.
Attribution | Valeur attendue |
---|---|
jobDetails.jobProgress.status |
FAILED |
Exemple
Exemple de demande
GET /api/saas-batch/jobscheduler/v1/jobRequests/42075
Exemples de réponses
Les réponses ci-dessous présentent les différentes étapes d'un travail soumis. Reportez-vous en particulier aux attributs jobProgress.status
et jobProgress.completed
.
Accepté/mis 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" } } } }
Terminé avec succès
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 : extraire les détails de sortie de l'extraction
Une fois le travail terminé, les informations de fichier de sortie correspondantes peuvent être extraites. Cela implique d'utiliser l'API du gestionnaire de fichiers de travail pour l'instance de demande de travail d'extraction particulière.
La sortie est stockée dans des blocs compressés.
URL | /api/saas-batch/jobfilemanager/v1/jobRequests/{{jobRequestId}}/outputFiles |
---|---|
Méthode HTTP | GET |
Taille du fichier:
La taille du fichier est renvoyée dans l'attribut de réponseitems.fileSize
et exprimée en octets.
Lien vers le tiroir de disques :
L'URL vers le contenu réel du fichier est renvoyé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 de l'extraction
Enfin, les fichiers de sortie d'extraction peuvent être téléchargés à l'aide de l'API du gestionnaire de fichiers de travail pour l'instance de demande de travail d'extraction et le fichier de sortie spécifiques.
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 HTTP Range 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éponses
La réponse réelle est le contenu du fichier compressé binaire. Une fois décompressé, il est complet ou partiel (en cas d'utilisation de l'en-tête Range
), charge utile JSON non formatée, avec des résultats complets ou partiels (en cas de bloc de fichier) de la requête d'extraction.
Exemple de résultats non compressés complets
{"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"}}} ]}
Ressources de formation supplémentaires
Explorez d'autres ateliers sur le site docs.oracle.com/learn ou accédez à d'autres contenus d'apprentissage gratuits sur le canal Oracle Learning YouTube. En outre, visitez le site education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.
Pour obtenir de la documentation sur le produit, consultez Oracle Help Center.
Extraire des données de HCM à l'aide de Spectra Services
G38791-01
Juillet 2025