온톨로지 편집 함수를 액션에 연결
Demo Ticket 예제의 Priority를 Title 앞에 붙이는 함수를 액션(Action)으로 구성합니다. 먼저 Functions on Objects의 TypeScript 저장소를 준비하고 DemoTicket 유형을 Resource imports에 가져옵니다.
아래는 TypeScript v1 예제입니다. Priority와 Title의 실제 속성 API 이름을 각각 ticketPriority와 ticketTitle로 정한 계약을 사용합니다. 자신의 유형이 다른 이름을 사용한다면 생성된 바인딩에 맞춰 바꿉니다.
편집 함수 작성과 게시
functions-typescript/src/index.ts에서 내보내는 클래스에 함수를 둡니다. @Function() 대신 @OntologyEditFunction()을 사용하고 @Edits에 편집할 객체 유형(Object type)을 명시합니다.
import { Edits, OntologyEditFunction, UserFacingError } from "@foundry/functions-api";
import { DemoTicket } from "@foundry/ontology-api";
export class TicketActionFunctions {
@Edits(DemoTicket)
@OntologyEditFunction()
public addPriorityToTitle(ticket: DemoTicket): void {
const priority = ticket.ticketPriority;
const title = ticket.ticketTitle;
if (priority === undefined || title === undefined) {
throw new UserFacingError("티켓의 Priority와 Title 값이 필요합니다.");
}
ticket.ticketTitle = `[${priority}]${title}`;
}
}
필드가 없으면 undefined라는 문구를 제목에 저장하지 않고 오류를 반환합니다. 이 예제는 실행할 때마다 현재 제목 앞에 우선순위를 붙이는 동작이며 기존 접두사를 정리하는 별도 로직은 포함하지 않습니다.
함수를 게시한 뒤 액션에 연결해야 운영 데이터 편집이 적용됩니다. 편집 함수만 액션 밖에서 실행하는 것은 온톨로지 데이터를 실제로 수정하는 경로가 아닙니다. 같은 함수 실행의 객체 핸들에서 설정한 속성을 다시 읽는 동작과 새 온톨로지 질의의 쓰기 가시성은 구분합니다.
액션의 Function 규칙
액션의 Rules에서 Function 규칙 하나를 추가하고 게시한 함수의 버전을 선택합니다. 함수 입력을 액션 입력에 연결합니다. 다른 온톨로지 편집 규칙과 조합하지 않습니다.
함수를 선택하면 모든 함수 입력이 액션의 Parameters에 생성됩니다. 이 예에서는 Demo Ticket 객체 참조 입력을 구성할 수 있습니다.
액션을 저장한 뒤 객체 뷰나 Workshop에 연결합니다.
참조하는 함수 버전
기본적으로 함수 로직을 새로 게시해도 액션이 그 버전으로 자동 갱신되지는 않습니다. Rules로 돌아가 참조 버전을 바꿉니다. 예를 들어 새로 게시한 0.1.2를 사용하려면 여기에서 선택해야 합니다.
자동 업그레이드
Rules의 Function에서 사용할 최소 버전을 선택하고 Auto upgrade를 켜면 실행 시 버전 범위를 해석합니다. 선택한 최소 버전과 호환되는 minor 또는 patch 업그레이드가 범위에 포함됩니다.
0.y.z 형태의 초기 개발 버전에는 Auto upgrade가 비활성화됩니다. 이 단계의 함수 API와 동작은 자주 바뀔 수 있어 안정적인 계약으로 취급하지 않습니다.
권한과 호환성
자동 갱신을 켜면 액션 편집 권한이 없는 사람도 기반 함수의 코드를 바꿔 액션 동작에 영향을 줄 수 있습니다. 함수와 액션의 편집 권한은 서로 연결되어 있지 않습니다.
호환 범위 안에 잘못된 릴리스가 들어가면 액션 실행이 실패할 수 있습니다. 액션의 편집 대상 선언(Provenance)은 선택한 최소 함수 버전의 정보를 기준으로 합니다. 현재 이 선언은 함수가 편집할 수 있는 객체 유형 목록이며, 새 버전이 추가 유형을 편집하면 기존 범위를 벗어나 실패합니다.