# 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>" %}


---

# 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://kb.stoque.com.br/zeev/como-construir-processos/como-desenhar-processos/o-que-sao-atividades/tarefa-de-script.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.
