Introducción
Cloud HCM ofrece la capacidad de extraer datos de HCM mediante una plataforma de nueva generación con un almacén de datos de solo lectura.
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:
- Póngase en contacto con Oracle CoE para asegurarse de que el almacén de datos de solo lectura se aprovisiona en el pod y de que los datos se están replicando.
- 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 portimeUpdated.
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 a partir de la versión 26A se muestran a continuación, junto con los objetos y atributos que se pueden extraer, agrupados por módulo.
Varios Idiomas:
Los atributos traducibles solo están disponibles en inglés en este momento.Global HR - Empleo
| Nombre del Módulo | oraHcmHrCoreEmployment |
|---|---|
| Ruta de contexto de módulo | hcmHrCore/employment |
| Nombre de vista | Atributos |
|---|---|
| actionExtracts | id actionCode startDate endDate timeCreated timeUpdated createdBy updatedBy actionName descripción |
| assignmentStatusTypeExtracts | ID assignmentStatusCode fromDate toDate activeFlag defaultFlag timeCreated timeUpdated createdBy updatedBy userStatus |
| emailExtracts | ID fromDate toDate emailAddress timeUpdated updatedBy timeCreated createdBy primaryFlag personDetail.id personDetail.personNumber personDetail.effectiveStartDate personDetail.effectiveEndDate type.lookupCode type.lookupType type.meaning |
| legislativeInformationExtracts | id effectiveStartDate effectiveEndDate género maritalStatus maritalStatusChangeDate highestEducationLevel timeUpdated updatedBy timeCreated createdBy personDetail.id personDetail.personNumber personDetail.effectiveStartDate personDetail.effectiveEndDate legislation.territoryCode legislation.territoryShortName |
| legislativeInformationHistoryExtracts | id effectiveStartDate effectiveEndDate género maritalStatus maritalStatusChangeDate highestEducationLevel timeUpdated updatedBy timeCreated createdBy personDetail.id personDetail.personNumber legislation.territoryCode legislation.territoryShortName |
| managerHierarchyExtracts | effectiveStartDate effectiveEndDate personId assignmentId managerType managerLevel managerId managerAssignmentId primaryAssignmentFlag primaryManagerFlag createdBy timeCreated updatedBy timeUpdated personAssignment.id personAssignment.effectiveStartDate personAssignment.effectiveEndDate personAssignment.effectiveSequence personAssignment.effectiveLatestChange personAssignment.assignmentType personAssignment.assignmentNumber personAssignment.primaryFlag personAssignment.businessTitle personAssignment.workAtHomeFlag personAssignment.officeBuilding personAssignment.officeFloor personAssignment.officeMailStop personAssignment.officeNumber personAssignment.primaryAssignmentFlag personAssignment.primaryWorkRelationshipFlag personAssignment.timeUpdated personAssignment.updatedBy personAssignment.timeCreated personAssignment.createdBy personAssignment.systemPersonType personAssignment.labourUnionMemberFlag personAssignment.managerFlag personAssignment.probationEndDate personAssignment.probationPeriod personAssignment.probationPeriodUnit personAssignment.normalHours personAssignment.frequency personAssignment.endTime personAssignment.startTime personAssignment.noticePeriod personAssignment.noticePeriodUOM personAssignment.workerCategory personAssignment.assignmentCategory personAssignment.hourlyPaidOrSalaried personAssignment.projectedEndDate personAssignment.projectedStartDate personAssignment.assignmentStatusType personAssignment.retirementAge personAssignment.retirementDate personAssignment.synchronizeFromPositionFlag personAssignment.fullTimeOrPartTime personAssignment.permanentAssignmentFlag personAssignment.seniorityBasis personAssignment.overtimePeriod personAssignment.adjustedFullTimeEquivalent personAssignment.annualWorkingDuration personAssignment.annualWorkingDurationUnit personAssignment.annualWorkingRatio personAssignment.standardFrequency personAssignment.standardWorkingHours personAssignment.standardAnnualWorkingDuration personAssignment.sequence personAssignment.department.id personAssignment.department.name personAssignment.department.title personAssignment.department.effectiveStartDate personAssignment.department.effectiveEndDate personAssignment.legalEmployer.id personAssignment.legalEmployer.name personAssignment.legalEmployer.effectiveStartDate personAssignment.legalEmployer.effectiveEndDate personAssignment.legislation.territoryCode personAssignment.legislation.territoryShortName personAssignment.position.id personAssignment.position.effectiveStartDate personAssignment.position.effectiveEndDate personAssignment.position.name personAssignment.position.code personAssignment.grade.id personAssignment.grade.effectiveStartDate personAssignment.grade.effectiveEndDate personAssignment.grade.name personAssignment.grade.code personAssignment.location.id personAssignment.location.effectiveStartDate personAssignment.location.effectiveEndDate personAssignment.location.name personAssignment.location.code personAssignment.location.mainAddress.id personAssignment.location.mainAddress.effectiveStartDate personAssignment.location.mainAddress.effectiveEndDate personAssignment.location.mainAddress.county personAssignment.location.mainAddress.state personAssignment.location.mainAddress.province personAssignment.location.mainAddress.townOrCity personAssignment.location.mainAddress.postalCode personAssignment.location.mainAddress.longPostalCode personAssignment.location.mainAddress.addressLine1 personAssignment.location.mainAddress.addressLine2 personAssignment.location.mainAddress.addressLine3 personAssignment.location.mainAddress.addressLine4 personAssignment.location.mainAddress.country.territoryCode personAssignment.location.mainAddress.country.territoryShortName personAssignment.job.id personAssignment.job.effectiveStartDate personAssignment.job.effectiveEndDate personAssignment.job.name personAssignment.job.code personAssignment.job.jobFunctionCode personAssignment.job.managerLevel personAssignment.job.jobFamily.id personAssignment.job.jobFamily.effectiveStartDate personAssignment.job.jobFamily.effectiveEndDate personAssignment.job.jobFamily.code personAssignment.job.jobFamily.name personAssignment.collectiveAgreement.id personAssignment.collectiveAgreement.effectiveStartDate personAssignment.collectiveAgreement.effectiveEndDate personAssignment.collectiveAgreement.name personAssignment.personType.id personAssignment.personType.userPersonType personAssignment.workerUnion.id personAssignment.workerUnion.effectiveStartDate personAssignment.workerUnion.effectiveEndDate personAssignment.workerUnion.name personAssignment.assignmentUserStatus.id personAssignment.assignmentUserStatus.userStatus personAssignment.businessUnit.id personAssignment.businessUnit.effectiveStartDate personAssignment.businessUnit.effectiveEndDate personAssignment.businessUnit.name personAssignment.account.codeCombinationId personAssignment.account.concatenatedSegments personAssignment.account.chartOfAccountsId personAssignment.ledger.ledgerId personAssignment.ledger.name personAssignment.workRelationship.id personAssignment.workRelationship.startDate personAssignment.workRelationship.workerType personAssignment.workRelationship.timeCreated personAssignment.workRelationship.timeUpdated personAssignment.localName.id personAssignment.localName.effectiveStartDate personAssignment.localName.effectiveEndDate personAssignment.localName.lastName personAssignment.localName.firstName personAssignment.localName.displayName personAssignment.localName.listName personAssignment.localName.timeCreated personAssignment.localName.timeUpdated personAssignment.globalName.id personAssignment.globalName.effectiveStartDate personAssignment.globalName.effectiveEndDate personAssignment.globalName.lastName personAssignment.globalName.firstName personAssignment.globalName.displayName personAssignment.globalName.listName personAssignment.globalName.timeCreated personAssignment.globalName.timeUpdated personAssignment.personDetail.id personAssignment.personDetail.personNumber personAssignment.personDetail.effectiveStartDate personAssignment.personDetail.effectiveEndDate personAssignment.personDetail.timeCreated personAssignment.personDetail.timeUpdated |
| nameExtracts | id effectiveStartDate effectiveEndDate lastname firstname middlenames title prefix suffix knownAs previousLastname honors militaryRank displayname fullname listname ordername type timeUpdated updatedBy timeCreated createdBy personDetail.id personDetail.personNumber personDetail.effectiveStartDate personDetail.effectiveEndDate legislation.territoryCode legislation.territoryShortname |
| nationalIdentifierExtracts | id createdBy expirationDate issueDate identifierNumber placeOfIssue timeCreated timeUpdated updatedBy personDetail.id personDetail.personNumber personDetail.effectiveStartDate personDetail.effectiveEndDate country.territoryCode country.territoryShortName type.lookupCode type.lookupType type.meaning |
| personAddressExtracts | id effectiveStartDate effectiveEndDate type primaryFlag timeCreated timeUpdated createdBy updatedBy building floorNumber townOrCity postalCode longPostalCode addressLine1 addressLine2 addressLine3 addressLine4 county state province country.territoryCode country.territoryShortName personDetail.id personDetail.personNumber personDetail.effectiveStartDate personDetail.effectiveEndDate |
| personAddressHistoryExtracts | id effectiveStartDate effectiveEndDate type primaryFlag timeCreated timeUpdated createdBy updatedBy building floorNumber townOrCity postalCode longPostalCode addressLine1 addressLine2 addressLine3 addressLine4 county state province country.territoryCode country.territoryShortName |
| personTypeExtracts | id systemPersonType activeFlag defaultFlag timeCreated timeUpdated createdBy updatedBy userPersonType |
| phoneExtracts | id fromDate toDate phoneNumber areaCode countryCodeNumber extensión validez timeUpdated updatedBy timeCreated createdBy primaryFlag personDetail.id personDetail.personNumber personDetail.effectiveStartDate personDetail.effectiveEndDate legislation.territoryCode legislation.territoryShortName type.lookupCode type.lookupType type.meaning |
| workerAssignmentExtracts | 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 frequency 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 sequence department.id department.name department.title department.effectiveStartDate department.effectiveEndDate legalEmployer.id legalEmployer.name legalEmployer.effectiveStartDate legalEmployer.effectiveEndDate legislation.territoryCode legislation.territoryShortName position.id position.ffectiveStartDate position.effectiveEndDate position.name position.code grade.id grade.effectiveStartDate grade.effectiveEndDate grade.name grade.code location.id location.effectiveStartDate location.effectiveEndDate location.name location.code location.mainAddress.id location.mainAddress.effectiveStartDate location.mainAddress.effectiveEndDate location.mainAddress.county location.mainAddress.state location.mainAddress.province location.mainAddress.townOrCity location.mainAddress.postalCode location.mainAddress.longPostalCode location.mainAddress.addressLine1 location.mainAddress.addressLine2 location.mainAddress.addressLine3 location.mainAddress.addressLine4 location.mainAddress.country.territoryCode location.mainAddress.country.territoryShortName job.id job.effectiveStartDate job.effectiveEndDate job.name job.code job.jobFunctionCode job.managerLevel job.jobFamily.id job.jobFamily.effectiveStartDate job.jobFamily.effectiveEndDate job.jobFamily.code job.jobFamily.name collectiveAgreement.id collectiveAgreement.effectiveStartDate collectiveAgreement.effectiveEndDate collectiveAgreement.name personType.id personType.userPersonType workerUnion.id workerUnion.effectiveStartDate workerUnion.effectiveEndDate workerUnion.name assignmentUserStatus.id assignmentUserStatus.userStatus businessUnit.id businessUnit.effectiveStartDate businessUnit.effectiveEndDate businessUnit.name account.codeCombinationId account.concatenatedSegments account.chartOfAccountsId ledger.ledgerId ledger.name workRelationship.id workRelationship.startDate workRelationship.workerType workRelationship.timeCreated workRelationship.timeUpdated localName.id localName.effectiveStartDate localName.effectiveEndDate localName.lastName localName.firstName localName.displayName localName.listName localName.timeCreated localName.timeUpdated globalName.id globalName.effectiveStartDate globalName.effectiveEndDate globalName.lastName globalName.firstName globalName.displayName globalName.listName globalName.timeCreated globalName.timeUpdated personDetail.id personDetail.personNumber personDetail.effectiveStartDate personDetail.effectiveEndDate personDetail.timeCreated personDetail.timeUpdated |
| workerAssignmentHistoryExtracts | 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 frequency 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 sequence department.id legalEmployer.id legislation.territoryCode legislation.territoryShortName position.id grade.id location.id location.mainAddress.id location.mainAddress.country.territoryCode location.mainAddress.country.territoryShortName job.id job.jobFamily.id collectiveAgreement.id personType.id personType.userPersonType workerUnion.id assignmentUserStatus.id assignmentUserStatus.userStatus businessUnit.id account.codeCombinationId account.concatenatedSegments account.chartOfAccountsId ledger.ledgerId ledger.name workRelationship.id localName.id globalName.id personDetail.id personDetail.personNumber |
| workRelationshipExtracts | id startDate workerType timeCreated timeUpdated workerNumber primaryFlag createdBy updatedBy readyToConvertFlag enterpriseSeniorityDate legalEmployerSeniorityDate onMilitaryServiceFlag lastWorkingDate terminationDate notificationDate projectedTerminationDate legalEmployer.id legalEmployer.name legalEmployer.effectiveStartDate legalEmployer.effectiveEndDate legislation.territoryCode legislation.territoryShortName personDetail.id personDetail.personNumber personDetail.effectiveStartDate personDetail.effectiveEndDate |
Global HR - Estructuras de trabajo
| Nombre del Módulo | oraHcmHrCoreWorkStructures |
|---|---|
| Ruta de contexto de módulo | hcmHrCore/workStructures |
| Nombre de vista | Atributos |
|---|---|
| gradeExtracts | id createdBy effectiveStartDate effectiveEndDate código timeCreated timeUpdated updatedBy estado nombre |
| gradeHistoryExtracts | id createdBy effectiveStartDate effectiveEndDate código timeCreated timeUpdated updatedBy estado nombre |
| jobExtracts | ID nombre effectiveStartDate effectiveEndDate código estado createdBy timeCreated updatedBy timeUpdated |
| jobFamilyExtracts | ID código nombre effectiveStartDate effectiveEndDate estado timeUpdated updatedBy timeCreated createdBy |
| jobFamilyHistoryExtracts | ID código nombre effectiveStartDate effectiveEndDate estado timeUpdated updatedBy timeCreated createdBy |
| jobHistoryExtracts | ID nombre effectiveStartDate effectiveEndDate código estado createdBy timeCreated updatedBy timeUpdated |
| locationExtracts | ID createdBy effectiveStartDate effectiveEndDate código timeCreated timeUpdated updatedBy estado countryCode employeeLocationFlag shipToSiteFlag receivingSiteFlag billToSiteFlag officeSiteFlag detailCreatedBy detailTimeCreated detailUpdatedBy detailTimeUpdated timezoneCode descripción nombre |
| locationHistoryExtracts | ID createdBy effectiveStartDate effectiveEndDate código timeCreated timeUpdated updatedBy estado countryCode employeeLocationFlag shipToSiteFlag receivingSiteFlag billToSiteFlag officeSiteFlag detailCreatedBy detailTimeCreated detailUpdatedBy detailTimeUpdated timezoneCode descripción nombre |
| positionExtracts | ID effectiveStartDate effectiveEndDate código estado hiringStatus createdBy timeCreated updatedBy timeUpdated nombre |
| positionHistoryExtracts | ID effectiveStartDate effectiveEndDate código estado hiringStatus createdBy timeCreated updatedBy timeUpdated nombre |
HCM Common - Eventos
| Nombre del Módulo | oraHcmHrCoreEvents |
|---|---|
| Ruta de contexto de módulo | hcmHrCore/events |
| Nombre de vista | Atributos |
|---|---|
| objectChangeExtracts | id sourceObjectName groupSequence operationType dateEffectiveMode effectiveDate keyAttribute1Name keyAttribute1DataType keyAttribute1StringValue keyAttribute1NumberValue keyAttribute1DateValue keyAttribute2Name keyAttribute2DataType keyAttribute2StringValue keyAttribute2NumberValue keyAttribute2DateValue keyAttribute3Name keyAttribute3DataType keyAttribute3StringValue keyAttribute3NumberValue keyAttribute3DateValue purgeDate createdBy timeCreated updatedBy timeUpdated changeComponents.id changeComponents.physicalType changeComponents.logicalType changeComponents.oldEffectiveStartDate changeComponents.newEffectiveStartDate changeComponents.oldEffectiveEndDate changeComponents.newEffectiveEndDate changeComponents.oldEffectiveSequence changeComponents.newEffectiveSequence changeComponents.createdBy changeComponents.timeCreated changeComponents.updatedBy changeComponents.timeUpdated changeComponents.changedAttributes.changedAttributesXml |
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/{{moduleContextPath}}/v1/{{viewName}}/$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 |
sal > 1999.99 |
| Prueba mayor que o igual que Prueba menor que o igual que |
field >= value |
sal >= 1999.99 |
| 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 |
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 ejemplolegalEmployer.id in (1001, 1002).
Filtrado de objetos secundarios en una relación de uno a varios:
En casos raros de relaciones de uno a muchos indicados por el nombre del descriptor de acceso plural, 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 los componentes de cambio del tipo físico UPDATE, debe aplicar los siguientes filtros en la consulta de cambios de objeto:
{
"collection": {
"filter": "changeComponents[physicalType = 'UPDATE']"
},
"accessors": {
"changeComponents": {
"collection": {
"filter": "physicalType = 'UPDATE'"
},
...
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
10001y10002 - 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 |
{
"jobDefinitionName": "AsyncDataExtraction",
"serviceName": "boss",
"requestParameters": {
"boss.module": "{{moduleName}}",
"boss.resource.name": "{{viewName}}",
"boss.resource.version": "v1",
"boss.outputFormat": "json",
"boss.request.system.param.effectiveDate": "{{effectiveDate}}",
"boss.advancedQuery": "{{query}}"
}
}
|
| Plantilla de Respuestas |
Al ejecutarse correctamente, se devolverá el código de respuesta 202 Accepted
Location: {{jobRequestUrl}}
|
Paginación al extraer datos:
Aunque puede que haya utilizado controles de paginación, es decir, parámetroslimit 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 atributojobDetails.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 respuestaitems.fileSize y se expresa en bytes.
Enlace de contenedor:
La URL al contenido del archivo real se devuelve en el atributo de respuestaitems.$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.
Extraer datos del almacén de datos de solo lectura de HCM
G38789-05
Enero de 2026