Paginação e ponteiro de atualização


Quanto a atualizações em lote, utilizando-se “ponteiro_atualizacao”, é necessário informar:

codigo_produto:  Sempre iniciar a seqüência de requisições pelo menor código de produto. O último código de produto recuperado na resposta deve ser utilizado como parâmetro da requisição seguinte;

id_cenario: Este parâmetro é combinado com o “código_produto”, pois os dados são entregues ordenados justamente   por  cenários e, dentro desses, por produtos.  Em uma página de dados de resposta poderá haver a troca de cenários, quando encerrados os produtos de um cenário e iniciado a entrega dos dados de produtos do cenário seguinte.

paginacao: Limitada a 100 registros recuperados por “página” de resposta.  Para obtenção de mais de 100 registros é necessário realizar mais requisições.

ponteiro_atualizacao: Informar o ponteiro capturado na primeira requisição do dia anterior (supondo atualizações diárias). Ressaltamos:  não é o ponteiro da resposta obtida na requisição anterior e sim na “primeira” requisição do processo anterior (conjunto de requisições executados em data anterior);

Destacamos: A “paginação” de 100 em 100 registros é controlada pelo id_cenário e pelo código do produto e não pelo ponteiro_atualizacao, que serve apenas como “filtro” de seleção dos registros novos. Durante todo o processo (conjunto de requisições) o ponteiro_atualizacao deve permanecer o mesmo. Deve-se armazenar o ponteiro_atualizacao entregue na primeira página de dados do processo (início da lista de atualização), para que seja utilizado como parâmetro da atualização seguinte (no dia seguinte, por exemplo). Importante: Armazene o primeiro ponteiro do dia e não o último, pois durante o processo de leitura é possível que dados de sua base estejam sendo atualizados concomitantemente.

Exemplo de uma atualização em lote com caso de 220 registros atualizados (de um único cenário):

- 1ª Requisição: Retorna os 100 primeiros registros (registros 1 a 100). Retornará também a tag “ponteiro_atualizacao” preenchida com um novo valor de ponteiro, que deverá ser armazenado para utilização como parâmetro das futuras requisições de atualização (no dia seguinte, p.ex.).

- 2ª Requisição: Deve ser alterado apenas o parâmetro de entrada “codigo_produto”, informando o último código produto da 1ª requisição, com isso o sistema retornará 100 registros a partir daquele último (registros 100 a 199);

- 3ª Requisição: Assim como na 2ª requisição, deve ser alterado apenas o parâmetro de entrada “codigo_produto”, informando o último código recebido como resposta  na 2ª. requisição. Neste exemplo, o sistema retornará os últimos 22 registros do conjunto de 220 (registros 200 a 220).

No exemplo acima foram utilizadas 3 requisições para se obter 220 registros, porém esse processo pode ser repetidos várias vezes, até que chegue ao final de toda atualização, que será percebido quando uma requisição retornar menos de 100 registros (a menos que a quantidade definida no parâmetro “paginacao” seja menor, para ser mais preciso) e com a tag “ponteiro_atualizacao” preenchida.

Para processos de atualização com mais de um cenário, basta você aplicar na requisição seguinte o último id_cenario obtido na página de resposta anterior. Lembre-se que dentro de uma página de dados poderá ocorrer a troca de cenários (fim dos dados de um cenário e início dos dados de outro).