(Obrigatório)
Definição da Regra de Negócio
A API será na estrutura WS REST com o nome RestLogXML e com apenas o método GET, que receberá a mensagem JSON codificada em base64 e chamará a função GetLogXml() passando a mensagem JSON decodificada.
Através da API de log XML por documento, os clientes do TSS poderão obter o log XML do documento. A consulta será para um documento. O critério para consulta será com base nos dados de entrada. A API terá como retorno os dados contidos na tabela TSSTR2 incluindo o log XML codificado embase 64.
O consumo da API deverá ser realizado através de mensagens JSON definidas na função GetLogXML().
O processo de Deserialização de mensagens deverá ser realizado através da função FwJsonDeserialize().
Os códigos de status serão baseados no formato padrão de mensagens HTTP, conforme o link:
WebService: RestLogXML
WebService responsável pela definição da Interface da API de busca informações do documento.
O WebService deverá receber mensagens na estrutura JSON codificado em base64, onde serão decodificadas e passadas como parâmetro para a função GetLogXml().
O retorno do WebService será uma mensagem JSON.
Todos os parâmetros da mensagem serão obrigatórios.
Parâmetros:
JSon = ew0KIkxPR0lEIjoiU1BFRDA1MC0wMDAwMDAwMDA5MDgtMjAxNjA4MjItMTQ6NDQ6MjIiDQp9
Mensagem JSON decodificada:
{
"LOGID":"SPED050-000000000908-20160822-14:44:22"
}
Retorno:
Retorno Negativo:
{
"result":
{
"documento": ""
},
"error": "Estrutura do objeto inválida."
}
Retorno Positivo:
{
"result":
{"Log":
[
{"CAMPO":"LOGID","DESCRICAO":"Id Log","CONTEUDO":"SPED050-000000000908-20160822-14:44:22"},
{"CAMPO":"PROCESSO","DESCRICAO":"Processo","CONTEUDO":"101"},
{"CAMPO":"SEQUENCIA","DESCRICAO":"Sequencia","CONTEUDO":"000000004"},
{"CAMPO":"SUBPROC","DESCRICAO":"Cod Sub Proc","CONTEUDO":"003"},
{"CAMPO":"DESCRICAO","DESCRICAO":"Desc Sub Proc","CONTEUDO":"Consulta de Lote da NF-e"},
{"CAMPO":"ORIGEM","DESCRICAO":"Origem","CONTEUDO":"TSS"},
{"CAMPO":"DESTINO","DESCRICAO":"Destino","CONTEUDO":"SEFAZ"},
{"CAMPO":"DTPROCINI","DESCRICAO":"Data Ini","CONTEUDO":"20160822"},
{"CAMPO":"HRPROCINI","DESCRICAO":"Hora Ini","CONTEUDO":"14:44:25"},
{"CAMPO":"DTPROCFIN","DESCRICAO":"Data Fin","CONTEUDO":"20160822"},
{"CAMPO":"HRPROCFIN","DESCRICAO":"Hora Fin","CONTEUDO":"14:44:25"},
{"CAMPO":"SUGESTAO","DESCRICAO":"Sugestao","CONTEUDO":"Verifique detalhes através dos métodos de monitoramento."},
{"CAMPO":"STATUS","DESCRICAO":"Status","CONTEUDO":"1"},
{"CAMPO":"PROCSERVER","DESCRICAO":"Servidor de Processamento","CONTEUDO":""},
{"CAMPO":"PROCTHREAD","DESCRICAO":"Thread de Processamento","CONTEUDO":"15956"},
{"CAMPO":"WSSEND","DESCRICAO":"MSG Envio","CONTEUDO":"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c29hcDpFbnZlbG9wZSB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczpzb2FwPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzLzA1L3NvYXAtZW52ZWxvcGUiPjxzb2FwOkhlYWRlcj48bmZlQ2FiZWNNc2cgeG1sbnM9Imh0dHA6Ly93d3cucG9ydGFsZmlzY2FsLmluZi5ici9uZmUvd3NkbC9OZmVSZXRBdXRvcml6YWNhbyI+PGNVRj4zNTwvY1VGPjx2ZXJzYW9EYWRvcz4zLjEwPC92ZXJzYW9EYWRvcz48L25mZUNhYmVjTXNnPjwvc29hcDpIZWFkZXI+PHNvYXA6Qm9keT48bmZlRGFkb3NNc2cgeG1sbnM9Imh0dHA6Ly93d3cucG9ydGFsZmlzY2FsLmluZi5ici9uZmUvd3NkbC9OZmVSZXRBdXRvcml6YWNhbyI+PGNvbnNSZWNpTkZlIHhtbG5zPSJodHRwOi8vd3d3LnBvcnRhbGZpc2NhbC5pbmYuYnIvbmZlIiB2ZXJzYW89IjMuMTAiPjx0cEFtYj4yPC90cEFtYj48blJlYz4zNTEwMDAxMDI0NjIzMDQ8L25SZWM+PC9jb25zUmVjaU5GZT48L25mZURhZG9zTXNnPjwvc29hcDpCb2R5Pjwvc29hcDpFbnZlbG9wZT4="},
{"CAMPO":"WSRECEIVE","DESCRICAO":"MSG Retorno","CONTEUDO":"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c29hcDpFbnZlbG9wZSB4bWxuczpzb2FwPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzLzA1L3NvYXAtZW52ZWxvcGUiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPjxzb2FwOkhlYWRlcj48bmZlQ2FiZWNNc2cgeG1sbnM9Imh0dHA6Ly93d3cucG9ydGFsZmlzY2FsLmluZi5ici9uZmUvd3NkbC9OZmVSZXRBdXRvcml6YWNhbyI+PGNVRj4zNTwvY1VGPjx2ZXJzYW9EYWRvcz4zLjEwPC92ZXJzYW9EYWRvcz48L25mZUNhYmVjTXNnPjwvc29hcDpIZWFkZXI+PHNvYXA6Qm9keT48bmZlUmV0QXV0b3JpemFjYW9Mb3RlUmVzdWx0IHhtbG5zPSJodHRwOi8vd3d3LnBvcnRhbGZpc2NhbC5pbmYuYnIvbmZlL3dzZGwvTmZlUmV0QXV0b3JpemFjYW8iPjxyZXRDb25zUmVjaU5GZSB2ZXJzYW89IjMuMTAiIHhtbG5zPSJodHRwOi8vd3d3LnBvcnRhbGZpc2NhbC5pbmYuYnIvbmZlIj48dHBBbWI+MjwvdHBBbWI+PHZlckFwbGljPlNQX05GRV9QTF8wMDhpMjwvdmVyQXBsaWM+PG5SZWM+MzUxMDAwMTAyNDYyMzA0PC9uUmVjPjxjU3RhdD4xMDQ8L2NTdGF0Pjx4TW90aXZvPkxvdGUgcHJvY2Vzc2FkbzwveE1vdGl2bz48Y1VGPjM1PC9jVUY+PGRoUmVjYnRvPjIwMTYtMDgtMjJUMTQ6NDQ6MjItMDM6MDA8L2RoUmVjYnRvPjxwcm90TkZlIHZlcnNhbz0iMy4xMCI+PGluZlByb3Q+PHRwQW1iPjI8L3RwQW1iPjx2ZXJBcGxpYz5TUF9ORkVfUExfMDA4aTI8L3ZlckFwbGljPjxjaE5GZT40MjE2MDg1MzExMzc5MTAwMTc5MDU1NzQxMDAwMDAwMDMxMTAwODQ4ODg4MDwvY2hORmU+PGRoUmVjYnRvPjIwMTYtMDgtMjJUMTQ6NDQ6MjItMDM6MDA8L2RoUmVjYnRvPjxjU3RhdD4yMjY8L2NTdGF0Pjx4TW90aXZvPlJlamVpw6fDo286IEPDs2RpZ28gZGEgVUYgZG8gRW1pdGVudGUgZGl2ZXJnZSBkYSBVRiBhdXRvcml6YWRvcmE8L3hNb3Rpdm8+PC9pbmZQcm90PjwvcHJvdE5GZT48L3JldENvbnNSZWNpTkZlPjwvbmZlUmV0QXV0b3JpemFjYW9Mb3RlUmVzdWx0Pjwvc29hcDpCb2R5Pjwvc29hcDpFbnZlbG9wZT4="},
{"CAMPO":"DETALHES","DESCRICAO":"Detalhes","CONTEUDO":"UHJvY2Vzc28gRXhlY3V0YWRvIGNvbSBmYWxoYS4NClJlamVp5+NvOiBD82RpZ28gZGEgVUYgZG8gRW1pdGVudGUgZGl2ZXJnZSBkYSBVRiBhdXRvcml6YWRvcmE="}
]
} ,
"error": null
}
Função: GetLogXml()
Função responsável pela definição da Interface da API “retorna log xml por documento”.
A função GetLogXml definirá a estrutura da API. A função deverá ser definida em um fonte.prw definido com o mesmo nome da função.
A função GetLogXml deverá ser implementada apenas como função de interface para a API. Deverá ser totalmente desacoplada de qualquer definição de instrução de processamento, devendo apenas realizar as devidas validações das mensagens. Todo o processamento deverá estar definido em funções auxiliares.
A função GetLogXml() deverá receber mensagens na estrutura JSON, onde serão convertidas em objeto pela função fwJsonDeserialize().
Caso não haja erro na deserialização de JSON para objeto, será chamada a rotina ValLogXml(), passando como parâmetro o objeto.
A função ValLogXml() retornará um array contendo todos os campos da tabela TSS0004. Esse array será passado como parâmetro na chamada da função getJSONResp() junto com o código de status e mensagem de erro (caso exista). O retorno da função getJSONResp() é a mensagem já na estrutura JSON.
Todos os parâmetros da mensagem serão obrigatórios.
A rotina GetLogXml() será finalizada e como retorno será passado a mensagem na estrutura JSON.
Parâmetros:
cJsonRequest =
{
"LOGID":"SPED050-000000000908-20160822-14:44:22"
}
Retorno:
Retorno Negativo:
{
"result":
{
"documento": ""
},
"error": "Estrutura do objeto inválida."
}
Retorno Positivo:
{
"result":
{"Log":
[
{"CAMPO":"LOGID","DESCRICAO":"Id Log","CONTEUDO":"SPED050-000000000908-20160822-14:44:22"},
{"CAMPO":"PROCESSO","DESCRICAO":"Processo","CONTEUDO":"101"},
{"CAMPO":"SEQUENCIA","DESCRICAO":"Sequencia","CONTEUDO":"000000004"},
{"CAMPO":"SUBPROC","DESCRICAO":"Cod Sub Proc","CONTEUDO":"003"},
{"CAMPO":"DESCRICAO","DESCRICAO":"Desc Sub Proc","CONTEUDO":"Consulta de Lote da NF-e"},
{"CAMPO":"ORIGEM","DESCRICAO":"Origem","CONTEUDO":"TSS"},
{"CAMPO":"DESTINO","DESCRICAO":"Destino","CONTEUDO":"SEFAZ"},
{"CAMPO":"DTPROCINI","DESCRICAO":"Data Ini","CONTEUDO":"20160822"},
{"CAMPO":"HRPROCINI","DESCRICAO":"Hora Ini","CONTEUDO":"14:44:25"},
{"CAMPO":"DTPROCFIN","DESCRICAO":"Data Fin","CONTEUDO":"20160822"},
{"CAMPO":"HRPROCFIN","DESCRICAO":"Hora Fin","CONTEUDO":"14:44:25"},
{"CAMPO":"SUGESTAO","DESCRICAO":"Sugestao","CONTEUDO":"Verifique detalhes através dos métodos de monitoramento."},
{"CAMPO":"STATUS","DESCRICAO":"Status","CONTEUDO":"1"},
{"CAMPO":"PROCSERVER","DESCRICAO":"Servidor de Processamento","CONTEUDO":""},
{"CAMPO":"PROCTHREAD","DESCRICAO":"Thread de Processamento","CONTEUDO":"15956"},
{"CAMPO":"WSSEND","DESCRICAO":"MSG Envio","CONTEUDO":"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c29hcDpFbnZlbG9wZSB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczpzb2FwPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzLzA1L3NvYXAtZW52ZWxvcGUiPjxzb2FwOkhlYWRlcj48bmZlQ2FiZWNNc2cgeG1sbnM9Imh0dHA6Ly93d3cucG9ydGFsZmlzY2FsLmluZi5ici9uZmUvd3NkbC9OZmVSZXRBdXRvcml6YWNhbyI+PGNVRj4zNTwvY1VGPjx2ZXJzYW9EYWRvcz4zLjEwPC92ZXJzYW9EYWRvcz48L25mZUNhYmVjTXNnPjwvc29hcDpIZWFkZXI+PHNvYXA6Qm9keT48bmZlRGFkb3NNc2cgeG1sbnM9Imh0dHA6Ly93d3cucG9ydGFsZmlzY2FsLmluZi5ici9uZmUvd3NkbC9OZmVSZXRBdXRvcml6YWNhbyI+PGNvbnNSZWNpTkZlIHhtbG5zPSJodHRwOi8vd3d3LnBvcnRhbGZpc2NhbC5pbmYuYnIvbmZlIiB2ZXJzYW89IjMuMTAiPjx0cEFtYj4yPC90cEFtYj48blJlYz4zNTEwMDAxMDI0NjIzMDQ8L25SZWM+PC9jb25zUmVjaU5GZT48L25mZURhZG9zTXNnPjwvc29hcDpCb2R5Pjwvc29hcDpFbnZlbG9wZT4="},
{"CAMPO":"WSRECEIVE","DESCRICAO":"MSG Retorno","CONTEUDO":"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c29hcDpFbnZlbG9wZSB4bWxuczpzb2FwPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzLzA1L3NvYXAtZW52ZWxvcGUiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPjxzb2FwOkhlYWRlcj48bmZlQ2FiZWNNc2cgeG1sbnM9Imh0dHA6Ly93d3cucG9ydGFsZmlzY2FsLmluZi5ici9uZmUvd3NkbC9OZmVSZXRBdXRvcml6YWNhbyI+PGNVRj4zNTwvY1VGPjx2ZXJzYW9EYWRvcz4zLjEwPC92ZXJzYW9EYWRvcz48L25mZUNhYmVjTXNnPjwvc29hcDpIZWFkZXI+PHNvYXA6Qm9keT48bmZlUmV0QXV0b3JpemFjYW9Mb3RlUmVzdWx0IHhtbG5zPSJodHRwOi8vd3d3LnBvcnRhbGZpc2NhbC5pbmYuYnIvbmZlL3dzZGwvTmZlUmV0QXV0b3JpemFjYW8iPjxyZXRDb25zUmVjaU5GZSB2ZXJzYW89IjMuMTAiIHhtbG5zPSJodHRwOi8vd3d3LnBvcnRhbGZpc2NhbC5pbmYuYnIvbmZlIj48dHBBbWI+MjwvdHBBbWI+PHZlckFwbGljPlNQX05GRV9QTF8wMDhpMjwvdmVyQXBsaWM+PG5SZWM+MzUxMDAwMTAyNDYyMzA0PC9uUmVjPjxjU3RhdD4xMDQ8L2NTdGF0Pjx4TW90aXZvPkxvdGUgcHJvY2Vzc2FkbzwveE1vdGl2bz48Y1VGPjM1PC9jVUY+PGRoUmVjYnRvPjIwMTYtMDgtMjJUMTQ6NDQ6MjItMDM6MDA8L2RoUmVjYnRvPjxwcm90TkZlIHZlcnNhbz0iMy4xMCI+PGluZlByb3Q+PHRwQW1iPjI8L3RwQW1iPjx2ZXJBcGxpYz5TUF9ORkVfUExfMDA4aTI8L3ZlckFwbGljPjxjaE5GZT40MjE2MDg1MzExMzc5MTAwMTc5MDU1NzQxMDAwMDAwMDMxMTAwODQ4ODg4MDwvY2hORmU+PGRoUmVjYnRvPjIwMTYtMDgtMjJUMTQ6NDQ6MjItMDM6MDA8L2RoUmVjYnRvPjxjU3RhdD4yMjY8L2NTdGF0Pjx4TW90aXZvPlJlamVpw6fDo286IEPDs2RpZ28gZGEgVUYgZG8gRW1pdGVudGUgZGl2ZXJnZSBkYSBVRiBhdXRvcml6YWRvcmE8L3hNb3Rpdm8+PC9pbmZQcm90PjwvcHJvdE5GZT48L3JldENvbnNSZWNpTkZlPjwvbmZlUmV0QXV0b3JpemFjYW9Mb3RlUmVzdWx0Pjwvc29hcDpCb2R5Pjwvc29hcDpFbnZlbG9wZT4="},
{"CAMPO":"DETALHES","DESCRICAO":"Detalhes","CONTEUDO":"UHJvY2Vzc28gRXhlY3V0YWRvIGNvbSBmYWxoYS4NClJlamVp5+NvOiBD82RpZ28gZGEgVUYgZG8gRW1pdGVudGUgZGl2ZXJnZSBkYSBVRiBhdXRvcml6YWRvcmE="}
]
} ,
"error": null
}
Função: GetXml()
A função GetXml() receberá como parâmetro o objeto da requisição, validará todos os campos quanto a obrigatoriedade, tamanho e tipo de dados. Se algum dado estiver inconsistente, deverá retorna a mensagem de validação correspondente informando.
Com o LOGID, será chamada a função RetXml(), para essa função será passado como parâmetro o LOGID. O retorno desta função será um array contendo todos os campos da tabela TSS0004.
Após obter o retorno da rotina RetXml(), a função GetXml() será encerrada, retornando o array.
Parâmetros:
GetXml(oDados,cError)
oDados – Objeto contendo as informações da requisição: LOGID.
cError – Mensagem de erro, caso exista.
Retorno:
aArray – Array contendo todos os campos da tabela TSS0004.
Função: RetXml()
A função RetXml() receberá como parâmetro, LOGID, mensagem de erro(caso exista) e código do status, processará os dados afim de obter a mensagem XML.
A função por meio de Query, localizará os registros com o LOGID passado como parâmetro, identificará a última sequência do log e buscará todos os campos.
Os campos do tipo Memo, os dados serão codificados em base 64
Parâmetros:
(cLOGID,cError)
cLOGID – LOGID do documento.
cError – Mensagem de erro, caso exista.
Retorno:
aArray – array contendo todos os campos da tabela TSS0004.
Função: GetJSONResp()
A rotina consiste em obter os dados de entrada e gerar a mensagem em estrutura JSON.
A rotina retornará uma string na estrutura JSON
Parâmetros:
aArray– Array multidimensional.
cError – Mensagem de erro.
Retorno:
cJSONResponse – String na estrutura JSON.