Guia geral do DataSource

Introdução

O DataSource é uma fonte de dados. Ele é capaz de realizar consultas em bancos de dados utilizando filtros e permite selecionar as colunas que participarão do retorno. Dessa forma podemos centralizar num único script uma consulta que recupera informações de uma ou mais tabelas.

Pré-requisitos

Conceitos básicos do Bematech ERP

Buscando um alinhamento conceitual, voltado para a nomenclatura básica do Bematech ERP, sugerimos a leitura do item abaixo:

Fluxo Operacional

O DataSource faz parte da biblioteca de objetos de gerenciamento de dados(business data object, ou ainda bdo), do Framework. Para utilizar o DataSource, você deve incluí-lo da seguinte forma:

__includeOnce('ufs:/bdo/datasource/datasource.js');

Criando e usando um DataSource

Para criar um DataSource, é necessário criar na base um script .ids que o represente. O DataSource poderá então ser consumido. Veja aqui como criar e usar esses scripts. Veja também mais exemplos de como consumir um DataSource.

Além do DataSource, existe também a classe DataSourceQuery. Ela funciona como uma camada sobre o DataSource, permitindo que se refinem os filtros e colunas utilizados. Para maiores detalhes, verifique sua documentação em http://developer.erp.bematech.com/js-api/latest/bdo.datasource.Query.html.

Tornando público um DataSource para ser consumido por outros sistemas

O conceito de publicidade da fonte de dados tem o intuito de garantir que somente àquelas fonte de dados que estiverem sinalizadas como públicas poderão ser consumidas pela API HTTP genérica de consultas automatizadas, ou seja, isso quer dizer que as fontes de dados públicas podem ser consumidas por outros sistemas.

Para que uma fonte de dados seja pública, o desenvolvedor da fonte de dados deve garantir que ela seja segura, ou seja, os valores dos filtros serão validados e as permissões dos usuários serão sempre obedecidas. É papel do desenvolvedor ainda, elaborar fontes de dados públicas que atendam os requisitos de segurança, evitando que injeções SQL e outras vulnerabilidades possam ser exploradas durante o consumo de uma fonte de dados pública. Fonte de dados públicas não podem conter artifícios que tornam a fonte de dados insegura.

A maneira mais fácil de realizar a validação das permissões é utilizar uma instância de IQuery no retorno de onGetQuery em vez de utilizar uma "Query SQL" ou qualquer outro mecanismo de exposição de dados como acesso direto ao cache local.

Para tornar uma fonte de dados pública deve ser utilizada a propriedade public da fonte de dados. Abaixo, um exemplo ilustra a definição de uma fonte de dados publicada:

{

includes: [

-1897036629 /* /products/INTEQengine/library/iquery/IQuery.ijs */

],

help: "Help do DataSource",

public: true,

availableFilters: [{

classKey: -1898187809, /* Usuários */

prefix: "U",

options: {}

}],

availableColumns: [{

classKey: -1898187809, /* Usuários */

prefix: "U"

}],

onCreate: function (ds) {},

onGetQuery: function (dataSource, filters, columns) {

var flts = filters.getIQueryFilters( "U_*", "and" );

var cols = columns.getIQueryColumns( "U_*" );

var iquery = IQuery.from(-1898187809).where(flts).column(cols);

return iquery;

}

}

Casos especiais de utilização de DataSource e DataSourceQuery

Os seguintes casos específicos do uso de DataSource se encontram documentados: