Introdução
O Cloud HCM oferece um recurso para extrair dados do HCM usando a plataforma de nova geração com armazenamento de dados somente leitura.
Objetivos
Ao concluir este tutorial, você entenderá como:
- Consultar views de extração do Worker e sua hierarquia de objetos
- Submeta e rastreie de forma assíncrona solicitações de job de extração para recuperação dos dados da hierarquia do Colaborador selecionado
- Fazer download de arquivos de saída de extração
Pré-requisitos
Antes de começar:
- Entre em contato com o Oracle CoE para garantir que o armazenamento de dados somente leitura seja provisionado no seu pod e que seus dados estejam sendo replicados
- Executar a configuração de segurança necessária, incluindo:
- Configuração de segurança de dados
- Configuração do aplicativo cliente OAuth
Casos de Uso
Essa funcionalidade permite abordar os seguintes casos de uso.
Extração Completa de Dados
A extração completa de dados do Colaborador pode ser uma atividade única ou periódica.
Você pode recuperar toda a hierarquia de objetos ou apenas um subconjunto dela.
A extração completa de dados recuperará todos os registros que correspondem aos critérios de filtragem e os arquivos de saída podem ser muito grandes.
Os objetos de data efetiva serão recuperados a partir da data efetiva solicitada, em que a data de extração atual é o padrão.
Extração Incremental de Dados
A extração incremental de dados do Colaborador geralmente é uma atividade periódica e programada.
Você pode recuperar toda a hierarquia de objetos ou apenas um subconjunto dela.
Neste caso de uso, você deseja recuperar somente objetos que foram alterados desde a execução de extração anterior, em que a primeira execução de extração é a linha de base. Para isso, os filtros de atributos timeUpdated precisam ser aplicados em qualquer nível que esteja sujeito à detecção de alterações.
A consulta de extração de dados incrementais pode aplicar critérios de filtragem adicionais. Os arquivos de saída normalmente serão menores em comparação com a extração completa, pois conterão apenas delta.
Somente os valores atuais dos atributos serão recuperados.
Os objetos de data efetiva serão recuperados a partir da data efetiva solicitada, em que a data de extração atual é o padrão.
Atenção:
Os registros excluídos fisicamente não serão retornados usando a filtragem portimeUpdated.
Tarefa 1: Escolhendo uma View de Extração
Escolha qual view de extração usar, dependendo dos objetos e atributos necessários. As visualizações disponíveis a partir da versão 26A são listadas abaixo, juntamente com os objetos e atributos que podem ser extraídos, agrupados por módulo.
Diversos Idiomas:
Os atributos traduzíveis só estão disponíveis em inglês neste momento.RH Global - Emprego
| Nome do Módulo | oraHcmHrCoreEmployment |
|---|---|
| Caminho de Contexto do Módulo | hcmHrCore/employment |
| Nome da View | Atributos |
|---|---|
| actionExtracts | descrição do id actionCode startDate endDate timeCreated timeUpdated createdBy updatedBy actionName |
| 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 sexo maritalStatus maritalStatusChangeDate highestEducationLevel timeUpdated updatedBy timeCreated createdBy personDetail.id personDetail.personNumber personDetail.effectiveStartDate personDetail.effectiveEndDate legislation.territoryCode legislation.territoryShortName |
| legislativeInformationHistoryExtracts | id effectiveStartDate effectiveEndDate sexo 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 construção 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 extensão validity 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 |
RH Global - Estruturas de Trabalho
| Nome do Módulo | oraHcmHrCoreWorkStructures |
|---|---|
| Caminho de Contexto do Módulo | hcmHrCore/workStructures |
| Nome da View | Atributos |
|---|---|
| gradeExtracts | id createdBy effectiveStartDate effectiveEndDate código timeCreated timeUpdated updatedBy nome do status |
| gradeHistoryExtracts | id createdBy effectiveStartDate effectiveEndDate código timeCreated timeUpdated updatedBy nome do status |
| jobExtracts | id status do código effectiveStartDate effectiveEndDate nome createdBy timeCreated updatedBy timeUpdated |
| jobFamilyExtracts | id nome do código effectiveStartDate effectiveEndDate status timeUpdated updatedBy timeCreated createdBy |
| jobFamilyHistoryExtracts | id nome do código effectiveStartDate effectiveEndDate status timeUpdated updatedBy timeCreated createdBy |
| jobHistoryExtracts | id status do código effectiveStartDate effectiveEndDate nome createdBy timeCreated updatedBy timeUpdated |
| locationExtracts | id createdBy effectiveStartDate effectiveEndDate código timeCreated timeUpdated updatedBy status countryCode employeeLocationFlag shipToSiteFlag receivingSiteFlag billToSiteFlag officeSiteFlag detailCreatedBy detailTimeCreated detailUpdatedBy detailTimeUpdated timezoneCode descrição nome |
| locationHistoryExtracts | id createdBy effectiveStartDate effectiveEndDate código timeCreated timeUpdated updatedBy status countryCode employeeLocationFlag shipToSiteFlag receivingSiteFlag billToSiteFlag officeSiteFlag detailCreatedBy detailTimeCreated detailUpdatedBy detailTimeUpdated timezoneCode descrição nome |
| positionExtracts | nome effectiveStartDate effectiveEndDate código status hiringStatus createdBy timeCreated updatedBy timeUpdated |
| positionHistoryExtracts | nome effectiveStartDate effectiveEndDate código status hiringStatus createdBy timeCreated updatedBy timeUpdated |
HCM Comum - Eventos
| Nome do Módulo | oraHcmHrCoreEvents |
|---|---|
| Caminho de Contexto do Módulo | hcmHrCore/events |
| Nome da View | 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 |
Tarefa 2: Preparando e Testando uma Consulta de Extração
Cada view de extração tem uma API de consulta que permite criar e testar consultas de extração.
| URL | /api/boss/data/objects/ora/{{moduleContextPath}}/v1/{{viewName}}/$query |
|---|---|
| Método HTTP | POST |
| Modelo de solicitação |
{
"collection": {
"limit": {{limit}},
"offset": {{offset}},
"sortBy": [ {{sortAttributes}} ],
"filter": "{{topLevelFilter}}"
},
"fields": [ {{topLevelAttributes}} ],
"accessors": {
"{{childObject}}": {
"collection": {
"filter": "{{childLevelFilter}}"
},
"fields": [ {{childLevelAttributes}} ],
"accessors": {
{{nestedChildAccessors}}
}
},
...
}
}
|
| Modelo de resposta |
200 OK
{
"items": [
{{items}}
],
"hasMore": {{hasMore}}
}
|
Objetos e Atributos
Defina quais dados extrair, ou seja, quais objetos e atributos devem ser incluídos. A inclusão de objetos filhos requer a adição de acessores, enquanto a inclusão de campos específicos requer a listagem deles no array fields. Consulte o exemplo completo.
Filtragem
Definir como os dados devem ser filtrados. Você pode usar as expressões a seguir para criar filtros para sua consulta.
| Objetivo | Expressão | Exemplo |
|---|---|---|
| Teste de igualdade | field = value |
ename = 'KING' |
| Teste de desigualdade | field != value |
activeFlag != true |
| Teste maior que Teste menor que |
field > value |
sal > 1999.99 |
| Teste de maior que ou igual a Teste de menor que ou igual |
field >= value |
sal >= 1999.99 |
| Correspondência de padrões | field LIKE 'pattern' |
job LIKE 'SALES%' |
| Teste de associação | field IN (value1, ..., valueN) |
deptno IN (10, 20, 40) |
| Comparação de não diferenciação de maiúsculas e minúsculas | field ~= value |
ename ~= 'king' |
| Teste de existência (para relacionamentos um para muitos) | child[expression] |
assignments[startDate = null] |
| Conjunção lógica | expression AND expression |
|
| Disjunção lógica | expression OR expression |
|
| Negação lógica | !(expression) |
Filtragem por objetos filho em um relacionamento um para um:
No caso de relacionamentos um para um, você pode fazer referência a objetos filhos e seus atributos na cláusula de filtro, assim como a atributos de outros objetos pais, por exemplo,legalEmployer.id in (1001, 1002).
Filtrando objetos filhos em um relacionamento de um para muitos:
Em casos raros de relacionamentos um-para-muitos indicados pelo nome do acessador plural, o teste de existência na tabela acima filtrará os pais que têm pelo menos um filho que atende aos critérios. No entanto, isso não significa que os registros filhos, se recuperados, serão filtrados automaticamente. Se quiser garantir que você só obtenha registros filhos que atendam aos critérios, você também precisará repetir o filtro no nível filho.Por exemplo, se você quiser recuperar apenas componentes de alteração do tipo físico UPDATE, será necessário aplicar os seguintes filtros na consulta de alterações de objeto:
{
"collection": {
"filter": "changeComponents[physicalType = 'UPDATE']"
},
"accessors": {
"changeComponents": {
"collection": {
"filter": "physicalType = 'UPDATE'"
},
...
Filtrando por data efetiva:
No caso de objetos com data efetiva, você obterá dados efetivos a partir da data atual por padrão. Para recuperar dados efetivos a partir de uma data específica, use o parâmetro de consulta HTTP$effectiveDate.
Por exemplo, se você quiser recuperar dados efetivos a partir de 2023-01-01, use o seguinte URL para sua consulta:
/api/boss/data/objects/ora/hcmHrCore/employment/v1/{{viewPath}}/$query?$effectiveDate=2023-01-01
Classificação
Definir como os dados devem ser classificados. A classificação é expressa por um array de atributos de classificação, incluindo a direção de classificação (asc ou desc). Por exemplo:
"sortBy": [
{
"totalAmount": "desc"
},
{
"paidAmount": "asc"
}
]
Pager
Definir como os dados devem ser paginados. O cliente pode controlar a paginação fornecendo parâmetros de limite e deslocamento. Por exemplo:
"limit": 200, "offset": 400
O limite padrão é 25 e o limite máximo é 1000.
O deslocamento padrão é 0 e indica o início dos resultados.
O atributo de nível superior hasMore na resposta indica se há mais resultados a serem extraídos.
A paginação não deve ser usada como uma forma alternativa de extrair dados. Ao consultar essa API, não há garantia de que os dados não serão alterados entre as solicitações. Use a API assíncrona para extração de dados.
Exemplo
O exemplo de consulta de extração abaixo foi projetado para recuperar informações de atribuições junto com detalhes do empregador legal e do departamento, que:
- São atribuições principais
- São do tipo Funcionário
- Não pertencem a Empregadores Legais com os IDs
10001e10002 - São efetivos a partir da data de extração
- Foi atualizado (ou criado) desde a execução anterior
Exemplo de Solicitação
Observe a condição do parâmetro limit e do atributo timeUpdated com o timestamp da execução de extração 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" ]
}
}
}
Exemplo de Resposta
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
}
Tarefa 3: Submetendo uma Solicitação de Tarefa de Extração
Depois que a consulta for definida, uma solicitação de job de extração poderá ser enviada usando a API do Programador de Jobs.
| URL | /api/saas-batch/jobscheduler/v1/jobRequests |
|---|---|
| Método HTTP | POST |
| Modelo de solicitação |
{
"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}}"
}
}
|
| Modelo de resposta |
No envio bem-sucedido, o código de resposta 202 Accepted
Location: {{jobRequestUrl}}
|
Paginação ao extrair dados:
Embora você possa ter usado controles de paginação, ou seja, parâmetroslimit e offset, ao criar e testar a consulta, não deseja que os resultados da extração sejam restringidos por eles. Remova qualquer uso de parâmetros limit e offset ao enviar uma consulta.
Passando na consulta:
A consulta informada ao enviar a solicitação de job de extração deve estar no formato de uma string JSON padrão. Execute a consulta preparada e testada usando o ponto final da API$query e:
- Escape de todas as aspas duplas (" → \")
- Remover qualquer caractere de nova linha (\n)
- Reduzir potencialmente outros espaços em branco (por exemplo, recuos)
No geral, você deseja ir, por exemplo, de:
{
"collection": {
"limit": 100,
"filter": "totalAmount > 10000"
},
"fields": [ "id", "totalAmount" ]
}
Para:
{\"collection\": {\"filter\": \"totalAmount > 10000\"},\"fields\": [ \"id\", \"totalAmount\" ]}
Exemplo
Exemplo de Solicitação
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\" ]}}}"
}
}
Exemplo de Resposta
202 Accepted Location: https://example.com/api/saas-batch/jobscheduler/v1/jobRequests/42075
Tarefa 4: Verificando a Conclusão da Tarefa
A verificação da conclusão envolve o uso da API do Programador de Jobs para sondar periodicamente os detalhes da solicitação de job, até que ela seja concluída com sucesso ou falhe.
| URL | /api/saas-batch/jobscheduler/v1/jobRequests/{{jobRequestId}} |
|---|---|
| Método HTTP | GET |
Conclusão bem-sucedida:
Uma solicitação de job será considerada concluída com sucesso quando as seguintes condições forem atendidas:| Atrib. | Valor esperado |
|---|---|
jobDetails.jobProgress.completed |
true |
jobDetails.jobProgress.status |
SUCCEEDED |
Falha na conclusão:
Uma solicitação de job será considerada com falha quando a condição a seguir for atendida. Nesse caso, o atributojobDetails.jobProgress.message conterá a mensagem de erro.
| Atrib. | Valor esperado |
|---|---|
jobDetails.jobProgress.status |
FAILED |
Exemplo
Exemplo de Solicitação
GET /api/saas-batch/jobscheduler/v1/jobRequests/42075
Exemplos de Resposta
As respostas a seguir mostram diferentes estágios de um job enviado. Consulte os atributos jobProgress.status e jobProgress.completed em particular.
Aceito/Enfileirado
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"
}
}
}
}
Executando
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"
}
}
}
}
Operação Concluída com Sucesso
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"
}
}
}
}
Tarefa 5: Extraindo Detalhes da Saída da Extração
Depois que o job for concluído com sucesso, suas informações do arquivo de saída poderão ser extraídas. Envolve o uso da API do Gerenciador de Arquivos de Job para a instância de solicitação de job de extração específica.
A saída é armazenada em partes compactadas.
| URL | /api/saas-batch/jobfilemanager/v1/jobRequests/{{jobRequestId}}/outputFiles |
|---|---|
| Método HTTP | GET |
Tamanho do arquivo:
O tamanho do arquivo é retornado no atributo de respostaitems.fileSize e expresso em bytes.
Link do gabinete:
O URL para o conteúdo do arquivo real é retornado no atributo de respostaitems.$context.links.enclosure.
Exemplo
Exemplo de Solicitação
GET /api/saas-batch/jobfilemanager/v1/jobRequests/42075/outputFiles
Exemplo de Resposta
No exemplo abaixo, a saída completa é armazenada em dois arquivos compactados.
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"
}
}
}
}
Tarefa 6: Fazendo Download da Saída de Extração
Por fim, é possível fazer download dos arquivos de saída de extração usando a API do Gerenciador de Arquivos de Job para a instância de solicitação de job de extração e o arquivo de saída específicos.
| URL | /api/saas-batch/jobfilemanager/v1/jobRequests/{{jobRequestId}}/outputFiles/{{fileName}}/content |
|---|---|
| Método HTTP | GET |
Dica:
Se necessário, você pode fazer download de arquivos grandes com mais eficiência implementando o download multithread usando o cabeçalho HTTP Range como abaixo.Range: {{startByte}}-{{endByte}}/{{fileSize}}
Exemplo
Exemplo de Solicitação
GET /api/saas-batch/jobfilemanager/v1/jobRequests/42075/outputFiles/result_42075.json/content
Exemplos de Resposta
A resposta real é o conteúdo binário do arquivo compactado. Uma vez descompactado, ele é completo ou parcial (no caso de uso do cabeçalho Range), payload JSON não formatado, com resultados completos ou parciais (no caso de um bloco de arquivos) da consulta de extração.
Exemplo de resultados descompactados 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"}}}
]}
Mais Recursos de Aprendizagem
Explore outros laboratórios em docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal do Oracle Learning YouTube. Além disso, acesse education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.
Para obter a documentação do produto, visite o Oracle Help Center.
Extrair Dados do Armazenamento de Dados Somente Leitura do HCM
G38795-05
Janeiro de 2026