sábado, 8 de dezembro de 2012

Genexus Business Component - Parte II

Nesta segunda parte do assunto Business Component (acesse aqui a parte 1), iremos verificar como realizar rotinas de inserção através de Data Provider, além de atualizações e exclusões de registros. Se a utilização de BC já reduz as linhas de programação e facilita o desenvolvimento, a combinação deste com Data Provider facilita ainda mais.

Mas lembre-se, através de Data Provider só podemos realizar inserções através do Business Component. Veremos abaixo como realizar isto.

Inserção de registros através de Data Provider

Continuando com o exemplo da Parte 1, considere uma aplicação Genexus para uma livraria. Nesta livraria os livros são catalogados por Assunto, Editora e edição correspondente. A partir do seu Assunto cada livro recebe um código único.

Após definirmos o desenho da transação e declarar suas regras, definidos a propriedade "Business Component" como trueNeste código, os três primeiros dígitos é o código de seu assunto e os três últimos são sequenciais. Então, os livros do assunto "Negócios" (código 100), terão códigos de 100001 a 100999.
Livros

Para facilitarmos a inserção de novos livros, é criado uma Web Panel contendo um grid, com todos os livros registrados. Na última coluna da direita deste grid, inserimos uma imagem e criamos um evento associado a esta, com a opção de clonar este livro. Isto é, inserir um novo livro a partir dos dados do livro selecionado. Logo em nossa form teríamos:


Genexus Grid

Adicionamos a variável "Livro" que terá como Tipo de Dado o Business Component Livro. Agora, na aba de eventos desta Web Panel, iremos programar o evento associado ao clique da imagem "Clonar":
Event 'ClonarLivro'
//=====Chama o Data Provider passando o código do livro clicado como parâmetro=====
&Livro = DPLivro(LivroCodigo)

//=====Salva os Dados=====
&Livro.Save()

//=====Finaliza a UTL=====
commit

//=====Atualiza a página para aparecer o novo registro no grid=====
Refresh
EndEvent
Data Provider utilizado, a propriedade Output foi definida com o objeto Transação Livro. Os objetos Data Provider não possuem parâmetros de saída (out), este parâmetro é sempre definido a partir de suas propriedades, conforme abaixo:

Genexus Data Provider

Regra declarada:
parm(in:&LivroCodigo);
Podemos notar que o parâmetro recebido, id da tabela de Livros, serve como condição para capturar os dados referentes a este registro (where LivroCodigo = &LivroCodigo).

O atributo LivroCodigo e LivroDataCadastro não estão especificados no Data Provider em função de serem atribuídos a partir das regras da transação Livro. Isto é, o Business Component irá herdar estas regras (Regras especificadas na parte 1).

Atualização de registros através de Business Component

Imaginamos a seguinte situação, após determinados períodos, a nossa livraria necessita alterar o preço de todos os livros cadastrados, aumentando ou diminuindo 5% ou então 10%. Seria muito trabalhoso para o administrador da aplicação entrar em todos os livros e realizar esta alteração.

Logo, iremos inserir um campo de ajuste e um botão em nossa web panel para permitir ao administrador alterar todos os registros a partir de uma determinada porcentagem. Assim as mudanças da Form do objeto ficaram da seguinte forma:

Genexus Grid

Ao clicar sobre o botão o seguinte evento é realizado:
Event 'RealizarAjuste'
//=====Se valor informado não for vazio=====
if not &Ajuste.IsEmpty()

//=====Para cada linha do Grid=====
for each line in Grid

//=====Carrega BC com chave primária=====
&Livro.Load(LivroCodigo)

//=====Define novo valor do livro=====
&Livro.LivroValor = LivroValor * (1+(&Ajuste/100))

//=====Salva alteração e finaliza UTL=====
&Livro.Save()
commit
endfor

//=====Refresh após todos valores serem alterador=====
Refresh
else

//=====Se valor informado for vazio, exibir mensagem=====
msg('Informe a porcentagem de ajuste!')
endif
EndEvent
Note que ao realizar o Load, apenas passamos a chave primária, nos Business Components não precisamos passar todos os parâmetros recebidos pela transação, como o Modo (Update, Delete, Insert ou Display).

Exclusão de registros através de Business Component

Por fim, veremos como excluir registro através do BC.

Nossa seguinte demanda é, após algumas falhas de inclusões (um administrador novato tomou conta do sistema..hehe), precisamos facilitar a forma de exclusão dos livros. Caso se deseje excluir 100 livros, esta tarefa se torna muito trabalhosa, caso tenha que entrar de um em um. Logo, iremos inserir um check box na linha do grid, com a opção do usuário selecionar aquelas linhas que deseje excluir apenas clicando sobre um botão.

Nossa Form ficaria da seguinte forma:

Genexus Grid

Ao clicar sobre o botão "Excluir Registros Selecionados" o seguinte evento é realizado:
Event 'ExcluirRegistrosSelecionados'
//=====Para cada linha do Grid=====
for each line in Grid
if &Excluir = 'S'
//=====Carrega BC com chave primária=====
&Livro.Load(LivroCodigo)

//=====Exclui registro e finaliza UTL=====
&Livro.Delete()
commit
endif
endfor

//=====Refresh após todos valores serem alterador=====
Refresh
EndEvent
Bom gurizada, caso tenham alguma dúvida perguntem nos comentários, não há necessidade de se identificar. Forte Abraço.

Nenhum comentário:

Postar um comentário