Introdução

O Cloud HCM fornece um recurso para extrair dados do HCM usando a plataforma BOSS/Spectra de nova geração subjacente.

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:

  1. Entre em contato com a Oracle CoE para se certificar de que a plataforma Spectra, incluindo replicação de dados RODS, esteja provisionada no seu pod
  2. 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 por timeUpdated.

Tarefa 1: Escolhendo uma View de Extração

Escolha qual view de extração usar, dependendo dos objetos e atributos necessários. As exibições disponíveis são listadas abaixo, juntamente com os objetos e atributos que podem ser extraídos.

Extrações de Atribuição do Colaborador

Use workerAssignmentExtracts para extrair dados de atribuição de emprego dos colaboradores.

Exibir Caminho workerAssignmentExtracts


Objeto Atributos Tipo de Relacionamento
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
  • frequência
  • 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
  • sequência
n/a (não aplicável)
workerAssignmentExtract.department
  • id
  • name
  • title
  • effectiveStartDate
  • effectiveEndDate
de um para um
workerAssignmentExtract.legalEmployer
  • id
  • name
  • effectiveStartDate
  • effectiveEndDate
de um para um
workerAssignmentExtract.legislation
  • territoryCode
  • territoryShortName
de um para um
workerAssignmentExtract.position
  • id
  • effectiveStartDate
  • effectiveEndDate
  • name
  • code
de um para um
workerAssignmentExtract.grade
  • id
  • effectiveStartDate
  • effectiveEndDate
  • name
  • code
de um para um
workerAssignmentExtract.location
  • id
  • effectiveStartDate
  • effectiveEndDate
  • name
  • code
de um para um
workerAssignmentExtract.location.mainAddress
  • id
  • effectiveStartDate
  • effectiveEndDate
  • município
  • estado
  • província
  • townOrCity
  • postalCode
  • countryCode
  • longPostalCode
  • addressLine1
  • addressLine2
  • addressLine3
  • addressLine4
de um para um
workerAssignmentExtract.location.mainAddress.country
  • territoryCode
  • territoryShortName
de um para um
workerAssignmentExtract.job
  • id
  • effectiveStartDate
  • effectiveEndDate
  • name
  • code
  • jobFunctionCode
  • managerLevel
de um para um
workerAssignmentExtract.job.jobFamily
  • id
  • effectiveStartDate
  • effectiveEndDate
  • name
  • code
de um para um
workerAssignmentExtract.collectiveAgreement
  • id
  • effectiveStartDate
  • effectiveEndDate
  • name
de um para um
workerAssignmentExtract.personType
  • id
  • userPersonType
de um para um
workerAssignmentExtract.workerUnion
  • id
  • effectiveStartDate
  • effectiveEndDate
  • name
de um para um
workerAssignmentExtract.assignmentUserStatus
  • id
  • userStatus
de um para um
workerAssignmentExtract.businessUnit
  • id
  • effectiveStartDate
  • effectiveEndDate
  • name
de um para um
workerAssignmentExtract.account
  • codeCombinationId
  • concatenatedSegments
  • chartOfAccountsId
de um para um
workerAssignmentExtract.ledger
  • ledgerId
  • name
de um para um
workerAssignmentExtract.workRelationship
  • id
  • startDate
  • workerType
  • timeCreated
  • timeUpdated
de um para um
workerAssignmentExtract.localName
  • id
  • effectiveStartDate
  • effectiveEndDate
  • lastName
  • firstName
  • displayName
  • listName
  • timeCreated
  • timeUpdated
de um para um
workerAssignmentExtract.globalName
  • id
  • effectiveStartDate
  • effectiveEndDate
  • lastName
  • firstName
  • displayName
  • listName
  • timeCreated
  • timeUpdated
de um para um
workerAssignmentExtract.personDetail
  • id
  • personNumber
  • effectiveStartDate
  • effectiveEndDate
  • timeCreated
  • timeUpdated
de um para um

Extração de Informações Legais do Colaborador

Use workerLegislativeInfoExtract para extrair dados de informações legais dos colaboradores.

Exibir Caminho trabalhadores/$views/workerLegislativeInfoExtract


Objeto Atributos Tipo de Relacionamento
worker
  • id
n/a (não aplicável)
worker.personDetail
  • id
  • effectiveStartDate
  • effectiveEndDate
  • personNumber
de um para um
worker.legislativeInformation
  • id
  • effectiveStartDate
  • effectiveEndDate
  • sexo
  • maritalStatus
  • maritalStatusChangeDate
  • highestEducationLevel
  • timeUpdated
  • updatedBy
  • timeCreated
  • createdBy
de um para um
worker.legislativeInformation.legislation
  • territoryCode
  • territoryShortName
de um para um

Extração de Nomes de Colaboradores

Use workerNamesExtract para extrair dados de nomes de colaboradores.

Exibir Caminho trabalhadores/$views/workerNamesExtract


Objeto Atributos Tipo de Relacionamento
worker
  • id
n/a (não aplicável)
worker.personDetail
  • id
  • effectiveStartDate
  • effectiveEndDate
  • personNumber
de um para um
worker.names
  • id
  • effectiveStartDate
  • effectiveEndDate
  • lastName
  • firstName
  • middleNames
  • title
  • prefixo
  • suffix
  • knownAs
  • previousLastName
  • honras
  • militaryRank
  • displayName
  • fullName
  • listName
  • orderName
  • nameLanguage
  • tipo
  • timeUpdated
  • updatedBy
  • timeCreated
  • createdBy
um para muitos
worker.names.legislation
  • territoryCode
  • territoryShortName
de um para um
worker.names.language
  • languageCode
de um para um

Extração de Telefones do Colaborador

Use workerPhonesExtract para extrair dados de telefones dos colaboradores.

Exibir Caminho trabalhadores/$views/workerPhonesExtract


Objeto Atributos Tipo de Relacionamento
worker
  • id
n/a (não aplicável)
worker.personDetail
  • id
  • effectiveStartDate
  • effectiveEndDate
  • personNumber
de um para um
worker.phones
  • id
  • tipo
  • primaryFlag
  • phoneNumber
  • areaCode
  • countryCodeNumber
  • extensão
  • validade
  • timeUpdated
  • updatedBy
  • timeCreated
  • createdBy
um para muitos
worker.phones.legislation
  • territoryCode
  • territoryShortName
de um para um

Extração de E-mails do Colaborador

Use workerEmailsExtract para extrair dados de e-mails dos colaboradores.

Exibir Caminho trabalhadores/$views/workerEmailsExtract


Objeto Atributos Tipo de Relacionamento
worker
  • id
n/a (não aplicável)
worker.personDetail
  • id
  • effectiveStartDate
  • effectiveEndDate
  • personNumber
de um para um
worker.emails
  • id
  • tipo
  • primaryFlag
  • emailAddress
  • timeUpdated
  • updatedBy
  • timeCreated
  • createdBy
Um para muitos

Diversos Idiomas:

Os atributos traduzíveis só estão disponíveis em inglês neste momento.

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/hcmHrCore/employment/v1/{{viewPath}}/$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
field < value
sal > 1999.99
hireDate < '2000-01-01'
timeUpdated> '1900-01-01T13:51:54Z'
Teste de maior que ou igual a
Teste de menor que ou igual
field >= value
field <= value< code>
sal >= 1999.99
hireDate <= '2000-01-01'
timeUpdated >= '1900-01-01T13:51:54Z'
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
field ~!= value
field ~> value
field ~< value
field ~>= value
field ~<= value
field ~LIKE 'pattern'
field ~IN (value1, ..., valueN)
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:

No caso de relacionamentos um-para-muitos, 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 telefones do tipo W1, será necessário aplicar os seguintes filtros:


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

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 10001 e 10002
  • 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

Para a view 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 outras visualizações:

{
    "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 é um parâmetro opcional que deve ser fornecido somente se você quiser recuperar dados efetivos a partir da data atual.

Modelo de resposta

No envio bem-sucedido, o código de resposta 202 será retornado, juntamente com o cabeçalho Location com o URL apontando para a instância de solicitação de job específica.

202 Accepted
 
Location: {{jobRequestUrl}}

Paginação ao extrair dados:

Embora você possa ter usado controles de paginação, ou seja, parâmetros limit 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 atributo jobDetails.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 resposta items.fileSize e expresso em bytes.

Link do gabinete:

O URL para o conteúdo do arquivo real é retornado no atributo de resposta items.$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.