Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

Workshop에서 함수 사용

객체 대상 함수(Functions on objects, FOO)는 온톨로지 객체의 속성을 읽고, 집계하거나 편집하며, 링크를 탐색하는 업무 로직입니다. Workshop에서는 숫자나 범주형 지표를 표시하고 복잡한 객체 집합을 정의하거나 함수 기반 액션으로 객체 편집을 실행하는 데 사용합니다.

함수 개발과 객체 API는 함수 개요 및 객체 대상 함수에 설명합니다. 모듈에 연결한 함수와 데이터의 권한은 별도로 적용됩니다.

함수 기반 액션

Ontology Manager에서 액션 유형의 규칙에 함수를 연결할 수 있습니다. 기본 Add Object, Delete Object, Modify Object, Add Link와 Delete Link보다 복잡한 편집 로직이 필요할 때 사용합니다.

함수 기반 액션 유형을 정의한 뒤에는 다른 액션과 같은 방식으로 Workshop의 버튼이나 form에 연결합니다.

함수 기반 Numeric 변수 예

가상의 항공 업무에서 선택한 항공기가 특정 공항으로 운항하는 편수를 계산합니다. 다음 정의가 있는 생성 온톨로지 SDK를 사용합니다.

  • ExampleAircraft와 ExampleFlight 객체 유형
  • 항공기에서 관련 항공편으로 연결되는 flights 링크
  • 항공편의 목적지 코드 속성 destinationAirport, Python에서는 destination_airport

함수 입력은 ExampleAircraft 객체와 목적지의 세 자리 코드 문자열이며 출력은 일치하는 운항 편수입니다. 실제 저장소의 유형, 링크와 속성 이름이 다르면 생성 SDK에 맞춥니다. 이 객체 유형과 링크를 함수가 사용할 온톨로지 의존성에 포함합니다.

TypeScript v1

클래스 메서드의 @Function()으로 등록합니다. 연결된 항공편을 all()로 로드한 뒤 메모리에서 목적지를 비교합니다. 아래 구현은 일치하는 객체를 새 배열에 복사하지 않고 개수를 셉니다.

import { Function, Integer } from "@foundry/functions-api";
import { ExampleAircraft } from "@foundry/ontology-api";

export class MyFunctions {
    @Function()
    public flightsForAircraftToDestination(
        aircraft: ExampleAircraft,
        destinationAirportCode: string,
    ): Integer {
        let matches = 0;
        for (const flight of aircraft.flights.all()) {
            if (flight.destinationAirport === destinationAirportCode) {
                matches += 1;
            }
        }
        return matches;
    }
}

TypeScript v2

파일의 default export로 등록합니다. 연결 객체 집합에 조건을 적용하고 온톨로지에 개수 집계를 요청하므로 항공편 목록 대신 숫자 하나를 받습니다.

import { Osdk } from "@osdk/client";
import { Integer } from "@osdk/functions";
import { ExampleAircraft } from "@ontology/sdk";

export default async function flightsForAircraftToDestination(
    aircraft: Osdk.Instance<ExampleAircraft>,
    destinationAirportCode: string
): Promise<Integer> {
    const result = await aircraft.$link.flights
        .where({ destinationAirport: { $eq: destinationAirportCode } })
        .aggregate({ $select: { $count: "unordered" } });
    return result.$count;
}

Python

@function으로 등록합니다. TypeScript v2와 같이 연결 집합을 필터링하고 count를 계산합니다.

from functions.api import function, Float
from ontology_sdk.ontology.objects import ExampleAircraft, ExampleFlight

@function
def flights_for_aircraft_to_destination(
    aircraft: ExampleAircraft,
    destination_airport_code: str,
) -> Float:
    return (
        aircraft.flights()
        .where(ExampleFlight.object_type.destination_airport == destination_airport_code)
        .count()
        .compute()
    )

TypeScript v1 예는 연결 객체를 먼저 로드하는 비용이 있습니다. 연결 항목이 많아지는 경우에는 서버에 조건과 집계를 전달하는 TypeScript v2 또는 Python 경로의 차이를 고려합니다. Workshop의 연결 절차는 세 언어에 공통이며 Python의 입력 이름은 snake_case입니다.

Workshop에 함수 연결

변수 만들기와 버전 선택

Variables 패널의 +에서 Numeric을 만들고 정의 방식을 Function으로 선택합니다.

함수 선택기에서 함수를 찾아 고릅니다. 목록에 나타나려면 함수에 릴리스 버전 태그가 있어야 합니다. 코드 저장만으로 선택할 수 있는 릴리스가 생기는 것은 아닙니다.

입력 매핑

aircraft에는 모듈에서 현재 선택한 항공기 변수를, destinationAirportCode에는 선택 항공편의 목적지 코드 변수를 연결합니다. Python 함수에서는 두 번째 입력 이름이 destination_airport_code입니다.

변수에는 목적을 나타내는 이름을 지정합니다. 페이지별로 구분하려면 $page_FlightInbox_flightCount처럼 이름에 문맥을 넣을 수 있습니다.

캐시와 재계산

함수 기반 변수는 결과를 캐시하며 같은 입력에서는 이전 결과를 재사용할 수 있습니다. 기본 자동 모드에서는 필요한 시점에 계산하고 입력 변화에 따라 다시 계산합니다. 데이터 새로고침도 계산에 영향을 줄 수 있습니다.

명시적인 재계산 요청에는 Recompute {variable name} 이벤트를 사용합니다. 재계산 방식에서 자동, 이벤트만 또는 초기 로드와 이벤트의 방식을 정합니다.

Set variable value는 현재 값을 복사하는 이벤트입니다. 함수 변수 자체에 값을 복사하는 것과 함수 실행을 다시 요청하는 것은 다릅니다. 함수의 입력 변수를 바꾸었다면 해당 함수 변수의 재계산 설정에 따라 반영합니다. 이어서 결과를 사용할 때는 이벤트가 하위 계산 완료를 기다리지 않는 조건도 적용됩니다.

OAuth 기반 외부 소스

OAuth 2.0 outbound application으로 인증하는 소스를 호출하는 함수는 Workshop의 변수나 위젯 콘텐츠에서 직접 사용할 때 대화형 승인 창을 띄울 수 없습니다. 사용자가 그 outbound application을 아직 승인하지 않았다면 함수가 실패합니다.

Workshop 안에서 승인 과정을 제공해야 한다면 함수를 함수 기반 액션으로 감쌉니다. 액션 실행 과정에서는 필요한 인증 승인 창을 표시할 수 있습니다.

Metric Card에 표시

Metric Card에서 지표값을 앞서 만든 함수 기반 Numeric 변수로 설정합니다. 왼쪽 Gantt의 항공편 선택이 바뀌면 매핑한 항공기와 목적지 입력을 통해 지표를 갱신합니다.

그림의 가상 항공 업무는 선택한 항공기의 Houston(IAH)행 운항 680편을 보여 줍니다. 앱은 연결한 실제 객체 집합과 선택값으로 이 수치를 계산합니다.