> For the complete documentation index, see [llms.txt](https://kb.stoque.com.br/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://kb.stoque.com.br/zeev/como-construir-processos/como-desenhar-processos/o-que-sao-atividades/tarefa-de-script.md).

# Tarefa de script

![](/files/0EGndwtEE2UiJz9M38FE)

A tarefa de script executa um código de programação pré-configurado de modo a obter um resultado pré-definido, geralmente usando como base dados da solicitação.&#x20;

{% hint style="danger" %}
Esse recurso está disponível somente em planos de cloud privado do Zeev, [e seu uso para novas automações é desestimulado](#alternativa-para-as-tarefas-de-script).
{% endhint %}

Ela permite executar os seguintes tipos de script:

* Comandos SQL;
* Comandos Powershell;
* Classe .NET C#.

## Casos de uso

As tarefas de script geralmente são usadas para:

* Realizar algum tipo de cálculo matemático envolvendo um ou mais valores de campos do formulário. Por exemplo, multiplicar os valores dos campos `quantidade` e `valorUnitario` e salvar o resultado no campo `valorTotal;`

* Realizar algum tipo de cálculo de datas envolvendo um ou mais valores de campos do formulário. Por exemplo subtrair 30 dias do campo `dataLimite` e salvar o valor no campo `dataAlerta`;

* Realizar algum tipo de manipulação de textos envolvendo um ou mais valores de campos do formulário. Por exemplo concatenar os valores dos campos `primeiroNome`e `sobrenome` e salvar o valor no campo `nomeCompleto`;

A integração entre o código de programação e as variáveis da solicitação são feitas com o uso de [tokens](/zeev/outras-configuracoes-avancadas/dicionario-de-tokens-de-variaveis.md).  Veja, por exemplo, o exemplo de código fictício abaixo que irá concatenar os campos `primeiroNome`e `sobrenome`

```
string primeiroNome = "{Form.primeiroNome}";
string sobrenome = "{Form.sobrenome}";
string nomeCompleto = primeiroNome + " " + sobrenome;
```

## Alternativa para as tarefas de script

<mark style="color:red;">A tarefa de script, como comentado acima, é bloqueada e limitada somente a ambientes de cloud privado e alguns ambientes antigos, de versões anteriores do Zeev, para fins de compatibilidade.</mark> <mark style="color:red;"></mark><mark style="color:red;">**Seu uso para novas automações é desestimulado.**</mark>&#x20;

Esses são alguns dos motivos:

* Eventuais códigos não-otimizados podem causar problemas de performance latentes da aplicação, impactando os usuários finais;
* A liberação de permissões para a execução de códigos dinâmicos é concessão de impacto a segurança da plataforma desnecessária;
* A dependência de comandos SQL (quando utilizado esse recurso) que acessem diretamente os objetos do banco de dados do Zeev impede a evolução da estrutura de dados do produto;
* A dependência de comandos SQL (quando utilizado esse recurso) para fins de comunicação, consulta e integração com outros bancos de dados não é uma boa prática, na medida em que integrações de banco de dados ponta-a-ponta são consideradas universalmente como má-práticas de desenvolvimento de softwares e integrações;

<mark style="color:green;">A maior parte das operações realizadas com a tarefa de script podem ser realizadas com o uso de</mark> [<mark style="color:green;">tokens</mark> ](/zeev/outras-configuracoes-avancadas/dicionario-de-tokens-de-variaveis.md)<mark style="color:green;">e</mark> [<mark style="color:green;">tarefas de serviços</mark>](/zeev/como-construir-processos/como-desenhar-processos/o-que-sao-atividades/tarefa-de-servico.md)<mark style="color:green;">.</mark>

{% content-ref url="/pages/wX5ReFBeI8zdsq3TPZTw" %}
[Tarefa de serviço](/zeev/como-construir-processos/como-desenhar-processos/o-que-sao-atividades/tarefa-de-servico.md)
{% endcontent-ref %}

## Executar comandos SQL

Essa configuração permite a execução de comandos `SELECT`, `INSERT`, `UPDATE`, blocos de código e chamadas a *stored procedures,* seja no banco de dados do Zeev, seja em outro banco de dados.

Caso se deseje executar um comando em outro banco de dados ou servidor, crie uma conexão e configure a atividade para usar essa conexão. Certifique-se de que seu servidor SQL é acessível e visível via rede pelo servidor onde está instalado o Zeev.&#x20;

{% hint style="info" %}
Dependendo da arquitetura de redes, você pode precisar de uma VPN entre o servidor cloud privado do Zeev e o seu servidor de banco de dados SQL. Consulte nossos representantes comerciais.
{% endhint %}

{% hint style="warning" %}
Jamais configure uma tarefa de script para utilizar uma conexão que aponte para o próprio banco de dados do Zeev. Caso deseje utilizar o banco de dados do Zeev, deixe a conexão em branco.
{% endhint %}

{% hint style="warning" %}
O tempo máximo para a duração da execução de um comando na base de dados é de 30 segundos. Passando desse tempo o sistema apresentará erro de "timeout".
{% endhint %}

{% hint style="warning" %}
Por questões de segurança e integridade não são permitidos o uso de comandos de `DELETE` ou `DROP` neste elemento. Ao tentar configurar esse tipo de comando será gerada mensagem de erro "O campo COMANDO possui um comando de exclusão inválido".
{% endhint %}

### Para tarefas configuradas sem definição de conexão

O comando será executado dentro de uma transação que o Zeev abre a cada execução de tarefa. Por isso, não é necessário incluir os comandos de iniciar ou fechar transação. Ao ocorrer um erro, a transação sofrerá *rollback*.

### Para tarefas configuradas com conexão dos provedores SQL Server e Oracle

O comando será executado sem uso de transação. Nesse caso é possível explicitar no campo "Comando" da tarefa a utilização de transação, `commit`, `rollback`, etc. Essa operação será feita diretamente na conexão a base de dados destino. Ao ocorrer um erro, a transação sofrerá *rollback*.

{% hint style="warning" %}
Caso esteja executando comandos em um banco de dados ORACLE, poderá receber o seguinte erro:

`ORA-00911: invalid character`

Esse erro ocorre geralmente devido a uso do caracter ponto-e-vírgula (";") para delimitar comandos diferentes. Infelizmente o conector Oracle utilizado pela ferramenta não suporta esse delimitador. Você deverá encapsular o seu código em uma Stored Procedure ou utilizar mais de uma tarefa de banco de dados.
{% endhint %}

### Para tarefas configuradas com conexão do provedor ODBC

O comando será executado dentro de uma transação no banco de dados destino, portanto não é necessário incluir os comandos de iniciar ou fechar transação. Ao ocorrer um erro, a transação sofrerá *rollback*.

{% hint style="warning" %}
Por questões de segurança e integridade não são permitidos o uso de comandos de DELETE ou DROP neste elemento. Ao tentar configurar esse tipo de comando será gerada mensagem de erro "O campo COMANDO possui um comando de exclusão inválido".
{% endhint %}

## Executar comandos Powershell

&#x20;Permite a execução de comandos Powershell a serem executados no servidor de aplicação.

## Executar comandos em .NET C\#

Permite declarar classes em linguagem C# para executar operações de processamento de dados. O resultado de uma chamada a um método em C# poderá ser direcionado para ser salvo em um campo do formulário eletrônico de um aplicativo de processo.

É possível chamar classes das seguintes bibliotecas do .Net Framework:

1. System.dll
2. System.Configuration.dll
3. System.Data.dll
4. System.Linq.dll
5. System.Web.dll
6. System.Web.Services.dll
7. System.Xml.dll
8. System.Xml.Linq.dll

## Demonstração prática

Confira no vídeo a seguir o passo-a-passo de como utilizar a tarefa de script.

{% embed url="<https://youtu.be/CyJTFVDAqhM>" %}
