STM Web
Executores
Objetivo
Foi desenvolvida uma forma de facilitar a execução de packages, querys e functions no banco de dados. Visando uma maior produtividade e exito na migração das rotinas ja existentes no STM VB.Os executores se encontram disponiveís na biblioteca Cebi.Stm.Executor que já está instalada nos módulos do stm web.
Váriavel Global
Todos os executores, necessitam da carga de váriavel global, elas já são instanciadas em todas as nossas controllers
Querys
O Executor de query é o mais simples, voce deverá montar a consulta sql em uma string, e passar essa consulta como parametro no construtor do executor:Esse executor possuí 2 métodos:
- GetSingle<<T></T>T>
- GetList<<T></T>T>
O primeiro, irá retornar apenas 1 linha do resultado da query, indicado para consultas por chaves primárias.
Já o segundo, retorna todas as linhas.
Em ambos os métodos, deverá ser informada a classe de retorno no parametro T da execução
Os campos da classe devem ter o mesmo nome dos campos de retorno. Deverá também ser informado no método a carga de variável global.
Packages
Para a execução de packages, no nosso construtor passamos 2 parametros:O uso ou não do record set será informado pela equipe, por ser um parametro opcional, se não for informado no construtor, seu valor sera "false"
o Executor, tem uma propriedade chamada "Parametros", de tipo "List< object >", que deve ser mapeada da seguinte maneira:
Deverá ser informado na instancia da classe o tipo de dado do parametro.
Os parametros também devem estar na mesma ordem da package no banco de dados
Métodos de Execução
- ExecuteVoid Esse método não tem nenhum tipo de retorno, apenas executa a pkg.
- GetList<<T>T> Esse método retorna uma lista do objeto do tipo informado no parametro T
- GetNextSeq Esse método, é utilizado para obter a proxima sequence do modulo desejado, retornando um valor do tipo "int"
Todos os métodos devem receber a variavel global como parametro
Functions
As functions funcionam de forma parecida das packages, as diferenças são:
-
Váriavel de Retorno:
Em sua instancia, deverá ser informada na variavel "Retorno" o tipo de dado oracle que a function retorna:
-
Parametros Devem ser informados da mesma forma que nas packages.
-
Retorno de Execução Deverá ser informado no parametro de tipo T qual o tipo do retorno da function, exemplo:
O método deve receber a variavel global como parametro
Levantamento de Requisitos
Levantamento de Requisitos
Para o desenvolvimento, é necessário ter algumas informações em mãos: a sigla da tabela e sua package de operações básicas.
Para identificar, bastar realizar a seguinte consulta no nosso BD:
select tfa_sigla, tfa_nome from tabelas_cebi where tfa_nome like '{TABELA A SER DESENVOLVIDA}%’
Exemplo:
Já sabemos a nossa sigla, agora, para descobrir o nome das packages é só pegar o conteudo do campo TFA_NOME, incluir PKG_ no inicio, e remover o CEBI
No nosso exemplo, nossa pkg seria: PKG_CARGOS
API's e Serviços
Desenvolvimento Back-End
Mapeamento de Tabelas
Para esse projeto, não usaremos o Entity Framework, usaremos ADO.NET puro para reaproveitar as rotinas já existentes no STM (VB)
Dito isso, não teremos entidades, repositorios, ef config e etc
Para mapeamento, deve ser criado uma classe com exatamente os mesmos nomes e tipos de dados existentes na tabela (usar PL/SQL para consultar)
Exemplo:
Classe da TabelaA Classe deverá ser criada em: \Domain\TableMaps
Criação da API e Rotas Essenciais
Para garantir o funcionamento das nossas API's, utilizaremos esse padrão em suas criações.
- Uma váriavel do tipo "VariavelGlobal" que deverá ser instanciada no construtor da nossa classe, através do método: "GetVariavelGlobal.Executar()"
- Uma váriavel do tipo string, chamada "_pkg" que irá armazenar o nome da package que armazena as rotinas do módulo em questão.
Essas variáveis são essenciais para o funcionamento dos nossos executores genéricos.
Todos os serviços de executores necessitam da variável global para funcionar
Rotas
É necessária uma rota para obter os campos do sistema mapeados, isso acontecerá através de um service de estrutura padrão, como no exemplo a seguir:
No primeiro método, usaremos de um SELECT na tabela em questão, através da chave primária do registro, usando nosso executor de querys.
Já no segundo, usaremos do nosso serviço "MapearCamposConsulta", passando a nossa classe. o retorno do "Executar" e a sigla da nossa tabela.
Essa rota deverá existir em todas as API's
-
Pesquisa
Rota utilizada para realizar pesquisas na nossa tela de "lista", deverá ser criado um serviço que utiliza de querys para encontrar os dados desejados, como no exemplo a seguir:
Os filtros e consulta deverão ser alterados conforme necessidade.
-
Inclusão
Deverá seguir o padrão, recebendo o objeto a ser incluido. A próxima seq. deve ser obtida através do service do exemplo e mapeada a PK do objeto que recebemos, para então realizar a inclusão.
Telas Dinâmicas
Geração de Telas Dinâmicas
Para geração de telas dinâmicas, usaremos uma diretiva, que a partir da sigla informada, realiza uma busca em uma estrutura reaproveitada do sistema VB, e de forma dinâmica, compila todos os campos em tela.
Para criar o nosso modulo, deveremos duplicar a pasta “modelo”, e alterar as referencias para o módulo desejado:
Deverá ser renomeado em todos controllers, views e module as referencias de "modelo" para o módulo que está sendo desenvolvido.
Após isso, deverá ser agregado no “appModules.js” do projeto, o nome do módulo recém criado.
Com todas referencias alterados, modulo importado, devemos alterar as referencias da chamada da diretiva:
Tela de Detalhes
Na tela de detalhes, alterar a propriedade 'api' da diretiva para a rota da api recém criada e para a propriedade 'pk', colocamos a variavel que contém a pk do nosso cadastro, que já está referenciada no nosso controller.js
Exemplo de uso:
Inclusão e Edição
Para telas de inclusão e edição, o processo é ainda mais simples, alteramos a propriedade 'modulo' utilizando a sigla que obtemos no inicio do processo
Pesquisa
A tela de pesquisa deverá ser adaptada de acordo os filtros especificados que serão repassados na hora do desenvolvimento.