Skip to content

Biblioteca ORM desenvolvida inteiramente em ADVPL para o ERP Protheus

License

Notifications You must be signed in to change notification settings

skiptirengu/advpl-orm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

38 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ADVPL ORM

Biblioteca ORM (Object Relational Mapping) desenvolvida inteiramente em ADVPL!

Instalação

Para utilização da biblioteca, basta copiar os arquivos de src/ e include/ para pasta do seu projeto. Note que esta biblioteca foi testada apenas com o banco de dados Microsoft SQL Server.

Utilização

Para cada tabela existente no banco, basta criar as classes DAO e Model extendendo as classes base e sobrescrever o método getAlias() para retornar corretamente o alias da tabela. Ex:

//SA2.prw
#include 'totvs.ch'

CLASS SA2 FROM BaseModel
	METHOD New() CONSTRUCTOR
	METHOD getAlias()
ENDCLASS

METHOD New() CLASS SA2
Return

METHOD getAlias() CLASS SA2
Return("SA2")
//SA2_DAO.prw
#include 'totvs.ch'

CLASS SA2_DAO FROM BaseDao
	METHOD New() CONSTRUCTOR
	METHOD getAlias()
ENDCLASS

METHOD New() CLASS SA2_DAO
Return

METHOD getAlias() CLASS SA2_DAO
Return("SA2")

Exemplos de uso

Além de serem totalmente dinâmicas por se basearem no SX3, as classes são extremamente fáceis e intuitivas.

Instanciando um novo objeto

// Instancia um novo model
oModel := SA2():new()
oModel:set("A2_LOJA", "1")
oModel:get("A2_LOJA") // 1

Trabalhando com o banco de dados

oModel  := SA2():new()
oSA2    := oModel:findOne(10) // Busca o registro com o RECNO 10

// Manipulando o model
oSA2:set("A2_LOJA", "1")
oSA2:get("A2_LOJA") // 1
oSA2:save() // Atualiza os valores no banco de dados
oSA2:delete() // Marca o campo D_E_L_E_T_ com *

Trabalhando com queries mais complexas

oModel  := SA2():new()
// Busca o primeiro registro com A2_FILIAL = 01 e A2_LOJA = 02
oModel:query({{"A2_FILIAL", "01"}, {"A2_LOJA", "02"}, "ONE") 
// Retorna uma array com todos os registros que possuem A2_FILIAL = 01 e A2_LOJA = 02
oModel:query({{"A2_FILIAL", "01"}, {"A2_LOJA", "02"}, "MANY") 
// Resultará na query SELECT * FROM SA2010 WHERE A2_FILIAL IN ('01', '02') WHERE D_E_L_E_T_ = ''
oModel:query({{"A2_FILIAL", {"01", "02"}}}, "MANY")

About

Biblioteca ORM desenvolvida inteiramente em ADVPL para o ERP Protheus

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages