Páginas

Mostrando postagens com marcador Acesso a Dados. Mostrar todas as postagens
Mostrando postagens com marcador Acesso a Dados. Mostrar todas as postagens

quarta-feira, 4 de maio de 2011

Aplicações Satélite com .Net e Progress

Olá Amigos,

Estamos participando de um projeto em um de nossos clientes e com isto estamos reformulando um dos processos de venda: A Cotação de Vendas

Atualmente este cliente necessita disponibilizar uma licença do ERP para que os representantes acessem apenas um módulo (poucas telas), disputando assim o número de licenças com os demais usuários.

O processo da cotação na WEB, utiliza as licenças do ERP apenas nas requisições (poucos segundos) e assim que a requisição encerra a licença é liberada. Olhando por este aspecto, uma simples licença pode ser compartilhada por 10 ou 20 usuários, talvez até mais dependendo da requisição.

Os projetos WEB são desenvolvidos todos sobre a plataforma ASP.NET e acessando o ERP através do Framework. Toda a regra de negócio, API e DBO, podem ser reutilizadas no lado Progress.

Abaixo algumas imagens do processo de cotação pela WEB.



Este processo diminui o número de licenças e permite que o usuário acesse o sistema de qualquer lugar, inclusive com uma conexão não tão boa.

Quer criar um sistema satélite e economizar licenças?

quarta-feira, 26 de janeiro de 2011

Como fazer uma janela de atualização em poucos segundos

Uma breve apresentação de criação de uma janela de atualização através do Visual Studio.

quinta-feira, 20 de janeiro de 2011

Métodos e Eventos da Classe BusinessObject

Grande parte dos sistemas onde a programação é orientada a objeto, consistem em abstrair a regra de negócio para uma camada independente e no Framework não é diferente. A criação de uma camada única para absorver a regra de negócio torna o desenvolvimento mais atrativo quando houver a necessidade de replicar um programa específico em ambientes diferentes, como por exemplo, uma aplicação publicada no modelo Intranet/Web e outra no modelo Client x Server.

No modelo em que propomos o desenvolvimento, o retrabalho seria apenas construir duas interfaces para os dois ambientes. A regra de negócio seria única e poderia ser utilizada nos dois modelos.

Este desenvolvimento torna-se fácil quando utilizado o Framework Vértice, veja como.

As classes de negócio fazem uso da classe base “Framework.BusinessLayer.BusinessObject” e esta por sua vez já executa diversas funcionalidades sem a necessidade de codificação redundante. Fazer o uso da transação ativa, realizar validações de chave primária e única e disponibilizar eventos, são alguns destes procedimentos que são executados automaticamente, restando ao programador apenas codificar da regra de negócio do objeto.

Os eventos disponibilizados por esta classes são:
  • OnValidateSaveRecord
  • BeforeSaveRow
  • AfterSaveRow
  • OnValidateDeleteRecord
  • BeforeDeleteRow
  • AfterDeleteRow

Estes eventos devem ser utilizados apenas no cliente (.Net) para efetuar validações antes de executar a regra de negócio na plataforma 4GL.

A classe “BusinessObject” permite a sobreposição dos seguintes métodos:
  • SaveRow
  • DeleteRow
  • GetAll
  • GetMax
  • Exists
  • GetRecord
  • ValidateDeleteRow
  • ValidateSaveRow
  • Delete

Existe também os métodos de uso comum da classe BusinessObject que são:
  • NewRecord
  • AddErrorManual
  • InsertRow
  • SetErrors
  • GetEmpty

Carlos R. Nobrega
Arquiteto de Soluções .Net

quarta-feira, 19 de janeiro de 2011

Acesso ao banco Progress (Conexão e Transações)

No mundo .Net, a manipulação de dados é bastante facilitada devido ao uso das classes contidas na namespace System.Data. O uso de objetos como Dataset, Datatable, DataRow faz com que sua aplicação utilize o modelo de dados desconectado.

O Framework utiliza todo o potencial do .Net para a manipulação de registros e demais funcionalidades. No exemplo a seguir mostro como é realizada uma conexão com o banco de dados, utilizando uma transação 4GL e retornando os dados da tabela usuário.

Dim conn As New PROConnection(True)
Dim usuario As New SysUsuario(conn.AppServer)
Dim dtUsuario As ttSysUsuarioDataTable
Try
   conn.Transaction.BeginTransaction()
   dtUsuario = usuario.GetAll
   MsgBox(dtUsuario.Rows.Count)
   conn.Transaction.CommitTransaction()
Catch ex As Exception
   conn.Transaction.RollbackTransaction()
   MsgBox(ex.Message)
Finally
   conn.AppServer.Shutdown()
End Try

Realizada a conexão com o banco de dados o objeto dtUsuario é populado com todos os registros da tabela SysUsuario, conforme utilizado no exemplo. Após o encerramento da transação e da conexão, a classe pode fazer uso do modelo desconectado do .Net. Pode-se então popular, por exemplo, um componente DataGridView.
 
O exemplo abaixo mostra como é realizada as operações de Inclusão, Modificação e Eliminação de um registro na mesma tabela (SysUsuario) utilizada no caso anterior.
 
Dim conn As New PROConnection(True)
Dim usuario As New SysUsuario(conn.AppServer)
Dim drUsuario As ttSysUsuarioRow = Nothing
Try
   conn.Transaction.BeginTransaction()

   'Cria o usuário 3
   drUsuario = usuario.NewRecord()
   drUsuario.User_ID = 3
   drUsuario.Nome = "Teste 3"
   drUsuario.Email = "teste@teste.com"
   drUsuario.Inativo = False
   drUsuario.Login = "teste3"
   drUsuario.Senha = SimpleCryptography.Encrypt("1234")
   drUsuario.TentativasLogin = 0
   usuario.Save(drUsuario)

   'Busca o usuário 3 e atualiza o campo e-mail
   drUsuario = usuario.GetRecord(New Object() {3})
   drUsuario.Email = "teste3@teste.com.br"
   usuario.Save(drUsuario)

   'Busca o usuário 3 e elimina
   drUsuario = usuario.GetRecord(New Object() {3})
   usuario.Delete(drUsuario)

   conn.Transaction.CommitTransaction()

Catch ex As Exception
   conn.Transaction.RollbackTransaction()
   MsgBox(ex.Message)
Finally
   conn.AppServer.Shutdown()
End Try

O Framework trás o modelo de transação do Progress para o domínio da aplicação .Net.

Este modelo de dados é a parte introdutória aos conceitos de conectividade com o banco de dados Progress.

Em breve mostrarei o modelo de apresentação (Templates) que já realizam estas operações da camada CRUD (Create, Read, Update, Delete) tornando o desenvolvimento de aplicações simples e mantendo assim o foco no desenvolvimento na "Regra de Negócio".


Carlos R. Nobrega
Arquiteto de Soluções .Net