Regra - Implementação da porta
Ao criar uma nova porta de serviço no provedor interno, esta porta estará disponível como web service que poderá ser executado como qualquer outro serviço nativo do sistema.
Para isto, é necessário implementar a regra LSP que define o comportamento da porta quando ela for chamada, ou seja, deve-ser implementar o que ela fazer.
A regra da porta deve ser definida no momento da criação da porta, pelo botão Regra disponível na tela de edição de portas de serviço, e pode ser alterada a qualquer momento por este mesmo caminho ou pelo Editor de Serviços, através dos menus das portas.
Ao clicar em alguma das opções de edição de regra da porta será aberto o editor de regras LSP convencional dos sistemas Senior, conforme a imagem:
Sintaxe
A regra da porta tem acesso à todos os parâmetros da porta, podendo ler todos os parâmetros de entrada e escrever em todos os parâmetros de saída, ambos definidos no momento em que a porta é criada ou alterada.
Pode ser implementada como qualquer outra regra do sistema, chamando qualquer função disponível, inclusive executar outros serviços, desde que não haja interação com o usuário, como mensagens, por exemplo.
No exemplo que pode ser observado na imagem acima, foi criada uma porta nomeUsuario, que tem como objetivo retornar o nome de um usuário cujo código é passado como parâmetro.
Para isto, foram adicionados à porta o parâmetro de entrada Codigo, do tipo Inteiro, e o parâmetro de saída Nome, do tipo Alfanumérico.
Na regra é chamada a função SegEntLe passando o parâmetro Codigo para ler o usuário na variável xUsuario. Depois é chamada a função SegEntNome, que lê o nome de xUsuário para a variável xNome, a qual é passada para o parâmetro Nome.
Deve-se observar que para acessar os parâmetros da porta é necessário utilizar o nome da porta que foi definido na tela anterior, seguido do nome do parâmetro, seraparados por ponto.
Sintaxe
<nome_da_porta>.<Nome_do_parâmetro>
nomeUsuario.Usuario;
nomeUsuario.Codigo;
Parâmetros implícitos
Alguns parâmetros são criados implicitamente nas portas de serviço, podendo ser acessados a qualquer momento, conforme descrito a seguir:
Nome | Sentido | Tipo | Descrição |
Usuario | Entrada | Alfanumérico | Nome do usuário que está executando o serviço |
Senha | Entrada | Alfanumérico | Senha do usuário que está executando o serviço |
ModoExecucao | Entrada | Inteiro | Modo que o serviço está sendo executado |
ErroExecucao | Saída | Alfanumérico | Usado para passar uma mensagem de erro para o chamador do serviço, caso ocorra algum, já que não é possível mostrar mensagens para ele. |
Definir Alfa xUsuario;
Definir Alfa xPerm;
SegEntLePorNome(nomeUsuario.Nome, xUsuario);
SegEntPermTable(xUsuario, "R900ACC", "S", xPerm);
Se (xPerm = 'N') {
nomeUsuario.ErroExecucao = "Você não tem permissão para acessar uma tabela necessária para executar este serviço";
}
Senao {
@ Continua o processo normalmente. @
}
Parâmetros do tipo tabela
As portas de serviço podem conter parâmetros do tipo Tabela, que podem ser tanto de entrada como de saída. Os valores de cada coluna também podem ser lidos, escritos e comparados. Para isto basta referenciar a coluna e assinalar o valor desejado. O valor será sempre assinalado para a linha corrente da Tabela.
Sintaxe
<Nome_da_Porta>.<Nome_da_tabela>.<Nome_da_Coluna>
Para os parâmetros do tipo tabela temos alguns parâmetros internos e funções que podem ser executadas:
- QtdLinhas: parâmetro que retorna a quantidade de linhas da tabela (somente leitura);
x = nomeUsuario.Permissoes.QtdLinhas;
- LinhaAtual: parâmetro que faz referência à linha corrente da tabela, pode ser lido e escrito, é um contador que vai de 0 (zero) até QtdLinhas-1. Se for atribuído um valor para este campo, a tabela é posicionada na linha informada. Se for lido este valor, é retornado a linha corrente;
nomeUsuario.Permissoes.LinhaAtual = 4;
Se ( nomeUsuario.Permissoes.QtdLinhas < 5 ) {
nomeUsuario.Permissoes.CriarLinha(); @ CriarLinha: Função que cria uma nova linha na tabela posiciona a tabela nesta nova linha. @
}
NomeUsuario.Permissoes.LinhaAtual = 6; @ Posiciona na linha que se deseja excluir. @
NomeUsuario.Permissoes.ExcluirLinha(); @ ExcluirLinha: Função que exclui a linha corrente da tabela. @
No exemplo abaixo, será criada uma porta de serviço para consultar as permissões que o usuário tem sobre determinada tabela:
Definir Alfa xUsuario;
Definir Alfa xPerm;
SegEntLePorNome(NomeUsuario.Usuario, xUsuario);
SegEntPermTable(xUsuario, nomeUsuario.NomeTabela,
"S", xPerm);
nomeUsuario.Permissoes.Select = xPerm;
SegEntPermTable(xUsuario, nomeUsuario.NomeTabela,
"U", xPerm);
nomeUsuario.Permissoes.Update
= xPerm;
SegEntPermTable(xUsuario, nomeUsuario.NomeTabela,
"A", xPerm);
nomeUsuario.Permissoes.Alterar = xPerm;
Foram criados o parâmetro de entrada NomeTabela, do tipo Alfanumérico, e o parâmetro de saída Permissoes, do tipo Tabela.
No parâmetro Permissoes, foram criadas as colunas Select, Update e Alterar, todas do tipo Alfanumérico, onde foram escritas as permissões para cada operação.
- Este tipo de parâmetro não tem ligação direta com nenhuma tabela física do banco de dados;
- Ela é definida por quem cria a porta de serviço de acordo com suas necessidades.