Configurar la función Advanced I/O
Ahora, comenzaremos a codificar la aplicación generadora de nóminas configurando el componente de función.
El directorio de la función, functions/payslip_generator_function contiene:
- El archivo principal de la función index.js
- El archivo de configuración catalyst-config.json
- Módulos de Node
- Archivos de dependencias package.json y package-lock.json
Agregará código en el archivo index.js.
La función Advanced I/O contiene las siguientes funcionalidades:
-
Activa el SDK de PDF & Screenshot para ejecutar un navegador headless donde renderizamos los detalles ingresados en la plantilla y generamos un documento PDF.
-
Activa el SDK de Send Mail para adjuntar el documento PDF y enviarlo por correo electrónico desde dentro de la aplicación.
Instalar el framework Express para Node.js
Utilizaremos el framework Express para codificar la función Advanced I/O. Para importar el paquete Express en el código de su función, debe instalar la dependencia de Express en su sistema.
Para instalar Express.js en su máquina local, navegue al directorio principal de la función (functions/payslip_generator_function) en su terminal y ejecute el siguiente comando:
Esto instalará el módulo Express y guardará las dependencias.

Esta información también se actualizará en el archivo package.json.

Ahora, comencemos a codificar la función Advanced I/O.
Copie el código proporcionado a continuación y péguelo en index.js en el directorio functions/payslip_generator_function de su proyecto, y guarde el archivo. Puede usar cualquier IDE de su elección para trabajar con los archivos de la aplicación.
-
Por favor, revise el código en esta sección para asegurarse de que lo comprende completamente.
-
Asegúrese de haber proporcionado su Template ID en la línea 33, y el ID de correo electrónico configurado en la línea 68.
'use strict'
const express = require('express')
const catalyst = require('zcatalyst-sdk-node')
const fs = require('fs')
const app = express()
const os = require('os')
const path = require('path')
app.use(express.json())
app.post('/generatepayslip', async (req, res) => {
try {
const catalystApp = catalyst.initialize(req)
const smartbrowz = catalystApp.smartbrowz()
if (!req.body) {
throw new Error('Request body is empty')
}
const {
employeeName,
employeeEmail,
employeeId,
designation,
basicSalary,
allowances,
deductions,
paymentMethod
} = req.body
const date = new Date()
const currentMonth = date.toLocaleString('default', { month: 'long' })
const currentYear = date.getFullYear()
const filepath = path.join(os.tmpdir(), '/payslip.pdf')
// Generar salida desde la plantilla
await smartbrowz
.generateFromTemplate('xxxxxxxx12345', // Proporcione su Template ID
{
// Datos que se pasan a la plantilla recuperados del client
template_data: {
company: 'Zylker Technologies',
employeeName,
employeeId,
designation,
basicSalary,
allowances,
deductions,
totalEarnings:
parseFloat(basicSalary) + parseFloat(allowances),
netSalary:
parseFloat(basicSalary) +
parseFloat(allowances) -
parseFloat(deductions),
paymentMethod,
month: currentMonth,
year: currentYear
}
})
.then((inputStream) => {
return new Promise((resolve, reject) => {
inputStream
.pipe(fs.createWriteStream(filepath))
.on('close', resolve)
.on('error', reject)
})
}).catch((err) => {
throw err
})
await catalystApp
.email()
.sendMail({
from_email: 'emmy@zylker.com', // Proporcione su ID de correo electrónico configurado en la Consola
to_email: [employeeEmail],
html_mode: true,
subject: `Payslip for the month of ${currentMonth} ${currentYear}`,
content: `Hello ${employeeName}, Your payslip for ${currentMonth} ${currentYear} has been issued. You can find your payslip attached with this email. Cheers,Zylker`,
attachments: [fs.createReadStream(filepath)] // crear un flujo de archivo para el archivo adjunto
})
.then((row) => {
res.status(200).send('Payslip generated and sent to Employee email')
})
.catch((err) => {
throw err
})
} catch (error) {
console.log(error)
res.status(500).send(error)
}
})
module.exports = app
El directorio de la función está ahora configurado. Ahora podemos proceder a configurar el directorio del client.
Última actualización 2026-03-20 21:51:56 +0530 IST