1. Anuncie Aqui ! Entre em contato fdantas@4each.com.br

REST - DBO

Discussão em 'TDN - Datasul' iniciado por fdantas, Maio 11, 2015.

  1. fdantas

    fdantas Administrator Moderador

    Page edited by Mauricio Rogerio Obenaus

    Preparação da DBO


    Para uma DBO ser acessível ao serviço REST, essa DBO deve estar preparada. Ela deve possuir os seguintes pré-processadores:


    &GLOBAL-DEFINE XMLReceiver YES
    &GLOBAL-DEFINE XMLProducer YES
    &GLOBAL-DEFINE DYNAMIC-QUERY-ENABLED YES


    Por outro lado, a BO não poderá possuir a definição do pré-processador CHANGE-QUERY-TO-FIND nem o valor “Main” no pré-processador CHANGE-QUERY-TO-FIND-PROCS, pois tal combinação impede que os dados da tabela sejam lidos e expostos pelo serviço REST.


    &GLOBAL-DEFINE CHANGE-QUERY-TO-FIND TRUE
    &GLOBAL-DEFINE CHANGE-QUERY-TO-FIND-PROCS Main




    Datasul REST - DBO - Liberação no serviço


    Para acessar uma DBO pelo serviço REST, a DBO deverá ser liberada no serviço (deploy), para facilitar o serviço disponibiliza uma URL (http://localhost:8080/datasul-rest/resources/dbo/application.wadl/add) com a seguinte pagina:

    [​IMG]

    Onde no botão "Browse" deverá ser selecionado o arquivo da DBO compilada (.R) e no campo DBO File PATH deverá ser informado o caminho da DBO relativo ao PROPATH no AppServer.

    Por exemplo a DBO boun007na está localizada em um diretório chamado unbo no PROPATH.

    [​IMG]

    Esse processo faz a valiaçãod da DBO e verifica se ela possui todos os metodos que o DATASUL-REST precisa para funcionar, caso a DBO não tenha os metodos necessários será mostrada um erro informando o que falta implementar na DBO.

    [​IMG]



    Datasul REST - DBO - URL


    Para acessar uma DBO pelo serviço REST a URL da DBO padrão é formada da seguinte dorma: /datasul-rest/resources/api/[caminho da dbo], onde, por exemplo se a DBO chamada for /adbo/boad107na.p fica /datasul-rest/resources/dbo/adbo/boad107na.



    Datasul REST - DBO - Metodos


    O serviço REST de DBO disponibiliza 5 maneiras de chamar a DBO para fazer as operações de CRUD, são as seguintes:

    MetodoURLMetodo HTTPObjetivo
    getAll/datasul-rest/resources/dbo/[caminho da DBO]/GETRetorna os registros da DBO (Paginado)
    create/datasul-rest/resources/dbo/[caminho da DBO]/POSTCria um novo registro usando a DBO
    get/datasul-rest/resources/dbo/[caminho da DBO]/[chaves da tabela]GETBusca um registro da DBO pela chave da tabela
    update/datasul-rest/resources/dbo/[caminho da DBO]/[chaves da tabela]PUTGrava um registro que ja existe na tabela
    delete/datasul-rest/resources/dbo/[caminho da DBO]/[chaves da tabela]DELETERemove o registro da tabela com a DBO

    Neste exemplo o [chaves da tabela] corresponde aos parametros do metodo goToKey da DBO



    Metodo getAll


    O metodo get all suporta alguns paramtros de query que podem ser colocados na URL da chamada HTTP. são eles:

    parametroValorObjetivoValor DefaultExemplo
    limitInteiroLimita o resultado do GET para este numero de registros (tamanho da pagina)10limit=50
    startInteiroIndica o primeiro registro que deve ser carregado na lista (usado na paginação)1start=51
    fieldslista separada por virgulaIndica quais campos do registro deverão ser retornadosnenhumfields=codigo,descricao,texto
    whereStringconteudo utilizado para montar o WHERE da query (padrão progress)nenhumwhere=codigo eq "34" or texto <> ?
    orderlista separada por virgulaIndica os campos que deverão ser usados para ordenação da busca e do resultadonenhumorder=descricao,texto
    asclista separada por virgulaInidica se os campos da ordem deve ser ascendentes ou descendentesnenhumasc=true,false
    property¹StringCampo com o qual será adicionada uma clausula de seleçãonenhumproperty=codigo
    value¹StringValor para o campo que será adicionado a clausula de seleção do property correspondentenenhumvalue=3



    1 - os parametros property e value podem ser repetidos nos parametros da URL e tem que ser na mesma quantidade, cada par property e value gera uma clausula de seleção na busca dos dados da tabela, todas as clausulás são adicionadas a um WHERE com o operador AND.

    Os campos utilizados no property obrigatóriamente deve estar na temp-table da DBO, isso é necessário porque a temp-table identifica o tipo de dado do campo.

    O parametro value permite que seja informado um modificador identificando como a clausula para este campo deverá ser montato:

    ModificadorFunçãoExemploResultado
    NenhumClausula de igualdade do campo?property=codigo&value=4WHERE codigo = 4
    [inicial];[final]Clausula de faixa de valores?property=codigo&value=4;8WHERE codigo >= 4 AND codigo <= 8
    [valor1]|[valor2]|[valor3]Clausula de varios valores?property=codigo&value=4|8|12WHERE codigo =4 OR codigo = 8 OR codigo = 12
    *[valor]*Clausula contem valor?property=descricao&value=*texto*WHERE descricao MATCHES "*texto*"
    [valor]*Clausula começa com valor?property=descricao&value=texto*WHERE descricao MATCHES "texto*"
    *[valor]Clausula termina com valor?property=descricao&value=*textoWHERE descricao MATCHES "*texto"

    As clausulas de contem, começa e termina com valor são aplicaveis somente a campos CHARACTER.



    O retorno será um array JSON com os registros selecionados, na ordem informada que será colocado no atributo data do retorno, no retorno tambem será alimentado o atributo length com a contagem dos registros da seleção, por exemplo:

    JSON de Retorno Expand source

    {
    "messages": [],
    "length": 771,
    "data": [{
    "pais": "AFRICA",
    "estado": "AFR"
    },
    {
    "pais": "África do Sul",
    "estado": "AF"
    },
    {
    "pais": "Africa do Sul",
    "estado": "AFS"
    },
    {
    "pais": "AFRICA DO SUL",
    "estado": "AS"
    },
    {
    "pais": "AFRICA DO SUL",
    "estado": "EX"
    },
    {
    "pais": "AFRICA DO SUL",
    "estado": "ZA"
    },
    {
    "pais": "ALBANIA",
    "estado": "ALB"
    },
    {
    "pais": "ALBANIA",
    "estado": "EX"
    },
    {
    "pais": "Alemanha",
    "estado": ""
    },
    {
    "pais": "Alemanha",
    "estado": "AH"
    }]
    }




    Metodo get


    O metodo get tem o objetivo de buscar um registro na tabela da DBO, para buscar um registro, deverá ser passada a chave do registro no caminho da URL da requisição HTTP, conforme os parametros do metodo goToKey, o retorno ira retornar um objeto JSON no atributo data do retorno, este metodo tambem suporta o paramatro fields (acima)

    Por exemplo:

    A DBO adbo/boad107na da tabela estabelec, possui um campo chave "cod-estabel" a URL para acessar o estabelecimento com codigo "abc" fica assim:

    http://localhost:8080/datasul-rest/resources/dbo/adbo/boad107na/abc

    A DBO unbo/boun007na da tabela estado, possui dois campos na chave "pais" e "estado", para acessar o estado de SC do Brasil a URL fica assim:

    http://localhost:8080/datasul-rest/resources/dbo/unbo/boun007na/Brasil/SC

    JSON de Retorno Expand source

    {
    "messages": [],
    "length": 0,
    "data": {
    "pais": "BRASIL",
    "estado": "SC",
    "no-estado": "Santa Catarina teste",
    "cod-sinief": 0,
    "per-icms-int": 0,
    "per-sub-tri": 0,
    "per-ir-adic": 0,
    "per-icms-ext": 0,
    "perc-exc": [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    "est-exc": ["","","","","","","","","","","","","","","","","","","","","","","","",""],
    "per-desc-icms": [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    "imp-desc-icms": [false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false],
    "ind-uf-subs": false,
    "desc-icms": 0,
    "ind-base-st": 1,
    "pc-icms-st": 0,
    "dia-vcto-ipi": 1,
    "dia-vcto-icms": 1,
    "dia-vcto-iss": 1,
    "dia-vcto-irrf": 1,
    "dia-vcto-pis": 1,
    "dia-vcto-cofins": 1,
    "venc-icms": [0,0,0,0,0],
    "venc-ipi": [0,0,0,0,0],
    "venc-iss": [0,0,0,0,0],
    "venc-irrf": [0,0,0,0,0],
    "venc-icmsub": [0,0,0,0,0],
    "venc-pis": [0,0,0,0,0],
    "venc-cofins": [0,0,0,0,0],
    "nr-tb-pauta": "GR2014",
    "possui-subst-trib": false,
    "char-1": "",
    "char-2": "",
    "dec-1": 0,
    "dec-2": 0,
    "int-1": 0,
    "int-2": 0,
    "log-1": false,
    "log-2": false,
    "data-1": null,
    "data-2": null,
    "check-sum": "",
    "cdn-moeda-corr-icms": 0,
    "cod-uf-ibge": "",
    "r-Rowid": "003D093900010000574845524520282850524F47524553535F5245434944203D20000000A90008FFFB00000000000000000000000000005C0129292000"
    }
    }




    Metodo create


    O metodo create tem o objetivo de criar um registro na tabela da DBO, não ha parametros na URL para este metodo, apenas o registro da tabela deverá ser passado no payload da requisição HTTP.

    A API permite que no payload do POST tenha um JSON com apenas alguns campos da tabela, os outros campos serão preenchidos com os valores default do dicionario ou os valores definidos pelo metodo beforeNewRecord/afterNewRecord da DBO

    Metodo udpate


    O metodo update possui a mesma URL do metodo get para localizar o registro da tabela, porem o metodo HTTP muda para PUT e o metodo recebe como payload um objeto JSON com o registro que deverá ser atualizado na tabela, onde cada atributo do objeto corresponde a um campo na tabela.

    A API permite que no payload do POST tenha um JSON com apenas alguns campos da tabela, os outros campos serão preenchidos com os valores atuais do registro no banco, ou seja só serão alterados os campos que forem enviados para a API.

    Metodo delete


    O metodo delete possui a mesma URL do metodo get para localizar o registro da tabela, porem o metodo HTTP muda para DELETE, o metodo não recebe mais nenhum parametro, e o resultado desta chamada termina com o registro da tabela excluido.









    View Online · View Changes Online

    Continue reading...

Compartilhe esta Página