Sintaxe de comandos e operadores
Sinal | Descrição |
= | Sinal Igual: Utilizado em comparações/operações aritméticas. |
> | Maior que. |
< | Menor que. |
<> | Diferente de. |
>= | Maior ou igual a. |
<= | Menor ou igual a. |
e | E. Utilizado com o comando "Se" para ligar várias condições, em que todas devem ser verdadeiras para que o resultado da comparação seja verdadeira. |
ou | OU. Utilizado com o comando "Se" para ligar várias condições, devendo apenas uma condição ser verdadeira para que o resultado da comparação seja verdadeiro. |
Sinal | Descrição |
= | Sinal igual: Utilizado em comparações/operações aritméticas |
+ | Sinal de adição: Utilizado nas operações aritméticas de somar |
- | Sinal de Subtrair: Utilizado operações aritméticas de subtrair |
/ | Sinal dividir: Utilizado nas operações aritméticas de divisão. |
* | Asterisco: Utilizado nas operações aritméticas de multiplicação. |
++ | Incremento de +1: Utilizado para aumentar o valor de uma variável, de um em um. |
-- | Decremento de -1: Utilizado para diminuir o valor de uma variável, de um em um. |
Sinal | Descrição |
/* | Inicio de comentário |
*/ | Final de Comentário |
@ | Comentário de uma linha |
Definição de variáveis
O nome das variáveis declaradas na LSP devem ter no máximo 100 caracteres,este nomes podem ser separados por _ (sublinhado). Não é permitido usar acentuação no nome das variáveis.
Como melhor prática para que as variáveis sejam inicializadas, se atribui o valor no evento Inicialização, que é o primeiro a ser chamado.
Caracteres com Comportamento Especial
Existem determinados caracteres que, quando inseridos eu uma expressão literal nas regras, devem ser precedidos do caractere \ (barra) para indicar que estes caracteres serão usados literalmente e não como caracteres especiais. Estes caracteres são: "" (aspas) e \ (barra).
EnviaEMail("Joao","joao@senior.com.br", "", "", "Teste","\"\\\\Servidor\\teste.txt\"", "");
Como pode ser visto no exemplo acima, está sendo passado um endereço de um arquivo que normalmente seria: \\Servidor\teste.txt. Entretanto ao passar literalmente nas regras é necessário colocar uma \ (barra) antes das "" (aspas) e da \ (barra) para que estes caracteres não funcionem como caracteres especiais.
Se a barra não fosse adicionada antes destes caracteres, eles funcionariam de forma especial, ou seja, a \ (barra) é usada para quebra de linha quando o texto é muito extenso para ser visualizado em tela e as "" (aspas) são usadas para passar (entre as mesmas) expressões literais.
Palavras Reservadas
A LSP não faz distinção de letras maiúsculas e minúsculas. Portanto A LSP possui 51 (cinquenta e uma) palavras reservadas que não poderão ser usadas pelo programador para outros fins.
A LSP tem seus comandos em português, mas também pode ser programada em inglês e tem a possibilidade de executar funções internas da aplicação.
São chamadas funções do programador. Mas para isso, estas funções precisam ser cadastradas internamente pelo programador da aplicação.
Abre o arquivo informado em nome do arquivo para o modo de abertura informado (Ler/Gravar). Se o arquivo não existir, ele é criado. Ele retorna um manipulador de arquivos.
Sintaxe
Abrir ("<nome do arquivo>",<modo de abertura>);
Exemplo
arq = Abrir ("Teste.txt",Ler);
Usado com o comando Definir para definir uma variável Alfanumérica com o tamanho determinado.
Sintaxe
Definir Alfa <nome da variável>[<tamanho>];
Exemplo
Definir Alfa S[30];
Atualiza os dados de todos os campos de uma tela de cadastramento.
Exemplo
AtualizarCampos();
Cancel (n)
Utilizado para cancelar a execução
da regra. Possui diferentes ações de acordo com o recurso que executou
a regra. Ao usar a função Cancel(n) em regras que são executadas por eventos de
tela, a única ação tomada será o cancelamento da execução da regra, independentemente
do valor passado como parâmetro.
Para que seja gerado um erro, deve-se usar a função Mensagem(Erro, "mensagem") ou então a equipe de desenvolvimento do sistema deve tratar via código de sistema o retorno de Cancel(n).
No Gerador de Relatórios, o comando Cancel pode ser usado das seguintes formas:
Cancel(1)
- Em controles: Cancela a execução da regra e a impressão do mesmo.
- Nas regras: Definição\Seleção e Detalhe\Antes_de_Imprimir, exclui o registro atual do relatório (detalhe);
- Na regra: Definição\Pré-Seleção cancela a execução do relatório.
Cancel(2)
Utilizado para
imprimir o conteúdo da variável ValStr em controles do tipo descrição
e depois sair da regra;
Cancel(3)
Utilizado
apenas em controles do tipo fórmula (na ordenação por fórmula) para
excluir o registro atual do relatório (semelhante a executar o Cancel(1) nas regras: Definição\Seleção, Detalhe\Antes_de_Imprimir e Detalhe\Depois_de_Imprimir).
Continua a execução de um loop feito pelo comando Para.
Sintaxe
Continue;
Exemplo
Se (teste <> 0)
{
Continue;
}
Os cursores nada mais são que um SELECT em uma regra, retornando registros que satisfaçam a condição informada na propriedade SQL de um Cursor.
O SELECT utilizado no cursor não possui relacionamento direto com o SELECT utilizado pelo gerador de relatórios. Os cursores são utilizados em conjunto com determinados cursores.
Não é possível utilizar dois SQLs no mesmo cursor em uma regra LSP que retorne quantidade diferentes de campos. Ou seja, se for necessário criar dois ou mais selects que retornem diferentes quantidades de campos, deve-se criar um cursor para cada select.
SQL
Usado para definir um comando SQL para o cursor.
Sintaxe
<nome_do_cursor>.SQL "<comando_SQL>";
Exemplo
CProd.SQL "SELECT * FROM E075PRO WHERE CODEMP = 1";
AbrirCursor (OpenCursor)
Sintaxe
<nome_do_cursor>.AbrirCursor( );
Exemplo
CProd.AbrirCursor();
FecharCursor (CloseCursor)
Sintaxe
<nome_do_cursor>.FecharCursor( );
Exemplo
CProd.FecharCursor();
Proximo
Lê o próximo registro do cursor.
Sintaxe
<nome_do_cursor>.Proximo( );
Exemplo
CProd.Proximo();
<campos>
Os campos pertencentes ao cursor e que podem ser acessados diretamente, porém são somente Leitura, ou seja, não podem ser alterados.
Sintaxe
<nome_do_cursor>.<nome_do_campo>
Exemplo
x = CProd.CodEmp;
Achou (Found)
Retorna verdadeiro se achou alguma linha do cursor.
Sintaxe
<nome_do_cursor>.Achou
Exemplo
se (CProd.Achou)
{
@ Comandos @
}
NaoAchou (NotFound)
Retorna verdadeiro se não achou alguma linha do cursor.
Sintaxe
<nome_do_cursor>.NaoAchou
Exemplo
se (CProd.NaoAchou)
{
@ Comandos @
}
Outros exemplos
Cursor retornando apenas uma linha, quando tem-se a chave completa, este cursor deve retornar apenas uma linha:
Definir Cursor Cur_E140NFV; @ Utiliza-se como padrão a nomenclatura Cur_+Nome Tabela. @
Definir alfa VCodSnf[03];
VcodEmp = 1;
VcodFil = 1;
VcodSnf = "U";
VnumNfv = 100;
Cur_E140Nfv.Sql "SELECT VLRLIQ FROM E140NFV WHERE CODEMP = :VCODEMP \
AND CODFIL = :VCODFIL AND CODSNF = :VCODSNF \
AND NUMNFV = :VNUMNFV";
Cur_E140Nfv.AbrirCursor();
Se (Cur_E140Nfv.Achou)
Inicio
@ Encontrou o Registro. @
VvlrLiq = Cur_E140Nfv.VlrLiq;
Fim;
Cur_E140Nfv.fecharCursor();
Cursor retornando várias linhas, quando não tem-se a chave completa, este cursor pode retornar várias linhas:
Definir Cursor Cur_E140NFV; @ Utiliza-se como padrão a nomenclatura Cur_+Nome tabela. @
Definir data VDatEmiIni;
Definir data VDatEmiFim;
Definir alfa VtnsPro[05];
VcodEmp = 1;
VcodFil = 1;
MontaData(15/01/1998,VdatEmiIni);
MontaData(30/01/1998,VdatEmiFim);
VTnsPro = "511";
Cur_E140Nfv.Sql "SELECT VLRLIQ FROM E140NFV WHERE CODEMP = :VCODEMP \
AND CODFIL = :VCODFIL AND DATEMI >= :VDATEMIINI \
DATEMI <= :VDATEMIFIM AND TNSPRO = :VTNSPRO";
Cur_E140Nfv.AbrirCursor();
VvlrLiq = 0;
Enquanto(Cur_E140Nfv.Achou)
Inicio
@ Encontrou o Registro @
VvlrLiq = VvlrLiq +Cur_E140Nfv.VlrLiq;
ListaSecao("AdicionalTeste"); @ Está listando seção adicional para cada registro do Cursor. @
Cur_E140Nfv.Proximo();
Fim;
Cur_E140Nfv.fecharCursor();
Verifique também o tópico Macro __inserir nos Cursores Usados em Regras.
Variável que guarda apenas datas.
Exemplo
Definir Data xDatNas;
Define o tipo (Alfa, Numero, Tabela, Data, Funcao ou Cursor) de uma variável ou função. Caso a variável não seja definida, esta será considerada como tipo Numero.
Sintaxe
Definir <Tipo> <Nome_da_Variável>;
Exemplos
Declaração de uma variável alfanumérica chamada Nome_da_Cidade com tamanho de 20 posições:
Definir Alfa Nome_da_Cidade[20]; @Após o comando Definir, é informado o tipo da variável, neste caso Alfa (tipo Alfanumérico) @
@ Forma de acesso à variável @
Nome_da_Cidade = "Blumenau";
Se (Nome_da_Cidade = "Blumenau")
Declaração de uma variável numérica chamada Valor_Salario ocorrendo 12 vezes, ou seja, haverá 12 números Valor_Salario. Por exemplo, os 12 salários dos meses do ano:
Definir Numero Valor_Salario[12]; @ Após o comando Definir, é informado o tipo da variável, neste caso Numero (tipo Numérico) @
@ Forma de acesso à variável @
Valor_Salario[1] = 1000,00;
Valor_Salario[x1 + x2 + 1] = 1000,00;
Declaração de uma uma tabela de 12 ocorrências tendo como nome Acumulador, e como variáveis numéricas Media_Mensal e Movimento ocorrendo 31 vezes uma para cada dia do mês e a alfanumérica Nome_Mes com 14 posições:
Definir Tabela Acumulador[12] =
{
Numero Media_Mensal;
Numero Movimento[31];
Alfa Nome_Mes[14];
};
@ Os caracteres "{" e "}" podem ser substituídos por "Inicio" e "Fim" respectivamente. @
@ Indicando que as variáveis Media_Mensal e Movimento pertencem ao bloco "Tabela" ao qual tem nome de Acumulador. @
@ Forma de acesso à variável @
x1 = Acumulador[1].Media_Mensal + 1;
x1 = Acumulador[x2+1].Movimento[x3+1];
Acumulador[1].Nome_Mes = "Janeiro";
Acumulador[2].Nome_Mes = "Fevereiro";
Desfaz uma transação iniciada anteriormente.
Exemplo
IniciarTransacao(); @ Abre transação. @
@ Comandos @
Se (CodUsu = 1){
DesfazerTransacao(); @ Executa RollBack. @
Mensagem(Erro, "O usuário 1 não tem permissão");
}
FinalizarTransacao(); @ Executa Commit. @
Importante
Caso ocorra um erro entre IniciarTransacao e FinalizarTransacao, a transação será desfeita com a execução de um RollBack, exceto para quando a regra estiver sendo depurada, neste caso a transação não será finalizada.
Comando lógico para formular uma condição geral com dependência entre as condições individuais. Para que a condição geral seja verdadeira, todas as condições individuais ligadas pelo E, devem ser verdadeiras.
Sintaxe
(<condição1> e <condição2>)
Exemplo
se (x > 5 e x < 10)
Indica que o parâmetro de uma função é passado na chamada da mesma.
Sintaxe
Funcao <nome da função>(<tipo do parâmetro> end <nome do parâmetro>);
Exemplo
Funcao Teste(Numero var Par1);
Comando utilizado para que um bloco de comandos seja
executado repetidamente até que a condição definida deixe de ser atendida.
Sintaxe
enquanto (<condição>)
Exemplo
enquanto (x < 10)
Executa um comando SQL no banco. Nessa função podem ser usadas para as operações Insert , Update , Delete.
Exemplo
Insert:
ExecSql "Insert Into R030EMP (<Campo>) Values (<Valor do Campo>)";
Update:
ExecSql "Update R030EMP set <Campo> = <Novo Valor> Where <Condição>";
Delete:
ExecSql "Delete R030EMP Where <Condição>";
Executa um comando SQL no banco. Nessa função podem ser usadas para as operações Insert , Update , Delete, retornando 0 (zero) no parâmetro Numero sucesso se o comando executou corretamente ou 1 seguido da mensagem de erro no parâmetro Alfa Mensagem em caso de falha na execução.
Sintaxe
ExecSqlEx(<Alfa ComandoSQL>, <Numero Sucesso>, <Alfa Mensagem>);
Exemplo
Insert:
Definir Numero xErro;
Definir Alfa xMensagem;
IniciarTransacao();
ExecSQLEx (" Insert into R030EMP (<Campos>) values (<valores>)",
xErro, xMensagem);
Se ( xErro = 0 ) {
ExecSQLEx (" Insert into R034FUN (<campos>)
values (<valores>)", xErro, xMensagem);
Se (xErro = 0) {
FinalizarTransacao();
Mensagem(Retorna,"Sucesso");
}
Senao {
DesfazerTransacao();
Mensagem(Erro,xMensagem);
}
}
Senao {
DesfazerTransacao();
Mensagem(Erro,xMensagem);
}
Update:
Definir Numero xErro;
Definir Alfa xMensagem;
ExecSQLEx (" Update R030EMP set <Campo = "novo valor"> where <condição>", xErro, xMensagem);
Se ( xErro = 0 ) {
Mensagem(Retorna,"Sucesso");
}
Senao {
Mensagem(Erro,xMensagem);
}
Delete:
Definir Numero xErro;
Definir Alfa xMensagem;
ExecSQLEx (" Delete R030EMP where <condição>", xErro, xMensagem);
Se ( xErro = 0 ) {
Mensagem(Retorna,"Sucesso");
}
Senao {
Mensagem(Erro,xMensagem);
}
Utilização com campos Blob:
@Definir a variável alfa que irá receber o blob do arquivo @
Definir Alfa xBlob;
Definir Numero xErro;
Definir Alfa xMensagem;
xArquivo = Abrir("Caminho/Arquivo.png", Ler);
Ler(xArquivo, xBlob, 9999999);
@Inserir a imagem com a função ExecSqlEx@
ExecSQLEx ("Insert into R030EMP (<Campo BLOB>) values ( :BLOB(xBlob) )", xErro, xMensagem);
Se ( xErro = 0 ) {
Mensagem(Retorna,"Sucesso");
}
Senao {
Mensagem(Erro,xMensagem);
}
Fecha um arquivo aberto anteriormente pelo comando Abrir.
Sintaxe
Fechar (<manipulador do arquivo>);
Exemplo
Fechar(arq);
Indica o fim de um bloco de comandos.
Exemplo
inicio;
@ Comandos. @
fim;
{
@ Comandos. @
}
Finaliza a transação no banco de dados.
Exemplo
IniciarTransacao(); @ Abre transação. @
@ Comandos. @
Se (CodUsu = 1){
DesfazerTransacao(); @ Executa RollBack. @
Mensagem(Erro, "O usuário 1 não tem permissão");
}
FinalizarTransacao(); @ Executa Commit. @
Importante
Caso ocorra um erro entre IniciarTransacao e FinalizarTransacao, a transação será desfeita com a execução de um RollBack, exceto para quando a regra estiver sendo depurada, neste caso a transação não será finalizada.
Formata números de acordo com os parâmetros definidos. O formato é o mesmo usado no Borland Delphi 2.0.
Sintaxe
<variável> = Formatar(<dado>,"<formato>");
Parâmetros
- Valor: Variável tipo numérica a ser convertida;
- Formato: Formato de conversão. Por exemplo, %3.0f para converter o valor 354 e %3.2f para converter o valor 345,43.
Exemplo
Fmt = Formatar(123,"%s");
Formata números com casas decimais de acordo com os parâmetros definidos. O formato é o mesmo usado no Borland Delphi 2.0.
Parâmetros
- Valor: Variável tipo numérica a ser convertida;
- Formato: Formato de conversão;
- Separador decimal: Qual será o separador de casas decimais;
- Variável: armazena o resultado da formatação.
Sintaxe
FormatarN(<dado>,"<formato>","<separador decimal>",<variável>);
Exemplo
FormatarN(123,"%3.2f",".",Fmt);
É um conjunto de comandos, que tem como objetivo calcular um ou mais valores e retorná-los para uso na regra. Havendo uma operação que se repita, pode-se criar a função e chamá-la em cada regra, sem precisar reimplementá-la.
Nota
Como boa prática, é recomendável que se reserve a regra 001 apenas para implementar funções.
Uma função pode receber parâmetros e retornar valores.
Valores alterados dentro da função, também serão alterados fora dela.
Os parâmetros definidos para as funções devem obrigatoriamente ser Numéricos. Parâmetros do tipo Alfanuméricos ainda não são suportados por funções definidas das regras.
Exemplo
Funcao AltSituacao (Numero SitOri, Numero SitDes);
Inicio
HorSit[SitDes] = HorSit[SitOri];
HorSit[SitOri] = 0;
Fim;
Para usar a função na regra, deve-se declará-la no início da mesma.
@ Forma de acesso à função. @
Definir Funcao AltSituacao (Numero SitOri, Numero
SitDes);
Grava o valor de uma constante ou de uma variável, e uma quantidade de caracteres especificados em tamanho no arquivo especificado no manipulador de arquivo.
Sintaxe
Gravar(<manipulador de arquivo>,<<variável> ou <constante>>,<tamanho>);
Exemplo
Gravar(arq,S,20);
Grava uma linha no arquivo indicado pelo manipulador de arquivo com o valor de uma variável ou constante, passada como parâmetro.
Sintaxe
Gravarnl(<manipulador de arquivo>,<<variável> ou <constante>>);
Exemplo
Gravarnl(arq, Str);
Usado com o comando definir para declarar uma variável do tipo grade.
Sintaxe
Definir Grid <nome da variável>
Exemplo
Definir Grid Nome_Mes;
Inicia a transação no banco de dados.
Exemplo
IniciarTransacao(); @ Abre transação. @
@ Comandos. @
Se (CodUsu = 1){
DesfazerTransacao(); @ Executa RollBack. @
Mensagem(Erro, "O usuário 1 não tem permissão");
}
FinalizarTransacao(); @ Executa Commit. @
Caso ocorra um erro entre IniciarTransacao e FinalizarTransacao, a transação será desfeita com a execução de um RollBack, exceto para quando a regra estiver sendo depurada, neste caso a transação não será finalizada.
Também deve ser informada explicitamente a transação com os comandos IniciarTransacao() e FinalizarTransacao() quando for necessário usar transações nas regras LSP. A rotina de validação de seção do usuário realiza alterações no banco quando não há transações ativas.
Indica o início de um bloco de comandos, que permite a inclusão de outros blocos internos.
Exemplo
inicio;
@ Comandos. @
fim;
{
@ Comandos. @
}
Usado para inserir um outro texto na posição onde está o comando.
Exemplo
Inserir "Header.lsp";
Lê uma quantidade de caracteres especificados em tamanho do arquivo especificado no manipulador de arquivo e joga o valor lido na variável especificada.
Sintaxe
Ler(<manipulador de arquivo>,<variável>,<tamanho>);
Exemplo
Ler(arq,S,20);
Lê uma linha do arquivo indicado pelo manipulador de arquivo e joga o valor lido para a variável indicada.
Sintaxe
Lernl(<manipulador de arquivo>,<variável>);
Exemplo
Lernl (arq,S);
Exibe uma mensagem para o usuário. As mensagens possuem características de acordo com o seu tipo.
- Retorna: Mostra uma mensagem de aviso, com os botões especificados entre colchetes. O símbolo & indica tecla de aceleração (atalho);
- Erro: Gera uma exceção, mostrando uma mensagem de erro e abortando a execução da regra;
- Refaz: Gera uma exceção, mostrando uma mensagem de erro e abortando a execução da regra.
Sintaxe
Mensagem(<tipo da mensagem>,"<mensagem>");
Exemplo
Mensagem(Retorna,"Deseja Sair ? [&Sim,&Não]");
Mensagem em ambiente web
No ambiente web, Não é permitida a função Mensagem nas regras. Quando esta função aparece nas regras e está sendo executada na web, internamente é gerado uma exceção e em determinados casos , como no SGI por exemplo, causa a perda das alterações realizadas no banco de dados.
Foi criada então uma variável que ficará disponível aos sistemas para que indiquem se desejam que seja ignorada na WEB as mensagens que forem do tipo Retorna. A variável se chama vIgnoreRuleMsgInEnvWeb e está no fonte RtBaseUtil.pas. Por padrão, ela virá marcada como falso, ou seja, sempre irá gerar uma exceção caso apareça o comando mensagem na regra, como é o comportamento padrão.
Se a vIgnoreRuleMsgInEnvWeb tiver seu valor alterado para verdadeiro e a mensagem sendo do tipoRetorn,a mensagem será ignorada e a regra continuará a executar normalmente.
Se a vIgnoreRuleMsgInEnvWeb tiver seu valor alterado para verdadeiro e a mensagem sendo do tipoErro, será gerada uma exceção e será abortada a execução da regra.
Usado com o comando definir para definir uma variável Numérica.
Sintaxe
Definir Numero <nome da variável>;
Exemplo
Definir Numero n;
Comando lógico para formular uma condição geral sem dependência entre as condições individuais. Para que a condição geral seja verdadeira, ao menos umas das condições individuais ligadas pelo ou, deve ser verdadeira.
Sintaxe
(<condição1> ou <condição2>)
Exemplo
se (x = 5 ou x = 10)
Comando utilizado para que um bloco de comandos seja
executado determinado
número de vezes, a partir de um valor inicial que é incrementado pelo valor do contador, até que a condição definida deixe de ser atendida.
Sintaxe
Para (<valor inicial>; <condição>; <contador>)
Exemplo
Para (x = 0; x < 10; x++);
Interrompe a execução de um bloco do comando enquanto ou para. O sistema abandona o bloco de comandos e continua a execução do restante das regras.
Exemplo
Para (x=0; x <= 50; x++)
Inicio
y = y + 1;
Se ( y = 35)
Pare;
Fim;
Chama uma outra regra identificada pelo número da regra.
Sintaxe
Regra <número da regra>
Exemplo
Regra 5;
Observação
A função Regra não pode ser executada a partir das regras do editor de web services.
Executa o bloco a seguir se a condição for atendida.
Sintaxe
se (<condição>) { @ Comandos. @ }
Exemplo
se (x > 10) {
x = 0; @ Este comando será executado se a condição
for atendida. @
}
Usado com o comando se, caso a condição não for atendida, o bloco após o senao será executado.
Sintaxe
se (<condição>) { @ Comandos. @ } senao { @ Comandos. @ }
Exemplo
se (x > 10) {
x = 0; @ Este comando será executado se a condição for atendida. @
}
senao {
x++; @ Este comando será executado se a condição não for atendida. @
}
Usado com o comando definir para declarar uma variável do tipo Tabela, com linhas e colunas. Cada coluna é um nome com um tipo específico de informação e as linhas são indexadas de 1 até N.
Sintaxe
Definir Tabela <nome da tabela>[<número de ocorrências>] = { <tipo da variável> <nome da variável>; ... }
Exemplo
Definir Tabela Meses[12] = { Alfa Nome_Mês[30]; Numero Numero_Dias; }
Retorna um valor numérico para a aplicação.
Sintaxe
ValRet = <valor>;
Exemplo
ValRet = 10;
Retorna um valor alfanumérico para a aplicação.
Sintaxe
ValStr = <valor>;
Exemplo
ValStr = "Regra";
Desvia a execução do programa para um ponto específico da regra onde estiver localizado o identificador determinado. Assim, ao ser declarado o identificador, este poderá ser chamado a um ponto de regra, movendo a execução do procedimento a partir do ponto específico em que foi chamado.
O uso desse comando deve ser analisado e aplicado com cautela, associando lógica e/ou validações que, ao atenderem a determinados resultados, avancem a um ponto especifico da regra.
Sintaxe
VaPara <identificador>
Exemplos
Exemplo 01:
VaPara inicio;
início:
Exemplo 02:
se ((codusu = 1) ou (codusu = 2))
vapara fim;
x=y;
fim:
Funções Internas de Porta de Web Service
As portas de serviço via Regra LSP podem conter funções internas responsáveis por executar uma determinada operação na porta.
Sintaxe
<Nome_da_Porta>.<Nome_Funcao_Interna>
Para as Portas de Serviço em geral, temos algumas Funções Internas que podem ser executadas:
- Executar(): função que executa a requisição da porta, ou seja, realiza as operações para as quais a porta do serviço foi implementada.
nomePorta.Executar();
- AtivaLimpezaParamEnt(): função que habilita a Limpeza Automática dos Parâmetros de Entrada após a Execução, ou seja, após qualquer execução da porta (função Executar()), todos os parâmetros de entrada serão limpos sendo necessário alimentá-los novamente para uma nova execução. Caso esta função não seja chamada dentro da Regra LSP, a porta vai assumir a Limpeza Automática como habilitada por padrão.
nomePorta.AtivaLimpezaParamEnt();
- DesatLimpezaParamEnt(): função que desabilita a Limpeza Automática dos Parâmetros de Entrada após a Execução, ou seja, após qualquer execução da porta (função Executar()), todos os parâmetros de entrada serão mantidos não sendo necessário alimentá-los novamente para uma nova execução. Caso esta função não seja chamada dentro da Regra LSP, a porta vai assumir a Limpeza Automática como habilitada por padrão.
nomePorta.DesatLimpezaParamEnt(); - LimparParamsEntrada(): função que realiza a Limpeza dos Parâmetros de Entrada no ato de sua chamada, ou seja, todos os parâmetros de entrada da porta serão limpos ao executar a função.
nomePorta.LimparParamsEntrada();
No exemplo fictício abaixo, será criada uma porta de serviço para inserção de duas pessoas com um contato no banco de dados:
Definir xServico.xPorta wsPorta;
wsPorta.DesatLimpezaParamEnt();
wsPorta.codPessoa = 1;
wsPorta.nomPessoa = "Pessoa 1";
wsPorta.dadosContato.CriarLinha();
wsPorta.dadosContato.telContato = "99999999";
wsPorta.dadosContato.nomContato = "Contato 1";
wsPorta.Executar();@ Primeira Execução @
wsPorta.codPessoa= 2;
wsPorta.nomPessoa = "Pessoa 2";
wsPorta.Executar();@ Segunda Execução @
wsPorta.LimparParamsEntrada();
wsPorta.AtivaLimpezaParamEnt();
Foram criados os parâmetros de entrada "codPessoa" e "nomPessoa" juntamente com parâmetros de entrada do tipo tabela "telContato" e "nomContato" para realizar a inserção de duas pessoas com o mesmo contato em comum.
Ao desativar a Limpeza dos Parâmetros de Entrada com a função DesatLimpezaParamEnt(), a primeira chamada da execução do serviço vai inserir a Pessoa 1 com o Contato 1 mantendo esses parâmetros alimentados para uma próxima execução.
Sobrescrevendo a "Pessoa 1" por "Pessoa 2" na segunda execução do serviço, resultará na inserção da Pessoa 2 com o Contato 1 pois os parâmetros de entrada do tipo tabela "telContato" e "nomContato" ainda estarão alimentados.
A chamada da função LimparParamsEntrada() realizará a limpeza de todos os parâmetros de entrada ao final.
A chamada da função AtivaLimpezaParamEnt() indica o retorno da Limpeza Automática dos Parâmetros de Entrada após a Execução para quaisquer execuções posteriores da mesma porta na regra atual.