InicioDocumentaciónPro-Code & SDK

Desarrollo Pro-Code y SDK

Para escenarios complejos que requieren algoritmos personalizados, integraciones propietarias o alto rendimiento de procesamiento, Vivabots ofrece un soporte Pro-Code de primera clase.

Puedes escribir código directamente en actividades especiales dentro del lienzo o empaquetar librerías externas para utilizarlas en toda tu organización.


Actividad: Ejecutar Código (Script Inline)

La forma más rápida de integrar código en tu flujo de trabajo es mediante la actividad Ejecutar Código. Esta actividad te permite elegir tu lenguaje preferido y editar la lógica en un editor embebido con resaltado de sintaxis.

Ejemplo 1: Lógica Avanzada en C#

La ejecución en C# se compila en memoria como ensamblado nativo (.NET Core), ofreciendo el rendimiento más rápido posible para manipulación de strings y procesamiento lógico.

// Recibimos variables del flujo como argumentos de entrada
string inputData = args.Get<string>("InputRawText");
var cleanList = new List<string>();

// Procesamos el texto línea por línea aplicando lógica de negocio
foreach (var line in inputData.Split('\n')) {
    var trimmed = line.Trim();
    if (trimmed.StartsWith("VIVA-") && trimmed.Length == 12) {
        cleanList.Add(trimmed);
    }
}

// Retornamos el resultado al flujo de trabajo
args.Set("OutputCodes", cleanList.ToArray());
args.Set("TotalProcessed", cleanList.Count);

Ejemplo 2: Manipulación JSON en JavaScript (Node.js)

El motor de JavaScript utiliza una sandbox ultrarrápida basada en V8. Es ideal para parsear estructuras complejas y realizar llamadas HTTP personalizadas.

// Parsear un payload JSON y calcular estadísticas de compras
const payload = JSON.parse(args.inputJson);
let totalSpent = 0;
let vipClients = [];

payload.customers.forEach(client => {
  let subtotal = client.orders.reduce((sum, order) => sum + order.amount, 0);
  if (subtotal > 1500) {
    vipClients.push({ id: client.id, name: client.name, total: subtotal });
  }
  totalSpent += subtotal;
});

// Guardar resultados en variables de salida de Vivabots
args.vipCount = vipClients.length;
args.vipList = JSON.stringify(vipClients);
args.averageOrder = totalSpent / (payload.customers.length || 1);

Ejemplo 3: Análisis de Datos en Python

El ejecutor de Python es perfecto para automatizaciones que involucran ciencia de datos, inteligencia artificial o manipulación avanzada de archivos locales utilizando librerías populares como pandas y openpyxl.

import pandas as pd
import json

# Obtener ruta del archivo Excel desde el flujo visual
excel_path = args.get("ExcelFilePath")

# Leer y filtrar datos usando Pandas
df = pd.read_excel(excel_path)
filtered_df = df[(df['Estado'] == 'Pendiente') & (df['Monto'] > 500)]

# Convertir el resultado a formato JSON para el flujo
json_result = filtered_df.to_json(orient='records')

# Devolver variables al flujo
args.set("JsonResult", json_result)
args.set("RowCount", len(filtered_df))

Creación de Actividades con el SDK de Vivabots

Si tu equipo de desarrollo crea componentes reutilizables, la mejor práctica es compilar una librería de clases (.dll) en C# y empaquetarla como un paquete NuGet. Esto permite que se carguen directamente en la barra de herramientas de Viva Builder.

Estructura básica de una clase de actividad:

using System;
using System.Activities;
using Vivabots.Sdk.Attributes;

namespace Vivabots.Custom.Activities
{
    [DisplayName("Enviar Alerta de Slack")]
    [Description("Envía un mensaje formateado a un canal de Slack mediante un webhook.")]
    [Category("Notificaciones")]
    public class SendSlackAlert : CodeActivity
    {
        // Propiedades configurables en el Panel de Propiedades de Builder
        [RequiredArgument]
        [Category("Entrada")]
        public InArgument<string> WebhookUrl { get; set; }

        [RequiredArgument]
        [Category("Entrada")]
        public InArgument<string> Message { get; set; }

        [Category("Salida")]
        public OutArgument<bool> IsSuccess { get; set; }

        protected override void Execute(CodeActivityContext context)
        {
            string url = WebhookUrl.Get(context);
            string msg = Message.Get(context);

            try
            {
                // Lógica de comunicación HTTP con la API de Slack
                bool result = SlackHttpClient.PostMessage(url, msg);
                IsSuccess.Set(context, result);
            }
            catch (Exception ex)
            {
                IsSuccess.Set(context, false);
                throw new Exception($"Error en SendSlackAlert: {ex.Message}");
            }
        }
    }
}

Al subir este paquete a Viva Consola, estará disponible para que cualquier analista lo arrastre a su lienzo de diseño, abstrayendo la complejidad técnica detrás de una actividad visual simple.