Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

새 객체의 고유 ID 생성

객체 생성 함수에는 새 객체의 기본 키가 필요합니다. UUID를 생성하여 String 기본 키로 사용하는 예제입니다. 아래 FlightScenario는 업무 예제 객체 유형이며 온톨로지 시나리오 자체를 생성하는 API가 아닙니다.

가상 스키마는 String 기본 키 flightScenarioId, String scenarioName과 Timestamp creationTime입니다. TSv1의 생성 바인딩은 flightScenarios, TSv2 SDK 정의는 FlightScenario라고 가정합니다.

TypeScript v2

TSv2는 Node.js 런타임이므로 crypto.randomUUID를 사용할 수 있습니다. createFlightScenario.ts에서 실제 생성 편집을 반환합니다.

import { randomUUID } from "crypto";
import { Client } from "@osdk/client";
import { FlightScenario } from "@ontology/sdk";
import { createEditBatch, Edits } from "@osdk/functions";

type OntologyEdit = Edits.Object<FlightScenario>;

export default function createFlightScenario(client: Client): OntologyEdit[] {
    const batch = createEditBatch<OntologyEdit>(client);
    batch.create(FlightScenario, {
        flightScenarioId: randomUUID(),
        scenarioName: "New scenario",
        creationTime: new Date().toISOString(),
    });
    return batch.getEdits();
}

기존 프로젝트가 npm uuid를 사용하면 같은 목적의 대안으로 사용할 수 있습니다. 프로젝트 디렉터리에서 npm install uuid로 추가하며, 자체 타입 선언을 포함하는 버전에는 @types/uuid를 별도로 설치할 필요가 없습니다. uuid 12 이상은 CommonJS를 지원하지 않으므로 기존 빌드 방식과 패키지 버전을 확인해야 합니다.

import { v4 as uuidv4 } from "uuid";

export default function generateObjectId(): string {
    return uuidv4();
}

위 함수는 generateObjectId.ts에 두며 실제 UUID 문자열을 반환합니다. 객체 생성에는 반환한 값을 기본 키로 전달합니다.

TypeScript v1

TSv1은 @foundry/functions-utils의 Uuid.random을 사용합니다. 템플릿에 기본 설치되어 있지만 package.json에 없다면 dependencies에 "@foundry/functions-utils": "0.1.0"을 추가하고 Code Assist를 재시작하여 바인딩을 불러옵니다.

import { Edits, OntologyEditFunction, Timestamp } from "@foundry/functions-api";
import { Objects, FlightScenario } from "@foundry/ontology-api";
import { Uuid } from "@foundry/functions-utils";

export class ExampleEditFunctions {
    @Edits(FlightScenario)
    @OntologyEditFunction()
    public createFlightScenario(): void {
        const scenario = Objects.create().flightScenarios(Uuid.random());
        scenario.scenarioName = "New scenario";
        scenario.creationTime = Timestamp.now();
    }
}

클래스를 index.ts에서 내보내고 함수 기반 액션에 연결해야 실제 객체를 생성합니다. 함수가 실행될 때마다 새 UUID를 생성하므로 생성 동작을 다시 요청하는 것은 같은 객체를 갱신하는 작업과 다릅니다.