Notepad Functions on Objects
Functions on Objects는 TypeScript 함수로 값을 계산하여 템플릿에서 생성한 문서에 삽입합니다. 문서 템플릿에서만 사용할 수 있습니다.
함수 입력을 템플릿 매개변수에 연결하면 생성 시점의 값을 전달합니다. Section generator 또는 Table row generator 안에 넣어 객체마다 값을 계산할 수도 있습니다.
위젯 속성
| 설정 | 의미 |
|---|---|
| Batched/Unbatched | 생성기 안에 있을 때만 나타납니다. 배치 또는 개별 실행을 고릅니다. |
| Function | 실행할 함수. Batched를 고르면 유효한 배치 함수만 선택할 수 있습니다. |
| Function version | 실행할 함수 버전 |
| Function inputs | 선택한 함수가 받는 입력값 |
| Function result | 실행 결과와 표시 형식. 일반 텍스트 또는 Markdown 등으로 처리할 수 있습니다. |
Function inputs의 값은 템플릿 입력으로 연결할 수 있습니다. Markdown 해석은 현재 Unbatched 함수만 지원합니다.
반환형
개별 실행 함수는 다음 중 하나를 반환해야 합니다.
- Boolean
- Date
- Double
- Float
- Integer
- Long
- String
문서의 선택 텍스트를 String 하나로 보내 수정하는 사용자 정의 편집 함수는 별도의 기능입니다.
배치 함수와 생성기
객체별 개별 함수는 객체 수만큼 실행하지만 배치 함수는 객체 집합 전체에 한 번 실행하여 객체별 결과를 돌려줍니다. 실행 호출의 부하를 줄이기 위해 생성기 안에서는 배치 함수를 권장합니다.
유효한 배치 함수는 다음을 충족해야 합니다.
ObjectSet<K>형 인수가 하나 이상 있습니다.- 반환형은
FunctionsMap<K, V>입니다. - V는 위의 일곱 반환형 중 하나입니다.
객체 집합 외에 다른 인수를 추가로 받을 수 있습니다. 일반 set 또는 list를 인수로 받는 함수는 유효한 배치 함수에 해당하지 않습니다.
Object set from generator
Object set from generator는 주변 생성기가 반복하는 객체 집합을 뜻합니다.
중첩 생성기 안에서는 최상위 생성기 또는 현재 중첩 생성기 중 하나의 집합만 생성기 입력으로 사용할 수 있습니다. 두 수준의 집합을 동시에 연결하지 않습니다. 함수에 객체 집합 인수가 여러 개 있고 여러 인수를 Object set from generator로 구성한다면 모두 같은 주변 생성기에서 가져와야 합니다.
문서 생성 시 함수에 전달하는 집합은 생성 한도를 적용한 중간 집합입니다. 배치 함수가 원래 입력 전체를 제한 없이 받는 것은 아닙니다.
개별 함수와 배치 함수 예시
아래는 TypeScript v1 예시입니다. 생성된 온톨로지 API에 FlightAlertWorkshopTutorial 객체 유형과 숫자 timeOfDelayHours 속성이 있어야 합니다. 지연 시간이 4시간을 넘으면 High, 2시간을 넘으면 Medium, 그 외에는 Low입니다. 지연 시간이 비어 있는 객체는 유효한 입력으로 처리하지 않습니다.
import { Function, FunctionsMap, UserFacingError } from "@foundry/functions-api";
import { FlightAlertWorkshopTutorial, ObjectSet } from "@foundry/ontology-api";
export class AlertUrgencyFunctions {
private urgencyFor(flightAlert: FlightAlertWorkshopTutorial): string {
const hoursDelayed = flightAlert.timeOfDelayHours;
if (hoursDelayed == null) {
throw new UserFacingError("알림의 지연 시간이 필요합니다.");
}
if (hoursDelayed > 4) {
return "High";
}
if (hoursDelayed > 2) {
return "Medium";
}
return "Low";
}
@Function()
public getAlertUrgency(flightAlert: FlightAlertWorkshopTutorial): string {
return this.urgencyFor(flightAlert);
}
@Function()
public flightAlertCalculateUrgency(
flightAlerts: ObjectSet<FlightAlertWorkshopTutorial>,
): FunctionsMap<FlightAlertWorkshopTutorial, string> {
const result = new FunctionsMap<FlightAlertWorkshopTutorial, string>();
for (const flightAlert of flightAlerts.all()) {
result.set(flightAlert, this.urgencyFor(flightAlert));
}
return result;
}
}
배치 결과의 키는 입력 객체이며 값은 그 객체의 긴급도 문자열입니다. 입력 집합의 객체마다 매핑을 만들므로 생성기는 해당 객체의 결과를 문서에 삽입할 수 있습니다.