https://github.com/sugiruu/advpl-orm
Biblioteca ORM desenvolvida inteiramente em ADVPL para o ERP Protheus
https://github.com/sugiruu/advpl-orm
advpl orm protheus sql-server
Last synced: 3 months ago
JSON representation
Biblioteca ORM desenvolvida inteiramente em ADVPL para o ERP Protheus
- Host: GitHub
- URL: https://github.com/sugiruu/advpl-orm
- Owner: sugiruu
- License: gpl-3.0
- Created: 2016-01-30T01:00:54.000Z (almost 10 years ago)
- Default Branch: master
- Last Pushed: 2017-07-17T18:28:02.000Z (over 8 years ago)
- Last Synced: 2025-05-22T00:53:44.059Z (8 months ago)
- Topics: advpl, orm, protheus, sql-server
- Language: xBase
- Homepage:
- Size: 36.1 KB
- Stars: 7
- Watchers: 2
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
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:
```xBase
//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")
```
```xBase
//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
```xBase
// Instancia um novo model
oModel := SA2():new()
oModel:set("A2_LOJA", "1")
oModel:get("A2_LOJA") // 1
```
Trabalhando com o banco de dados
```xBase
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
```xBase
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")
```