Introducción

Cloud HCM ofrece la capacidad de extraer datos de HCM mediante la plataforma BOSS/Spectra de nueva generación subyacente.

Objetivos

Al completar este tutorial, comprenderá cómo:

  • Consultar vistas de extracción de trabajador y su jerarquía de objetos
  • Enviar y realizar un seguimiento asíncrono de las solicitudes de trabajo de extracción para recuperar los datos de jerarquía de trabajador seleccionados
  • Descargar archivos de salida de extracción

Requisitos

Antes de empezar:

  1. Póngase en contacto con Oracle CoE para asegurarse de que la plataforma Spectra, incluida la replicación de datos de RODS, esté aprovisionada en su pod.
  2. Realizar la configuración de seguridad necesaria, que incluye:
    • Configuración de seguridad de datos
    • OAuth configuración de la aplicación cliente

Casos de uso

Esta funcionalidad permite abordar los siguientes casos de uso.

Extracción completa de datos

La extracción completa de datos de trabajador puede ser una actividad puntual o periódica.

Puede recuperar toda la jerarquía de objetos o solo un subjuego de ella.

La extracción completa de datos recuperará todos los registros que coincidan con los criterios de filtrado y los archivos de salida pueden ser muy grandes.

Los objetos de fecha de vigencia se recuperarán a partir de la fecha de vigencia solicitada, donde la fecha de extracción actual es la predeterminada.

Extracción incremental de datos

La extracción incremental de datos de trabajador suele ser una actividad periódica y programada.

Puede recuperar toda la jerarquía de objetos o solo un subjuego de ella.

En este caso de uso, solo desea recuperar los objetos que se han cambiado desde la ejecución de extracción anterior, donde la primera ejecución de extracción es la base. Para lograrlo, los filtros de atributos timeUpdated se deben aplicar en cualquier nivel sujeto a detección de cambios.

La consulta de extracción de datos incremental puede aplicar criterios de filtrado adicionales. Los archivos de salida suelen ser más pequeños en comparación con la extracción completa, ya que solo contendrán delta.

Solo se recuperarán los valores actuales de los atributos.

Los objetos de fecha de vigencia se recuperarán a partir de la fecha de vigencia solicitada, donde la fecha de extracción actual es la predeterminada.

Atención:

Los registros eliminados físicamente no se devolverán mediante el filtrado por timeUpdated.

Tarea 1: Selección de una vista de extracción

Seleccione la vista de extracción que desea utilizar, según los objetos y atributos necesarios. Las vistas disponibles se muestran a continuación, junto con los objetos y atributos que se pueden extraer.

Extracciones de asignación de trabajador

Use workerAssignmentExtracts para extraer los datos de asignación de empleo de los trabajadores.

Ruta de vista workerAssignmentExtracts


Objecto Atributos Tipo de Relación
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
  • frecuencia
  • 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
  • secuencia
n/d
workerAssignmentExtract.department
  • id
  • name
  • title
  • effectiveStartDate
  • effectiveEndDate
uno a uno
workerAssignmentExtract.legalEmployer
  • id
  • name
  • effectiveStartDate
  • effectiveEndDate
uno a uno
workerAssignmentExtract.legislation
  • territoryCode
  • territoryShortName
uno a uno
workerAssignmentExtract.position
  • id
  • effectiveStartDate
  • effectiveEndDate
  • name
  • Código
uno a uno
workerAssignmentExtract.grade
  • id
  • effectiveStartDate
  • effectiveEndDate
  • name
  • Código
uno a uno
workerAssignmentExtract.location
  • id
  • effectiveStartDate
  • effectiveEndDate
  • name
  • Código
uno a uno
workerAssignmentExtract.location.mainAddress
  • id
  • effectiveStartDate
  • effectiveEndDate
  • condado
  • state
  • provincia
  • townOrCity
  • postalCode
  • countryCode
  • longPostalCode
  • addressLine1
  • addressLine2
  • addressLine3
  • addressLine4
uno a uno
workerAssignmentExtract.location.mainAddress.country
  • territoryCode
  • territoryShortName
uno a uno
workerAssignmentExtract.job
  • id
  • effectiveStartDate
  • effectiveEndDate
  • name
  • Código
  • jobFunctionCode
  • managerLevel
uno a uno
workerAssignmentExtract.job.jobFamily
  • id
  • effectiveStartDate
  • effectiveEndDate
  • name
  • Código
uno a uno
workerAssignmentExtract.collectiveAgreement
  • id
  • effectiveStartDate
  • effectiveEndDate
  • name
uno a uno
workerAssignmentExtract.personType
  • id
  • userPersonType
uno a uno
workerAssignmentExtract.workerUnion
  • id
  • effectiveStartDate
  • effectiveEndDate
  • name
uno a uno
workerAssignmentExtract.assignmentUserStatus
  • id
  • userStatus
uno a uno
workerAssignmentExtract.businessUnit
  • id
  • effectiveStartDate
  • effectiveEndDate
  • name
uno a uno
workerAssignmentExtract.account
  • codeCombinationId
  • concatenatedSegments
  • chartOfAccountsId
uno a uno
workerAssignmentExtract.ledger
  • ledgerId
  • name
uno a uno
workerAssignmentExtract.workRelationship
  • id
  • startDate
  • workerType
  • timeCreated
  • timeUpdated
uno a uno
workerAssignmentExtract.localName
  • id
  • effectiveStartDate
  • effectiveEndDate
  • lastName
  • firstName
  • displayName
  • listName
  • timeCreated
  • timeUpdated
uno a uno
workerAssignmentExtract.globalName
  • id
  • effectiveStartDate
  • effectiveEndDate
  • lastName
  • firstName
  • displayName
  • listName
  • timeCreated
  • timeUpdated
uno a uno
workerAssignmentExtract.personDetail
  • id
  • personNumber
  • effectiveStartDate
  • effectiveEndDate
  • timeCreated
  • timeUpdated
uno a uno

Extracción de información legislativa de trabajador

Use workerLegislativeInfoExtract para extraer los datos de información legislativa de los trabajadores.

Ruta de vista trabajadores/$views/workerLegislativeInfoExtract


Objecto Atributos Tipo de Relación
trabajador
  • id
n/d
worker.personDetail
  • id
  • effectiveStartDate
  • effectiveEndDate
  • personNumber
uno a uno
worker.legislativeInformation
  • id
  • effectiveStartDate
  • effectiveEndDate
  • género
  • maritalStatus
  • maritalStatusChangeDate
  • highestEducationLevel
  • timeUpdated
  • updatedBy
  • timeCreated
  • createdBy
uno a uno
worker.legislativeInformation.legislation
  • territoryCode
  • territoryShortName
uno a uno

Extracción de nombres de trabajador

Utilice workerNamesExtract para extraer los datos de nombres de los trabajadores.

Ruta de vista trabajadores/$views/workerNamesExtract


Objecto Atributos Tipo de Relación
trabajador
  • id
n/d
worker.personDetail
  • id
  • effectiveStartDate
  • effectiveEndDate
  • personNumber
uno a uno
worker.names
  • id
  • effectiveStartDate
  • effectiveEndDate
  • lastName
  • firstName
  • middleNames
  • title
  • prefijo
  • sufijo
  • knownAs
  • previousLastName
  • distinciones
  • militaryRank
  • displayName
  • fullName
  • listName
  • orderName
  • nameLanguage
  • type
  • timeUpdated
  • updatedBy
  • timeCreated
  • createdBy
entre uno y varios
worker.names.legislation
  • territoryCode
  • territoryShortName
uno a uno
worker.names.language
  • languageCode
uno a uno

Extracción de teléfonos de trabajador

Use workerPhonesExtract para extraer los datos de teléfonos de los trabajadores.

Ruta de vista trabajadores/$views/workerPhonesExtract


Objecto Atributos Tipo de Relación
trabajador
  • id
n/d
worker.personDetail
  • id
  • effectiveStartDate
  • effectiveEndDate
  • personNumber
uno a uno
worker.phones
  • id
  • type
  • primaryFlag
  • phoneNumber
  • areaCode
  • countryCodeNumber
  • extension
  • validez
  • timeUpdated
  • updatedBy
  • timeCreated
  • createdBy
entre uno y varios
worker.phones.legislation
  • territoryCode
  • territoryShortName
uno a uno

Extracción de correos electrónicos de trabajador

Use workerEmailsExtract para extraer los datos de correos electrónicos de los trabajadores.

Ruta de vista trabajadores/$views/workerEmailsExtract


Objecto Atributos Tipo de Relación
trabajador
  • id
n/d
worker.personDetail
  • id
  • effectiveStartDate
  • effectiveEndDate
  • personNumber
uno a uno
worker.emails
  • id
  • type
  • primaryFlag
  • emailAddress
  • timeUpdated
  • updatedBy
  • timeCreated
  • createdBy
entre uno y varios

Varios Idiomas:

Los atributos traducibles solo están disponibles en inglés en este momento.

Tarea 2: Preparación y Prueba de una Consulta de Extracción

Cada vista de extracción tiene una API de consulta que permite crear y probar consultas de extracción.

URL /api/boss/data/objects/ora/hcmHrCore/employment/v1/{{viewPath}}/$query
Método HTTP POST
Plantilla de solicitud
{
    "collection": {
        "limit": {{limit}},
        "offset": {{offset}},
        "sortBy": [ {{sortAttributes}} ],
        "filter": "{{topLevelFilter}}"
    },
    "fields": [ {{topLevelAttributes}} ],
    "accessors": {
        "{{childObject}}": {
            "collection": {
                "filter": "{{childLevelFilter}}"
            },
            "fields": [ {{childLevelAttributes}} ],
            "accessors": {
                {{nestedChildAccessors}}               
            }
        },
        ...
    }
}
Plantilla de Respuestas
200 OK

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

Objetos y atributos

Definición de los datos que se van a extraer, es decir, los objetos y atributos que se deben incluir. Para incluir objetos secundarios es necesario agregar accesos, mientras que para incluir campos específicos es necesario mostrarlos en la matriz fields. Consulte el ejemplo completo.

Filtrado

Definir cómo se deben filtrar los datos. Puede utilizar las siguientes expresiones para crear filtros para la consulta.

Finalidad Expresión Ejemplo
Prueba de igualdad field = value ename = 'KING'
Prueba de desigualdad field != value activeFlag != true
Prueba mayor que
prueba menor que
field > value
field < value
sal > 1999.99
hireDate < '2000-01-01'
timeUpdated> '1900-01-01T13:51:54Z'
Prueba mayor que o igual que
Prueba menor que o igual que
field >= value
field <= value< code>
sal >= 1999.99
hireDate <= '2000-01-01'
timeUpdated >= '1900-01-01T13:51:54Z'
Confrontación de patrones field LIKE 'pattern' job LIKE 'SALES%'
Prueba de afiliación field IN (value1, ..., valueN) deptno IN (10, 20, 40)
Comparación de no sensibilidad a mayúsculas/minúsculas field ~= value
field ~!= value
field ~> value
field ~< value
field ~>= value
field ~<= value
field ~LIKE 'pattern'
field ~IN (value1, ..., valueN)
ename ~= 'king'
Prueba de existencia (para relaciones de uno a varios) child[expression] assignments[startDate = null]
Conjunción lógica expression AND expression  
Disyunción lógica expression OR expression  
Negación lógica !(expression)  

Filtrado por objetos secundarios en una relación uno a uno:

En el caso de las relaciones uno a uno, puede hacer referencia a los objetos secundarios y sus atributos en la cláusula filter, al igual que a los atributos de otro objeto principal, por ejemplo legalEmployer.id in (1001, 1002).

Filtrado de objetos secundarios en una relación de uno a varios:

En el caso de relaciones de uno a varios, la prueba de existencia de la tabla anterior filtrará los padres que tengan al menos un hijo que cumpla los criterios. Sin embargo, no significa que los registros secundarios, si se recuperan, se filtren automáticamente. Si desea asegurarse de que solo obtiene registros secundarios que cumplan los criterios, también debe repetir el filtro en el nivel secundario.

Por ejemplo, si desea recuperar solo teléfonos de tipo W1, debe aplicar los siguientes filtros:


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

Filtrado por fecha efectiva:

En el caso de los objetos con fecha de vigencia, los datos entrarán en vigor a partir de la fecha actual por defecto. Para recuperar datos efectivos a partir de una fecha específica, utilice el parámetro de consulta HTTP $effectiveDate.

Por ejemplo, si desea recuperar datos efectivos a partir de 2023-01-01, utilice la siguiente URL para la consulta:

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

Ordenación

Definir cómo se deben ordenar los datos. La ordenación se expresa mediante una matriz de atributos de ordenación, incluida la dirección de ordenación (asc o desc). Por ejemplo:

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

Paginación

Defina cómo se deben paginar los datos. El cliente puede controlar la paginación proporcionando parámetros de límite y desplazamiento. Por ejemplo:

"limit": 200,
"offset": 400

El límite por defecto es 25 y el límite máximo es 1000.

El desplazamiento predeterminado es 0 e indica el comienzo de los resultados.

El atributo hasMore de nivel superior en la respuesta indica si hay más resultados que recuperar.

La paginación no debe utilizarse como una forma alternativa de extraer datos. Al consultar esta API, no hay garantía de que los datos no cambien entre las solicitudes. Utilice la API asíncrona para la extracción de datos.

Ejemplo

La siguiente consulta de extracción de ejemplo está diseñada para recuperar información de asignaciones junto con detalles de entidad legal empleadora y departamento, que:

  • Son asignaciones principales
  • Son del tipo Empleado
  • No pertenece a entidades legales empleadoras con los ID 10001 y 10002
  • Son efectivos a partir de la fecha de extracción
  • Se ha actualizado (o creado) desde la ejecución anterior

Ejemplo de solicitud

Observe el parámetro limit y la condición de atributo timeUpdated con el registro de hora de la ejecución de extracción anterior.

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

Ejemplo de respuesta

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
}

Tarea 3: Envío de una solicitud de trabajo de extracción

Una vez definida la consulta, se puede enviar una solicitud de trabajo de extracción mediante la API del programador de trabajos.

URL /api/saas-batch/jobscheduler/v1/jobRequests
Método HTTP POST
Plantilla de solicitud

Para la vista 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}}"
    }
}

Para otras vistas:

{
    "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 es un parámetro opcional que se debe proporcionar solo si desea recuperar datos con fecha de referencia de vigencia distinta de la fecha actual.

Plantilla de Respuestas

Al ejecutarse correctamente, se devolverá el código de respuesta 202, junto con la cabecera Location con la URL que apunta a la instancia de solicitud de trabajo concreta.

202 Accepted
 
Location: {{jobRequestUrl}}

Paginación al extraer datos:

Aunque puede que haya utilizado controles de paginación, es decir, parámetros limit y offset, al crear y probar la consulta, no desea que los resultados de extracción estén limitados por ellos. Elimine cualquier uso de los parámetros limit y offset al enviar una consulta.

Transfiriendo la consulta:

La consulta transferida al enviar la solicitud de trabajo de extracción debe tener el formato de una cadena JSON estándar. Realice la consulta preparada y probada mediante el punto final de API $query y:
  • Escapar de todas las comillas dobles (" → \")
  • Eliminar cualquier carácter de nueva línea (\n)
  • Reducir potencialmente otros espacios en blanco (por ejemplo, sangrías)

En general, desea ir, por ejemplo, desde:

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

Para:

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

Ejemplo

Ejemplo de solicitud

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

Ejemplo de respuesta

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

Tarea 4: Comprobación de finalización de trabajo

La comprobación de la finalización implica el uso de la API del programador de trabajos para sondear periódicamente los detalles de la solicitud de trabajo hasta que se complete correctamente o falle.

URL /api/saas-batch/jobscheduler/v1/jobRequests/{{jobRequestId}}
Método HTTP GET

Finalización correcta:

Una solicitud de trabajo se considera completada correctamente cuando se cumplen las siguientes condiciones:
Atributo Valor esperado
jobDetails.jobProgress.completed true
jobDetails.jobProgress.status SUCCEEDED

Finalización fallida:

Se considera que una solicitud de trabajo ha fallado cuando se cumple la siguiente condición. En tal caso, el atributo jobDetails.jobProgress.message contendrá el mensaje de error.
Atributo Valor esperado
jobDetails.jobProgress.status FAILED

Ejemplo

Ejemplo de solicitud

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

Ejemplos de respuesta

A continuación, se muestran las distintas etapas de un trabajo enviado. Consulte los atributos jobProgress.status y jobProgress.completed en particular.

Aceptado/En cola
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 ejecución
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"
            }
        }
    }
}
Terminado Correctamente
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"
            }
        }
    }
}

Tarea 5: Recuperando detalles de salida de extracción

Una vez que el trabajo finaliza correctamente, se puede recuperar la información del archivo de salida. Implica el uso de la API del gestor de archivos de trabajo para la instancia de solicitud de trabajo de extracción concreta.

La salida se almacena en fragmentos comprimidos.

URL /api/saas-batch/jobfilemanager/v1/jobRequests/{{jobRequestId}}/outputFiles
Método HTTP GET

tamaño de archivo:

El tamaño del archivo se devuelve en el atributo de respuesta items.fileSize y se expresa en bytes.

Enlace de contenedor:

La URL al contenido del archivo real se devuelve en el atributo de respuesta items.$context.links.enclosure.

Ejemplo

Ejemplo de solicitud

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

Ejemplo de respuesta

En el siguiente ejemplo, la salida completa se almacena en dos archivos comprimidos.

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

Tarea 6: Descarga de salida de extracción

Por último, los archivos de salida de extracción se pueden descargar mediante la API del gestor de archivos de trabajo para la instancia de solicitud de trabajo de extracción y el archivo de salida concretos.

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

Sugerencia:

Si es necesario, puede descargar archivos grandes de manera más eficiente mediante la implementación de la descarga multithread utilizando el encabezado HTTP de rango como se muestra a continuación.

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

Ejemplo

Ejemplo de solicitud

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

Ejemplos de respuesta

La respuesta real es contenido de archivo comprimido binario. Una vez descomprimida, es completa o parcial (en caso de uso de cabecera Range), carga útil JSON sin formato, con resultados completos o parciales (en caso de un fragmento de archivo) de la consulta de extracción.

Ejemplo de resultados sin comprimir completos
{"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"}}}
]}

Más recursos de aprendizaje

Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de aprendizaje gratuito en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en un explorador de Oracle Learning.

Para obtener documentación sobre el producto, visite Oracle Help Center.