UiPath Documentation
functions
latest
false
Guide de l'utilisateur des fonctions
  • Vue d'ensemble (Overview)
    • À propos des fonctions
  • JavaScript functions
    • Démarrage
    • Building JavaScript functions
    • HTTP triggers and routing
    • Function context
    • Accéder aux services de la plateforme
    • Test et débogage
  • Fonctions Python
  • Déployer et exécuter
Important :
Ce contenu a été traduit à l'aide d'une traduction automatique. La localisation du contenu nouvellement publié peut prendre 1 à 2 semaines avant d’être disponible.

Building JavaScript functions

Anatomy of a JavaScript function, covering the HTTP endpoint and job shapes, typed contracts, response helpers, error handling, and logging.

Every function is a module that default-exports a defineFunction(...) object. The CLI discovers it through the functions map 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) => { /* ... */ },
});

The two shapes

A single field pair decides how a function is invoked.

ShapeDeclarationInvoked by
HTTP endpointmethod and path are setAn app or any HTTP client, through the function's trigger URL
Jobmethod and path omittedA Maestro Service Task, a Run Job activity, the Orchestrator API, or a job trigger

Both shapes are packaged and deployed the same way. An HTTP function is what backs a Coded App; a job function is a step inside a larger automation. See HTTP triggers and routing for the first and Invoking functions for the second.

Typed contracts

defineSchema<T>() turns a TypeScript interface into the JSON Schema that drives variable binding on every invocation surface. The interface is the single source of truth — it types the handler and declares the contract:

interface CreateOrderInput {
  /** Customer reference. */
  customerId: string;
  /** @default 1 */
  quantity?: number;
}
interface CreateOrderInput {
  /** Customer reference. */
  customerId: string;
  /** @default 1 */
  quantity?: number;
}

Optional properties become optional in the schema, and a JSDoc @default tag carries the default value through. In JavaScript projects, pass a JSON Schema object literal in place of defineSchema<T>().

Schemas are extracted from the source without running it, so write them as literals. A value referenced through a variable — a numeric bound, or a shared schema object — can be dropped from the extracted schema, leaving the function with no contract to bind against.

Declaring output is optional. When present, the handler's return value is validated against it before it leaves the function.

Returning results

Return a plain object to send 200 with that object as the body:

handler: async (input) => ({ orderId: input.customerId, processed: true }),
handler: async (input) => ({ orderId: input.customerId, processed: true }),

For anything else, return a response object or use a helper:

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 } };
Avertissement :

Because { status, body } is the response shape, an output field of your own named status holding a number is read as a status code. The declared status is sent with an empty body and the rest of your payload is dropped, with no error. Name the field something else, such as httpStatus.

Erreurs (Errors)

Throw FunctionError to fail with a specific status and message:

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);
}

An uncaught error becomes a 500. When the function runs as a job, a thrown error faults the job and the message reaches the job result.

Journalisation

Use the SDK logger so output is attributed to the run and reaches Orchestrator job logs:

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.* output is not forwarded. Secret values must never be logged.

Prochaines étapes

Cette page vous a-t-elle été utile ?

Connecter

Besoin d'aide ? Assistance

Vous souhaitez apprendre ? UiPath Academy

Vous avez des questions ? UiPath Forum

Rester à jour