프로젝트에 가져온 모든 오브젝트 유형이 TypeScript API로 변환되어 Foundry에서 사용 가능한 오브젝트에 쉽게 접근하고 조작할 수 있습니다.
각 오브젝트 유형의 속성은 오브젝트 유형 각각에 대해 생성된 TypeScript 인터페이스에 필드로 변환됩니다. 생성된 필드 이름은 온톨로지에서 지정한 API 이름을 사용합니다.
다음과 같이 간단한 점 표기법으로 각 속성의 필드에 접근할 수 있습니다:
Copied!1 2
// 직원의 이름을 변수에 할당합니다. const firstName = employee.firstName;
속성이 구체적인 값을 설정하지 않을 수 있으므로, 속성 값을 액세스할 때 반환되는 유형은 undefined
일 수 있습니다. TypeScript 컴파일러는 undefined
경우를 명시적으로 처리하지 않으면 오류를 발생시킵니다. 이에 대한 자세한 내용은 이 가이드를 참조하십시오.
오브젝트 유형에서의 배열 속성은 ReadOnlyArray
유형으로 변환됩니다. 이는 배열 속성을 편집하는 의미가 명확하도록 하기 위함입니다 - 배열 속성의 값을 수정하는 유일한 방법은 전혀 새로운 배열 값으로 업데이트하는 것입니다.
배열 속성의 값을 조작하려면 복사본을 만드십시오:
Copied!1 2 3 4
// 새 배열에 복사 let arrayCopy = [...myObject.myArrayProperty]; // 이제 복사된 배열을 수정할 수 있습니다 arrayCopy.push(newItem);
링크 유형은 오브젝트 유형 간에도 TypeScript 인터페이스의 각 오브젝트 유형에 대한 필드로 변환됩니다. 링크를 탐색하려면 해당 필드에 접근한 다음 객체를 불러오는 데 사용되는 메소드 중 하나를 호출합니다. 링크 유형 필드 이름은 온톨로지에서 지정된 API 이름을 사용하여 생성됩니다.
Foundry 온톨로지는 1대1, 1대다, 다대다 링크 유형을 정의하는 것을 지원합니다. 링크의 1
측에 접근할 때 생성된 필드는 SingleLink
유형입니다. get()
또는 getAsync()
메소드를 사용하여 연결된 오브젝트에 접근할 수 있습니다:
Copied!1 2
// 직원의 매니저 정보를 가져오는 코드입니다. const manager = employee.manager.get();
속성과 마찬가지로 1대1 또는 다대1 링크를 따라갈 때 연결된 오브젝트가 없는 경우 반환 값이 undefined
일 수 있습니다. 이러한 링크에 대한 undefined
값을 처리하는 방법에 대한 가이드를 참조하세요.
링크의 many
측에 액세스할 때 생성된 필드는 MultiLink
유형입니다. all()
또는 allAsync()
메서드를 사용하여 연결된 오브젝트의 배열에 액세스할 수 있습니다. 연결된 오브젝트가 없으면 이러한 메서드는 빈 배열을 반환합니다.
Copied!1 2
// "employees" 변수는 "employee" 객체의 "reports" 속성의 "all" 메서드를 호출하여 모든 직원을 가져옵니다. const employees = employee.reports.all();
링크를 순회하는 것은 백엔드에서 연결된 오브젝트를 로드해야 하므로 비용이 많이 들 수 있습니다. 링크 순회를 더 효율적으로 수행하는 방법에 대한 자세한 내용은 이 섹션을 참조하십시오.
.all()
또는 .allAsync()
를 호출하여 반환된 연결된 오브젝트의 배열은 ReadOnlyArray
입니다. 배열을 수정하려면 먼저 배열의 복사본을 만드십시오:
Copied!1 2
// "employee.reports.all()"의 모든 요소를 복사하여 "copiedEmployees" 변수에 할당합니다. let copiedEmployees = [...employee.reports.all()];
링크를 ObjectSet
으로 순회하여 메모리에 링크된 오브젝트 인스턴스를 로드하는 것을 피할 수 있습니다. 온톨로지에서 링크가 생성되면, 이 유형의 오브젝트셋에 대해 다른 링크된 오브젝트셋을 "주변 검색"하기 위한 API가 생성됩니다.
Copied!1 2 3 4 5 6 7 8
import { ObjectSet, Employee } from "@foundry/ontology-api"; // 가정하자면 다음과 같은 오브젝트 세트가 있습니다: // const employee_id = "123"; // const employeeObjectSet : ObjectSet<Employee> = Objects.search().employee().filter(exactMatch(employee_id)); // 연결된 객체들을 탐색하여 다른 타입의 객체들을 찾습니다. const linkedObjs: ObjectSet<OtherObjectType> = employeeObjectSet.searchAroundToOtherObjectType();
오브젝트의 단일 인스턴스에서 작업하고 거기서부터 검색할 경우, MultiLink<objectType>
을 얻게 됩니다. 이 MultiLink
를 ObjectSet
으로 변환할 수 없습니다. 다른 오브젝트셋으로 피벗하려면 오브젝트 인스턴스를 오브젝트셋으로 변환해야 합니다.
Copied!1 2 3 4 5 6 7 8 9 10 11
// 가정: // const employee: Employee // MultiLink는 메모리에 로드하여 추가로 처리할 수 있습니다. const linkedObjs: MultiLink<objectType> = employee.reports // 단일 객체 인스턴스를 객체 세트로 변환합니다. 이 구문은 `employee().filter()` 구문보다 시간이 더 걸립니다. const employeeObjectSet : ObjectSet<Employee> = Objects.search().employee([employee]) // 그런 다음 위의 "searchAroundToOtherObjectType"를 사용하여 객체 세트만 처리할 수 있습니다.
Functions는 각 오브젝트 유형의 상수 유형에 접근함으로써 사용 가능한 온톨로지 목록을 제공합니다. 온톨로지 메타데이터 정보는 아래 섹션에서 자세히 설명하겠습니다.
오브젝트 속성에는 유형 메타데이터가 포함되어 있어, 각 속성의 유형에 프로그래밍 방식으로 접근할 수 있습니다. 이 기능은 주어진 유형의 모든 속성을 식별하거나 주어진 속성 이름이 특정 유형을 가지고 있는지 확인하는 것처럼 고급 워크플로에 사용할 수 있습니다.
예를 들어, 직원 오브젝트 유형이 포함된 온톨로지의 경우, 해당 오브젝트 유형의 속성에 대한 유형 정보에 다음과 같이 접근할 수 있습니다:
Copied!1 2 3
import { Employee } from "@foundry/ontology-api"; // "@foundry/ontology-api"에서 Employee를 가져옵니다. ... const type = Employee.properties.firstName; // Employee의 속성 중 'firstName'을 type에 저장합니다.
이 경우, firstName
이 Employee
오브젝트 유형의 스트링 속성이라면, 그 유형은 StringPropertyBaseType
이 될 것입니다.
다음의 속성 유형들이 사용 가능합니다:
BooleanPropertyBaseType
BytePropertyBaseType
DatePropertyBaseType
FloatPropertyBaseType
TimestampPropertyBaseType
ShortPropertyBaseType
GeohashPropertyBaseType
DecimalPropertyBaseType
StringPropertyBaseType
LongPropertyBaseType
IntegerPropertyBaseType
DoublePropertyBaseType
ArrayPropertyBaseType
VectorPropertyBaseType