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?
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
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:
Existe também os métodos de uso comum da classe BusinessObject que são:
Carlos R. Nobrega
Arquiteto de Soluções .Net
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
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
Assinar:
Postagens (Atom)

