현재 Functions에서 지원하는 언어는 TypeScript만 있습니다. 이 참조서는 TypeScript Functions의 입력 및 출력 유형에 대한 상세 문서를 제공합니다.
등록소에 게시되기 위해서는 TypeScript Function에 모든 입력 파라미터에 대해 명시적인 유형 주석이 있어야 하며, 명시적인 반환 유형을 지정해야 합니다.
Typescript function 내에서 외부 API를 호출하는 것은 지원되지 않습니다. 액션의 일부로 외부 API를 호출하려면 웹훅을 사용하세요.
현재 Functions에서 지원하는 모든 입력 및 출력 유형은 다음과 같습니다:
boolean
string
Integer
, Long
, Float
, 그리고 Double
number
유형만 있습니다. 그러나 더 많은 유형 유효성 검사 및 구조를 제공하기 위해, @foundry/functions-api
에서 내보낸 위의 별칭만 지원합니다. 이러한 유형을 Function 정의의 입력 및 출력으로 사용하려면 이러한 유형을 가져와야 합니다.LocalDate
및 Timestamp
유형은 시간 정보를 위해 사용됩니다.
Date
유형을 지원합니다. 그러나 날짜와 타임스탬프를 구분하기 위해, @foundry/functions-api
에서 내보낸 보다 구체적인 유형을 제공합니다.LocalDate
는 달력 날짜를 나타내며, Timestamp
는 시간의 순간을 나타냅니다.입력 파라미터의 경우, 선택적 파라미터는 varName?: <type>
으로 선언됩니다. 예를 들어, 선택적 정수 파라미터인 value
를 가진 Function은 파라미터 value?: Integer
를 가질 것입니다.
Functions는 <type> | undefined
유형을 지정하여 선택적 반환 유형을 선언할 수 있습니다. 예를 들어, Integer
또는 값을 반환하지 않을 수 있는 Function은 Integer | undefined
의 반환 유형을 가질 것입니다.
string[]
은 문자열 값의 목록입니다)
Integer[][]
은 정수 값의 목록의 목록입니다)Set<string>
은 문자열 값의 집합입니다)@foundry/functions-api
패키지의 FunctionsMap
을 사용하여 지원됩니다. 이는 FunctionsMap<K, V>
표기법을 사용하여 선언될 수 있으며, 여기서 K
는 키 유형이고 V
는 값 유형입니다. 키는 스칼라 유형 또는 온톨로지 오브젝트(예: FunctionsMap<Employee, string>
)일 수 있습니다. 값은 지원되는 모든 유형이 될 수 있습니다.집계는 온톨로지 오브젝트에 대한 버킷화된 집계를 검색할 때 반환되는 유형이며, Workshop의 차트 등 플랫폼의 다른 부분에서 사용하기 위해 Functions에서 반환될 수 있습니다.
지원되는 집계 유형은 두 가지입니다:
TwoDimensionalAggregation
은 단일 버킷 키를 숫자 값(즉, Double
로 표현됨)으로 매핑합니다. 예를 들어, TwoDimensionalAggregation<string>
은 string
버킷 키를 각 버킷에 대한 숫자 값으로 매핑합니다. 이것은 특정 직무 제목을 가진 직원 수와 같은 집계를 나타내는 데 사용될 수 있습니다.ThreeDimensionalAggregation
은 두 개의 버킷 키를 숫자 값으로 매핑합니다. 예를 들어, ThreeDimensionalAggregation<string, string>
은 string
버킷 키를 중첩 버킷의 배열로 매핑합니다. 이 중첩 버킷 각각은 string
키를 숫자 값에 매핑합니다. 이것은 각 직원의 직무 제목과 본사 별 직원 수와 같은 집계를 나타내는 데 사용될 수 있습니다.두 집계 유형 모두 Function에서 반환될 수 있으며, Workshop 차트에서 특히 플랫폼의 다른 부분에서 사용 가능합니다.
집계는 여러 유형으로 키 지정할 수 있습니다:
boolean
버킷은 true
또는 false
인 값을 나타냅니다string
버킷은 범주형 값을 나타내는 데 사용할 수 있습니다IRange
(@foundry/functions-api
에서) 버킷은 버킷 키가 값의 범위인 집계를 나타냅니다. 이것은 차트의 히스토그램 또는 날짜 축을 나타내는 데 사용될 수 있습니다.
Integer
및 Double
을 포함하여, 숫자 값에 대한 버킷화된 집계를 나타냅니다LocalDate
및 Timestamp
을 포함하여, 날짜 범위에 대한 버킷화된 집계를 나타냅니다오브젝트 유형은 인터페이스가 생성되기 전에 저장소로 가져와야 합니다. 온톨로지 가져오기에 대해 더 알아보기.
온톨로지에서 구성한 각 오브젝트 유형은 Functions 코드에서 사용할 수 있는 TypeScript 인터페이스로 변환됩니다. 모든 생성된 유형은 @foundry/ontology-api
패키지에서 내보냅니다. TypeScript 온톨로지 API에 대한 상세 문서를 참조하세요.
objectRid
또는 오브젝트 유형 및 기본 키를 전달해야 합니다오브젝트의 컬렉션을 Function으로 전달하고 전달받는 방법은 두 가지입니다: 배열 및 집합과 같은 오브젝트의 구체적인 컬렉션, 또는 오브젝트셋.
employees: Employee[]
또는 employees: Set<Employee>
를 사용하여 직원 오브젝트의 배열 또는 집합을 받을 수 있습니다
objectRids
또는 오브젝트 로케이터 목록을 전달해야 합니다@foundry/ontology-api
에서 내보낸 ObjectSet<>
인터페이스를 사용하면 오브젝트셋을 Function으로 전달할 수 있습니다. 예를 들어, Function은 employees: ObjectSet<Employee>
를 사용하여 직원의 오브젝트셋을 받을 수 있습니다. 오브젝트셋은 필터링, 검색 주변, 및 집계 작업을 가능하게 합니다. 오브젝트셋 API에 대해 더 알아보기.
objectSetRid
를 전달해야 합니다. 오브젝트셋 서비스는 임시로 저장된 오브젝트셋을 허용하여, Function 파라미터로 사용하기 위해 짧은 기간 동안 오브젝트셋을 생성할 수 있습니다ObjectSet<>
인터페이스를 사용하는 것이 종종 배열보다 선호되는 이유는 성능이 더 좋고 10,000개 이상의 오브젝트를 Function으로 전달할 수 있기 때문입니다.
주요 사용자는 Foundry 사용자 계정 또는 그룹을 나타냅니다. 이러한 유형은 사용자 또는 그룹과 연결된 정보에 액세스할 수 있도록 Function으로 전달될 수 있습니다. 예를 들어 그룹의 이름이나 사용자의 이름 또는 이메일 주소와 같은 정보입니다. 모든 주요 사용자 유형은 @foundry/functions-api
패키지에서 내보냅니다.
User
는 항상 사용자 이름을 가지며, firstName
, lastName
, 또는 email
을 가질 수 있습니다. 또한 Principal
와 연관된 모든 필드를 포함합니다.Group
은 이름을 가집니다. 또한 Principal
와 연관된 모든 필드를 포함합니다.Principal
은 User
또는 Group
일 수 있습니다. 주어진 Principal
이 User
인지 Group
인지 확인하려면 type
필드를 검사할 수 있습니다. User
와 Group
특정 필드 외에도 Principal
에는 id
, realm
, 그리고 attributes
의 사전이 있습니다.User
, Group
, 또는 Principal
을 파라미터로 Function에 전달하는 것 외에도, @foundry/functions-api
에서 내보낸 Users
오브젝트를 사용하여 사용자 또는 그룹을 ad hoc으로 검색할 수 있습니다
getUserByIdAsync
메소드는 string
형태의 사용자 ID를 받아 Promise<User>
를 반환합니다getGroupByIdAsync
메소드는 string
형태의 그룹 ID를 받아 Promise<Group>
을 반환합니다알림 유형은 플랫폼에서 보내야 하는 알림을 유연하게 설정할 수 있도록 Function에서 반환될 수 있습니다. 예를 들어, User
및 오브젝트 유형과 같은 파라미터를 받아 설정된 메시지로 알림을 반환하는 Function을 작성할 수 있습니다.
Notification
은 두 개의 필드로 구성됩니다: ShortNotification
과 EmailNotificationContent
.ShortNotification
은 알림의 요약 버전을 나타내며, Foundry 플랫폼 내에서 표시됩니다. 짧은 heading
, content
, 그리고 Link
의 컬렉션을 포함합니다.EmailNotificationContent
은 외부 이메일을 통해 보낼 수 있는 알림의 풍부한 버전을 나타냅니다. subject
, body
(headless HTML로 구성), 그리고 Link
의 컬렉션을 포함합니다.Link
는 사용자가 보는 레이블
과 linkTarget
을 가집니다. LinkTarget
은 URL, OntologyObject
, 또는 Foundry 내의 모든 리소스의 rid
일 수 있습니다.알림 API의 사용 방법에 대한 예제는 how-to 가이드를 참조하세요.
또한, Functions에서 사용할 커스텀 입력 및 출력 유형을 정의할 수도 있습니다. 커스텀 유형은 TypeScript 인터페이스로 정의되거나, 인라인 익명 유형으로 정의될 수 있습니다.
?
선택적 토큰을 통해 지원되거나, 필드의 유형이 undefined
와의 유니온입니다.커스텀 유형의 예시:
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
import { Function, LocalDate } from "@foundry/functions-api"; import { Employee } from "@foundry/ontology-api"; // EmployeeGraph는 Employee 객체와 그 연결을 나타내는 인터페이스입니다. interface EmployeeGraph { value: Employee; // Employee 객체 connections: EmployeeGraph[]; // 연결된 다른 EmployeeGraph } // EmployeeFilter는 직원을 필터링하는 데 사용되는 인터페이스입니다. interface EmployeeFilter { maxStartDate?: LocalDate; // 시작 날짜의 최대 값. '?' 표시를 사용하여 옵션으로 설정 role: string | undefined; // 직무. 'undefined'와의 합집합을 사용하여 옵션으로 설정 } // 이 함수는 이름이 지정된 사용자 정의 타입을 입력으로 받아 이름이 지정된 사용자 정의 타입을 출력합니다. @Function() public myEmployeeSearchAround(root: Employee, filter: EmployeeFilter): EmployeeGraph { ... } // 이 함수는 익명의 사용자 정의 타입을 출력합니다. @Function() public getAverageAndMedianAge(employees: Employee[]): { average: Double, median: Integer } { ... }
Promise<Integer>
를 반환하는 Function은 단순히 Integer
를 반환하는 것으로 Function Registry에 표시됩니다.Function 파라미터의 데이터 유형을 선언하는 것 외에도, 파라미터가 처리되어야 하는 몇 가지 다른 옵션들이 있습니다.
TypeScript Functions는 선택적 파라미터와 기본값이 있는 파라미터를 지원합니다. 만약 Function 파라미터가 선택적인 경우, 그것은 Function Registry에 그대로 게시되어, 클라이언트가 그 파라미터를 전달하지 않고도 Function을 실행할 수 있게 합니다. 이것은 특정 유즈케이스에 대해 재정의할 수 있는 간단한 기본값을 제공하는데 유용할 수 있습니다.
다음은 선택적 파라미터가 있는 예제 Function입니다:
Copied!1 2 3 4 5 6 7 8 9 10
@Edits(Ticket) @OntologyEditFunction() public updateDueDate(ticket: Ticket, dueDate?: LocalDate): void { if (dueDate) { ticket.dueDate = dueDate; } else { // 기본적으로, 마감 날짜를 다음 주로 설정합니다. ticket.dueDate = LocalDate.now().plusDays(7); } }
다음은 기본값이 있는 예제 Function입니다:
Copied!1 2 3 4 5
@Function() // 위험 요소 계산 함수 public computeRiskFactor(customer: Customer, weight: Double = 0.75): Double { // ... }
weight
의 값은 클라이언트가 특정 값을 전달하지 않는 한 기본적으로 0.75
로 설정됩니다.
Function 정의에 JSDoc 명세에 따른 문서가 포함되어 있는 경우, 이 문서는 발견되어 Function Registry에 게시됩니다. 이를 통해 사용자는 설명에 따라 Function을 검색할 수 있으며, Function의 각 입력 파라미터가 무엇을 의미하는지에 대한 추가적인 정보를 제공하는데 사용될 수 있습니다.
다음은 문서가 Registry에 게시되는 함수의 예입니다:
Copied!1 2 3 4 5 6 7 8 9 10 11 12
/** * 두 영화에 대한 유사도 점수를 계산합니다. 여기서 0은 전혀 유사하지 않음을 나타내며 * 1은 완벽하게 유사함을 나타냅니다. * * @param movie1 비교할 첫 번째 영화 * @param movie2 비교할 두 번째 영화 * @param weight 유사도 알고리즘에 사용할 임계값 */ @Function() public computeSimilarityScore(movie1: Movie, movie2: Movie, weight: Double = 0.75): Double { }