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 :

  1. 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
  2. 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 par timeUpdated.

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
  • id
  • effectiveStartDate
  • effectiveEndDate
  • effectiveSequence
  • effectiveLatestChange
  • assignmentType
  • assignmentNumber
  • primaryFlag
  • businessTitle
  • workAtHomeFlag
  • officeBuilding
  • officeFloor
  • officeMailStop
  • officeNumber
  • primaryAssignmentFlag
  • primaryWorkRelationshipFlag
  • timeUpdated
  • updatedBy
  • timeCreated
  • createdBy
  • systemPersonType
  • labourUnionMemberFlag
  • managerFlag
  • probationEndDate
  • probationPeriod
  • probationPeriodUnit
  • normalHours
  • fréquence
  • endTime
  • startTime
  • noticePeriod
  • noticePeriodUOM
  • workerCategory
  • assignmentCategory
  • hourlyPaidOrSalaried
  • projectedEndDate
  • projectedStartDate
  • assignmentStatusType
  • expenseCheckSendToAddress
  • retirementAge
  • retirementDate
  • synchronizeFromPositionFlag
  • fullTimeOrPartTime
  • permanentAssignmentFlag
  • seniorityBasis
  • overtimePeriod
  • adjustedFullTimeEquivalent
  • annualWorkingDuration
  • annualWorkingDurationUnit
  • annualWorkingRatio
  • standardFrequency
  • standardWorkingHours
  • standardAnnualWorkingDuration
  • séquence ;
N/A
workerAssignmentExtract.department
  • id
  • name
  • title
  • effectiveStartDate
  • effectiveEndDate
de type 1 à 1
workerAssignmentExtract.legalEmployer
  • id
  • name
  • effectiveStartDate
  • effectiveEndDate
de type 1 à 1
workerAssignmentExtract.legislation
  • territoryCode
  • territoryShortName
de type 1 à 1
workerAssignmentExtract.position
  • id
  • effectiveStartDate
  • effectiveEndDate
  • name
  • code
de type 1 à 1
workerAssignmentExtract.grade
  • id
  • effectiveStartDate
  • effectiveEndDate
  • name
  • code
de type 1 à 1
workerAssignmentExtract.location
  • id
  • effectiveStartDate
  • effectiveEndDate
  • name
  • code
de type 1 à 1
workerAssignmentExtract.location.mainAddress
  • id
  • effectiveStartDate
  • effectiveEndDate
  • comté
  • state
  • province
  • townOrCity
  • postalCode
  • countryCode
  • longPostalCode
  • addressLine1
  • addressLine2
  • addressLine3
  • addressLine4
de type 1 à 1
workerAssignmentExtract.location.mainAddress.country
  • territoryCode
  • territoryShortName
de type 1 à 1
workerAssignmentExtract.job
  • id
  • effectiveStartDate
  • effectiveEndDate
  • name
  • code
  • jobFunctionCode
  • managerLevel
de type 1 à 1
workerAssignmentExtract.job.jobFamily
  • id
  • effectiveStartDate
  • effectiveEndDate
  • name
  • code
de type 1 à 1
workerAssignmentExtract.collectiveAgreement
  • id
  • effectiveStartDate
  • effectiveEndDate
  • name
de type 1 à 1
workerAssignmentExtract.personType
  • id
  • userPersonType
de type 1 à 1
workerAssignmentExtract.workerUnion
  • id
  • effectiveStartDate
  • effectiveEndDate
  • name
de type 1 à 1
workerAssignmentExtract.assignmentUserStatus
  • id
  • userStatus
de type 1 à 1
workerAssignmentExtract.businessUnit
  • id
  • effectiveStartDate
  • effectiveEndDate
  • name
de type 1 à 1
workerAssignmentExtract.account
  • codeCombinationId
  • concatenatedSegments
  • chartOfAccountsId
de type 1 à 1
workerAssignmentExtract.ledger
  • ledgerId
  • name
de type 1 à 1
workerAssignmentExtract.workRelationship
  • id
  • startDate
  • workerType
  • timeCreated
  • timeUpdated
de type 1 à 1
workerAssignmentExtract.localName
  • id
  • effectiveStartDate
  • effectiveEndDate
  • lastName
  • firstName
  • displayName
  • listName
  • timeCreated
  • timeUpdated
de type 1 à 1
workerAssignmentExtract.globalName
  • id
  • effectiveStartDate
  • effectiveEndDate
  • lastName
  • firstName
  • displayName
  • listName
  • timeCreated
  • timeUpdated
de type 1 à 1
workerAssignmentExtract.personDetail
  • id
  • personNumber
  • effectiveStartDate
  • effectiveEndDate
  • timeCreated
  • timeUpdated
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
  • id
N/A
worker.personDetail
  • id
  • effectiveStartDate
  • effectiveEndDate
  • personNumber
de type 1 à 1
worker.legislativeInformation
  • id
  • effectiveStartDate
  • effectiveEndDate
  • sexe
  • maritalStatus
  • maritalStatusChangeDate
  • highestEducationLevel
  • timeUpdated
  • updatedBy
  • timeCreated
  • createdBy
de type 1 à 1
worker.legislativeInformation.legislation
  • territoryCode
  • territoryShortName
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
  • id
N/A
worker.personDetail
  • id
  • effectiveStartDate
  • effectiveEndDate
  • personNumber
de type 1 à 1
worker.names
  • id
  • effectiveStartDate
  • effectiveEndDate
  • lastName
  • firstName
  • middleNames
  • title
  • préfixe
  • suffixe
  • knownAs
  • previousLastName
  • prix
  • militaryRank
  • displayName
  • fullName
  • listName
  • orderName
  • nameLanguage
  • type
  • timeUpdated
  • updatedBy
  • timeCreated
  • createdBy
d'un à plusieurs
worker.names.legislation
  • territoryCode
  • territoryShortName
de type 1 à 1
worker.names.language
  • languageCode
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
  • id
N/A
worker.personDetail
  • id
  • effectiveStartDate
  • effectiveEndDate
  • personNumber
de type 1 à 1
worker.phones
  • id
  • type
  • primaryFlag
  • phoneNumber
  • areaCode
  • countryCodeNumber
  • extension
  • validité
  • timeUpdated
  • updatedBy
  • timeCreated
  • createdBy
d'un à plusieurs
worker.phones.legislation
  • territoryCode
  • territoryShortName
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
  • id
N/A
worker.personDetail
  • id
  • effectiveStartDate
  • effectiveEndDate
  • personNumber
de type 1 à 1
worker.emails
  • id
  • type
  • primaryFlag
  • emailAddress
  • timeUpdated
  • updatedBy
  • timeCreated
  • createdBy
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
field < value
sal > 1999.99
hireDate < '2000-01-01'
timeUpdated> '1900-01-01T13:51:54Z'
Test supérieur à ou égal à
Test inférieur à ou égal à
field >= value
field <= value< code>
sal >= 1999.99
hireDate <= '2000-01-01'
timeUpdated >= '1900-01-01T13:51:54Z'
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
field ~!= value
field ~> value
field ~< value
field ~>= value
field ~<= value
field ~LIKE 'pattern'
field ~IN (value1, ..., valueN)
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 exemple legalEmployer.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 et 10002
  • 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 workerAssignmentExtracts :

{
    "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}}"
    }
}

boss.request.system.param.effectiveDate est un paramètre facultatif qui doit être fourni uniquement si vous voulez extraire les données en vigueur à la date du jour différente de la date du jour.

Modèle de réponse

Une fois la soumission réussie, le code de réponse 202 est renvoyé, ainsi que l'en-tête Location avec l'URL pointant vers l'instance de demande de travail spécifique.

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ètres limit 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'attribut jobDetails.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éponse items.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éponse items.$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.