El ayudante de renderizado
Mantenga la lógica pura en su propio archivo para que sea fácil de unir-test. Esto arrastra un registro en{{dot.path}} tokens y los sustituye.
El manejador
El manejador utiliza elCoreApiClient
generado para leer y escribir datos CRM. Carga la plantilla, carga el registro de destino, rellena
el cuerpo y crea un document.
loadRecordValues ejecuta una consulta diferente para una Persona vs. una Empresa y aplana
el resultado — vea
load-record-values.ts.
Exponerlo como una herramienta y una acción de flujo de trabajo
Un solodefineLogicFunction puede llevar varios disparadores. Aquí, toolTriggerSettings
hace que sea llamable por agentes IA, y workflowActionTriggerSettings lo convierte en un paso
en el constructor de flujo de trabajo visual. Ambos describen su entrada con un esquema JSON.
templateId y recordId —
see generate-document-input.schema.ts.
Conceder acceso
Funciones lógicas ejecutadas como el rol de la aplicación. Necesita leer plantillas y registrar y crear documentos, así que permita eso ensrc/roles/default-role.ts:
UPLOAD_FILE permite a la función cargar el PDF generado en la siguiente sección.
Ver Roles para obtener permisos más finos.
Adjuntar un archivo PDF real
Un campo de texto renderizado es útil, pero los usuarios quieren un documento real. Vamos a generar un PDF y almacenarlo en el registro como un archivo descargable. Primero, da al objetodocument un campo ARCHIVOS para mantener el PDF. Las aplicaciones suben
a sus campos de archivos propios, así que este campo es qué rutas cargar:
generate-document-pdf.ts.
Analiza el Markdown en tokens con marked.lexer, y luego los dispone con
pdf-lib: encabezados reales, texto en negrita/cursiva, listas con viñetas y numeradas,
citas en bloque y líneas de separación: una representación A4 pulida y de varias páginas de la propia plantilla,
en lugar de un bloque de texto.

Las fuentes incorporadas de pdf-lib’s usan la codificación WinAnsi, por lo que los acentos de WesternEuropean renderizan
fuera de la caja el ayudante mapea comillas inteligentes y guiones y deja caer caracteres que
no puede codificar. Renderizar escrituras no latinas (chino, árabe, cirílico) implicaría
incrustar una fuente Unicode.
uploadFile rutas bytes
a tu campo de archivos propiedad de la aplicación; el id devuelto es lo que guardas:

uploadFile solo se dirige a campos de archivos propiedad de la app (por lo que las cargas siempre requieren una
app que sea propietaria del campo, además del indicador de rol UPLOAD_FILE). Por eso el PDF
aterriza en el propio campo file del registro — el mismo patrón que el
call-recorder app
usa para grabaciones.Siguiente: rutas HTTP →
Servir la función sobre HTTP y representar documentos como páginas web.