- Überblick
- JavaScript-Funktionen
- Erste Schritte
- Erstellen von JavaScript-Funktionen
- HTTP-Trigger und Routing
- Funktionskontext
- Zugriff auf Plattformdienste
- Testen und Fehlerbehebung
- Python-Funktionen
- Bereitstellen und ausführen
Erstellen von JavaScript-Funktionen
Anatomie einer JavaScript-Funktion, die den HTTP-Endpunkt und die Auftragsstrukturen, die typisierten Verträge, die Antworthilfen, die Fehlerbehandlung und die Protokollierung abdeckt.
Jede Funktion ist ein Modul, das standardmäßig ein defineFunction(...) -Objekt exportiert. Die CLI erkennt ihn über die Zuordnung functions in uipath.json.
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) => { /* ... */ },
});
Die beiden Formen
Ein einzelnes Feldpaar entscheidet, wie eine Funktion aufgerufen wird.
| Form | Deklaration | Aufgerufen von |
|---|---|---|
| HTTP-Endpunkt | method und path festgelegt sind | Eine App oder ein beliebiger HTTP-Client über die Trigger-URL der Funktion |
| Auftrag | method und path wurden weggelassen | Eine Serviceaufgabe von Maestro, eine Aktivität Run Job, die Orchestrator-API oder ein Auftragstrigger |
Beide Formen werden auf die gleiche Weise verpackt und bereitgestellt. Eine HTTP-Funktion unterstützt eine codierte App. Eine Auftragsfunktion ist ein Schritt innerhalb einer größeren Automatisierung. Siehe HTTP-Trigger und Routing für die erste und Aufrufen von Funktionen für die zweite.
Getypte Verträge
defineSchema<T>() wandelt eine TypeScript-Schnittstelle in das JSON-Schema um, das die Variablenbindung auf jeder Aufrufoberfläche steuert. Die Schnittstelle ist die einzige Source of Truth – sie gibt den Handler an und deklariert den Vertrag:
interface CreateOrderInput {
/** Customer reference. */
customerId: string;
/** @default 1 */
quantity?: number;
}
interface CreateOrderInput {
/** Customer reference. */
customerId: string;
/** @default 1 */
quantity?: number;
}
Optionale Eigenschaften werden im Schema optional, und ein JSDoc @default -Tag überträgt den Standardwert durch. Übergeben Sie in JavaScript-Projekten ein JSON-Schemaobjektliteral anstelle von defineSchema<T>().
Schemas werden aus der Quelle extrahiert, ohne sie auszuführen, also schreiben Sie sie als Literal. Ein Wert, auf den über eine Variable verwiesen wird – eine numerische Grenze oder ein gemeinsames Schemaobjekt – kann aus dem extrahierten Schema verworfen werden, sodass die Funktion keinen Vertrag mehr hat, an den sie gebunden werden kann.
Die Deklaration von output ist optional. Wenn vorhanden, wird der Rückgabewert des Handlers anhand dieses validiert, bevor er die Funktion verlässt.
Ergebnisse werden zurückgegeben
Geben Sie ein einfaches Objekt zurück, um 200 mit diesem Objekt als Textkörper zu senden:
handler: async (input) => ({ orderId: input.customerId, processed: true }),
handler: async (input) => ({ orderId: input.customerId, processed: true }),
Geben Sie für alles andere ein Antwortobjekt zurück oder verwenden Sie eine Hilfsfunktion:
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 } };
Da { status, body } die Antwortform ist, wird ein eigenes Ausgabefeld mit dem Namen status, das eine Zahl enthält, als Statuscode gelesen. Der deklarierte Status wird mit einem leeren Textkörper gesendet und der Rest Ihrer Nutzlast wird ohne Fehler verworfen. Benennen Sie das Feld mit einem anderen Namen, z. B. httpStatus.
Fehler
Lösen Sie FunctionError aus, um mit einem bestimmten Status und einer bestimmten Meldung zu fehlschlagen:
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);
}
Ein unerwarteter Fehler wird zu 500. Wenn die Funktion als Auftrag ausgeführt wird, führt ein Fehler zu einem Fehler im Auftrag und die Nachricht erreicht das Auftragsergebnis.
Protokollierung
Verwenden Sie den SDK-Protokollierer, damit die Ausgabe der Ausführung zugeordnet wird und die Orchestrator-Auftragsprotokolle erreicht:
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}`);
Die Ausgabe console.* wird nicht weitergeleitet. Geheime Werte dürfen niemals protokolliert werden.
Nächste Schritte
- HTTP-Trigger und Routing
- Funktionskontext – Identität, Plattformkoordinaten und Anforderungsdaten.
defineFunctionReferenz – jedes Feld und seine Standardeinstellungen.