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 :

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

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
  • 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
S.O.
workerAssignmentExtract.department
  • id
  • nom
  • titre
  • effectiveStartDate
  • effectiveEndDate
un à un
workerAssignmentExtract.legalEmployer
  • id
  • nom
  • effectiveStartDate
  • effectiveEndDate
un à un
workerAssignmentExtract.legislation
  • territoryCode
  • territoryShortName
un à un
workerAssignmentExtract.position
  • id
  • effectiveStartDate
  • effectiveEndDate
  • nom
  • Code
un à un
workerAssignmentExtract.grade
  • id
  • effectiveStartDate
  • effectiveEndDate
  • nom
  • Code
un à un
workerAssignmentExtract.location
  • id
  • effectiveStartDate
  • effectiveEndDate
  • nom
  • Code
un à un
workerAssignmentExtract.location.mainAddress
  • id
  • effectiveStartDate
  • effectiveEndDate
  • comté
  • état
  • province
  • townOrCity
  • Code postal
  • countryCode
  • longPostalCode
  • addressLine1
  • addressLine2
  • addressLine3
  • addressLine4
un à un
workerAssignmentExtract.location.mainAddress.country
  • territoryCode
  • territoryShortName
un à un
workerAssignmentExtract.job
  • id
  • effectiveStartDate
  • effectiveEndDate
  • nom
  • Code
  • jobFunctionCode
  • managerLevel
un à un
workerAssignmentExtract.job.jobFamily
  • id
  • effectiveStartDate
  • effectiveEndDate
  • nom
  • Code
un à un
workerAssignmentExtract.collectiveAgreement
  • id
  • effectiveStartDate
  • effectiveEndDate
  • nom
un à un
workerAssignmentExtract.personType
  • id
  • userPersonType
un à un
workerAssignmentExtract.workerUnion
  • id
  • effectiveStartDate
  • effectiveEndDate
  • nom
un à un
workerAssignmentExtract.assignmentUserStatus
  • id
  • userStatus
un à un
workerAssignmentExtract.businessUnit
  • id
  • effectiveStartDate
  • effectiveEndDate
  • nom
un à un
workerAssignmentExtract.account
  • codeCombinationId
  • concatenatedSegments
  • chartOfAccountsId
un à un
workerAssignmentExtract.ledger
  • ledgerId
  • nom
un à un
workerAssignmentExtract.workRelationship
  • id
  • startDate
  • workerType
  • timeCreated
  • timeUpdated
un à un
workerAssignmentExtract.localName
  • id
  • effectiveStartDate
  • effectiveEndDate
  • lastName
  • firstName
  • displayName
  • listName
  • timeCreated
  • timeUpdated
un à un
workerAssignmentExtract.globalName
  • id
  • effectiveStartDate
  • effectiveEndDate
  • lastName
  • firstName
  • displayName
  • listName
  • timeCreated
  • timeUpdated
un à un
workerAssignmentExtract.personDetail
  • id
  • personNumber
  • effectiveStartDate
  • effectiveEndDate
  • timeCreated
  • timeUpdated
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
  • id
S.O.
worker.personDetail
  • id
  • effectiveStartDate
  • effectiveEndDate
  • personNumber
une à une
worker.legislativeInformation
  • id
  • effectiveStartDate
  • effectiveEndDate
  • Sexe
  • maritalStatus
  • maritalStatusChangeDate
  • highestEducationLevel
  • timeUpdated
  • updatedBy
  • timeCreated
  • createdBy
une à une
worker.legislativeInformation.legislation
  • territoryCode
  • territoryShortName
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
  • id
S.O.
worker.personDetail
  • id
  • effectiveStartDate
  • effectiveEndDate
  • personNumber
une à une
worker.names
  • id
  • effectiveStartDate
  • effectiveEndDate
  • lastName
  • firstName
  • middleNames
  • titre
  • prefix
  • suffixe
  • knownAs
  • previousLastName
  • prix
  • militaryRank
  • displayName
  • fullName
  • listName
  • orderName
  • nameLanguage
  • type
  • timeUpdated
  • updatedBy
  • timeCreated
  • createdBy
un à plusieurs
worker.names.legislation
  • territoryCode
  • territoryShortName
une à une
worker.names.language
  • languageCode
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
  • id
S.O.
worker.personDetail
  • id
  • effectiveStartDate
  • effectiveEndDate
  • personNumber
une à une
worker.phones
  • id
  • type
  • primaryFlag
  • Numéro de téléphone
  • areaCode
  • countryCodeNumber
  • extension
  • validité
  • timeUpdated
  • updatedBy
  • timeCreated
  • createdBy
un à plusieurs
worker.phones.legislation
  • territoryCode
  • territoryShortName
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
  • id
S.O.
worker.personDetail
  • id
  • effectiveStartDate
  • effectiveEndDate
  • personNumber
une à une
worker.emails
  • id
  • type
  • primaryFlag
  • emailAddress
  • timeUpdated
  • updatedBy
  • timeCreated
  • createdBy
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
field < value
sal > 1999.99
hireDate < '2000-01-01'
timeUpdated> '1900-01-01T13:51:54Z'
Supérieur ou égal à test
Inférieur ou égal à test
field >= value
field <= value< code>
sal >= 1999.99
hireDate <= '2000-01-01'
timeUpdated >= '1900-01-01T13:51:54Z'
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
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 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 exemple legalEmployer.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 et 10002
  • 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 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 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}}"
    }
}

boss.request.system.param.effectiveDate est un paramètre facultatif qui ne doit être fourni que si vous voulez extraire des données dont la date en vigueur est différente de la date courante.

Modèle de réponse

Lors de la soumission réussie, le code de réponse 202 sera retourné, ainsi que l'en-tête Location avec l'URL pointant vers l'instance de demande de tâche particulière.

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