소개
Cloud HCM은 차세대 BOSS/Spectra 플랫폼을 사용하여 HCM에서 데이터를 추출하는 기능을 제공합니다.
목표
이 자습서를 완료하면 다음 방법을 이해할 수 있습니다.
- 근로자 추출 뷰 및 객체 계층 질의
- 선택된 근로자 계층 데이터 검색을 위한 추출 작업 요청을 비동기적으로 제출 및 추적합니다.
- 추출 출력 파일 다운로드
필요 조건
시작하기 전에:
- RODS 데이터 복제를 포함한 Spectra 플랫폼이 Pod에 프로비전되었는지 확인하려면 Oracle CoE에 문의하십시오.
- 다음을 포함하여 필수 보안 구성 수행:
- 데이터 보안 설정
- OAuth 클라이언트 앱 설정
사용 사례
이 기능을 통해 다음과 같은 사용 사례를 해결할 수 있습니다.
전체 데이터 추출
근로자 데이터의 전체 추출은 일회성 또는 주기적 활동일 수 있습니다.
전체 객체 계층 또는 하위 집합만 검색할 수 있습니다.
전체 데이터 추출은 필터링 조건과 일치하는 모든 레코드를 검색하며 출력 파일이 매우 클 수 있습니다.
현재 추출 일자가 기본값인 요청 유효 일자를 기준으로 유효 일자 객체가 검색됩니다.
증분 데이터 추출
근로자 데이터의 증분 추출은 일반적으로 정기적인 스케줄링된 활동입니다.
전체 객체 계층 또는 하위 집합만 검색할 수 있습니다.
이 사용 사례에서는 첫 번째 추출 실행이 기준선인 이전 추출 실행 이후 변경된 객체만 검색하려고 합니다. 이를 위해서는 변경 감지가 적용되는 모든 레벨에서 timeUpdated
속성 필터를 적용해야 합니다.
증분 데이터 추출 질의는 추가 필터링 기준을 적용할 수 있습니다. 출력 파일은 델타만 포함하므로 일반적으로 전체 추출과 비교하여 크기가 작습니다.
속성의 현재 값만 검색됩니다.
현재 추출 일자가 기본값인 요청 유효 일자를 기준으로 유효 일자 객체가 검색됩니다.
주의:
물리적으로 삭제된 레코드는timeUpdated
로 필터링하여 반환되지 않습니다.
작업 1: 추출 뷰 선택
필요한 객체 및 속성에 따라 사용할 추출 뷰를 선택합니다. 사용 가능한 뷰는 추출할 수 있는 객체 및 속성과 함께 아래에 나열됩니다.
근로자 지정 추출
workerAssignmentExtracts를 사용하여 근로자의 고용 지정 데이터를 추출합니다.
경로 보기 | workerAssignmentExtracts |
---|
객체 | 속성 | 관계 유형 |
---|---|---|
workerAssignmentExtract |
|
n/a |
workerAssignmentExtract.department |
|
일대일입니다 |
workerAssignmentExtract.legalEmployer |
|
일대일입니다 |
workerAssignmentExtract.legislation |
|
일대일입니다 |
workerAssignmentExtract.position |
|
일대일입니다 |
workerAssignmentExtract.grade |
|
일대일입니다 |
workerAssignmentExtract.location |
|
일대일입니다 |
workerAssignmentExtract.location.mainAddress |
|
일대일입니다 |
workerAssignmentExtract.location.mainAddress.country |
|
일대일입니다 |
workerAssignmentExtract.job |
|
일대일입니다 |
workerAssignmentExtract.job.jobFamily |
|
일대일입니다 |
workerAssignmentExtract.collectiveAgreement |
|
일대일입니다 |
workerAssignmentExtract.personType |
|
일대일입니다 |
workerAssignmentExtract.workerUnion |
|
일대일입니다 |
workerAssignmentExtract.assignmentUserStatus |
|
일대일입니다 |
workerAssignmentExtract.businessUnit |
|
일대일입니다 |
workerAssignmentExtract.account |
|
일대일입니다 |
workerAssignmentExtract.ledger |
|
일대일입니다 |
workerAssignmentExtract.workRelationship |
|
일대일입니다 |
workerAssignmentExtract.localName |
|
일대일입니다 |
workerAssignmentExtract.globalName |
|
일대일입니다 |
workerAssignmentExtract.personDetail |
|
일대일입니다 |
근로자 법률 정보 추출
workerLegislativeInfoExtract를 사용하여 근로자의 법률 정보 데이터를 추출합니다.
경로 보기 | 작업자/$views/workerLegislativeInfoExtract |
---|
객체 | 속성 | 관계 유형 |
---|---|---|
근로자 |
|
n/a |
worker.personDetail |
|
일대일입니다 |
worker.legislativeInformation |
|
일대일입니다 |
worker.legislativeInformation.legislation |
|
일대일입니다 |
근로자 이름 추출
workerNamesExtract를 사용하여 작업자 이름 데이터를 추출합니다.
경로 보기 | 작업자/$views/workerNamesExtract |
---|
객체 | 속성 | 관계 유형 |
---|---|---|
근로자 |
|
n/a |
worker.personDetail |
|
일대일입니다 |
worker.names |
|
일대다입니다 |
worker.names.legislation |
|
일대일입니다 |
worker.names.language |
|
일대일입니다 |
근로자 전화 추출
workerPhonesExtract를 사용하여 작업자의 전화 데이터를 추출합니다.
경로 보기 | 작업자/$views/workerPhonesExtract |
---|
객체 | 속성 | 관계 유형 |
---|---|---|
근로자 |
|
n/a |
worker.personDetail |
|
일대일입니다 |
worker.phones |
|
일대다입니다 |
worker.phones.legislation |
|
일대일입니다 |
근로자 전자메일 추출
workerEmailsExtract를 사용하여 작업자의 전자메일 데이터를 추출합니다.
경로 보기 | 작업자/$views/workerEmailsExtract |
---|
객체 | 속성 | 관계 유형 |
---|---|---|
근로자 |
|
n/a |
worker.personDetail |
|
일대일입니다 |
worker.emails |
|
일대다입니다 |
다국어:
번역 가능한 속성은 현재 영어로만 제공됩니다.작업 2: 추출 Query 준비 및 테스트
각 추출 뷰에는 추출 쿼리를 작성하고 테스트할 수 있는 쿼리 API가 있습니다.
URL | /api/boss/data/objects/ora/hcmHrCore/employment/v1/{{viewPath}}/$query |
---|---|
HTTP 메소드 | POST |
템플리트 요청 |
{ "collection": { "limit": {{limit}}, "offset": {{offset}}, "sortBy": [ {{sortAttributes}} ], "filter": "{{topLevelFilter}}" }, "fields": [ {{topLevelAttributes}} ], "accessors": { "{{childObject}}": { "collection": { "filter": "{{childLevelFilter}}" }, "fields": [ {{childLevelAttributes}} ], "accessors": { {{nestedChildAccessors}} } }, ... } } |
응답 템플리트 |
200 OK { "items": [ {{items}} ], "hasMore": {{hasMore}} } |
객체 및 속성
추출할 데이터, 즉 포함할 객체 및 속성을 정의합니다. 하위 객체를 포함하려면 액세서를 추가해야 하는 반면, 특정 필드를 포함하려면 fields
배열에 액세서를 나열해야 합니다. 전체 예제를 참조하십시오.
필터링
데이터 필터링 방법을 정의합니다. 다음 표현식을 사용하여 쿼리에 대한 필터를 작성할 수 있습니다.
용도 | 표현식 | 예 |
---|---|---|
동등 테스트 | field = value |
ename = 'KING' |
부등식 테스트 | field != value |
activeFlag != true |
보다 큼 테스트 보다 작음 테스트 |
field > value |
sal > 1999.99 |
다음보다 크거나 같음, 테스트 다음보다 작거나 같음 |
field >= value |
sal >= 1999.99 |
패턴 일치 | field LIKE 'pattern' |
job LIKE 'SALES%' |
멤버십 테스트 | field IN (value1, ..., valueN) |
deptno IN (10, 20, 40) |
대소문자 비민감도 비교 | field ~= value |
ename ~= 'king' |
존재 테스트(일대다 관계의 경우) | child[expression] |
assignments[startDate = null] |
논리 접속사 | expression AND expression |
|
논리적 분리 | expression OR expression |
|
논리적 부정 | !(expression) |
일대일 관계에서 하위 객체로 필터링:
일대일 관계의 경우 다른 상위 객체의 속성(예:legalEmployer.id in (1001, 1002)
)과 마찬가지로 필터 절에서 하위 객체 및 해당 속성을 참조할 수 있습니다.
일대다 관계에서 하위 객체 필터링:
일대다 관계의 경우 위 테이블의 존재 테스트는 기준을 충족하는 하나 이상의 하위 항목이 있는 상위 항목을 필터링합니다. 그러나 하위 레코드가 검색될 경우 자동으로 필터링된다는 의미는 아닙니다. 기준과 일치하는 하위 레코드만 가져오도록 하려면 하위 레벨에서도 필터를 반복해야 합니다.예를 들어, W1
유형의 전화기만 검색하려면 다음 필터를 적용해야 합니다.
{ "collection": { "filter": "phones[type = 'W1']" }, "accessors": { "phones": { "collection": { "filter": "type = 'W1'" }, ...
유효 일자별 필터링:
유효 일자 객체의 경우 기본적으로 현재 일자를 기준으로 유효한 데이터를 가져옵니다. 특정 날짜를 기준으로 유효한 데이터를 검색하려면$effectiveDate
HTTP 질의 매개변수를 사용합니다.
예를 들어, 2023-01-01
부터 유효한 데이터를 검색하려면 질의에 다음 URL을 사용합니다.
/api/boss/data/objects/ora/hcmHrCore/employment/v1/{{viewPath}}/$query?$effectiveDate=2023-01-01
정렬
데이터 정렬 방법을 정의합니다. 정렬은 정렬 방향(asc 또는 desc)을 포함한 정렬 속성 배열로 표현됩니다. 예:
"sortBy": [ { "totalAmount": "desc" }, { "paidAmount": "asc" } ]
페이징
데이터 페이지 매김 방법을 정의합니다. 클라이언트는 제한 및 오프셋 매개변수를 제공하여 페이징을 제어할 수 있습니다. 예:
"limit": 200, "offset": 400
기본 제한은 25
이고 최대 제한은 1000
입니다.
기본 오프셋은 0
이며 결과의 시작을 나타냅니다.
응답의 최상위 레벨 hasMore
속성은 인출할 결과가 더 있는지 여부를 나타냅니다.
페이지 매김은 데이터를 추출하는 다른 방법으로 사용해서는 안됩니다. 이 API를 쿼리할 때는 요청 간에 데이터가 변경되지 않는다는 보장이 없습니다. 데이터 추출을 위해 비동기 API를 사용합니다.
예
아래의 추출 질의 예는 법적 고용주 및 부서 세부정보와 함께 지정 정보를 검색하도록 설계되었습니다.
- 기본 지정임
- 사원 유형
- ID가
10001
및10002
인 법적 고용주에 속하지 않습니다. - 추출 일자를 기준으로 유효
- 이전 실행 이후 업데이트(또는 생성)되었습니다.
요청 예
이전 추출 실행의 시간 기록과 함께 limit
매개변수 및 timeUpdated
속성 조건을 확인합니다.
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" ] } } }
응답 예
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 }
태스크 3: 추출 작업 요청 제출
쿼리가 정의되면 작업 스케줄러 API를 사용하여 추출 작업 요청을 제출할 수 있습니다.
URL | /api/saas-batch/jobscheduler/v1/jobRequests |
---|---|
HTTP 메소드 | POST |
템플리트 요청 |
{ "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}}" } } 기타 뷰의 경우: { "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}}" } }
|
응답 템플리트 |
제출이 성공하면 202 Accepted Location: {{jobRequestUrl}} |
데이터 추출 시 페이징:
페이지 매김 제어(예:limit
및 offset
매개변수)를 사용했을 수 있지만 질의를 작성하고 테스트할 때 추출 결과의 제약을 받지 않도록 해야 합니다. 질의를 제출할 때 limit
및 offset
매개변수 사용을 제거합니다.
질의 전달:
추출 작업 요청을 제출할 때 전달된 질의는 표준 JSON 문자열 형식이어야 합니다.$query
API 엔드포인트를 사용하여 준비 및 테스트한 질의를 수행하고 다음을 수행합니다.
- 모든 큰따옴표 이스케이프(" → \")
- 줄바꿈 문자 제거(\n)
- 다른 공백(예: 들여쓰기)을 잠재적으로 줄입니다.
전반적으로, 예를 들어, 다음과 같습니다.
{ "collection": { "limit": 100, "filter": "totalAmount > 10000" }, "fields": [ "id", "totalAmount" ] }
목적:
{\"collection\": {\"filter\": \"totalAmount > 10000\"},\"fields\": [ \"id\", \"totalAmount\" ]}
예
요청 예
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\" ]}}}" } }
응답 예
202 Accepted Location: https://example.com/api/saas-batch/jobscheduler/v1/jobRequests/42075
작업 4: 작업 완료 확인
완료 확인에는 작업 스케줄러 API를 사용하여 작업 요청 세부 정보가 성공적으로 완료되거나 실패할 때까지 주기적으로 폴링하는 작업이 포함됩니다.
URL | /api/saas-batch/jobscheduler/v1/jobRequests/{{jobRequestId}} |
---|---|
HTTP 메소드 | GET |
완료 성공:
다음 조건이 충족되면 작업 요청이 성공적으로 완료된 것으로 간주됩니다.속성 | 예상 값 |
---|---|
jobDetails.jobProgress.completed |
true |
jobDetails.jobProgress.status |
SUCCEEDED |
완료 실패:
다음 조건이 충족되면 작업 요청이 실패한 것으로 간주됩니다. 이 경우jobDetails.jobProgress.message
속성에 오류 메시지가 포함됩니다.
속성 | 예상 값 |
---|---|
jobDetails.jobProgress.status |
FAILED |
예
요청 예
GET /api/saas-batch/jobscheduler/v1/jobRequests/42075
응답 예
아래 응답은 제출된 작업의 여러 단계를 보여줍니다. 특히 jobProgress.status
및 jobProgress.completed
속성을 참조하십시오.
수락/대기열에 넣음
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" } } } }
실행 중
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" } } } }
완료됨
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" } } } }
작업 5: 추출 출력 세부정보 인출
작업이 성공적으로 완료되면 출력 파일 정보를 인출할 수 있습니다. 여기에는 특정 추출 작업 요청 인스턴스에 대해 작업 파일 관리자 API를 사용하는 작업이 포함됩니다.
출력은 압축된 청크로 저장됩니다.
URL | /api/saas-batch/jobfilemanager/v1/jobRequests/{{jobRequestId}}/outputFiles |
---|---|
HTTP 메소드 | GET |
파일 크기:
파일 크기는items.fileSize
응답 속성에 반환되며 바이트 단위로 표시됩니다.
외장 장치 링크:
실제 파일 내용에 대한 URL은items.$context.links.enclosure
응답 속성에 반환됩니다.
예
요청 예
GET /api/saas-batch/jobfilemanager/v1/jobRequests/42075/outputFiles
응답 예
아래 예제에서 전체 출력은 두 개의 압축된 파일에 저장됩니다.
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" } } } }
태스크 6: 추출 출력 다운로드
마지막으로 추출 출력 파일은 특정 추출 작업 요청 인스턴스 및 출력 파일에 대한 작업 파일 관리자 API를 사용하여 다운로드할 수 있습니다.
URL | /api/saas-batch/jobfilemanager/v1/jobRequests/{{jobRequestId}}/outputFiles/{{fileName}}/content |
---|---|
HTTP 메소드 | GET |
참고:
필요한 경우 아래와 같이 범위 HTTP 헤더를 사용하여 다중 스레드 다운로드를 구현하여 대용량 파일을 보다 효율적으로 다운로드할 수 있습니다.Range: {{startByte}}-{{endByte}}/{{fileSize}}
예
요청 예
GET /api/saas-batch/jobfilemanager/v1/jobRequests/42075/outputFiles/result_42075.json/content
응답 예
실제 응답은 이진 압축 파일 내용입니다. 압축이 풀리면 전체 또는 부분(Range
헤더 사용 시), 형식이 지정되지 않은 JSON 페이로드가 추출 질의의 전체 또는 부분(파일 조각의 경우) 결과와 함께 제공됩니다.
전체 압축되지 않은 결과 예제
{"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"}}} ]}
추가 학습 자원
docs.oracle.com/learn에서 다른 랩을 탐색하거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 액세스하세요. 또한 education.oracle.com/learning-explorer를 방문하여 Oracle Learning Explorer가 되십시오.
제품 설명서는 Oracle Help Center를 참조하십시오.
Spectra Services를 사용하여 HCM에서 데이터 추출
G38794-01
2025년 7월