소개
클라우드 HCM은 읽기 전용 데이터 저장소가 있는 차세대 플랫폼을 사용하여 HCM에서 데이터를 추출하는 기능을 제공합니다.
목표
이 자습서를 완료하면 다음 방법을 이해할 수 있습니다.
- 근로자 추출 뷰 및 객체 계층 질의
- 선택된 근로자 계층 데이터 검색을 위한 추출 작업 요청을 비동기적으로 제출 및 추적합니다.
- 추출 출력 파일 다운로드
필요 조건
시작하기 전에:
- Oracle CoE에 문의하여 읽기 전용 데이터 저장소가 Pod에 프로비전되고 데이터가 복제되고 있는지 확인하십시오.
- 다음을 포함하여 필수 보안 구성 수행:
- 데이터 보안 설정
- OAuth 클라이언트 앱 설정
사용 사례
이 기능을 통해 다음과 같은 사용 사례를 해결할 수 있습니다.
전체 데이터 추출
근로자 데이터의 전체 추출은 일회성 또는 주기적 활동일 수 있습니다.
전체 객체 계층 또는 하위 집합만 검색할 수 있습니다.
전체 데이터 추출은 필터링 조건과 일치하는 모든 레코드를 검색하며 출력 파일이 매우 클 수 있습니다.
현재 추출 일자가 기본값인 요청 유효 일자를 기준으로 유효 일자 객체가 검색됩니다.
증분 데이터 추출
근로자 데이터의 증분 추출은 일반적으로 정기적인 스케줄링된 활동입니다.
전체 객체 계층 또는 하위 집합만 검색할 수 있습니다.
이 사용 사례에서는 첫 번째 추출 실행이 기준선인 이전 추출 실행 이후 변경된 객체만 검색하려고 합니다. 이를 위해서는 변경 감지가 적용되는 모든 레벨에서 timeUpdated 속성 필터를 적용해야 합니다.
증분 데이터 추출 질의는 추가 필터링 기준을 적용할 수 있습니다. 출력 파일은 델타만 포함하므로 일반적으로 전체 추출과 비교하여 크기가 작습니다.
속성의 현재 값만 검색됩니다.
현재 추출 일자가 기본값인 요청 유효 일자를 기준으로 유효 일자 객체가 검색됩니다.
주의:
물리적으로 삭제된 레코드는timeUpdated로 필터링하여 반환되지 않습니다.
작업 1: 추출 뷰 선택
필요한 객체 및 속성에 따라 사용할 추출 뷰를 선택합니다. 릴리스 26A부터 사용 가능한 뷰는 추출할 수 있는 객체 및 속성과 함께 모듈별로 그룹화되어 있습니다.
다국어:
번역 가능한 속성은 현재 영어로만 제공됩니다.글로벌 HR - 고용
| 모듈 이름 | oraHcmHrCoreEmployment |
|---|---|
| 모듈 컨텍스트 경로 | hcmHrCore/employment |
| 뷰 이름 | 속성 |
|---|---|
| actionExtracts | 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 성인 maritalStatus maritalStatusChangeDate highestEducationLevel timeUpdated updatedBy timeCreated createdBy personDetail.id personDetail.personNumber personDetail.effectiveStartDate personDetail.effectiveEndDate legislation.territoryCode legislation.territoryShortName |
| legislativeInformationHistoryExtracts | ID effectiveStartDate effectiveEndDate 성인 maritalStatus maritalStatusChangeDate highestEducationLevel timeUpdated updatedBy timeCreated createdBy personDetail.id personDetail.personNumber legislation.territoryCode legislation.territoryShortName |
| managerHierarchyExtracts | effectiveStartDate effectiveEndDate personId assignmentId managerType managerLevel managerId managerAssignmentId primaryAssignmentFlag primaryManagerFlag createdBy timeCreated updatedBy timeUpdated personAssignment.id personAssignment.effectiveStartDate personAssignment.effectiveEndDate personAssignment.effectiveSequence personAssignment.effectiveLatestChange personAssignment.assignmentType personAssignment.assignmentNumber personAssignment.primaryFlag personAssignment.businessTitle personAssignment.workAtHomeFlag personAssignment.officeBuilding personAssignment.officeFloor personAssignment.officeMailStop personAssignment.officeNumber personAssignment.primaryAssignmentFlag personAssignment.primaryWorkRelationshipFlag personAssignment.timeUpdated personAssignment.updatedBy personAssignment.timeCreated personAssignment.createdBy personAssignment.systemPersonType personAssignment.labourUnionMemberFlag personAssignment.managerFlag personAssignment.probationEndDate personAssignment.probationPeriod personAssignment.probationPeriodUnit personAssignment.normalHours personAssignment.frequency personAssignment.endTime personAssignment.startTime personAssignment.noticePeriod personAssignment.noticePeriodUOM personAssignment.workerCategory personAssignment.assignmentCategory personAssignment.hourlyPaidOrSalaried personAssignment.projectedEndDate personAssignment.projectedStartDate personAssignment.assignmentStatusType personAssignment.retirementAge personAssignment.retirementDate personAssignment.synchronizeFromPositionFlag personAssignment.fullTimeOrPartTime personAssignment.permanentAssignmentFlag personAssignment.seniorityBasis personAssignment.overtimePeriod personAssignment.adjustedFullTimeEquivalent personAssignment.annualWorkingDuration personAssignment.annualWorkingDurationUnit personAssignment.annualWorkingRatio personAssignment.standardFrequency personAssignment.standardWorkingHours personAssignment.standardAnnualWorkingDuration personAssignment.sequence personAssignment.department.id personAssignment.department.name personAssignment.department.title personAssignment.department.effectiveStartDate personAssignment.department.effectiveEndDate personAssignment.legalEmployer.id personAssignment.legalEmployer.name personAssignment.legalEmployer.effectiveStartDate personAssignment.legalEmployer.effectiveEndDate personAssignment.legislation.territoryCode personAssignment.legislation.territoryShortName personAssignment.position.id personAssignment.position.effectiveStartDate personAssignment.position.effectiveEndDate personAssignment.position.name personAssignment.position.code personAssignment.grade.id personAssignment.grade.effectiveStartDate personAssignment.grade.effectiveEndDate personAssignment.grade.name personAssignment.grade.code personAssignment.location.id personAssignment.location.effectiveStartDate personAssignment.location.effectiveEndDate personAssignment.location.name personAssignment.location.code personAssignment.location.mainAddress.id personAssignment.location.mainAddress.effectiveStartDate personAssignment.location.mainAddress.effectiveEndDate personAssignment.location.mainAddress.county personAssignment.location.mainAddress.state personAssignment.location.mainAddress.province personAssignment.location.mainAddress.townOrCity personAssignment.location.mainAddress.postalCode personAssignment.location.mainAddress.longPostalCode personAssignment.location.mainAddress.addressLine1 personAssignment.location.mainAddress.addressLine2 personAssignment.location.mainAddress.addressLine3 personAssignment.location.mainAddress.addressLine4 personAssignment.location.mainAddress.country.territoryCode personAssignment.location.mainAddress.country.territoryShortName personAssignment.job.id personAssignment.job.effectiveStartDate personAssignment.job.effectiveEndDate personAssignment.job.name personAssignment.job.code personAssignment.job.jobFunctionCode personAssignment.job.managerLevel personAssignment.job.jobFamily.id personAssignment.job.jobFamily.effectiveStartDate personAssignment.job.jobFamily.effectiveEndDate personAssignment.job.jobFamily.code personAssignment.job.jobFamily.name personAssignment.collectiveAgreement.id personAssignment.collectiveAgreement.effectiveStartDate personAssignment.collectiveAgreement.effectiveEndDate personAssignment.collectiveAgreement.name personAssignment.personType.id personAssignment.personType.userPersonType personAssignment.workerUnion.id personAssignment.workerUnion.effectiveStartDate personAssignment.workerUnion.effectiveEndDate personAssignment.workerUnion.name personAssignment.assignmentUserStatus.id personAssignment.assignmentUserStatus.userStatus personAssignment.businessUnit.id personAssignment.businessUnit.effectiveStartDate personAssignment.businessUnit.effectiveEndDate personAssignment.businessUnit.name personAssignment.account.codeCombinationId personAssignment.account.concatenatedSegments personAssignment.account.chartOfAccountsId personAssignment.ledger.ledgerId personAssignment.ledger.name personAssignment.workRelationship.id personAssignment.workRelationship.startDate personAssignment.workRelationship.workerType personAssignment.workRelationship.timeCreated personAssignment.workRelationship.timeUpdated personAssignment.localName.id personAssignment.localName.effectiveStartDate personAssignment.localName.effectiveEndDate personAssignment.localName.lastName personAssignment.localName.firstName personAssignment.localName.displayName personAssignment.localName.listName personAssignment.localName.timeCreated personAssignment.localName.timeUpdated personAssignment.globalName.id personAssignment.globalName.effectiveStartDate personAssignment.globalName.effectiveEndDate personAssignment.globalName.lastName personAssignment.globalName.firstName personAssignment.globalName.displayName personAssignment.globalName.listName personAssignment.globalName.timeCreated personAssignment.globalName.timeUpdated personAssignment.personDetail.id personAssignment.personDetail.personNumber personAssignment.personDetail.effectiveStartDate personAssignment.personDetail.effectiveEndDate personAssignment.personDetail.timeCreated personAssignment.personDetail.timeUpdated |
| nameExtracts | id effectiveStartDate effectiveEndDate lastname firstname middlenames title prefix suffix knownAs previousLastname honors militaryRank displayname fullname listname ordername type timeUpdated updatedBy timeCreated createdBy personDetail.id personDetail.personNumber personDetail.effectiveStartDate personDetail.effectiveEndDate legislation.territoryCode legislation.territoryShortname |
| nationalIdentifierExtracts | ID createdBy expirationDate issueDate identifierNumber placeOfIssue timeCreated timeUpdated updatedBy personDetail.id personDetail.personNumber personDetail.effectiveStartDate personDetail.effectiveEndDate country.territoryCode country.territoryShortName type.lookupCode type.lookupType type.meaning |
| personAddressExtracts | id effectiveStartDate effectiveEndDate type primaryFlag timeCreated timeUpdated createdBy updatedBy building floorNumber townOrCity postalCode longPostalCode addressLine1 addressLine2 addressLine3 addressLine4 county state province country.territoryCode country.territoryShortName personDetail.id personDetail.personNumber personDetail.effectiveStartDate personDetail.effectiveEndDate |
| personAddressHistoryExtracts | id effectiveStartDate effectiveEndDate type primaryFlag timeCreated timeUpdated createdBy updatedBy building floorNumber townOrCity postalCode longPostalCode addressLine1 addressLine2 addressLine3 addressLine4 county state province country.territoryCode country.territoryShortName |
| personTypeExtracts | ID systemPersonType activeFlag defaultFlag timeCreated timeUpdated createdBy updatedBy userPersonType |
| phoneExtracts | ID fromDate toDate phoneNumber areaCode countryCodeNumber 확장 유효성 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 |
글로벌 HR - 근무 구조
| 모듈 이름 | oraHcmHrCoreWorkStructures |
|---|---|
| 모듈 컨텍스트 경로 | hcmHrCore/workStructures |
| 뷰 이름 | 속성 |
|---|---|
| gradeExtracts | ID createdBy effectiveStartDate effectiveEndDate 코드 timeCreated timeUpdated updatedBy 상태 이름 |
| gradeHistoryExtracts | ID createdBy effectiveStartDate effectiveEndDate 코드 timeCreated timeUpdated updatedBy 상태 이름 |
| jobExtracts | ID 이름 effectiveStartDate effectiveEndDate 코드 상태 createdBy timeCreated updatedBy timeUpdated |
| jobFamilyExtracts | ID 코드 이름 effectiveStartDate effectiveEndDate 상태 timeUpdated updatedBy timeCreated createdBy |
| jobFamilyHistoryExtracts | ID 코드 이름 effectiveStartDate effectiveEndDate 상태 timeUpdated updatedBy timeCreated createdBy |
| jobHistoryExtracts | ID 이름 effectiveStartDate effectiveEndDate 코드 상태 createdBy timeCreated updatedBy timeUpdated |
| locationExtracts | ID createdBy effectiveStartDate effectiveEndDate 코드 timeCreated timeUpdated updatedBy 상태 countryCode employeeLocationFlag shipToSiteFlag receivingSiteFlag billToSiteFlag officeSiteFlag detailCreatedBy detailTimeCreated detailUpdatedBy detailTimeUpdated timezoneCode 설명 이름 |
| locationHistoryExtracts | ID createdBy effectiveStartDate effectiveEndDate 코드 timeCreated timeUpdated updatedBy 상태 countryCode employeeLocationFlag shipToSiteFlag receivingSiteFlag billToSiteFlag officeSiteFlag detailCreatedBy detailTimeCreated detailUpdatedBy detailTimeUpdated timezoneCode 설명 이름 |
| positionExtracts | ID effectiveStartDate effectiveEndDate 코드 상태 hiringStatus createdBy timeCreated updatedBy timeUpdated 이름 |
| positionHistoryExtracts | ID effectiveStartDate effectiveEndDate 코드 상태 hiringStatus createdBy timeCreated updatedBy timeUpdated 이름 |
HCM 공통 - 이벤트
| 모듈 이름 | oraHcmHrCoreEvents |
|---|---|
| 모듈 컨텍스트 경로 | hcmHrCore/events |
| 뷰 이름 | 속성 |
|---|---|
| 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 |
작업 2: 추출 Query 준비 및 테스트
각 추출 뷰에는 추출 쿼리를 작성하고 테스트할 수 있는 쿼리 API가 있습니다.
| URL | /api/boss/data/objects/ora/{{moduleContextPath}}/v1/{{viewName}}/$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))과 마찬가지로 필터 절에서 하위 객체 및 해당 속성을 참조할 수 있습니다.
일대다 관계에서 하위 객체 필터링:
복수 접근자 이름으로 표시된 일대다 관계의 경우 드물지만 위 테이블의 존재 테스트는 기준을 충족하는 하위 항목이 하나 이상 있는 상위 항목을 필터링합니다. 그러나 하위 레코드가 검색될 경우 자동으로 필터링된다는 의미는 아닙니다. 기준과 일치하는 하위 레코드만 가져오도록 하려면 하위 레벨에서도 필터를 반복해야 합니다.예를 들어, 물리적 유형 UPDATE의 변경 구성요소만 검색하려는 경우 객체 변경 질의에서 다음 필터를 적용해야 합니다.
{
"collection": {
"filter": "changeComponents[physicalType = 'UPDATE']"
},
"accessors": {
"changeComponents": {
"collection": {
"filter": "physicalType = 'UPDATE'"
},
...
유효 일자별 필터링:
유효 일자 객체의 경우 기본적으로 현재 일자를 기준으로 유효한 데이터를 가져옵니다. 특정 날짜를 기준으로 유효한 데이터를 검색하려면$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": "{{moduleName}}",
"boss.resource.name": "{{viewName}}",
"boss.resource.version": "v1",
"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를 참조하십시오.