Buscar

manual_de_uso_geral_do_BFC-Script

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 122 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 122 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 122 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Manual de uso geral do BFC-
Script 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Histórico de revisões 
 
Data Descrição da alteração 
12/04/2017 Criação deste manual. 
18/05/2017 Inclusão do item 8 e exemplo no item 3.2. 
29/05/2017 Inclusão dos itens 10.6 e 17. 
30/06/2017 Inclusão do sistema Tributos (Cloud) no item 20.1 
28/09/2017 Inclusão dos itens 3.6 e 9 
25/04/2018 Inclusão do item 19 referente às APIs de Assinatura e documentos. 
27/07/2018 Formatação integral do layout visual do manual e Inclusão do item 17.4 
referente a utilização de scripts do tipo componente. 
17/08/2018 Inclusão dos itens 22.1.1 referente aos sistemas e-Nota fly e 22.1.2 
Cidadão Web. 
21/09/2018 Inclusão dos itens 22.2.1.20 a 22.2.1.59 referente ao sistemas tributos 
(Cloud). 
02/10/2018 Inclusão do sistema Educação (Cloud) no item 22.2.2 
26/10/2018 Remoção de todas as fórmulas específicas dos sistemas do Manual. 
15/08/2019 - Inclusão no item 14.5 referente ao anexo() e anexo(id); 
- Inclusão do item 14.7; 
- Inclusão no item 14.8 referente ao exemplo 4; 
- Inclusão no item 17.2.12 referente ao DELETE; 
- Inclusão do item 20 referente a API de Execução. 
11/09/2019 - Inclusão de novas funções no item 9.5 Funções para manipulação de 
números referente a decimal e inteiro; 
- Alterado a descrição no item 9.5 Funções para manipulação de 
números referente a função numero; 
15/10/2019 - Inclusão do item 18.3 referente a Múltiplos assinantes na API de 
Assinatura. 
07/11/2019 - Inclusão no item 14.7 referente a padraoHex() 
 
 
 
 
 
 
 
 
SUMÁRIO 
 
 
A linguagem BFC-SCRIPT ...................................................................................................................................... 9 
1 Delimitadores ...................................................................................................................................................... 9 
1.1 Comentários de linha .................................................................................................................................. 9 
1.2 Comentários de bloco ................................................................................................................................. 9 
1.3 Operadores ................................................................................................................................................. 9 
1.3.1 Atribuição ( = ) ................................................................................................................................ 9 
1.3.2 Adição ( + ) ................................................................................................................................... 10 
1.3.3 Subtração ( - ) .............................................................................................................................. 10 
1.3.4 Operadores de multiplicação ( * ) ................................................................................................ 10 
1.3.5 Operadores de divisão ( / ) .......................................................................................................... 10 
1.3.6 Operadores de igualdade ( == ) ................................................................................................... 10 
1.3.7 Operadores de diferenciação ( != ) .............................................................................................. 11 
1.3.8 Operadores lógico OU ( || ) .......................................................................................................... 11 
1.3.9 Operadores lógico E ( && ) .......................................................................................................... 11 
2 Comandos ........................................................................................................................................................ 11 
2.1 imprimir ..................................................................................................................................................... 12 
2.2 percorrer ................................................................................................................................................... 12 
2.2.1 Controle do fluxo de execução .................................................................................................... 13 
2.2.2 parar() .......................................................................................................................................... 13 
2.2.3 continuar() .................................................................................................................................... 13 
2.2.4 Nomeando os comandos percorrer ............................................................................................. 13 
2.3 retornar ..................................................................................................................................................... 15 
2.4 se .............................................................................................................................................................. 15 
2.5 tentar/tratar/finalizar .................................................................................................................................. 15 
2.5.1 suspender .................................................................................................................................... 16 
2.5.2 esperar ......................................................................................................................................... 16 
2.5.3 exportar ........................................................................................................................................ 17 
2.5.4 importar ........................................................................................................................................ 17 
3 Listas ................................................................................................................................................................ 17 
4 Mapas ............................................................................................................................................................... 19 
5 Intervalos .......................................................................................................................................................... 20 
6 Datas ................................................................................................................................................................ 20 
7 Parâmetros ....................................................................................................................................................... 23 
8 Valores nulos .................................................................................................................................................... 23 
9 API padrão ........................................................................................................................................................ 25 
 
 
 
 
 
 
 
9.1 Funções para manipulação de caracteres................................................................................................ 25 
9.2 Expressões regulares ............................................................................................................................... 28 
9.2.1 equivalente() ................................................................................................................................ 28 
9.2.2 totalGrupos() ................................................................................................................................ 29 
9.2.3 dividir() ......................................................................................................................................... 29 
9.2.4 substituirPor(valor) .......................................................................................................................29 
9.2.5 substituirPrimeiroPor(valor) ......................................................................................................... 29 
9.2.6 encontrouPadrao() ....................................................................................................................... 29 
9.2.7 concatenarValoresEncontrados() ................................................................................................ 30 
9.2.8 concatenarValoresEncontrados(separador) ................................................................................ 30 
9.2.9 Caractere de escape .................................................................................................................... 30 
9.3 Múltiplas ocorrências e grupos ................................................................................................................. 31 
9.3.1 posicaoInicial() ............................................................................................................................. 32 
9.3.2 posicaoFinal() ............................................................................................................................... 32 
9.3.3 posicaoFinal() ............................................................................................................................... 32 
9.3.4 valoresGrupos() ........................................................................................................................... 32 
9.3.5 valorGrupo(indice) ....................................................................................................................... 32 
9.3.6 valorEncontrado()......................................................................................................................... 33 
9.3.7 concatenarValoresGrupos() ......................................................................................................... 33 
9.3.8 concatenarValoresGrupos(separador) ........................................................................................ 33 
9.4 Datas ......................................................................................................................................................... 34 
9.5 Funções para manipulação de números .................................................................................................. 37 
10 API de Arquivos ................................................................................................................................................ 38 
10.1 Leitura de arquivos ................................................................................................................................... 38 
10.2 Escrita de arquivos ................................................................................................................................... 39 
10.3 Download .................................................................................................................................................. 39 
10.4 Arquivos Texto (txt) ................................................................................................................................... 40 
10.4.1 Leitura .......................................................................................................................................... 40 
10.4.2 lerLinha() ...................................................................................................................................... 40 
10.4.3 contemProximaLinha() ................................................................................................................. 40 
10.4.4 Escrita .......................................................................................................................................... 40 
10.4.5 escrever(texto) ............................................................................................................................. 40 
10.4.6 novaLinha() .................................................................................................................................. 40 
10.5 Arquivos CSV (csv) ................................................................................................................................... 41 
10.5.1 Leitura .......................................................................................................................................... 41 
10.5.2 lerLinha() ...................................................................................................................................... 41 
10.5.3 contemProximaLinha() ................................................................................................................. 41 
10.5.4 pularLinhas(int linhas) .................................................................................................................. 41 
 
 
 
 
 
 
 
10.5.5 lerProximoValor() ......................................................................................................................... 41 
10.5.6 contemProximoValor() ................................................................................................................. 42 
10.5.7 Escrita .......................................................................................................................................... 42 
10.5.8 escrever(texto) ............................................................................................................................. 42 
10.5.9 novaLinha() .................................................................................................................................. 42 
10.6 Arquivos XML (xml) ................................................................................................................................... 43 
10.6.1 Leitura .......................................................................................................................................... 43 
10.6.1.1 tipo() ...................................................................................................................................... 43 
10.6.1.2 valor() .................................................................................................................................... 43 
10.6.1.3 contemValor() ....................................................................................................................... 44 
10.6.1.4 contemNome() ...................................................................................................................... 44 
10.6.1.5 nome() .................................................................................................................................. 44 
10.6.1.6 xml() ...................................................................................................................................... 44 
10.6.1.7 namespaces() ....................................................................................................................... 44 
10.6.1.8 contemNamespace(namespace) .......................................................................................... 44 
10.6.1.9 contemNamespace(namespace, prefixo) ............................................................................. 44 
10.6.1.10 atributos() ............................................................................................................................ 44 
10.6.1.11 contemAtributo(nome) ........................................................................................................ 45 
10.6.1.12 contemAtributo(nome, namespace) ................................................................................... 45 
10.6.1.13 contemAtributo(nome, namespace, prefixo) ...................................................................... 45 
10.6.1.14 atributo(nome) .................................................................................................................... 45 
10.6.1.15 atributo(nome,namespace) ................................................................................................ 45 
10.6.1.16 atributo(nome, namespace, prefixo) ................................................................................... 45 
10.6.1.17 ehTipoInicioDocumento ...................................................................................................... 45 
10.6.1.18 ehTipoFimDocumento ........................................................................................................ 45 
10.6.1.19 ehTipoTexto ........................................................................................................................ 45 
10.6.1.20 ehTipoComentario .............................................................................................................. 45 
10.6.1.21 ehTipoFimElemento............................................................................................................ 45 
10.6.1.22 ehTipoInicioElemento ......................................................................................................... 46 
10.6.1.23 ehTipoEspaco ..................................................................................................................... 46 
10.6.1.24 ehTipoCData ....................................................................................................................... 46 
10.6.1.25 ehTipoAtributo .................................................................................................................... 46 
10.6.1.26 ehTipoNamespace.............................................................................................................. 46 
10.6.1.27 contemProximo() ................................................................................................................ 46 
10.6.1.28 tipoProximo() ...................................................................................................................... 46 
10.6.1.29 proximo() ............................................................................................................................. 46 
10.6.1.30 proximaTag() ...................................................................................................................... 47 
10.6.1.31 contemProximoElemento() ................................................................................................. 47 
 
 
 
 
 
 
 
10.6.1.32 proximoElemento() ............................................................................................................. 47 
10.6.1.33 proximoElemento(nome) .................................................................................................... 47 
10.6.1.34 proximoElemento(nome, namespace) ................................................................................ 47 
10.6.2 Escrita .......................................................................................................................................... 48 
10.6.2.1 namespacePadrao(namespace) .......................................................................................... 48 
10.6.2.2 prefixo(prefixo, uri) ................................................................................................................ 48 
10.6.2.3 escreverAtributo(nome, valor) .............................................................................................. 48 
10.6.2.4 escreverAtributo(nome, valor, namespace) ......................................................................... 48 
10.6.2.5 escreverAtributo(nome, valor, namespace, prefixo) ............................................................. 48 
10.6.2.6 escreverCData(data) ............................................................................................................ 48 
10.6.2.7 escreverTexto(texto) ............................................................................................................. 48 
10.6.2.8 escreverComentario(comentario) ......................................................................................... 49 
10.6.2.9 escreverNamespace(namespace) ........................................................................................ 49 
10.6.2.10 escreverNamespace(namespace, prefixo) ......................................................................... 49 
10.6.2.11 escreverDTD(dtd) ............................................................................................................... 49 
10.6.2.12 escreverElementoVazio(elemento) .................................................................................... 49 
10.6.2.13 escreverElementoVazio(elemento, namespace) ................................................................ 49 
10.6.2.14 escreverElementoVazio(elemento, namespace, prefixo) ................................................... 49 
10.6.2.15 escreverInicioDocumento() ................................................................................................. 49 
10.6.2.16 escreverInicioDocumento(encoding) .................................................................................. 49 
10.6.2.17 escreverInicioDocumento(encoding, versao) ..................................................................... 49 
10.6.2.18 escreverInicioDocumento(encoding, versao, standalone) ................................................. 49 
10.6.2.19 escreverFimDocumento() ................................................................................................... 50 
10.6.2.20 escreverInicioElemento(nome) ........................................................................................... 50 
10.6.2.21 escreverInicioElemento(nome, namespace) ...................................................................... 50 
10.6.2.22 escreverInicioElemento(nome, namespace, prefixo) ......................................................... 50 
10.6.2.23 escreverFimElemento() ...................................................................................................... 50 
10.6.2.24 nomeElementoAtual() ......................................................................................................... 50 
10.6.2.25 escreverFimElementos() .................................................................................................... 50 
10.6.2.26 escreverFimElementos(elementoParar) ............................................................................. 50 
10.6.2.27 escreverElementoTexto(nome, valor) ................................................................................ 51 
10.6.2.28 escreverElementoTexto(nome, valor, namespace) ............................................................ 51 
10.6.2.29 escreverElementoTexto(nome, valor, namespace, prefixo) ............................................... 51 
10.6.2.30 escrever(xml) ...................................................................................................................... 51 
10.6.2.31 contemElementoAberto() .................................................................................................... 51 
10.6.2.32 escreverReferencia(nome, id, valor) .................................................................................. 51 
10.6.2.33 escreverInstrucaoProcessamento(target, conteudo) ......................................................... 51 
10.6.2.34 escreverEspaco(conteudo) ................................................................................................. 51 
 
 
 
 
 
 
 
10.6.2.35 escreverEspacoIgnoravel(conteudo) .................................................................................. 51 
10.7 Arquivos ZIP (zip) ..................................................................................................................................... 52 
10.7.1 Leitura .......................................................................................................................................... 52 
10.7.2 Escrita ..........................................................................................................................................52 
10.7.2.1 criarDiretorio ......................................................................................................................... 52 
10.7.2.2 adicionar(Arquivo) ................................................................................................................. 53 
10.7.2.3 adicionar(Arquivo, Nome do arquivo no zip) ........................................................................ 53 
10.7.2.4 adicionar(Arquivo, Nome do arquivo no zip, Diretório) ......................................................... 53 
10.7.2.5 adicionar(Lista de arquivos) ................................................................................................. 53 
10.7.2.6 adicionar(Lista de arquivos, Diretório) .................................................................................. 54 
10.7.2.7 comentario(Comentário) ....................................................................................................... 54 
11 API de E-mail .................................................................................................................................................... 54 
11.1 Mensagem ................................................................................................................................................ 55 
11.2 Anexos ...................................................................................................................................................... 55 
11.3 Exemplos .................................................................................................................................................. 57 
12 API de Notificações .......................................................................................................................................... 59 
12.1 Mensagem ................................................................................................................................................ 59 
13 API de Mensagens ........................................................................................................................................... 60 
14 API de SOAP .................................................................................................................................................... 61 
14.1 Serviço ...................................................................................................................................................... 61 
14.1.1 Soap.servico(url) .......................................................................................................................... 61 
14.1.2 Soap.servico(url, namespace, prefixo) ........................................................................................ 61 
14.1.3 Soap.servico(url, namespace, prefixo, usuario, senha)............................................................... 62 
14.1.4 Soap.criarNamespace(namespace, prefixo) ............................................................................... 62 
14.1.5 cabecalho(nome, valor) ............................................................................................................... 62 
14.1.6 mensagem() ................................................................................................................................. 62 
14.1.7 mensagem(namespace, prefixo) ................................................................................................. 62 
14.1.8 mensagem(namespace) .............................................................................................................. 62 
14.1.9 tempoLimite(valor) ....................................................................................................................... 63 
14.2 Mensagem ................................................................................................................................................ 63 
14.2.1 namespace(namespace, prefixo)................................................................................................. 63 
14.2.2 namespace(namespace) ............................................................................................................. 63 
14.2.3 namespaces() .............................................................................................................................. 63 
14.2.4 namespacePadrao() .................................................................................................................... 63 
14.2.5 corpo() .......................................................................................................................................... 63 
14.2.6 corpo(conteudo) ........................................................................................................................... 63 
14.2.7 corpo(arquivo) .............................................................................................................................. 63 
14.2.8 cabecalho() .................................................................................................................................. 64 
 
 
 
 
 
 
 
14.2.9 cabecalho(conteudo) ................................................................................................................... 64 
14.2.10 cabecalho(arquivo) ...................................................................................................................... 64 
14.2.11 operacao(operacao) ..................................................................................................................... 64 
14.2.12 executar() ..................................................................................................................................... 64 
14.2.13 executar(operacao) ...................................................................................................................... 64 
14.2.14 requisicao() .................................................................................................................................. 64 
14.3 Elementos ................................................................................................................................................. 65 
14.3.1 nome() .......................................................................................................................................... 65 
14.3.2 namespace() ................................................................................................................................ 65 
14.3.3 adicionarElemento(nome) ............................................................................................................ 65 
14.3.4 adicionarElemento(nome, namespace, prefixo) .......................................................................... 65 
14.3.5 adicionarElemento(nome, namespace) ....................................................................................... 65 
14.3.6 adicionarTexto(texto) ................................................................................................................... 65 
14.3.7 adicionarElementoTexto(nome, texto) ......................................................................................... 66 
14.3.8 adicionarElementoTexto(nome, texto, namespace, prefixo) ....................................................... 66 
14.3.9 adicionarElementoTexto(nome, texto, namespace) .................................................................... 66 
14.3.10 adicionarAtributo(nome, valor) ..................................................................................................... 66 
14.3.11 adicionarAtributo(nome, valor, namespace, prefixo) ................................................................... 66 
14.3.12 adicionarAtributo(nome, valor, namespace) ................................................................................ 67 
14.3.13 adicionarNamespace(namespace, prefixo) ................................................................................. 67 
14.3.14adicionarNamespace(namespace) .............................................................................................. 67 
14.3.15 elementoAnterior() ....................................................................................................................... 67 
14.3.16 contemElementoAnterior() ........................................................................................................... 67 
14.3.17 proximoElemento() ....................................................................................................................... 67 
14.3.18 contemProximoElemento() .......................................................................................................... 68 
14.4 Métodos .................................................................................................................................................... 68 
14.5 Resposta ................................................................................................................................................... 69 
14.6 Base 64 ..................................................................................................................................................... 70 
14.6.1 Contornando a limitação cumulativa ............................................................................................ 72 
14.7 Hash .......................................................................................................................................................... 72 
14.8 Exemplos .................................................................................................................................................. 74 
15 API de Fonte de Dados .................................................................................................................................... 77 
15.1 Ativo .......................................................................................................................................................... 77 
15.2 Tema ......................................................................................................................................................... 77 
15.3 Operações ................................................................................................................................................ 78 
15.3.1 Operação de busca ...................................................................................................................... 78 
15.3.2 Operação de criação .................................................................................................................... 79 
15.3.3 Operação de atualização ............................................................................................................. 79 
 
 
 
 
 
 
 
15.3.4 Operação de exclusão ................................................................................................................. 80 
16 API de Scripts ................................................................................................................................................... 80 
16.1 Executando scripts .................................................................................................................................... 80 
16.1.1 identificador .................................................................................................................................. 80 
16.1.2 executar(parametros) ................................................................................................................... 80 
16.1.3 variaveis(Map) .............................................................................................................................. 81 
16.2 Retorno dos scripts ................................................................................................................................... 83 
16.2.1 valor ............................................................................................................................................. 83 
16.2.2 vazio ............................................................................................................................................. 83 
16.2.3 variavel(nome) ............................................................................................................................. 83 
16.2.4 retornar ......................................................................................................................................... 84 
16.3 Executando scripts em lotes ..................................................................................................................... 84 
16.4 Componentes ............................................................................................................................................ 85 
17 API de HTTP..................................................................................................................................................... 89 
17.1 Requisição ................................................................................................................................................ 89 
17.1.1 cookie(nome, valor) ..................................................................................................................... 90 
17.1.2 cookie(nome, valor, caminho, domínio, versão) .......................................................................... 90 
17.1.3 cookie(Mapa[nome, valor]) .......................................................................................................... 90 
17.1.4 cabecalho(nome, valor) ............................................................................................................... 90 
17.1.5 cabecalho(nome, lista de valores) ............................................................................................... 90 
17.1.6 cabecalho(Mapa[nome, valor]) .................................................................................................... 90 
17.2 Parâmetros e caminhos ............................................................................................................................ 90 
17.2.1 parametro(nome, valor) ............................................................................................................... 91 
17.2.2 parametro(nome, lista de valores) ............................................................................................... 91 
17.2.3 parametro(Mapa[nome, valor]) .................................................................................................... 91 
17.2.4 caminho(caminho) ....................................................................................................................... 92 
17.2.5 aceitarTipoMidia(midias) .............................................................................................................. 92 
17.2.6 credenciais(usuario, senha) ......................................................................................................... 92 
17.2.7 tempoLimite(valor) ....................................................................................................................... 92 
17.2.8 GET (Mapa[marcadores]) ............................................................................................................ 93 
17.2.9 OPTIONS (Mapa[marcadores]) ................................................................................................... 93 
17.2.10 HEAD (Mapa[marcadores]) .......................................................................................................... 93 
17.2.11 TRACE (Mapa[marcadores]) ....................................................................................................... 93 
17.2.12 DELETE ....................................................................................................................................... 93 
17.2.13 POST ...........................................................................................................................................94 
17.2.14 PUT .............................................................................................................................................. 94 
17.2.15 PATCH ......................................................................................................................................... 95 
17.2.16 METODO ..................................................................................................................................... 96 
 
 
 
 
 
 
 
17.3 Formulários ............................................................................................................................................... 96 
17.3.1 Formulario .................................................................................................................................... 96 
17.3.2 parametro(nome, valor) ............................................................................................................... 97 
17.3.3 parametro(Mapa[nome, valor]) .................................................................................................... 97 
17.3.4 POST() - POST(Mapa[marcadores]) ........................................................................................... 97 
17.3.5 PUT() - PUT(Mapa[marcadores]) ................................................................................................. 97 
17.3.6 PATCH() - PATCH(Mapa[marcadores]) ...................................................................................... 97 
17.3.7 METODO(método) - METODO(método, Mapa[marcadores]) ..................................................... 97 
17.4 Formulario Multipart .................................................................................................................................. 98 
17.4.1 parametro ..................................................................................................................................... 98 
17.4.2 POST() - POST(Mapa[marcadores]) ........................................................................................... 98 
17.4.3 PUT() - PUT(Mapa[marcadores]) ................................................................................................. 98 
17.4.4 PATCH() - PATCH(Mapa[marcadores]) ...................................................................................... 98 
17.4.5 METODO(método) - METODO(método, Mapa[marcadores]) ..................................................... 98 
17.5 Resposta ................................................................................................................................................... 99 
17.5.1 codigo() ........................................................................................................................................ 99 
17.5.2 tipoMidia() .................................................................................................................................... 99 
17.5.3 ehJson() ....................................................................................................................................... 99 
17.5.4 sucesso() ...................................................................................................................................... 99 
17.5.5 tamanho() ..................................................................................................................................... 99 
17.5.6 contemResultado() ..................................................................................................................... 100 
17.5.7 ultimaModificacao() .................................................................................................................... 100 
17.5.8 cookie(nome) ............................................................................................................................. 100 
17.5.9 contemCookie(nome) ................................................................................................................. 100 
17.5.10 cookies() ..................................................................................................................................... 100 
17.5.11 cabecalho(nome) ....................................................................................................................... 100 
17.5.12 contemCabecalho(nome) ........................................................................................................... 101 
17.5.13 cabecalhos() ............................................................................................................................... 101 
17.5.14 imprimir() .................................................................................................................................... 101 
17.5.15 conteudo() .................................................................................................................................. 101 
17.5.16 arquivo() ..................................................................................................................................... 101 
17.5.17 json() .......................................................................................................................................... 102 
18 API de Assinatura ........................................................................................................................................... 102 
18.1 Assinando documentos........................................................................................................................... 102 
18.2 Assinando lote de documentos ............................................................................................................... 103 
18.3 Múltiplos assinantes ................................................................................................................................ 104 
18.4 Script de call-back ................................................................................................................................... 105 
19 API de Critério ................................................................................................................................................ 105 
 
 
 
 
 
 
 
19.1 Criação .................................................................................................................................................... 105 
19.2 Operações .............................................................................................................................................. 106 
19.2.1 Obrigatoriedade dos valores ...................................................................................................... 106 
19.3 Delimitador nas operações contidoEm/naoContidoEm .......................................................................... 107 
19.3.1 Com delimitador ......................................................................................................................... 107 
19.3.2 Sem delimitador ......................................................................................................................... 107 
19.3.3 Com formatação e delimitador ................................................................................................... 107 
19.4 Filtros compostos .................................................................................................................................... 108 
19.5 Agrupamento .......................................................................................................................................... 108 
19.6 Datas ....................................................................................................................................................... 108 
19.6.1 Informar uma das formatações pré-definidas (data e hora) ...................................................... 108 
19.6.2 Informar uma formatação customizada .....................................................................................109 
20 API de Execução ............................................................................................................................................ 109 
20.1 Consultar o protocolo da execução ........................................................................................................ 109 
20.2 Consultar se a execução foi cancelada pelo usuário ............................................................................. 109 
20.3 Exemplos ................................................................................................................................................ 109 
21 Integração de APIs ......................................................................................................................................... 109 
21.1 Integrando com uma aplicação ............................................................................................................... 109 
21.2 Executando um script ............................................................................................................................. 109 
21.2.1 Passando parâmetros para um script ........................................................................................ 111 
21.2.1.1 Beans .................................................................................................................................. 111 
21.2.1.2 Coleções ............................................................................................................................. 112 
21.2.1.3 NullsafeProxy ...................................................................................................................... 112 
21.3 Anotações ............................................................................................................................................... 113 
21.4 Metadados .............................................................................................................................................. 114 
21.5 Obtendo dados de um script ................................................................................................................... 116 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9 
 
A linguagem BFC-SCRIPT 
 
O bfc-script é um framework que possibilita a integração de scripts com aplicações. O framework oferece 
um ambiente de desenvolvimento, compilação e execução de scripts, bem como uma linguagem amigável para 
usuários não técnicos e APIs utilitárias. 
A linguagem possui poucos comandos e algumas similaridades com a linguagem JavaTM, como os 
operadores (lógico, comparação, atribuição e aritmético), o uso de chaves para circundar blocos, sintaxe case 
sensitive, etc. 
Para simplificar os scripts, não é necessário usar ponto e vírgula no final de cada instrução e os 
comandos foram desenvolvidos em português, para simplificar o seu uso a usuários sem experiência em 
linguagens de programação. 
 
1 Delimitadores 
 
Os delimitadores têm função importante no editor de Scripts. Através deles torna-se possível adicionar 
comentários de linha e bloco, ou seja, pode-se incluir notas aos scripts para descrever o que se quiser. Assim, 
não modificam o programa executado e servem somente para ajudar o programador a melhor organizar os 
códigos. 
 
1.1 Comentários de linha 
 
Comentário de linha, como o próprio nome diz, são notas que podem ser incluídas nas linhas do código 
fonte, com objetivo de ajudar o programador a organizar seu código. Ou seja, pode-se descrever o que se quiser, 
pois os comentários não modificam os scripts. 
Eles podem ser representados da seguinte forma: 
 
// comentario 
 
1.2 Comentários de bloco 
 
Os comentários de bloco tem a mesma função do comentário de linha, exceto por ponderações longas 
que ocupam várias linhas. Isso pode ser representado da seguinte forma: 
 
/* comentário 
em bloco */ 
 
1.3 Operadores 
 
Os operadores indicam ao script a necessidade de se fazer manipulações matemáticas ou lógicas. 
 
1.3.1 Atribuição ( = ) 
 
Este operador indica a atribuição de um determinado valor a uma variável, como mostra os exemplos 
abaixo: 
 
Atribuição de um valor para uma variável 
 
valor = 10 
 imprimir 'O valor é: ' + valor 
 
 
 
 
 
10 
 
Atribuição de uma string para uma variável 
 
nome = 'Antônio da Silva' 
imprimir nome 
 
1.3.2 Adição ( + ) 
 
O operador de adição (+) poderá ser utilizado em diversas situações não somente em cálculos 
aritméticos, mas também em concatenações de strings. 
 
Exemplo 
valor = 5 + 1 
imprimir 'Resultado: ' + (valor + 4) 
 
1.3.3 Subtração ( - ) 
 
O operador de subtração (-) subtrai um determinado valor de outro. 
 
Exemplo 
valor1 = 10 
valor2 = 20 
imprimir 'Resultado: ' + (valor2 - valor1) 
 
1.3.4 Operadores de multiplicação ( * ) 
 
O operador de multiplicação (*) efetua a multiplicação de um valor por outro. 
 
Exemplo 
valor1 = 10 
valor2 = 20 
imprimir 'Resultado: ' + (valor2 * valor1) 
 
1.3.5 Operadores de divisão ( / ) 
 
O operador de divisão (/) divide um determinado número por outro. 
 
Exemplo 
valor1 = 200 
valor2 = 4 
imprimir 'Resultado: ' + (valor1 / valor2) 
 
 
 
 
1.3.6 Operadores de igualdade ( == ) 
 
O operador de igualdade verifica se uma determinada expressão ou valor é igual a outro. Geralmente 
este operador é utilizado em comandos se … senao … ou onde houver necessidade de se utilizar uma 
comparação. 
 
 
 
 
 
 
11 
 
Exemplo 
valor = 'S' 
 
se ( valor == 'S' ){ 
 imprimir 'O valor é ...' 
}senao{ 
 imprimir O valor não é...' 
} 
 
1.3.7 Operadores de diferenciação ( != ) 
 
O operador de diferenciação ( != ) verifica se uma determinada expressão ou valor é diferente de outro. 
Geralmente é utilizado em comandos como se … senão ... ou onde houver necessidade de se utilizar 
comparação. 
 
Exemplo 
se (valor != 'S'){ 
 imprimir 'Valor do imposto está sendo retido' 
}senao{ 
 imprimir 'Valor do imposto não está sendo retiro' 
} 
 
1.3.8 Operadores lógico OU ( || ) 
 
O operador lógico OU ( || ) é utilizado para comparar duas expressões, sendo o resultado verdadeiro 
quando uma das duas expressões forem verdadeiras. Geralmente é utilizado em comandos se … senão … ou 
onde houver necessidade de se utilizar uma comparação. 
 
Exemplo 
se (valor1.vazio || valor2.vazio){ 
 suspender 'Os valores estão vazios ...' 
} 
 
1.3.9 Operadores lógico E ( && ) 
 
O operador lógico E ( && ) é utilizado para comparar duas expressões, sendo o resultado verdadeiro 
quando as duas expressões forem verdadeiras. Geralmente é utilizado em comandos se … senão … ou onde 
houver necessidade de se utilizar uma comparação. 
 
Exemplo 
se (valor1.vazio && valor2.vazio){ 
 suspender 'Informe os valores ...' 
} 
2 Comandos 
 
A seguir, temos a lista de todos os comandos que podem ser utilizados no desenvolvimento dos scripts 
juntamente com alguns exemplos de utilização. 
 
 
 
 
 
 
12 
 
2.1 imprimir 
 
Exibe uma mensagem no console. 
1. imprimir 'John Doe' 
2.2 percorrer 
 
Permite iterar valores e obter o índice atual da iteração. 
1. percorrer(ate:5){ 
2. imprimir indice 
3. } 
O comando disponibiliza uma variável implícita chamada indice que representa o índice corrente da 
iteração. 
1. percorrer(de:3, ate:5){ 
2. imprimir indice 
3. } 
A variável indice pode ser atribuída a uma outra variável com um nome personalizado, permitindo que a 
mesma seja acessada em diversos níveis do comando percorrer. 
1. percorrer(de:3, ate:5){ idPrincipal -> 
2. imprimir idPrincipal 
3. percorrer(de:6, ate:8){ idSecundario -> 
4. imprimir 'ID princial: ' + idPrincipal 
5. imprimir 'ID secundário: ' + idSecundario 
6. } 
7. } 
É possível também iterar pelos valores de uma lista informando ou não o índice inicial e final da iteração 
1. numeros = [1,2,3] 
2. percorrer(de:1,ate:3, itens: numeros){ 
3. imprimir item 
4. } 
5. // Irá imprimir os números 1, 2 e 3 
1. letras = ['A','B','C'] 
2. percorrer(de:2, ate:3, itens: letras){ 
3. imprimir item 
4. } 
5. // Irá imprimir as letras B e C, ou seja, do índice 2 até o índice 3 
 
 
 
 
 
13 
 
• Caso o índice inicial não seja informado irá utilizar como padrão o valor 1 (primeiro item). 
• Caso o índice final não seja informado irá utilizar como padrão o índice final da lista (último item). 
 
2.2.1 Controle do fluxo de execução 
 
O fluxo de execução de um comando percorrer pode ser alterado utilizando as 
funções parar() e continuar(). Este controle é especialmente útil quando se deseja interromper a execução de 
um comando percorrer devido à uma condição específica ou avançar para um próximo item do laço. 
 
2.2.2 parar() 
 
A função parar interrompe um comando percorrer em determinada condição, e continua a execução do 
script sem passar pelas repetições seguintes. 
O seguinte código irá imprimir os números 1, 2 e a palavra Ok: 
1. numeros = [1,2,3,4] 
2. percorrer(numeros){ 
3. se(item == 3){ 
4. parar() 
5. } 
6. imprimir item 
7. } 
8. 
9. //As instruções fora do comando percorrer serão executadas normalmente, somente o c
omando percorrer 
10. //será interrompido e não todo o script 
11. imprimir 'Ok' 
2.2.3 continuar() 
 
A função continuar faz com que o comando percorrer passe para a próxima repetição/item. Esta função 
é especialmente útil em situações em que se deseje ignorar o processamento de um item com base em uma 
condição. 
O seguinte código irá imprimir os números 1, 2 e 4 ignorando o número 3: 
1. numeros = [1,2,3,4] 
2. percorrer(numeros){ 
3. se(item == 3){ 
4. continuar() 
5. } 
6. imprimir item 
7. } 
2.2.4 Nomeando os comandos percorrer 
 
Em situações onde são utilizados mais de um comando percorrer aninhados e se 
deseje parar ou continuar um percorrer específico, a atribuição de um nome ao comando se faz necessário. 
Para nomear o comando basta preencher a propriedade nome na declaração da instrução: 
 
 
 
 
 
14 
 
1. numeros = [1,2,3,4] 
2. percorrer(itens: numeros, nome: 'p1'){ 
3. imprimir 'p1: ' + item 
4. percorrer(de: 1, ate: 5){ 
5. se (indice == 3){ 
6. parar 'p1' 
7. } 
8. imprimir 'p2: ' + indice 
9. } 
10. } 
A saída do script será: 
1. p1: 1 // primeiro item da lista de números do percorrer 'p1' 
2. p2: 1 // primeiro índice do segundo percorrer 
3. p2: 2 // ... 
4. p2: 3 // ... 
5. p2: 4 // No índice 4 o comando parar 'p1' foi executado interrompendo a execução de 
todos os comandos percorrer até o 'p1' 
A mesma regra se aplica ao comando continuar(), porém ao invés de interromper a execução do 
comando percorrer irá avançar para o próximo índice/item. 
1. numeros = [1,2,3] 
2. percorrer(itens: numeros, nome: 'p1'){ 
3. imprimir 'p1: ' + item 
4. percorrer(de: 1, ate: 5, nome: 'p2'){ 
5. se (indice == 2){ 
6. continuar 'p1' 
7. } 
8. imprimir 'p2: ' + indice 
9. } 
10. } 
A saída do script será: 
 
1. p1: 1 // primeiro item da lista de números do percorrer 'p1' 
2. p2: 1 // primeiro índice do segundo percorrer 
3. // Ao passar pelo segundo ídice o comando continuar 'p1' foi execuado parando 
a execução do percorrer atual e avançando o item do 
4. // percorrer 'p1' para a próxima iteração, neste caso o número 2 
5. p1: 2 
6. p2: 1 
7. p1: 3 
8. p2: 1 
 
 
 
 
 
15 
 
2.3 retornar 
 
Permite submeter dados como retorno de um script. 
Conforme podemos observar, a variável valor é submetida como retorno do script utilizando o comando 
retornar. 
1. valor = 10 * 2 * 3 
2. retornar valor 
No exemplo abaixo, os valores são retornados pelo comando retornar através de um mapa. As chaves 
valor e nome recebem seus respectivos valores e são submetidas ao comando retornar e serão resgatadas 
programaticamente através de um java.util.Map. 
1. retornar valor:10 * 2 * 3, nome:'David Crosby' 
2.4 se 
 
Permite criar expressões condicionais. 
1. se(10 == 10){ 
2. imprimir 'verdadeiro' 
3. } 
4. 
5. se(9 <= 20){ 
6. imprimir 'verdadeiro' 
7. }senao{ 
8. imprimir 'falso' 
9. } 
2.5 tentar/tratar/finalizar 
 
Às vezes, a execução de uma ação pode acarretar em uma exceção. Quando isto ocorre, é possível que 
seja realizado um tratamento para que o script continue sua execução realizando alguma outra ação, como por 
exemplo, notificar outros usuários, tratar alguns retornos conhecidos, tentar realizar a ação novamente, etc. 
No bloco tentar devem ser colocadas as ações onde pode ocorrer um erro. Por exemplo, chamar um 
serviço HTTP, SOAP, escrever em um arquivo, etc. 
Dentro do bloco tratar deve ser especificado o código que será executado em caso de erro dentro do 
bloco tentar. Nele, existe uma variável chamada excecao que é uma representação do erro ocorrido. Ela possui 
os seguintes atributos: 
codigo - É um identificador alfanumérico erro para facilitar sua localização nos manuais e documentações 
mensagem - Uma mensagem passada pela API ou linguagem que representa a descrição do erro 
ocorrido 
linha - Linha onde ocorreu o erro 
1. tentar { 
2. resultado = Http.servico('https://endereco-nao-existe').GET() 
3. imprimir resultado.codigo() 
4. } tratar { 
 
 
 
 
 
16 
 
5. // Ao mandar imprimir o objeto excecao, será impresso o código, mensagem e linha 
(se existir) 
6. imprimir 'Estou tratando uma exceção: ' + excecao 
7. } 
Ainda é possível que independentemente de ocorrer uma falha ou não, ao final da execução do método 
seja executada alguma ação. Para isso, existe também o bloco finalizar. Onde tudo o que for definido neste 
bloco, será executado independentemente de ocorrer um erro ou não. 
1. tentar { 
2. resultado = Http.servico('https://endereco-nao-existe').GET() 
3. imprimir resultado.codigo() 
4. } tratar { 
5. // Ao mandar imprimir o objeto excecao, será impresso o código, mensagem e linha 
(se existir) 
6. imprimir 'Estou tratando uma exceção: ' + excecao 
7. } finalizar { 
8. imprimir 'O conteúdo deste bloco sempre será executado' 
9. } 
Algumas observações referentes à este recurso: 
 
• O bloco finalizar sempre é executado 
• Dentro do bloco finalizar, a variável excecao já não está disponível 
• O comando suspender não é tratado 
 
2.5.1 suspender 
 
Permite suspender a execução de um script com uma exceção. 
1. se(codigo != 10){ 
2. suspender "O código $codigo é inválido" 
3. } 
 
2.5.2 esperar 
 
O comando esperar permite que a execução de um script entre em modo de pausa por um determinado 
intervalo tempo. 
Este comando se mostra útil quando o acesso a um serviço é limitado por um intervalo de tempo. 
1. imprimir Datas.hoje() 
2. esperar 2000 //O script irá pausar a execução neste ponto durante 2000 millisegundo
s 
3. imprimir Datas.hoje() 
É possível informar o intervalo de tempo utilizando a forma simplificada de tempo/datas da engine: 
http://test.betha.com.br/documentacao/bfc-script/2.7.X/index.html#datas
 
 
 
 
 
17 
 
1. imprimir Datas.hoje() 
2. esperar 1.segundo //O script irá pausar a execução neste ponto durante 1 segundo 
3. imprimir Datas.hoje() 
O tempo máximo de espera permitido por comando é de 60 segundos. Essa função está disponível ao 
usuário final apenas através da Ferramenta de Scripts. 
 
2.5.3 exportar 
 
Comando utilizado para exportar símbolos declarados no escopo atual. Aceita como parâmetro um mapa 
com o nome externo e uma referência ao recurso exportado. 
1. // exportando uma constante 
2. exportar PI_APROXIMADO: 3.1415 
3. 
4. // exportando múltiplos símbolos 
5. exportar( 
6. nomeExterno: referencia, 
7. outroNome: outraReferencia 
8. ) 
Este comando está disponível apenas na Ferramenta de Scripts. 
 
2.5.4 importar 
 
Comando utilizado para importar recursos de um componente. Aceita como parâmetro uma String com 
onome do identificador do componente desejado, e retorna um objeto com os recursos importados. 
1. log = importar("log") 
2. math = importar("calculadora") 
3. counter = importar("contador") 
4. 
5. log.info("Iniciando execução") 
6. acum = 0 
7. 
8. percorrer(ate: 20) { 
9. counter.incrementar() 
10. acum = math.somar(acum, indice) 
11. log.info("Executando operação #$indice") 
12. } 
Este comando está disponível apenas na Ferramenta de Scripts. 
 
3 Listas 
 
Também conhecida como Arrays, podemos trabalhar com listas de maneira bem simplificada. 
 
 
 
 
 
18 
 
1. //Instancia uma lista com valores 
2. valores = [0, 1, 2, 3, 4] 
3. 
4. //Instancia uma lista vazia 
5. nomes = [] 
6. 
7. //Adiciona um item na lista 
8. nomes << 'Chuck Norris' 
9. 
10. //Itera uma lista 
11. percorrer(valores){ 
12. imprimir item 
13. } 
14. 
O comando percorrer possui uma variável implícita para obter o valor da iteração chamada item. 
A variável item e indice podem ser atribuídas à outras variáveis com nomes personalizados utilizando a 
seguinte sintaxe do comando percorrer: 
1. percorrer(valores){ valor -> 
2. imprimir valor 
3. } 
4. 
5. percorrer(valores){ valor, posicao -> 
6. imprimir valor // Equivale a item 
7. imprimir posicao // Equivale a indice 
8. } 
9. 
10. percorrer(valores){ item, posicao -> 
11. imprimir item 
12. percorrer(outros){ 
13. imprimir item //Equivale ao item do percorrer principal pois utilizou o mes
mo nome da variável implícita 
14. } 
15. } 
Obtendo e atribuindo valores em posições específicas da lista. A primeira posição da lista tem o índice 0 
(zero), a segunda posição tem o índice 1, e assim por diante. Os dados são acessados assim: lista[indice] 
1. //Instancia uma lista com valores 
2. nomes = ['Harrison Reid', 'Thomas Sharpe', 'Louie Hill'] 
3. 
4. //nomes[0] contém o valor 'Harrison Reid' 
5. //nomes[1] contém o valor 'Thomas Sharpe' 
6. //nomes[2] contém o valor 'Louie Hill' 
7. 
 
 
 
 
 
19 
 
8. //Obtendo o nome da segunda posição da lista: 
9. nomeDaSegundaPosicao = nomes[1] 
4 Mapas 
 
É possível criar mapas simplificados e acessar seus valores de forma explícita. 
1. pessoa = [nome:'João da Silva', idade:25, profissao: 'Contador'] 
2. 
3. imprimir pessoa.nome 
4. imprimir pessoa.idade 
5. imprimir pessoa.profissao 
Observe o exemplo abaixo, usando uma lista de mapas: 
1. //Declaração da lista. Será composta por um mapa que contém o nome, a idade e a pro
fissão. 
2. dadosPessoais = [] 
3. 
4. //Adicionando dados à lista 
5. dadosPessoais << [nome:'Luca Ingram', idade:25, profissao: 'Process pipeline drafte
r'] 
6. dadosPessoais << [nome:'Jack Young', idade:30, profissao: 'Industrial economist'] 
7. dadosPessoais << [nome:'Jake Sullivan', idade:31, profissao: 'Gastroenterology nurs
e'] 
8. 
9. //Imprimindo os dados... 
10. percorrer(dadosPessoais) { 
11. imprimir 'Posição: ' + indice + ' -> Dados:' + item 
12. } 
13. 
14. //Temos o resultado: 
15. Posição: 0 -> Dados:[nome:Luca Ingram, idade:25, profissao:Process pipeline drafter
] 
16. Posição: 1 -> Dados:[nome:Jack Young, idade:30, profissao:Industrial economist] 
17. Posição: 2 -> Dados:[nome:Jake Sullivan, idade:31, profissao:Gastroenterology nurse
] 
18. 
19. //Agora, vamos alterar última posição da lista com novos dados. 
20. //Jake Sullivan trocou de profissão e precisamos atualizar seu dado profissional. F
azemos isso substituindo um mapa por outro: 
21. dadosPessoais[2] = [nome:'Jake Sullivan', idade:31, profissao: 'Administrative lead
er'] 
22. 
23. //Voltamos a imprimir. Resultado: 
 
 
 
 
 
20 
 
24. Posição: 0 -> Dados:[nome:Luca Ingram, idade:25, profissao:Process pipeline drafter
] 
25. Posição: 1 -> Dados:[nome:Jack Young, idade:30, profissao:Industrial economist] 
26. Posição: 2 -> Dados:[nome:Jake Sullivan, idade:31, profissao:Administrative leader] 
27. 
28. //Outro exemplo: Preciso saber a idade do segundo profissional da lista, Jack Young
: 
29. imprimir dadosPessoais[1].idade 
30. //Resultado: 30 
5 Intervalos 
 
Intervalos permitem que você crie uma lista de valores sequenciais podendo ser utilizados como listas. 
A notação define um intervalo, do primeiro item até o último. Intervalos definidos com a notação.< incluem o 
primeiro valor, mas não o último valor. 
1. //Cria um intervalo 
2. dias = 1..3 
3. 
4. //Percorre um intervalo 
5. percorrer(dias){ 
6. imprimir item 
7. } 
8. 
9. //Percorre um intervalo 
10. percorrer(4..7){ 
11. imprimir item 
12. } 
13. 
14. //Percorre um intervalo de forma decrescente 
15. percorrer(8..7){ 
16. imprimir item 
17. } 
18. 
19. //Percorre um intervalo decrescente desconsiderando o último valor 
20. percorrer(6..<4){ 
21. imprimir item 
22. } 
23. 
O comando percorrer possui uma variável implícita para obter o valor da iteração chamada item. 
 
6 Datas 
 
A linguagem permite trabalhar com datas de forma simplificada. Várias funções estão embutidas nos 
elementos de data facilitando muito o uso, além de tornar as implementações intuitivas. Os exemplos abaixo 
 
 
 
 
 
21 
 
demonstram o uso de algumas funções para manipulação de datas, além de demonstrar formas nativas para 
somar datas/horas/etc. 
1. //Funções para obter-se uma data/dataHora 
2. hoje = Datas.hoje() 
3. primeiroDiaDoAno = Datas.data(hoje.ano,1 ,1 ) 
4. ultimoDiaDoAno = Datas.dataHora(hoje.ano, 12, 31, 23, 59) 
5. 
6. imprimir Datas.adicionaSegundos(hoje, 10) 
7. imprimir hoje + 10.segundos 
8. 
9. imprimir Datas.adicionaMinutos(hoje, 10) 
10. imprimir hoje + 10.minutos 
11. 
12. imprimir Datas.adicionaHoras(hoje, 10) 
13. imprimir hoje + 10.horas 
14. 
15. imprimir Datas.adicionaDias(hoje, 10) 
16. imprimir hoje + 10.dias 
17. 
18. imprimir Datas.adicionaMeses(hoje, 10) 
19. imprimir hoje + 10.meses 
20. 
21. imprimir hoje + 1.segundo 
22. imprimir hoje + 1.minuto 
23. imprimir hoje + 1.hora 
24. imprimir hoje + 1.dia 
25. imprimir hoje + 1.mes 
26. 
27. imprimir hoje + 10.anos + 9.meses + 8.semanas + 7.dias + 6.horas + 5.minutos + 4.se
gundos + 3.milesegundos 
28. 
29. imprimir Datas.ano(hoje) 
30. imprimir hoje.ano 
31. imprimir Datas.mes(hoje) 
32. imprimir hoje.mes 
33. imprimir Datas.dia(hoje) 
34. imprimir hoje.dia 
35. imprimir Datas.hora(hoje) 
36. imprimir hoje.hora 
37. imprimir Datas.minuto(hoje) 
38. imprimir hoje.minuto 
39. imprimir Datas.segundo(hoje) 
40. imprimir hoje.segundo 
41. 
42. imprimir Datas.diaSemana(hoje) 
 
 
 
 
 
22 
 
43. imprimir hoje.diaSemana 
44. 
45. imprimir Datas.removeDias(hoje, 10) 
46. imprimir hoje - 10.dias 
47. 
48. imprimir Datas.removeMeses(hoje, 10) 
49. imprimir hoje - 10.meses 
50. 
51. imprimir Datas.extenso(hoje) 
52. imprimir hoje.extenso 
53. 
54. imprimir Datas.nomeDiaSemana(hoje) 
55. imprimir hoje.nomeDiaSemana 
56. 
57. imprimir Datas.nomeMes(hoje) 
58. imprimir hoje.nomeMes 
59. 
60. imprimir Datas.ehData('01/01/2010') 
61. 
62. imprimir Datas.diferencaAnos(primeiroDiaDoAno, ultimoDiaDoAno) 
63. imprimir Datas.diferencaDias(primeiroDiaDoAno, ultimoDiaDoAno) 
64. imprimir Datas.diferencaHoras(primeiroDiaDoAno, ultimoDiaDoAno) 
65. imprimir Datas.diferencaMeses(primeiroDiaDoAno, ultimoDiaDoAno) 
66. imprimir Datas.diferencaMinutos(primeiroDiaDoAno, ultimoDiaDoAno) 
67. imprimir Datas.diferencaSegundos(primeiroDiaDoAno, ultimoDiaDoAno) 
68. 
69. amanha = hoje + 1.dia 
70. 
71. //Podemos criar intervalos com datas 
72. percorrer(hoje..amanha){ 
73. imprimir item.extenso 
74. } 
75. 
76. percorrer(hoje+1.semana..<amanha+2.semanas){ 
77. imprimir item.extenso 
78. } 
79. 
80. //Podemos obter uma data apartir de uma expressão como esta 
81. semanaQueVem = 7.dias.apartirDe.hoje 
82. 
83. imprimir semanaQueVem + 5.diasÉ importante notar que os valores numéricos informados nas funções de data para representar ano, mês, 
dias, horas e segundos, diferentemente da formatação Brasileira, não devem conter zeros à esquerda: 
 
 
 
 
 
 
23 
 
1. //Correto 
2. Datas.data(2017, 8, 5) 
3. 
4. //Incorreto (Erro de compilação) 
5. Datas.data(2017, 08, 05) 
7 Parâmetros 
 
A linguagem permite manipular os valores dos parâmetros informados pelos usuários de forma 
simplificada, através da função parametros.nomedoparametro.selecionado.valor. 
 
parametros.mes.selecionado.valor 
Pega o valor do parâmetro mês, selecionado pelo usuário. 
 
parametros.ExercicioPPA.selecionado.valor 
Pega o valor do parâmetro ExercicioPPA, selecionado pelo usuário. 
 
8 Valores nulos 
 
Em programação de computadores, null é um valor especial para um ponteiro (ou qualquer outro tipo de 
referência) que indica que este ponteiro, intencionalmente, não se refere a um objeto (ponteiro nulo). 
Este recurso se mostra útil para identificar quando um valor não está disponível, assumindo um valor 
próprio para este comportamento, o nulo ou vazio. 
A palavra reservada nulo representa o valor para este comportamento, de modo que no exemplo abaixo 
estamos dizendo que a variável valorCusto é igual a nulo ou em outras palavras, que seu valor é vazio. 
1. valorCusto = nulo 
2. 
Um script pode receber variáveis com valores nulo, onde em certas ocasiões é necessário checar se o 
valor da variável é nulo ou não. Podemos realizar as checagens de duas formas: 
1. valorCusto = nulo 
2. 
3. // Forma 1 
4. se (valorCusto != nulo){ 
5. imprimir ("A variável valorCusto não está nula.") 
6. } 
7. 
8. // Forma 2 
9. se (valorCusto){ 
10. imprimir ("A variável valorCusto não está nula.") 
11. } 
12. 
13. se (!valorCusto){ 
14. imprimir ("A variável valorCusto está nula.") 
15. } 
 
 
 
 
 
24 
 
16. 
17. se (valorCusto && funcionario.agenciaBancaria){ 
18. imprimir ("A variável valorCusto a a agência bancária do funcionário não es
tão nulas.") 
19. } 
20. 
O acesso às referências nulas gera erros durante a execução de um script. No exemplo abaixo, 
suponhamos que a agência bancária do funcionário esteja nula: 
1. nomeFuncionario = funcionario.agenciaBancaria.nome 
2. 
Ao tentar obter o nome de uma agência bancária nula, recebemos um erro de execução: A 
propriedade nome não é acessível em um elemento nulo. Para evitar este comportamento, podemos utilizar o 
operador de navegação segura (?): 
1. nomeFuncionario = funcionario.agenciaBancaria?.nome 
2. 
O operador deve ser utilizado em diversos níveis de uma referência, caso seja apropriado: 
1. nomeFuncionario = funcionario.agenciaBancaria?.municipio?.nome 
2. 
3. // valor impresso 'null' 
4. imprimir(nomeFuncionario) 
5. 
No exemplo acima, caso não utilizassemos o operador (?) no município (municipio?.nome), receberiamos 
um erro durante a execução, devido ao fato de que a agenciaBancária esta nula. Como resultado final o valor da 
variável nomeFuncionario é nula. 
Em algumas ocasiões, gostariamos de considerar um valor padrão onde o resultado seria nulo. Para este 
propósito utilizamos a expressão ternária (?:), como podemos observar abaixo: 
1. nomeFuncionario = funcionario.agenciaBancaria?.municipio?.nome 
2. 
3. imprimir(nomeFuncionario?:'Sem nome') 
4. 
No exemplo acima, quando o valor da variável nomeFuncionario for nulo, o valor retornado será Sem 
nome. 
Poderiamos usar esta expressão diretamente, conforme o exemplo abaixo: 
1. nomeFuncionario = funcionario.agenciaBancaria?.municipio?.nome?:'Sem nome' 
2. 
3. imprimir(nomeFuncionario) 
4. 
 
 
 
 
 
25 
 
 
9 API padrão 
 
A engine padrão disponibiliza uma API com várias funções utilitárias para manipulação de datas, 
caracteres e números. As funções são separadas por classes e são invocadas como métodos. Alguns métodos 
para manipulação de datas e caracteres podem ser utilizados de maneira direta, invocando o método a partir do 
próprio elemento, não necessitando a invocação através da classe. 
Este capítulo abordará detalhes de cada função da API padrão. Essas funções estarão disponíveis ao 
usuário final e serão absorvidas plenamente conforme a utilização. 
 
9.1 Funções para manipulação de caracteres 
 
A seguir são descritas todas as funções disponíveis para a manipulação de caracteres. Da mesma forma 
que para as funções de manipulação de números, serão apresentadas as funções, sua descrição e sintaxe em 
uma tabela, a fim de facilitar o entendimento. 
 
 
FUNÇÃO DESCRIÇÃO / OBJETIVO SINTAXE 
capitaliza 
 
Por meio desta função é possível colocar a 
primeira letra de cada palavra de um texto 
em maiúsculo e as outras letras para 
minúsculo. 
Caracteres.capitaliza(texto) 
OU 
texto.capitaliza 
direita 
Obtém uma quantidade específica de 
caracteres iniciados da direita para 
esquerda. 
Caracteres.direita(texto, quantidade) 
OU 
texto.direita(quantidade) 
dividir 
Esta função divide um texto de acordo com a 
expressão regular informada. 
Caracteres.dividir("boa|tarde", ~/\|/) //[boa, 
tarde] 
OU 
valor.dividir(~/\|/) 
equivalente 
Verifica se uma expressão está contida em 
um texto. 
Caracteres.equivalente(texto, expressao) 
OU 
texto.equivalente(expressao) 
esquerda 
Obtém uma quantidade específica de 
caracteres iniciados da esquerda para 
direita. 
Caracteres.esquerda(texto, quantidade) 
OU 
texto.esquerda(quantidade) 
 
maiusculo 
 
Converte todos os caracteres de um texto 
em maiúsculo. 
 
Caracteres.maiusculo(texto) 
OU 
texto.maiusculo 
minusculo 
Converte todos os caracteres de um texto 
em minúsculo. 
 
Caracteres.minusculo(texto) 
OU 
texto.minusculo 
posicao 
Obtém a posição onde um caracter se 
encontra em uma texto. 
Caracteres.posicao(texto, expressao, 
posicaoInicio) 
OU 
texto.posicao(expressao, posicaoInicio) 
posicaoFinal 
Obtem a posição final de uma expressão 
regular em um texto. 
Caracteres.posicaoFinal(texto, expressao 
regular, posicaoInicio) 
OU 
texto.posicaoFinal(expressao regular, 
posicaoInicio) 
 
 
 
 
 
26 
 
removeEspacos Remove o excesso de espaços de um texto. 
Caracteres.removeEspacos(texto) 
OU 
texto.removeEspacos 
removeEspacosDireita 
Remove o excesso de espaços de um texto 
a esquerda. 
 
Caracteres.removeEspacosDireita(texto) 
OU 
texto.removeEspacosDireita 
removeEspacosEsquerda 
Remove o excesso de espaços de um texto 
à direita. 
Caracteres.removeEspacosEsquerda(texto) 
OU 
texto.removeEspacosEsquerda 
 
sobrepor 
Sobrepõe um texto em outro em uma 
determinada posição e com uma quantidade 
específica de caracteres. 
Caracteres.sobrepor(texto, posicaoInicial, 
quantidadeSobrepor, textoSobrepor) 
OU 
texto.sobrepor(posicaoInicial, 
quantidadeSobrepor, textoSobrepor) 
substituir 
Substitui as ocorrências de uma expressão 
localizada em um texto por outra expressão. 
 
Caracteres.substituir(texto, textoLocalizar, 
textoSubstituir) 
OU 
texto.substituir(textoLocalizar, textoSubstituir) 
subTexto 
Obtém um número específico de caracteres 
de uma posição específica de um texto. 
Caracteres.subTexto(texto, inicio, tamanho) 
OU 
texto.subTexto(inicio, tamanho) 
tamanho Obtém o tamanho de um texto. 
Caracteres.tamanho(texto) 
OU 
texto.tamanho 
vazio 
Verifica se uma palavra está vazia. 
 
Caracteres.vazio(valor) 
OU 
valor.vazio 
repetir 
Repete um texto especificado de acordo com 
uma quantidade definida. 
Caracteres.repetir(texto, repeticao) 
OU 
texto.repetir(repeticao) 
 
Um exemplo prático de utilização do Repetir é para completar os caracteres de um campo de um leiaute 
bancário. Por exemplo, no leiaute tem o campo nome com 100 caracteres, porém, se o nome não tiver 100 
caracteres, então, o campo deve ser preenchido com espaços em branco à direita.

Outros materiais