Ir al contenido

DataStore

El modulo DataStore es el sistema principal de almacenamiento de datos estructurados del workflow. Soporta múltiples acciones: agregar registros (add), agregar en lote (bulk), filtrar (filter), obtener un campo especifico (getField), verificar existencia (exists), eliminar (delete), modificar tags (modifyTags), reemplazar tags (replaceTags), operaciones batch por tags (batchTags) y mapear claves a valores (map). Los registros se organizan en grupos, cada uno con una clave única (key) y etiquetas (tags) opcionales. Las tags permiten categorizar y filtrar registros con modos OR, AND o exclusion. Soporta variables dinámicas {{variable}} en campos como key, row y tags.

Los parámetros varian según la acción seleccionada. Las variantes disponibles son:

ParámetroTipoRequeridoDescripción
groupdataStoreGroupSiGrupo donde almacenar el registro.
keytextSiCampo que se usara como identificador único. Soporta {{variable}}.
rowtextSiDatos a almacenar. Usar {{data}} para el input completo.
tagsdataStoreGroupTagsNoEtiquetas del grupo a asignar al registro.
ParámetroTipoRequeridoDescripción
groupdataStoreGroupSiGrupo donde almacenar los registros.
keytextSiCampo de cada objeto que se usara como key única.
dataKeytextSiArray de objetos a almacenar. Usar {{data}} si el input es el array.
tagsdataStoreGroupTagsNoEtiquetas a aplicar a todos los registros.
ParámetroTipoRequeridoDescripción
groupdataStoreGroupNoFiltrar por grupo (vacío = todos).
keytextNoFiltrar por key especifica.
tagsdataStoreGroupTagsNoFiltrar por etiquetas.
tagModeselectNoModo de filtrado: any (OR), all (AND), exclude. Por defecto: any.
limitnumberNoMáximo de registros que devuelve, los más recientes primero. Por defecto 50; súbelo (hasta 5000) si necesitas el historial completo de un grupo.

La salida de filter es la lista de registros (cada uno con su row_data ya convertido en objeto). El nodo necesita action: filter; si lo escribes a mano en una plantilla, no lo olvides.

ParámetroTipoRequeridoDescripción
groupdataStoreGroupSiGrupo donde buscar.
keytextSiKey del registro a buscar.
fieldtextSiNombre del campo a obtener del registro.
ParámetroTipoRequeridoDescripción
groupdataStoreGroupSiGrupo donde buscar.
keytextSiKey a buscar.
tagsdataStoreGroupTagsNoFiltrar también por tags (opcional).
tagModeselectNoModo de filtrado: any (OR), all (AND).
ParámetroTipoRequeridoDescripción
idtextNoID especifico del registro a eliminar.
groupdataStoreGroupNoGrupo del registro (si no se especifica ID).
keytextNoKey del registro a eliminar (usado con group).
ParámetroTipoRequeridoDescripción
idstextNoIDs de registros separados por coma.
groupdataStoreGroupNoGrupo para filtrar registros (si no hay IDs).
tagsdataStoreGroupTagsNoTags de filtro para encontrar registros.
adddataStoreGroupTagsNoTags a agregar a los registros.
removedataStoreGroupTagsNoTags a eliminar de los registros.

DataStore Replace Tags (action: replaceTags)

Sección titulada «DataStore Replace Tags (action: replaceTags)»
ParámetroTipoRequeridoDescripción
groupdataStoreGroupSiGrupo donde buscar los registros.
filterTagsdataStoreGroupTagsNoFiltrar registros por estos tags antes de reemplazar. Si vacío, aplica a todo el grupo.
tagModeselectNoModo de filtrado: any (OR), all (AND). Default: any.
oldTagdataStoreGroupTagsSiEl tag que se quiere reemplazar (seleccionar de la lista del grupo).
newTagtextSiEl nuevo tag que sustituira al anterior. Puede ser uno existente o nuevo.
ifNotFoundselectNoSi el registro no tiene el tag a reemplazar: skip = no hacer nada (default), assign = asignar el nuevo tag igualmente.
logselectNoRegistrar las acciones en la tabla de logs. Default: No.
ParámetroTipoRequeridoDescripción
groupdataStoreGroupSiGrupo donde buscar.
filterTagsdataStoreGroupTagsSiTags para filtrar los registros sobre los que se aplicara la acción.
filterModeselectNoModo de filtrado: any (OR), all (AND), exclude. Default: any.
batchActionselectSiAcción a aplicar: add (anadir tags), remove (eliminar tags), replace (reemplazar tag).
addTagsdataStoreGroupTagsNoTags a agregar (visible si batchAction = add).
removeTagsdataStoreGroupTagsNoTags a eliminar (visible si batchAction = remove).
oldTagdataStoreGroupTagsNoTag a reemplazar (visible si batchAction = replace).
newTagtextNoNuevo tag (visible si batchAction = replace).
ifNotFoundselectNoSi el tag no existe: skip o assign (visible si batchAction = replace).
logselectNoRegistrar en logs. Default: No.
ParámetroTipoRequeridoDescripción
groupdataStoreGroupSiGrupo donde buscar.
keystextSiArray de keys a mapear. Soporta {{data.ids}}.
fieldtextSiCampo a extraer de cada registro.
transformselectNoTransformación: uppercase, lowercase, trim, o ninguna.

Para no tener que recordar ni teclear a mano los nombres, los campos key y field incluyen un asistente: un botón con una lupa, junto al botón {} de variables. Al pulsarlo se abre una lista con lo que ya existe en el grupo elegido.

CampoNodosQué lista
keyAdd, Filter, Get Field, Exists, DeleteLas keys del grupo (hasta 50), con una vista previa del registro. Con más registros, escribe en el buscador para filtrar.
fieldGet Field, MapLos campos que aparecen en los últimos registros del grupo, con su tipo y un ejemplo.

Cómo usarlo:

  1. Elige primero el grupo. Sin grupo, el asistente te lo recuerda.
  2. Pulsa la lupa del campo key o field.
  3. Busca si hace falta y haz clic en el valor: se escribe en el campo.

Qué conviene saber:

  • Es una ayuda, no una obligación. Puedes seguir escribiendo el valor a mano o usar una variable como {{data.pedido}}.
  • Si el grupo es una variable (por ejemplo {{data.grupo}}), el asistente no puede saber qué hay dentro: escribe el valor a mano.
  • Los campos se deducen de los registros reales. Solo se ofrecen los de primer nivel, que son los que leen estos nodos. Si el grupo aún no tiene registros, no habrá campos que mostrar.
  • Permisos. Hace falta poder ver el DataStore; si no, el asistente avisa en lugar de mostrar la lista.
  • Carga bajo demanda. Los datos se piden al abrir el asistente, no al abrir el nodo.

Varia según la acción:

{ "nextModule": "siguiente", "data": { "success": true, "key": "clave_registro" } }
{ "nextModule": "siguiente", "data": [{ "id": 1, "group_name": "clientes", "record_key": "juan", "row_data": {}, "tags": [] }] }
{ "nextModule": "siguiente", "data": { "isFound": true, "message": "Found", "row": { "datos": "del_registro" } } }
{ "nextModule": "siguiente", "data": { "success": true, "deletedCount": 1 } }
{ "success": true, "replaced": 15, "skipped": 3, "assigned": 0, "total": 18 }
{ "success": true, "matchedRecords": 50, "action": "replace", "ids": [1, 2, 3], "result": { "replaced": 45, "skipped": 5, "assigned": 0, "total": 50 } }
{
"label": "DataStore Add",
"action": "add",
"group": "clientes",
"key": "{{data.email}}",
"row": "{{data}}",
"tags": ["nuevo"]
}
{
"action": "replaceTags",
"group": "pedidos",
"oldTag": "pendiente",
"newTag": "procesado",
"ifNotFound": "skip"
}

Reemplazar tag solo en registros que tengan ciertos tags

Sección titulada «Reemplazar tag solo en registros que tengan ciertos tags»
{
"action": "replaceTags",
"group": "pedidos",
"filterTags": ["urgente", "vip"],
"tagMode": "all",
"oldTag": "pendiente",
"newTag": "prioritario",
"ifNotFound": "assign",
"log": "true"
}

Batch: añadir tag a todos los registros que coincidan

Sección titulada «Batch: añadir tag a todos los registros que coincidan»
{
"action": "batchTags",
"group": "clientes",
"filterTags": ["nuevo"],
"filterMode": "any",
"batchAction": "add",
"addTags": ["bienvenida-enviada"]
}
{
"action": "batchTags",
"group": "clientes",
"filterTags": ["temporal", "test"],
"filterMode": "any",
"batchAction": "remove",
"removeTags": ["temporal", "test"]
}

Batch: reemplazar tag en registros que coincidan

Sección titulada «Batch: reemplazar tag en registros que coincidan»
{
"action": "batchTags",
"group": "productos",
"filterTags": ["activo"],
"filterMode": "any",
"batchAction": "replace",
"oldTag": "activo",
"newTag": "descontinuado",
"ifNotFound": "skip",
"log": "true"
}
  • Soporta variables dinámicas {{variable}} en los campos key, row, dataKey y tags.
  • Los campos key y field tienen un asistente para elegir valores existentes: ver Asistente de asignación.
  • Si la acción es add y ya existe un registro con la misma key en el grupo, se actualiza.
  • Para bulk, el input puede ser un array o un objeto que se convierte a array.
  • La acción exists retorna isFound: true/false con los datos del registro si existe.
  • La acción delete puede eliminar por ID directo o por combinación de group + key.
  • La acción modifyTags permite agregar y eliminar tags simultaneamente en múltiples registros.
  • La acción map permite obtener un campo especifico de múltiples registros a la vez, con transformaciones opcionales.
  • La acción replaceTags busca un tag especifico en cada registro y lo sustituye por otro. Si el registro no tiene el tag, se puede configurar para asignar el nuevo tag igualmente (ifNotFound: assign) o no hacer nada (ifNotFound: skip).
  • La acción batchTags primero filtra registros por coincidencia de tags y luego aplica una operación masiva: anadir tags, eliminar tags o reemplazar un tag por otro.
  • Cada variante tiene su propio parentNode dataStore y su propio icono/color para facilitar la identificación visual.
  • DataStoreTrigger (trigger que se activa por cambios en el DataStore)
  • dataframe (versión legacy, obsoleta)
  • decision (para evaluar resultados de consultas)
  • iterator (para iterar sobre resultados filtrados)