Git Product home page Git Product logo

advpl-orm's Introduction

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")

advpl-orm's People

Contributors

skiptirengu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

advpl-orm's Issues

Popular model

Repopular o model após salvar o mesmo para atualização de valores de campos que podem ser alterados através de gatilhos.

Testes

Incluir os "testes de unidade" no projeto

Dados truncados

Query builder deve levar em conta o tamanho do campo para evitar problemas de dados sendo truncados.

Recdel

Atualizar valor do campo R_E_C_D_E_L_ ao excluir o model.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.