# SMOP (Pequenas Operações)

### Conceito <a href="#conceito" id="conceito"></a>

Muitas vezes, precisamos modificar um parâmetro antes que ele seja referenciado em um fluxo. Isso acontece, por exemplo, quando estamos buscando uma substring dentro de uma string ou precisamos adicionar um valor a um parâmetro numérico. Para isso, há a funcionalidade SMOPs (Small Operations), que permite que você crie pequenas operações diretamente no campo em que os parâmetros são referenciados. Isso significa que cada operação é executada e o seu resultado é passado como um parâmetro para o módulo.

SMOP é uma funcionalidade de transformação de dados que, utilizando-se de [JSONata](https://docs.jsonata.org/overview.html), permite que você realize operações de menor complexidade com parâmetros de um fluxo no **Skyone Studio**.

Algumas operações sobre parâmetros de um fluxo que podemos realizar utilizando-se da funcionalidade SMOP:

* Somar dois números, tais como um **offset** e um **rowCount**, na leitura de um banco de dados;
* Concatenar duas strings ou extrair um padrão de uma delas;
* Modificar o tipo de dado de um parâmetro como, por exemplo, de **string** para **number.**

Com a SMOP, sempre que um parâmetro é referenciado, é possível realizar pequenas operações, utilizando-se dos dados obtidos no fluxo.

As operações ideais para esta funcionalidade são de baixa complexidade, para que você possa transformar os dados usando apenas uma linha de código. A sintaxe é JSONata, a mesma utilizada no módulo "**Transformação de Dados**".

{% hint style="success" %}
A funcionalidade SMOP está disponível para módulos com autenticação **REST**, **Banco de Dados** e **E-mail**, e está presente em quase todos os [módulos ferramentais](/skyone-studio/modulos.md).
{% endhint %}

{% hint style="info" %}
A SMOP é ideal para manipulações de dados de menor complexidade, sem a necessidade de uma resposta externa. Para manipulações mais complexas de dados, igualmente sem resposta externa, recomendamos o módulo [Data Transformation](/skyone-studio/integracoes/fluxos/modulos-ferramentais/modulo-transformacao-de-dados.md). Por fim, o módulo[ Return](/skyone-studio/integracoes/fluxos/modulos-ferramentais/modulo-retorno.md) é ideal para manipulações mais complexas de dados, e que necessitem de uma resposta para uma requisição HTTP.
{% endhint %}

### **Exemplos de Operações** <a href="#exemplos-de-operacoes" id="exemplos-de-operacoes"></a>

Os exemplos abaixo descrevem pequenas operações (expressões) que podem ser realizadas, cujo código JSONata é limitado a uma linha e retorna apenas um elemento de saída, mesmo que esse elemento seja um array:

<table><thead><tr><th width="87">Ex.</th><th>Parâmetros originais</th><th>Expressão SMOP (JSONata)</th><th align="center">Novo parâmetro</th><th>Tipo de Dados</th></tr></thead><tbody><tr><td>1</td><td><pre class="language-json"><code class="lang-json">{
<strong>  "param1" : "minha string"
</strong>}
</code></pre></td><td>$length(param1)</td><td align="center">12</td><td>number</td></tr><tr><td>2</td><td><pre class="language-json"><code class="lang-json">{
  "param1" : 10,
  "param2" : 5
}
</code></pre></td><td>param1 + param2</td><td align="center">15</td><td>number</td></tr><tr><td>3</td><td><pre class="language-json"><code class="lang-json">{
  "param1" : 10,
  "param2" : 5
}
</code></pre></td><td>param1 + param2</td><td align="center">15</td><td>number</td></tr><tr><td>4</td><td><pre class="language-json"><code class="lang-json">{
  "param1" : "Integra",
  "param2" : ".",
  "param3" : "Sky"
}
</code></pre></td><td>param1 > param2</td><td align="center">VERDADEIRO</td><td>Boolean</td></tr><tr><td>5</td><td><pre class="language-json"><code class="lang-json">{
  "param1" : "arg1 arg2 arg3"
}
</code></pre></td><td>$split(param1, " ")</td><td align="center"><pre class="language-json"><code class="lang-json">[
  "arg1",
  "arg2",
  "arg3"
]
</code></pre></td><td>Array</td></tr><tr><td>6</td><td><pre class="language-json"><code class="lang-json">{
  "param1" : "123.45"
}
</code></pre></td><td>$number(param1)</td><td align="center">123.45</td><td>Number</td></tr><tr><td>7</td><td><pre class="language-json"><code class="lang-json">{
  "param1" : [1, 2, 3],
  "param2" : 0
}
</code></pre></td><td>param1[param2]</td><td align="center">1</td><td>number</td></tr></tbody></table>

### Criação de SMOPs <a href="#criacao-de-smops" id="criacao-de-smops"></a>

O acesso à configuração das SMOPs é feito durante a configuração da operação de um módulo compatível, na etapa da edição de um fluxo.

Para criar uma SMOP, siga os passos abaixo:

1. Clique em "**Editar**" do módulo desejado e compatível. Em seguida, clique no sinal de "**+**" localizado no bloco de configurações de parâmetros.
2. A janela de criação da SMOP será exibida, sendo que:

<figure><img src="/files/5eHkVInah9G8D9haldhq" alt=""><figcaption></figcaption></figure>

* **param1** (opcional): O parâmetro original que você deseja manipular deverá ser arrastado para este campo, sendo possível utilizar um parâmetro do fluxo ou um parâmetro de passos anteriores do fluxo. É possível, também, criar SMOPs utilizando-se de operações JSONata que não requerem parâmetros.
* **valor** (opcional): Caso o **param** informado seja um parâmetro de fluxo, o campo valor será preenchido automaticamente, sendo também possível informar o valor manualmente ou mesmo não o informar, conforme a necessidade. O tipo de dado utilizado deve ser compatível com o **param** informado.
* **adicionar parâmetro**: adicione mais parâmetros
* **Expressão** (obrigatório): Aqui você deverá informar a **operação desejada**. Todas as expressões JSONata são válidas. Além de usar um parâmetro, como nos [exemplos](#exemplos-de-operacoes) que informamos acima, é possível usar funções como **$now()**, que não requer parâmetros.
* **Resultado** (somente leitura): aqui será exibido automaticamente o resultado da **Expressão** criada.
* **Tipo** (somente leitura): aqui você verá automaticamente o tipo de dados do **Resultado** apresentado (string, number, Boolean, array ou object). Observe que o tipo informado deve estar de acordo com o tipo esperado pelo parâmetro do módulo.

3. Para adicionar um parâmetro à SMOP, selecionando-o entre os parâmetros disponíveis. Para fazer isso, arraste-o e solte-o no campo **param1** da SMOP. Clique em "**Adicionar parâmetro"** se quiser adicionar outro parâmetro.

Você pode utilizar até 3 parâmetros originais dentro de uma SMOP.

<figure><img src="/files/T3RZmlYNHVT0oAY1RTTC" alt=""><figcaption><p>Exemplo com 2 parâmetros</p></figcaption></figure>

4. Crie uma **Expressão** em JSONata para realizar a operação desejada, utilizando nossa [tabela](#exemplos-de-operacoes) de modelo. Por exemplo: `param1 + param2`.
5. Os campos **Resultado** e **Tipo** exibirão as informações correspondentes.
6. Clique em "**Salvar"** para concluir. O campo da operação passará a exibir a expressão “SMOP”, denotando que uma operação SMOP foi configurada.

### **Edição de uma SMOP**

Para editar uma SMOP:

1. Clique no sinal de seta para baixo, ao lado do campo com a SMOP que deseja editar:
2. Faça as alterações necessárias e clique em "**Salvar"**.

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

### **Exclusão de uma SMOP** <a href="#exclusao-de-uma-smop" id="exclusao-de-uma-smop"></a>

Para excluir uma SMOP há dois caminhos:

1. Clicar no sinal "**x**" que fica do lado direito do SMOP.
2. Abrir o modal de edição e clicar em "**Excluir"**.

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

{% hint style="info" %}
Não é possível reverter a exclusão. Caso precise novamente da mesma SMOP, será necessário refazê-la.
{% endhint %}


---

# Agent Instructions: 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:

```
GET https://docs.skyone.cloud/skyone-studio/integracoes/operacoes-de-dados/smop-pequenas-operacoes.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
