ABAP Active Record – Post Inaugural

Inspirado no Active Record do Ruby on Rails, eu comecei a trabalhar num projeto para replicar o mesmo conceito no SAPUI5. Em conjunto com esse texto eu publiquei também dois blogs na SCN, um com foco no SAPUI5 e outro com foco no ABAP apresentar a idéia e receber feedback. Segue a tradução adaptada do texto publicado no blog da SCN.

ABAP Active Record

Claro que o projeto todo está compartilhado no Github e pronto para ser explorado.

Motivação

Imagine que você precise ler dados de um determinado tipo de ordem de venda da tabela VBAK. Mais a frente no programa você precisa ler dados de materiais da tabela MARA. Depois alguns dados da compania na tabela T001. Algumas entregas da tabela LIKP. Se você estiver usando o SAP Gateway você precisará criar um serviço ou entity type para cada acesso na tabela.

Para evitar a criação de um serviço ou entity type para um simples SELECT numa tabela transparente, o ABAP Active Record dará acesso direto de uma forma bem simples.

Não é o objetivo do projeto substituir toda a programação no back-end (ABAP), mas evitar a criação de um serviço/entity type para acesso “incidental” a tabelas do banco de dados.

Como Funciona

Por exemplo, suponha que você precisa acessar todos os preços dos vôos da Lufthansa (LH) e conexão 2402 que estão na tabela SFLIGHT, retornando os campos chave.

Primeiro passo, você precisa criar o objeto ABAP Active Record:

var oARModel = new abapActiveRecord.ARModel();

Daí, chamar o método para retornar os registros, conforme o requerimento:

var oFlightsTable = oARModel.aarGetEntitySet('SFLIGHT', ["CARRID", "CONNID", "FLDATE", "PRICE"], {carrid: "LH", connid: "2402"});

O retorno esperado é o objeto JSON abaixo:

{"SFLIGHT":[
{"CARRID":"LH","CONNID":"00002402","FLDATE":"08/21/1997","PRICE":"555,00"},
{"CARRID":"LH","CONNID":"00002402","FLDATE":"08/22/1997","PRICE":"590,00"},
{"CARRID":"LH","CONNID":"00002402","FLDATE":"08/25/1997","PRICE":"490,00"},
{"CARRID":"LH","CONNID":"00002402","FLDATE":"08/30/1997","PRICE":"485,00"}
]}

Feito!

Agora é só repetir a mesma chamada para qualquer outra tabela (SPFLI, MAKT, BKPF, T001W etc.). Sem necessidade de gerar nenhum código automático. Somente chamada do método com os parâmetros apropriados.

Métodos CRUD

Todas as operações CRUD (Create, Read, Update e Delete) são possíveis também:

Criação

Criar um novo registro na tabela SFLIGHT:

oARModel.aarCreate('SFLIGHT', {carrid: "LH", connid: "2402", fldate: "20160119", price: "500.00"});

Leitura (SELECT)

Retornar um conjunto de registros:

var oFlightsTable = oARModel.aarGetEntitySet('SFLIGHT', ["CARRID", "CONNID", "FLDATE", "PRICE"], {carrid: "LH", connid: "2402"});

O modelo JSON retornado será o abaixo:

oFlightsTable.getProperty('/')

"{"SFLIGHT":[{"CARRID":"LH","CONNID":"00002402","FLDATE":"08/21/1997","PRICE":"555,00"}, ... ]}"

Leitura de Valor Unitário (SELECT SINGLE)

Ler um valor uniário em um registro específico:

var value = oARModel.aarGetSingleValue("SFLIGHT", "PRICE", { carrid: sap.ui.getCore().byId("carrid").getValue(), connid: sap.ui.getCore().byId("connid").getValue(), fldate: sap.ui.getCore().byId("fldate").getValue() });

Valor to preço atual, “500.00”.

Atualização (UPDATE)

Atualizar valor em um registro específico:

`oARModel.aarUpdate(“SFLIGHT”, {carrid: “LH”, connid: “2402”, fldate: “20160119”, price: “350.00”});“

Novo valor do campo PRICE: “350.00”.

Apagar (DELETE)

Apagar um registro da tabela SFLIGHT:

oARModel.aarDelete('SFLIGHT', {carrid: "LH", connid: "2402", fldate: "20160119"});

Como Eu Posso Testar?

Eu também publiquei um guia bem prático de instalação.

Feedback

Esse post é para compartilhar minha idéia e pegar feedback. Fique a vontade para compartilhar ou tirar qualquer dúvida do projeto.

Você pode gostar...

1 Resultado

  1. março 15, 2016

    […] ABAP Active Record, o projeto open source do Furlan […]