- Información general
- Funciones JavaScript
- Funciones de Python
- Implementar y ejecutar
Crear funciones JavaScript
Anatomía de una función JavaScript, que cubre el punto final HTTP y las formas de trabajo, los contratos escritos, los ayudantes de respuesta, la gestión de errores y el registro.
Cada función es un módulo que exporta de forma predeterminada un objeto defineFunction(...). CLI lo descubre a través del mapa functions en 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) => { /* ... */ },
});
Las dos formas
Un solo par de campos decide cómo se invoca una función.
| Forma | Declaración | Invocado por |
|---|---|---|
| Punto final HTTP | method y path están establecidos | Una aplicación o cualquier cliente HTTP, a través de la URL del desencadenador de la función |
| Trabajo | method y path omitido | Una tarea de servicio de Maestro, una actividad Ejecutar trabajo, la API de Orchestrator o un desencadenador de trabajo |
Ambas formas se empaquetan e implementan de la misma manera. Una función HTTP es lo que respalda una aplicación codificada; una función de trabajo es un paso dentro de una automatización más grande. Consulta Desencadenadores y enrutamiento HTTP para lo primero e Invocar funciones para lo segundo.
Contratos escritos
defineSchema<T>() convierte una interfaz de TypeScript en el esquema JSON que impulsa la vinculación de variables en cada superficie de invocación. La interfaz es la única fuente de verdad: escribe el controlador y declara el contrato:
interface CreateOrderInput {
/** Customer reference. */
customerId: string;
/** @default 1 */
quantity?: number;
}
interface CreateOrderInput {
/** Customer reference. */
customerId: string;
/** @default 1 */
quantity?: number;
}
Las propiedades opcionales se convierten en opcionales en el esquema, y una @default etiqueta JSDoc lleva el valor predeterminado. En los proyectos de JavaScript, pasa un literal de objeto de esquema JSON en lugar de defineSchema<T>().
Los esquemas se extraen del origen sin ejecutarlo, así que escríbelos como literales. Un valor al que se hace referencia a través de una variable (un límite numérico o un objeto de esquema compartido) puede eliminarse del esquema extraído, dejando la función sin contrato al que vincularse.
Declarar output es opcional. Cuando está presente, el valor devuelto del controlador se valida contra él antes de salir de la función.
Devolver resultados
Devuelve un objeto plano para enviar 200 con ese objeto como cuerpo:
handler: async (input) => ({ orderId: input.customerId, processed: true }),
handler: async (input) => ({ orderId: input.customerId, processed: true }),
Para cualquier otra cosa, devuelve un objeto de respuesta o utiliza un ayudante:
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 } };
Como { status, body } es la forma de respuesta, un campo de salida propio llamado status que contiene un número se lee como código de estado. El estado declarado se envía con un cuerpo vacío y el resto de tu carga útil se descarta, sin ningún error. Nombra el campo de otra manera, como httpStatus.
Errores
Lanza FunctionError para fallar con un estado y mensaje específicos:
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);
}
Un error no detectado se convierte en un 500. Cuando la función se ejecuta como un trabajo, se produce un error en el trabajo y el mensaje llega al resultado del trabajo.
Registro
Usa el registrador SDK para que la salida se atribuya a la ejecución y llegue a los registros de trabajo de 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}`);
La salida console.* no se reenvía. Los valores secretos nunca deben registrarse.
Próximos pasos
- Desencadenadores HTTP y enrutamiento
- Contexto de la función : identidad, coordenadas de la plataforma y datos de la solicitud.
- Referencia
defineFunction: cada campo y sus valores predeterminados.