Einführung

Cloud HCM bietet die Möglichkeit, Daten aus HCM mit der zugrunde liegenden BOSS/Spectra-Plattform der neuen Generation zu extrahieren.

Ziele

Nach Abschluss dieses Tutorials erfahren Sie, wie Sie:

  • Worker-Extraktionsansichten und ihre Hierarchie von Objekten abfragen
  • Extraktionsjobanforderungen zum Abrufen ausgewählter Mitarbeiterhierarchiedaten asynchron weiterleiten und verfolgen
  • Exportausgabedateien herunterladen

Voraussetzungen

Bevor Sie beginnen:

  1. Wenden Sie sich an Oracle CoE, um sicherzustellen, dass die Spectra-Plattform, einschließlich der RODS-Datenreplikation, in Ihrem Pod bereitgestellt wird
  2. Führen Sie die erforderliche Sicherheitskonfiguration aus, einschließlich:
    • Datensicherheit einrichten
    • OAuth Client-App-Setup

Anwendungsfälle

Mit dieser Funktion können Sie die folgenden Anwendungsfälle bearbeiten.

Vollständige Datenextraktion

Die vollständige Extraktion von Mitarbeiterdaten kann eine einmalige oder periodische Aktivität sein.

Sie können die gesamte Objekthierarchie oder nur eine Teilmenge davon abrufen.

Die vollständige Datenextraktion ruft alle Datensätze ab, die den Filterkriterien entsprechen, und die Ausgabedateien können sehr groß sein.

Datumsabhängige Objekte werden ab dem angeforderten Gültigkeitsdatum abgerufen, wobei das aktuelle Extraktionsdatum der Standardwert ist.

Inkrementelle Datenextraktion

Die inkrementelle Extraktion von Mitarbeiterdaten ist in der Regel eine periodische, geplante Aktivität.

Sie können die gesamte Objekthierarchie oder nur eine Teilmenge davon abrufen.

In diesem Anwendungsfall möchten Sie nur Objekte abrufen, die seit der vorherigen Extraktionsausführung geändert wurden, wobei die erste Extraktionsausführung die Baseline ist. Um dies zu erreichen, müssen timeUpdated-Attributfilter auf jeder Ebene angewendet werden, die der Änderungserkennung unterliegt.

Inkrementelle Datenextraktionsabfrage kann zusätzliche Filterkriterien anwenden. Ausgabedateien sind im Allgemeinen kleiner als die vollständige Extraktion, da sie nur Delta enthalten.

Es werden nur aktuelle Werte von Attributen abgerufen.

Datumsabhängige Objekte werden ab dem angeforderten Gültigkeitsdatum abgerufen, wobei das aktuelle Extraktionsdatum der Standardwert ist.

Achtung:

Physisch gelöschte Datensätze werden nicht durch Filtern nach timeUpdated zurückgegeben.

Aufgabe 1: Extraktionsansicht auswählen

Wählen Sie abhängig von den erforderlichen Objekten und Attributen aus, welche Extraktionsansicht verwendet werden soll. Die verfügbaren Ansichten sowie die Objekte und Attribute, die extrahiert werden können, sind unten aufgeführt.

Mitarbeiterarbeitsstelle exportieren

Mit workerAssignmentExtracts können Sie Arbeitsstellendaten von Mitarbeitern extrahieren.

View-Pfad workerAssignmentExtracts


Objekt Attribute Beziehungstyp
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
  • Häufigkeit
  • 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
  • Sequenz
n/v
workerAssignmentExtract.department
  • ID
  • name
  • title
  • effectiveStartDate
  • effectiveEndDate
Eins-zu-Eins
workerAssignmentExtract.legalEmployer
  • ID
  • name
  • effectiveStartDate
  • effectiveEndDate
Eins-zu-Eins
workerAssignmentExtract.legislation
  • territoryCode
  • territoryShortName
Eins-zu-Eins
workerAssignmentExtract.position
  • ID
  • effectiveStartDate
  • effectiveEndDate
  • name
  • Code
Eins-zu-Eins
workerAssignmentExtract.grade
  • ID
  • effectiveStartDate
  • effectiveEndDate
  • name
  • Code
Eins-zu-Eins
workerAssignmentExtract.location
  • ID
  • effectiveStartDate
  • effectiveEndDate
  • name
  • Code
Eins-zu-Eins
workerAssignmentExtract.location.mainAddress
  • ID
  • effectiveStartDate
  • effectiveEndDate
  • Kreis
  • Status
  • Bezirk
  • townOrCity
  • postalCode
  • countryCode
  • longPostalCode
  • addressLine1
  • addressLine2
  • addressLine3
  • addressLine4
Eins-zu-Eins
workerAssignmentExtract.location.mainAddress.country
  • territoryCode
  • territoryShortName
Eins-zu-Eins
workerAssignmentExtract.job
  • ID
  • effectiveStartDate
  • effectiveEndDate
  • name
  • Code
  • jobFunctionCode
  • managerLevel
Eins-zu-Eins
workerAssignmentExtract.job.jobFamily
  • ID
  • effectiveStartDate
  • effectiveEndDate
  • name
  • Code
Eins-zu-Eins
workerAssignmentExtract.collectiveAgreement
  • ID
  • effectiveStartDate
  • effectiveEndDate
  • name
Eins-zu-Eins
workerAssignmentExtract.personType
  • ID
  • userPersonType
Eins-zu-Eins
workerAssignmentExtract.workerUnion
  • ID
  • effectiveStartDate
  • effectiveEndDate
  • name
Eins-zu-Eins
workerAssignmentExtract.assignmentUserStatus
  • ID
  • userStatus
Eins-zu-Eins
workerAssignmentExtract.businessUnit
  • ID
  • effectiveStartDate
  • effectiveEndDate
  • name
Eins-zu-Eins
workerAssignmentExtract.account
  • codeCombinationId
  • concatenatedSegments
  • chartOfAccountsId
Eins-zu-Eins
workerAssignmentExtract.ledger
  • ledgerId
  • name
Eins-zu-Eins
workerAssignmentExtract.workRelationship
  • ID
  • startDate
  • workerType
  • timeCreated
  • timeUpdated
Eins-zu-Eins
workerAssignmentExtract.localName
  • ID
  • effectiveStartDate
  • effectiveEndDate
  • lastName
  • firstName
  • displayName
  • listName
  • timeCreated
  • timeUpdated
Eins-zu-Eins
workerAssignmentExtract.globalName
  • ID
  • effectiveStartDate
  • effectiveEndDate
  • lastName
  • firstName
  • displayName
  • listName
  • timeCreated
  • timeUpdated
Eins-zu-Eins
workerAssignmentExtract.personDetail
  • ID
  • personNumber
  • effectiveStartDate
  • effectiveEndDate
  • timeCreated
  • timeUpdated
Eins-zu-Eins

Mitarbeitergesetzgebungsinformationen exportieren

Mit workerLegislativeInfoExtract können Sie Gesetzgebungsinformationen von Mitarbeitern extrahieren.

View-Pfad Mitarbeiter/$views/workerLegislativeInfoExtract


Objekt Attribute Beziehungstyp
Worker
  • ID
n/v
worker.personDetail
  • ID
  • effectiveStartDate
  • effectiveEndDate
  • personNumber
Eins-zu-Eins
worker.legislativeInformation
  • ID
  • effectiveStartDate
  • effectiveEndDate
  • Geschlecht
  • maritalStatus
  • maritalStatusChangeDate
  • highestEducationLevel
  • timeUpdated
  • updatedBy
  • timeCreated
  • createdBy
Eins-zu-Eins
worker.legislativeInformation.legislation
  • territoryCode
  • territoryShortName
Eins-zu-Eins

Mitarbeiternamen extrahieren

Verwenden Sie workerNamesExtract, um Mitarbeiternamensdaten zu extrahieren.

View-Pfad Mitarbeiter/$views/workerNamesExtract


Objekt Attribute Beziehungstyp
Worker
  • ID
n/v
worker.personDetail
  • ID
  • effectiveStartDate
  • effectiveEndDate
  • personNumber
Eins-zu-Eins
worker.names
  • ID
  • effectiveStartDate
  • effectiveEndDate
  • lastName
  • firstName
  • middleNames
  • title
  • prefix
  • Suffix
  • knownAs
  • previousLastName
  • Auszeichnungen
  • militaryRank
  • displayName
  • fullName
  • listName
  • orderName
  • nameLanguage
  • type
  • timeUpdated
  • updatedBy
  • timeCreated
  • createdBy
n:n
worker.names.legislation
  • territoryCode
  • territoryShortName
Eins-zu-Eins
worker.names.language
  • languageCode
Eins-zu-Eins

Mitarbeitertelefone exportieren

Mit workerPhonesExtract können Sie Telefondaten von Mitarbeitern extrahieren.

View-Pfad Mitarbeiter/$views/workerPhonesExtract


Objekt Attribute Beziehungstyp
Worker
  • ID
n/v
worker.personDetail
  • ID
  • effectiveStartDate
  • effectiveEndDate
  • personNumber
Eins-zu-Eins
worker.phones
  • ID
  • type
  • primaryFlag
  • phoneNumber
  • areaCode
  • countryCodeNumber
  • extension
  • Gültigkeit
  • timeUpdated
  • updatedBy
  • timeCreated
  • createdBy
n:n
worker.phones.legislation
  • territoryCode
  • territoryShortName
Eins-zu-Eins

Mitarbeiter-E-Mails exportieren

Mit workerEmailsExtract können Sie E-Mail-Daten von Mitarbeitern extrahieren.

View-Pfad Mitarbeiter/$views/workerEmailsExtract


Objekt Attribute Beziehungstyp
Worker
  • ID
n/v
worker.personDetail
  • ID
  • effectiveStartDate
  • effectiveEndDate
  • personNumber
Eins-zu-Eins
worker.emails
  • ID
  • type
  • primaryFlag
  • emailAddress
  • timeUpdated
  • updatedBy
  • timeCreated
  • createdBy
Eins-zu-Viele

Mehrere Sprachen :

Übersetzbare Attribute sind derzeit nur auf Englisch verfügbar.

Aufgabe 2: Extraktionsabfragen vorbereiten und testen

Jede Extraktionsansicht verfügt über eine Abfrage-API, mit der Extraktionsabfragen erstellt und getestet werden können.

URL /api/boss/data/objects/ora/hcmHrCore/employment/v1/{{viewPath}}/$query
HTTP-Methode POST
Anforderungsvorlage
{
    "collection": {
        "limit": {{limit}},
        "offset": {{offset}},
        "sortBy": [ {{sortAttributes}} ],
        "filter": "{{topLevelFilter}}"
    },
    "fields": [ {{topLevelAttributes}} ],
    "accessors": {
        "{{childObject}}": {
            "collection": {
                "filter": "{{childLevelFilter}}"
            },
            "fields": [ {{childLevelAttributes}} ],
            "accessors": {
                {{nestedChildAccessors}}               
            }
        },
        ...
    }
}
Antwortvorlage
200 OK

{
	"items": [
		{{items}}
	],
	"hasMore": {{hasMore}}
}

Objekte und Attribute

Definieren Sie, welche Daten extrahiert werden sollen, d.h. welche Objekte und Attribute einbezogen werden sollen. Um untergeordnete Objekte einzubeziehen, müssen Accessor hinzugefügt werden, während bestimmte Felder im Array fields aufgelistet werden müssen. Siehe vollständiges Beispiel.

Filtern

Definieren Sie, wie Daten gefiltert werden sollen. Sie können die folgenden Ausdrücke verwenden, um Filter für Ihre Abfrage zu erstellen.

Zweck Ausdruck Beispiel
Gleichheitstest field = value ename = 'KING'
Ungleichheitstest field != value activeFlag != true
Größer als ein Test
Weniger als ein Test
field > value
field < value
sal > 1999.99
hireDate < '2000-01-01'
timeUpdated> '1900-01-01T13:51:54Z'
Größer als oder gleichwertig zu testen
Weniger als oder gleichwertig zu testen
field >= value
field <= value< code>
sal >= 1999.99
hireDate <= '2000-01-01'
timeUpdated >= '1900-01-01T13:51:54Z'
Musterabgleich field LIKE 'pattern' job LIKE 'SALES%'
Mitgliedschaftstest field IN (value1, ..., valueN) deptno IN (10, 20, 40)
Vergleich der Groß-/Kleinschreibung ignorieren field ~= value
field ~!= value
field ~> value
field ~< value
field ~>= value
field ~<= value
field ~LIKE 'pattern'
field ~IN (value1, ..., valueN)
ename ~= 'king'
Existenztest (für Eins-zu-Viele-Beziehungen) child[expression] assignments[startDate = null]
Logische UND-Verknüpfung expression AND expression  
Logische ODER-Verknüpfung expression OR expression  
Logische Negation !(expression)  

Nach untergeordneten Objekten in einer Eins-zu-Eins-Beziehung filtern:

Bei Eins-zu-Eins-Beziehungen können Sie auf untergeordnete Objekte und deren Attribute in der Filterklausel genauso wie auf die Attribute anderer übergeordneter Objekte verweisen, z.B. legalEmployer.id in (1001, 1002).

Untergeordnete Objekte in Eins-zu-viele-Beziehungen filtern:

Im Falle von Eins-zu-Viele-Beziehungen filtert der Existenztest in der obigen Tabelle Eltern, die mindestens ein Kind haben, das die Kriterien erfüllt. Dies bedeutet jedoch nicht, dass untergeordnete Datensätze automatisch gefiltert werden, wenn sie abgerufen werden. Wenn Sie sicherstellen möchten, dass Sie nur untergeordnete Datensätze erhalten, die den Kriterien entsprechen, müssen Sie den Filter auch auf der untergeordneten Ebene wiederholen.

Beispiel: Wenn Sie nur Telefone des Typs W1 abrufen möchten, müssen Sie die folgenden Filter anwenden:


{
    "collection": {
        "filter": "phones[type = 'W1']"
    },
    "accessors": {
        "phones": {
            "collection": {
                "filter": "type = 'W1'"
            },
...
                

Nach Gültigkeitsdatum filtern:

Bei datumsabhängigen Objekten erhalten Sie standardmäßig Daten, die ab dem aktuellen Datum gültig sind. Um Daten abzurufen, die ab einem bestimmten Datum gültig sind, verwenden Sie den HTTP-Abfrageparameter $effectiveDate.

Beispiel: Wenn Sie Daten abrufen möchten, die ab 2023-01-01 gültig sind, verwenden Sie die folgende URL für Ihre Abfrage:

/api/boss/data/objects/ora/hcmHrCore/employment/v1/{{viewPath}}/$query?$effectiveDate=2023-01-01

Sortierung

Definieren Sie, wie Daten sortiert werden sollen. Die Sortierung wird durch ein Array von Sortierattributen einschließlich der Sortierrichtung (asc oder desc) ausgedrückt. Beispiel:

"sortBy": [
    {
        "totalAmount": "desc"
    },
    {
        "paidAmount": "asc"
    }
]

Paging

Legen Sie fest, wie Daten paginiert werden sollen. Der Client kann das Paging steuern, indem er Grenz- und Offsetparameter bereitstellt. Beispiel:

"limit": 200,
"offset": 400

Das Standardlimit ist 25 und das maximale Limit ist 1000.

Der Standard-Offset ist 0 und gibt den Anfang der Ergebnisse an.

Das hasMore-Attribut der obersten Ebene in der Antwort gibt an, ob weitere Ergebnisse abgerufen werden müssen.

Paginierung sollte nicht als alternative Methode zum Extrahieren von Daten verwendet werden. Bei der Abfrage dieser API gibt es keine Garantie, dass sich die Daten zwischen den Anforderungen nicht ändern. Verwenden Sie die asynchrone API für die Datenextraktion.

Beispiel

Die folgende Beispielextraktabfrage soll Arbeitsstelleninformationen zusammen mit Arbeitgeber- und Abteilungsdetails abrufen, die:

  • Sind primäre Arbeitsstellen
  • Sind vom Typ "Mitarbeiter"
  • Gehören Sie nicht zu Arbeitgebern mit den IDs 10001 und 10002
  • Gültig ab Extraktionsdatum
  • Seit der vorherigen Ausführung aktualisiert (oder erstellt)

Anforderungsbeispiel

Beachten Sie den Parameter limit und die Attributbedingung timeUpdated mit dem Zeitstempel des vorherigen Exportlaufs.

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

Antwortbeispiel

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
}

Aufgabe 3: Exportjobanforderungen weiterleiten

Nachdem die Abfrage definiert wurde, kann eine Exportjobanforderung mit der Job Scheduler-API weitergeleitet werden.

URL /api/saas-batch/jobscheduler/v1/jobRequests
HTTP-Methode POST
Anforderungsvorlage

Für die Ansicht 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}}"
    }
}

Für andere Ansichten:

{
    "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 ist ein optionaler Parameter, der nur angegeben werden sollte, wenn Sie Daten abrufen möchten, deren Gültigkeitsstichtag vom aktuellen Datum abweicht.

Antwortvorlage

Bei erfolgreicher Weiterleitung wird der 202-Antwortcode zusammen mit dem Location-Header zurückgegeben, wobei die URL auf die jeweilige Jobanforderungsinstanz verweist.

202 Accepted
 
Location: {{jobRequestUrl}}

Paging beim Extrahieren von Daten:

Sie haben zwar Paginierungssteuerelemente verwendet, d.h. die Parameter limit und offset. Beim Erstellen und Testen der Abfrage möchten Sie jedoch nicht, dass die Extraktionsergebnisse von ihnen eingeschränkt werden. Entfernen Sie die Verwendung der Parameter limit und offset beim Weiterleiten einer Abfrage.

Abfrage übergeben:

Die beim Weiterleiten der Extraktionsjobanforderung übergebene Abfrage muss eine JSON-Standardzeichenfolge aufweisen. Führen Sie die mit dem API-Endpunkt $query vorbereitete und getestete Abfrage aus, und führen Sie folgende Schritte aus:
  • Alle doppelten Anführungszeichen (" → \") entweichen
  • Alle Zeilenvorschubzeichen entfernen (\n)
  • Potenzielle Reduzierung anderer Leerzeichen (z.B. Einrückungen)

Insgesamt möchten Sie z.B. von:

{
    "collection": {
        "limit": 100,
        "filter": "totalAmount > 10000"
    },
    "fields": [ "id", "totalAmount" ]
}

Zweck:

{\"collection\": {\"filter\": \"totalAmount > 10000\"},\"fields\": [ \"id\", \"totalAmount\" ]}

Beispiel

Anforderungsbeispiel

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\" ]}}}"
    }
}

Antwortbeispiel

202 Accepted
 
Location: https://example.com/api/saas-batch/jobscheduler/v1/jobRequests/42075

Aufgabe 4: Jobabschluss prüfen

Bei der Prüfung auf Abschluss wird die Job Scheduler-API verwendet, um die Jobanforderungsdetails regelmäßig abzufragen, bis sie erfolgreich abgeschlossen wurden oder nicht erfolgreich waren.

URL /api/saas-batch/jobscheduler/v1/jobRequests/{{jobRequestId}}
HTTP-Methode GET

Erfolgreicher Abschluss:

Eine Jobanforderung wird als erfolgreich abgeschlossen betrachtet, wenn die folgenden Bedingungen erfüllt sind:
Attribut Erwarteter Wert
jobDetails.jobProgress.completed true
jobDetails.jobProgress.status SUCCEEDED

Nicht erfolgreich abgeschlossen:

Eine Jobanforderung gilt als nicht erfolgreich, wenn die folgende Bedingung erfüllt ist. In diesem Fall enthält das Attribut jobDetails.jobProgress.message die Fehlermeldung.
Attribut Erwarteter Wert
jobDetails.jobProgress.status FAILED

Beispiel

Anforderungsbeispiel

GET /api/saas-batch/jobscheduler/v1/jobRequests/42075

Antwortbeispiele

Unter Antworten werden verschiedene Phasen eines weitergeleiteten Jobs angezeigt. Siehe insbesondere die Attribute jobProgress.status und jobProgress.completed.

Akzeptiert/in Queue gestellt
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"
            }
        }
    }
}
Wird ausgeführt
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"
            }
        }
    }
}
Erfolgreich beendet
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"
            }
        }
    }
}

Aufgabe 5: Exportausgabedetails abrufen

Nachdem der Job erfolgreich abgeschlossen wurde, können die Informationen zur Ausgabedatei abgerufen werden. Dabei wird die Job File Manager-API für die jeweilige Instanz der Exportjobanforderung verwendet.

Die Ausgabe wird in komprimierten Blöcken gespeichert.

URL /api/saas-batch/jobfilemanager/v1/jobRequests/{{jobRequestId}}/outputFiles
HTTP-Methode GET

Dateigröße:

Die Dateigröße wird im Antwortattribut items.fileSize zurückgegeben und in Byte ausgedrückt.

Anlagenlink:

Die URL zum tatsächlichen Dateiinhalt wird im Antwortattribut items.$context.links.enclosure zurückgegeben.

Beispiel

Anforderungsbeispiel

GET /api/saas-batch/jobfilemanager/v1/jobRequests/42075/outputFiles

Antwortbeispiel

Im folgenden Beispiel wird die vollständige Ausgabe in zwei komprimierten Dateien gespeichert.

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

Aufgabe 6: Exportausgabe herunterladen

Die Exportausgabedateien können schließlich mit der Job File Manager-API für die jeweilige Instanz und Ausgabedatei der Exportjobanforderung heruntergeladen werden.

URL /api/saas-batch/jobfilemanager/v1/jobRequests/{{jobRequestId}}/outputFiles/{{fileName}}/content
HTTP-Methode GET

Tipp:

Bei Bedarf können Sie große Dateien effizienter herunterladen, indem Sie Multithread-Downloads mit dem Range-HTTP-Header wie unten implementieren.

Range: {{startByte}}-{{endByte}}/{{fileSize}}

Beispiel

Anforderungsbeispiel

GET /api/saas-batch/jobfilemanager/v1/jobRequests/42075/outputFiles/result_42075.json/content

Antwortbeispiele

Tatsächliche Antwort ist binär komprimierter Dateiinhalt. Nach der Dekomprimierung ist es vollständig oder teilweise (im Falle der Verwendung des Range-Headers), unformatierte JSON-Payload, mit vollständigen oder teilweisen (im Falle eines File-Chunk) Ergebnissen der Extraktionsabfrage.

Beispiel für vollständige nicht komprimierte Ergebnisse
{"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"}}}
]}

Weitere Lernressourcen

Sehen Sie sich weitere Übungen zu docs.oracle.com/learn an, oder greifen Sie auf weitere kostenlose Lerninhalte im Oracle Learning YouTube-Kanal zu. Besuchen Sie außerdem education.oracle.com/learning-explorer, um ein Oracle Learning Explorer zu werden.

Die Produktdokumentation finden Sie im Oracle Help Center.