> For the complete documentation index, see [llms.txt](https://docs.skyone.cloud/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.skyone.cloud/espanol/skyone-studio/integraciones/operaciones-de-datos/smop-pequenas-operaciones.md).

# SMOP (Pequeñas Operaciones)

### **Concepto**

Muchas veces, necesitamos modificar un parámetro antes de que sea referenciado en un flujo. Esto ocurre, por ejemplo, cuando buscamos una *substring* dentro de una cadena de texto o cuando necesitamos sumar un valor a un parámetro numérico. Para estos casos, existe la funcionalidad **SMOPs (Small Operations)**, que permite crear pequeñas operaciones directamente en el campo donde los parámetros son referenciados. Esto significa que cada operación se ejecuta y su resultado es pasado como parámetro al módulo.

SMOP es una funcionalidad de transformación de datos que, utilizando[ JSONata](https://docs.jsonata.org/overview.html), permite realizar operaciones de baja complejidad con parámetros dentro de un flujo en Skyone Studio.

Algunas operaciones que podemos realizar utilizando SMOP son:

* Sumar dos números, como un ***offset*** y un ***rowCount***, en la lectura de una base de datos;
* Concatenar dos cadenas de texto o extraer un patrón de una de ellas;
* Modificar el tipo de dato de un parámetro, por ejemplo, de ***string*** a ***number***.

Con SMOP, siempre que se referencia un parámetro, es posible realizar pequeñas operaciones utilizando los datos obtenidos en el flujo.

Las operaciones ideales para esta funcionalidad son de baja complejidad, para que puedan realizarse usando solo **una línea de código**. La sintaxis utilizada es **JSONata**, la misma del módulo **“Transformación de Datos”**.

{% hint style="success" %}
La funcionalidad SMOP está disponible para módulos con autenticación REST, Base de Datos y E-mail, y está presente en casi todos los módulos de herramientas.
{% endhint %}

{% hint style="info" %}
SMOP es ideal para manipulaciones de datos simples que no requieren respuesta externa. Para manipulaciones más complejas sin respuesta externa, se recomienda el módulo Data Transformation. Finalmente, el módulo Return es ideal para manipulaciones complejas que requieren respuesta para una solicitud HTTP.
{% endhint %}

***

### Ejemplos de Operaciones

Los ejemplos a continuación describen pequeñas operaciones (expresiones) que pueden realizarse con JSONata en una sola línea y que devuelven solo un elemento de salida, incluso si ese elemento es un *array*:

<table><thead><tr><th>Ej.</th><th>Parámetros originales</th><th>Expresión SMOP (JSONata)</th><th>Nuevo parámetro</th><th>Tipo de dato</th></tr></thead><tbody><tr><td>1</td><td><pre class="language-json"><code class="lang-json">{
  "param1": "mi cadena"
}
</code></pre></td><td>$length(param1)</td><td>12</td><td>number</td></tr><tr><td>2</td><td><p></p><pre class="language-json"><code class="lang-json">{
  "param1": 10,
  "param2": 5
}
</code></pre></td><td>param1 + param2</td><td>15</td><td>number </td></tr><tr><td>3</td><td><p></p><pre class="language-json"><code class="lang-json">{
  "param1": 10,
  "param2": 5
}
</code></pre></td><td>param1 + param2</td><td>15</td><td>number </td></tr><tr><td>4</td><td><p></p><pre class="language-json"><code class="lang-json">{
  "param1": "Integra",
  "param2": ".",
  "param3": "Sky"
}
</code></pre></td><td>param1 > param2</td><td>VERDADERO</td><td>Boolean </td></tr><tr><td>5</td><td><p></p><pre class="language-json"><code class="lang-json">{
  "param1": "arg1 arg2 arg3"
}
</code></pre></td><td>$split(param1, " ")</td><td><p></p><pre class="language-json"><code class="lang-json">[
  "arg1",
  "arg2",
  "arg3"
]
</code></pre></td><td>Array </td></tr><tr><td>6</td><td><p></p><pre class="language-json"><code class="lang-json">{
  "param1": "123.45"
}
</code></pre></td><td>$number(param1)</td><td>123,45</td><td>Number </td></tr><tr><td>7</td><td><p></p><pre class="language-json"><code class="lang-json">{
  "param1": [1, 2, 3],
  "param2": 0
}
</code></pre></td><td>param1[param2]</td><td>1</td><td>number </td></tr></tbody></table>

### Creación de SMOPs

El acceso a la configuración de las SMOPs se realiza durante la configuración de la operación de un módulo compatible, en la etapa de edición de un flujo.

Para crear una SMOP, sigue estos pasos:

1. Haz clic en **“Editar”** en el módulo deseado y compatible. Luego, haz clic en el signo **“+”** ubicado en el bloque de configuración de parámetros.
2. Se mostrará la ventana de creación de la SMOP, donde encontrarás los siguientes campos:

<figure><img src="/files/d9LlqGRNTQnPzhGqWfeJ" alt=""><figcaption></figcaption></figure>

* **param1 (opcional):** El parámetro original que deseas manipular debe arrastrarse a este campo. Es posible usar un parámetro del flujo o uno de pasos anteriores. También es posible crear SMOPs utilizando expresiones JSONata que no requieren parámetros.
* **valor (opcional):** Si el parámetro informado es un parámetro del flujo, este campo se llenará automáticamente. También es posible ingresarlo manualmente o dejarlo vacío, según la necesidad. El tipo de dato debe ser compatible con el parámetro.
* **Agregar parámetro:** Permite añadir más parámetros.
* **Expresión (obligatorio):** Aquí debes ingresar la operación deseada. Todas las expresiones JSONata son válidas. Además de usar un parámetro, también puedes usar funciones como `$now()`, que no requieren parámetros.
* **Resultado (solo lectura):** Aquí se mostrará automáticamente el resultado de la expresión creada.
* **Tipo (solo lectura):** Aquí se mostrará automáticamente el tipo de dato del resultado (string, number, boolean, array o object). El tipo mostrado debe coincidir con el tipo esperado por el parámetro del módulo.

3. Para añadir un parámetro a la SMOP, simplemente arrástralo y suéltalo en el campo **param1**. Haz clic en **“Agregar parámetro”** si deseas añadir otro.

Puedes utilizar **hasta 3 parámetros originales** dentro de una SMOP.

<figure><img src="/files/RZlhwOO5yxLnTBeclsx5" alt=""><figcaption></figcaption></figure>

4. Crea una expresión en JSONata para realizar la operación deseada, utilizando nuestra tabla de modelos. Por ejemplo:\
   `param1 + param2`
5. Los campos **Resultado** y **Tipo** mostrarán la información correspondiente.
6. Haz clic en **“Guardar”** para finalizar. El campo de operación pasará a mostrar la expresión “SMOP”, indicando que se ha configurado una operación SMOP.

***

#### Edición de una SMOP

Para editar una SMOP:

1. Haz clic en la flecha hacia abajo junto al campo donde se encuentra la SMOP;
2. Realiza los cambios necesarios y haz clic en **“Guardar”**.

<figure><img src="/files/K9u8HbyPTZGqp8X65JAG" alt=""><figcaption></figcaption></figure>

***

#### Eliminación de una SMOP

Existen dos formas de eliminar una SMOP:

* Haciendo clic en el ícono **“x”** ubicado al lado derecho de la SMOP;
* Abriendo el modal de edición y haciendo clic en **“Eliminar”**.

<figure><img src="/files/457jgnQDS2ZRBTeCzfpi" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
No es posible revertir la eliminación. Si necesitas nuevamente la misma SMOP, deberás recrearla.
{% endhint %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.skyone.cloud/espanol/skyone-studio/integraciones/operaciones-de-datos/smop-pequenas-operaciones.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
