JavaScript 関数の構築
JavaScript 関数の構造です。HTTP エンドポイントとジョブの形状、型指定されたコントラクト、応答ヘルパー、エラー処理、およびログをカバーします。
すべての関数は、 defineFunction(...) オブジェクトをデフォルトでエクスポートするモジュールです。CLI は、uipath.jsonのfunctionsマップを介してこれを検出します。
import { defineFunction, defineSchema } from "@uipath/coded-functions-js-sdk";
export default defineFunction({
name: "process-order",
input: defineSchema<Input>(),
output: defineSchema<Output>(),
handler: async (input, ctx) => { /* ... */ },
});
import { defineFunction, defineSchema } from "@uipath/coded-functions-js-sdk";
export default defineFunction({
name: "process-order",
input: defineSchema<Input>(),
output: defineSchema<Output>(),
handler: async (input, ctx) => { /* ... */ },
});
2 つの図形
1 つのフィールド ペアで、関数の呼び出し方法が決まります。
| 図形 | 宣言 | によって呼び出されます |
|---|---|---|
| HTTP エンドポイント | method と path が設定されている | アプリまたは任意の HTTP クライアント (関数のトリガー URL 経由) |
| Job | method と path 省略 | Maestro サービス タスク、[ジョブを実行] アクティビティ、Orchestrator API、またはジョブ トリガー |
どちらの図形も同じ方法でパッケージ化および展開されます。HTTP 関数は、コード化されたアプリを支えるものです。職務は、より大きなオートメーション内のステップです。1 つ目の「 HTTP トリガーとルーティング 」、2 つ目の「 関数の呼び出し 」をご覧ください。
型指定されたコントラクト
defineSchema<T>() 、TypeScript インターフェイスを JSON スキーマに変換し、すべての呼び出しサーフェスで変数のバインドを駆動します。インターフェイスは信頼できる唯一の情報源であり、ハンドラーを型付けし、コントラクトを宣言します。
interface CreateOrderInput {
/** Customer reference. */
customerId: string;
/** @default 1 */
quantity?: number;
}
interface CreateOrderInput {
/** Customer reference. */
customerId: string;
/** @default 1 */
quantity?: number;
}
スキーマでは任意のプロパティが任意になり、JSDoc @default タグによって既定値が保持されます。JavaScript プロジェクトでは、 の代わりに JSON スキーマ オブジェクト リテラル defineSchema<T>()渡します。
スキーマはソースを実行せずにソースから抽出されるため、リテラルとして記述します。変数を介して参照される値 (数値のバインドまたは共有スキーマ オブジェクト) を抽出されたスキーマから削除し、関数にバインドするコントラクトを残す可能性があります。
output宣言は任意です。存在する場合、ハンドラーの戻り値は、関数を離れる前にそれに対して検証されます。
結果を返す
プレーンなオブジェクトを返して、そのオブジェクトを本体として送信する 200 。
handler: async (input) => ({ orderId: input.customerId, processed: true }),
handler: async (input) => ({ orderId: input.customerId, processed: true }),
それ以外の場合は、応答オブジェクトを返すか、ヘルパーを使用します。
import { ok, created, notFound } from "@uipath/coded-functions-js-sdk";
return created({ id: "new-id" }); // 201
return notFound("No such order"); // 404
return { status: 202, body: { queued: true } };
import { ok, created, notFound } from "@uipath/coded-functions-js-sdk";
return created({ id: "new-id" }); // 201
return notFound("No such order"); // 404
return { status: 202, body: { queued: true } };
{ status, body } は応答の形状であるため、数値を保持する独自の名前のstatus出力フィールドがステータス コードとして読み取られます。宣言されたステータスは空の本文で送信され、残りのペイロードはエラーなしでドロップされます。フィールドに別の名前を付けます (例: httpStatus)。
Error
失敗する FunctionError をスローし、特定のステータスとメッセージが表示されます。
import { FunctionError } from "@uipath/coded-functions-js-sdk";
if (!input.customerId) {
throw new FunctionError("customerId is required", 400);
}
import { FunctionError } from "@uipath/coded-functions-js-sdk";
if (!input.customerId) {
throw new FunctionError("customerId is required", 400);
}
キャッチされないエラーは 500になります。関数をジョブとして実行する場合、スローされたエラーによってジョブがエラーになり、メッセージがジョブの結果に到達します。
ログ
SDK ロガーを使用して、出力が実行に帰属し、Orchestrator ジョブのログに到達するようにします。
import { logger } from "@uipath/coded-functions-js-sdk";
logger.info(`Processed order ${input.orderId}`);
import { logger } from "@uipath/coded-functions-js-sdk";
logger.info(`Processed order ${input.orderId}`);
console.* 出力は転送されません。シークレット値を決してログに記録してはなりません。
次のステップ
- HTTP トリガーとルーティング
- 関数コンテキスト — ID、プラットフォーム座標、要求データ
defineFunction参照 — すべてのフィールドとその既定値