온톨로지FunctionsOntology edits전체보기

본 번역은 검증되지 않았습니다. AIP를 통해 영문원문으로부터 번역되었습니다.

전체보기

온톨로지 수정은 오브젝트를 생성, 수정, 또는 삭제하는 아이디어를 의미합니다. Functions는 Function-백업 액션에서 사용할 수 있는 온톨로지 수정을 반환하는 것을 지원합니다. 이러한 Functions은 @OntologyEditFunction 데코레이터를 사용하여 작성되며, 이는 Functions 작성을 더 쉽게 만드는 특별한 의미론을 제공합니다.

Functions는 코드에서 참조된 수정된 오브젝트 유형을 감지하기 위해 코드에 대한 OOTB 분석을 제공합니다. 이 감지된 오브젝트 유형은 액션 출처를 제공하는데 사용되며, 액션 서비스에 의해 권한을 집행하는데 사용될 수 있습니다. Code Repositories의 Functions 도우미에서 수정된 오브젝트 유형을 검토할 수 있습니다. 수정된 오브젝트 유형이 참조되었지만 감지되지 않은 경우, @Edits([object type]) 데코레이터를 사용하여 오브젝트 유형을 수동으로 지정해야 합니다. 이를 통해 액션 권한에 대한 올바른 출처를 집행할 수 있습니다. 온톨로지 수정 검증을 위해 사용 가능한 API를 사용하여 온톨로지 수정 Functions에 대한 단위 테스트를 작성할 수 있습니다.

이 문서의 나머지 부분은 온톨로지 수정 Functions가 기본 인프라를 어떻게 작동시키는지에 대해 설명합니다.

수정이 적용되는 시점

온톨로지 수정 Functions에 대한 일반적인 오해는 이를 실행하면 온톨로지의 오브젝트가 업데이트되는지 여부입니다. 작성에서 Functions 도우미에서 온톨로지 수정 Function을 실행할 때, 실제 오브젝트에 수정이 적용되지 않습니다. Function을 사용하여 오브젝트를 업데이트하는 유일한 방법은 Function-백업 액션에 대한 문서에서 설명한 바와 같이 액션을 구성하는 것입니다.

이는 Functions 도우미에서 온톨로지 수정 Functions를 자유롭게 실행하여 다양한 입력에 대한 결과를 검증할 수 있음을 의미합니다. 이렇게 하면 오브젝트 자체가 업데이트될 걱정 없이 결과를 검증할 수 있습니다.

결과 창

수정이 어떻게 캡처되는지

온톨로지 수정 Function이 실행되면, 모든 오브젝트 업데이트가 Functions 인프라에 의해 캡처되고 Function 실행이 끝날 때 반환됩니다. 이에는 Objects.create() API를 통한 새로운 오브젝트 생성, 모든 속성 업데이트, 오브젝트 삭제가 포함됩니다.

수정은 액션에서 적용되는 수정의 최소 집합이 되도록 지능적으로 접힙니다. 예를 들어, 새로운 오브젝트를 생성한 후 그 속성을 업데이트하면, 속성 업데이트가 포함된 단일 오브젝트 생성 수정이 반환됩니다. 마찬가지로, 기존 오브젝트의 여러 속성을 업데이트하면, 모든 속성 수정이 포함된 단일 오브젝트 업데이트 수정이 반환됩니다. 오브젝트를 삭제하면 삭제 전에 수행된 기타 속성 수정이 모두 삭제됩니다. 전체 Function은 액션 서비스가 원자 트랜잭션을 실행하는 수정 목록을 생성하기 위해 성공해야 합니다.

캡처된 온톨로지 수정은 Function 실행에서 목록으로 반환됩니다. 이는 온톨로지 수정 Functions는 void 또는 Promise<void> 반환 유형을 가져야 한다는 것을 의미합니다: 실행할 때 Function의 실제 반환 유형은 온톨로지 수정의 목록이므로 동시에 다른 값을 반환할 수 없습니다.

수정은 단일 수정 저장소에서 단일 Function 실행의 전체 수명주기에 걸쳐 캡처됩니다. 이는 오브젝트를 생성, 업데이트, 또는 삭제하는 도우미 함수를 호출할 수 있음을 의미합니다. 이 경우 해당 도우미 함수가 온톨로지 수정 Functions로 게시되지 않더라도 가능합니다. 예를 들어:

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 export class HelperEditFunctions { @Edits(ObjectA, ObjectB) @OntologyEditFunction() // 두 객체를 생성하고 연결하는 함수 public createAndLink(): void { const objectA = this.createObjectA(); const objectB = this.createObjectB(); objectA.linkToB.set(objectB); } /** * @OntologyEditFunction() 주석이 없더라도 도움 함수는 * 다른 편집 함수에서 사용할 수 있는 새로운 객체를 생성할 수 있습니다. */ // ObjectA를 생성하는 함수 private createObjectA(): ObjectA { const objectA = Objects.create().objectA(this.generateRandomId()); objectA.prop1 = "example"; objectA.prop2 = 42; return objectA; } // ObjectB를 생성하는 함수 private createObjectB(): ObjectB { const objectB = Objects.create.objectB(this.generateRandomId()); objectB.prop1 = "another example"; return objectB; } /* 필요에 따라 기본 키를 생성하세요. 예를 들어 import { Uuid } from "@foundry/functions-utils"; // 무작위 ID를 생성하는 함수 private generateRandomId(){ return Uuid.random(); } */ }

편집된 값 검색

Function에서 편집이 수행되면, Functions 인프라는 편집된 값을 반환합니다. 예를 들어, 오브젝트의 속성을 설정한 다음 검색하면 새로운 값이 반환됩니다:

airplane.departureTime = newDepartureTime; // airplane 객체의 departureTime 속성을 newDepartureTime 값으로 설정한다.
console.log(airplane.departureTime); // newDepartureTime 값을 로그에 출력한다.

오브젝트를 삭제하면 검색 결과에서 제거되며 해당 속성에 접근하는 것을 방지합니다.

주의사항: 편집 및 오브젝트 검색

오브젝트와 링크에 대한 변경사항은 Function이 실행 완료된 이후에 Objects.search() APIs에 전파됩니다. 즉, Objects.search() APIs는 이전의 오브젝트, 속성, 링크를 사용합니다. 결과적으로, 검색, 필터링, 주변 검색, 집계는 온톨로지에 대한 편집을 반영하지 않을 수 있으며, 생성 및 삭제를 포함합니다. Function은 이 경우를 수동으로 처리해야 합니다.

다음 예제에서는 ID 1을 가진 직원이 있다고 가정합니다.

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 import { OntologyEditFunction } from "@foundry/functions-api"; import { Employee, Objects } from "@foundry/ontology-api"; export class CaveatEditFunctions { @OntologyEditFunction() public async editAndSearch(): Promise<void> { // 직원 검색 및 수정 let employeeOne = Objects.search().employee().filter(e => e.id.exactMatch(1)).all()[0]; employeeOne.name = "Bob"; // "Bob"이라는 이름을 가진 직원 수 출력 console.log(await Objects.search().employee().filter(e => e.name.exactMatch("Bob")).count() ?? -1); // 예상: 1, 실제: 0 } }

오브젝트 유형 편집 수동 지정

Functions는 코드에서 편집된 오브젝트 유형을 지능적으로 분석합니다. 이 출처는 액션과 같은 다른 서비스에서 권한을 적용하는 데 사용될 수 있습니다. 출처를 올바르게 지정하는 것이 중요합니다. 가끔 코드의 정적 분석이 참조된 편집된 오브젝트 유형을 감지하지 못할 수 있습니다(예를 들어, 오브젝트 유형을 any로 캐스트하는 경우). 이런 경우, 오브젝트 유형을 지정하는 Functions 위에 @Edits([object type]) 데코레이터를 수동으로 추가해야 합니다.

예시

다음 예시에서 두 개의 오브젝트 유형인 EmployeeAircraft가 다음 함수에 의해 편집됩니다:

Copied!
1 2 3 4 5 6 7 8 9 10 11 import { OntologyEditFunction } from "@foundry/functions-api"; import { Employee, Aircraft, Objects } from "@foundry/ontology-api"; export class ManuallySpecifyingObjectFunction { @OntologyEditFunction() public myFunction(): void { const x = Objects.search().aircraft().all()[0]; // "Aircraft" 타입의 객체를 검색하고, 그 중 첫 번째 객체를 가져옵니다. x.businessCapacity = 3; // 가져온 "Aircraft" 객체의 비즈니스 용량을 3으로 설정합니다. const y = Objects.search().employee().all()[0]; // "Employee" 타입의 객체를 검색하고, 그 중 첫 번째 객체를 가져옵니다. (y as any).department = ""// 예상: "Employee"와 "Aircraft" 객체 타입이 탐지되어야 함, 실제: "Aircraft" 객체 타입만 탐지됨 } }

Functions 헬퍼를 Code Repositories에서 확인하면 오직 하나의 오브젝트 유형인 Aircraft만 감지되었습니다. 이는 두 번째 오브젝트 유형인 Employeeany로 캐스트되어서 타이핑이 손실되었기 때문입니다.

감지된 참조 오브젝트 유형

이 문제는 데코레이터 @Edits(Employee)를 사용하여 오브젝트 유형을 수동으로 지정함으로써 해결할 수 있습니다. import {Edits} from "@foundry/functions-api"를 기억하세요.

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 import { OntologyEditFunction, Edits } from "@foundry/functions-api"; // Edits 가져오기 import { Employee, Aircraft, Objects } from "@foundry/ontology-api"; export class ManuallySpecifyingObjectFunction { @Edits(Employee) // 이 데코레이터는 객체 유형 "Employee"가 편집된 객체 유형 출처 목록에 수동으로 추가되어야 함을 지정합니다. @OntologyEditFunction() public myFunction(): void { const x = Objects.search().aircraft().all()[0]; x.businessCapacity = 3; const y = Objects.search().employee().all()[0]; (y as any).department = "" // 부서를 빈 문자열로 설정 } }

Functions 헬퍼를 사용하여 Code Repositories에서 모든 수정된 오브젝트 유형이 감지되었음을 확인할 수 있습니다.

수동으로 지정된 참조 오브젝트 유형