# Call

O comando de controle call chama uma sub-rotina que deve ser definida por um comando sub prévio.

Sintaxe:

Call name ( [ paramlist ])

Argumentos:

Argumentos

| Argumento | Descrição |
| --- | --- |
| name | O nome da sub-rotina. |
| paramlist | Uma lista separada por vírgulas dos parâmetros reais que serão enviados para a sub-rotina. Cada item da lista deve ser um nome de campo, uma variável ou uma expressão arbitrária. |

A sub-rotina chamada por uma declaração call deve ser definida por um sub encontrado anteriormente durante a execução do script.

Os parâmetros são copiados na sub-rotina e, se o parâmetro no comando call for uma variável e não uma expressão, serão copiados novamente ao sair da sub-rotina.

Limitações:

* Como o comando call é de controle e, portanto, termina com um ponto e vírgula ou com um fim de linha, ele não deve cruzar um limite de linha.

* Quando você define uma sub-rotina com `Sub..end sub` dentro de um comando de controle, por exemplo `if..then`, você só pode chamar a sub-rotina de dentro do mesmo comando de controle.

Exemplo:

Este exemplo lista todos os arquivos relacionados do Qlik em uma pasta e em suas subpastas, e armazena informações sobre o arquivo em uma tabela. Supõe-se que você tenha criado uma conexão de dados com o nome Apps à pasta.

A sub-rotina DoDir é chamada com a referência à pasta, 'lib://Apps', como parâmetro. Dentro da sub-rotina, há uma chamada recursiva, `Call DoDir (Dir)`, que faz com que a função procure arquivos recursivamente em subpastas.

```
sub DoDir (Root)
   For Each Ext in 'qvw', 'qvo', 'qvs', 'qvt', 'qvd', 'qvc', 'qvf'
      For Each File in filelist (Root&'\*.' &Ext)
          LOAD
             '$(File)' as Name, 
             FileSize( '$(File)' ) as Size, 
             FileTime( '$(File)' ) as FileTime
          autogenerate 1;
      Next File
   Next Ext   
   For Each Dir in dirlist (Root&'\*' )
      Call DoDir (Dir)
   Next Dir
End Sub

Call DoDir ('lib://Apps')
```