Aviso:

Para brindarle información de soporte completa de manera más rápida, el contenido de esta página ha sido traducido al español mediante traducción automática. Para consultar la información de soporte más precisa, consulte la versión en inglés de este contenido.

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:

copy
$
npm install express --save

Esto instalará el módulo Express y guardará las dependencias. catalyst_payslip_express_install

Esta información también se actualizará en el archivo package.json. catalyst_payslip_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.

Nota:
  • 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.

index.js
copy
'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
View more

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