Histórico de Alterações (LOG de Tabelas)

Regras de negócio

Esse serviço permite consultar a data de alteração de um período específico que seja passado no campo dhAlter e entidades específicas passadas no campo Entidade.

Para utilizar a API, deve-se fazer uma requisição POST para o endpoint correspondente ao serviço desejado.

Dependências


Da versão `4.35 (ou superior) do SankhyaOm`, basta seguir [este guia](https://ajuda.sankhya.com.br/hc/pt-br/articles/34538747408407-Log-de-Altera%C3%A7%C3%B5es-para-API-como-ativar-desativar-e-acompanhar-os-registros-de-altera%C3%A7%C3%A3o) para para ativar a rotina.



Da versão 4.34, ou anterior, o processo é conforme segue:
1) Para que o serviço retorne informações, é necessário habilitar o parametro LOGTABOPER disponível nas Preferencias do SankhyaOm. Este liga ou desliga a funcionalidade de Log.
Parâmetro para ativação da rotina

IMPORTANTE: Ao ativar este parâmetro, serão criados gatilhos (triggers) no Banco de Dados. Durante o processo de ativação, pode haver um bloqueio temporário das tabelas, o que pode impactar a performance do SankhyaOM. Para minimizar qualquer impacto negativo no desempenho do sistema, recomendamos que a ativação do parâmetro seja realizada fora do horário de operação.

2) Temos também o parâmetro LOGTABMAXAGE que permite alterar a quantidade de dias que o Log ficará disponível. Por padrão, o tempo é de 3 dias corridos e este parâmetro permite alterar para até 7 dias corridos. Vale ressaltar que não é possível guardar os logs por mais de 7 dias.
Parâmetro para definição de tempo para armazenar os logs

Entidades e tabelas logadas

Ao habilitar o parâmetro LOGTABOPER as seguintes entidades terão suas inserções, edições ou deleções logadas para consulta pela API Gateway: [link](https://developer.sankhya.com.br/reference/entidades-para-log-de-altera%C3%A7%C3%A3o)

Detalhes Técnicos

O campo entidades é obrigatório. Ao menos uma entidade deve ser requisitada.
O campo dhAlter não é obrigatório. Quando não especificado, todos os logs referentes às entidades são consultados. Ao especificar a data e hora de alteração, são retornados os logs cuja a data de alteração é maior ou igual à dhAlter.

Importante: O parâmetro modifiedSince recebe o padrão da data da RFC3339: “YYYY-MM-DDTHH24:MI:SS”

Requisitos Mínimos

Versões do SankhyaOM: - 4.25b188; - 4.26b109; - 4.27 até 4.34; - A partir da 4.35 esta rotina é ativada através da tela [Configurações » Rotinas » Log de Alterações para API](https://developer.sankhya.com.br/reference/entidades-para-log-de-altera%C3%A7%C3%A3o) no SankhyaOm; - Banco de dados Oracle 11G ou superior; - Banco de Dados SQL Server 2017 ou superior.


Para realizarmos a busca através do Json, utilizamos o serviço "GatewayServiceProviderSP.logAlteracoesTabelas".

Exemplo de uso:

  • URL Gateway Produção: https://api.sankhya.com.br/
  • URL Gateway Sandbox: https://api.sandbox.sankhya.com.br/
URL de chamada: https://[URL_GATEWAY]/gateway/v1/mge/service.sbr?serviceName=GatewayServiceProviderSP.logAlteracoesTabelas&outputType=json

Corpo de requisição
{
  "serviceName": "GatewayServiceProviderSP.logAlteracoesTabelas",
  "status": "1",
  "requestBody": {
  "dhAlter": "2023-01-27T11:00:28",
  "size":17,
  "page":0,
  "entidades": [
      {
        "nome": "Produto"
       },
       {
        "nome": "CabecalhoNota"
       },
       {
        "nome": "ItemNota"
       },
       {
        "nome": "Estoque"
       }
      ]
   }
}

Retorno:

{
    "serviceName": "GatewayServiceProviderSP.logAlteracoesTabelas",
    "status": "1",
    "pendingPrinting": "false",
    "transactionId": "2F153D4BD713800F9B770DCC4FA1FE12",
     "responseBody": {
        "registros": [
            {
              "entidade": "Produto",
              "dtAlter": "2023-02-27T08:14:46",
              "evento": "CHANGE",
              "pk": [
                 {
                  "nomeColumnPk": "CODPROD",
                  "valorPk": 1254
                 }
               ]
            },
            {
              "entidade": "CabecalhoNota",
              "dtAlter": "2023-02-27T08:14:46",
              "evento": "CHANGE",
              "pk": [
                 {
                  "nomeColumnPk": "NUNOTA",
                  "valorPk": 2144
                 }
              ]
            },
            {
                "entidade": "ItemNota",
                "dtAlter": "2023-02-27T09:00:12",
                "evento": "CHANGE",
                "pk": [
                    {
                        "nomeColumnPk": "NUNOTA",
                        "valorPk": 27283
                    },
                    {
                        "nomeColumnPk": "SEQUENCIA",
                        "valorPk": 1
                    }
                ]
            },
            {
                "entidade": "Estoque",
                "dtAlter": "2023-02-27T09:01:14",
                "evento": "CHANGE",
                "pk": [
                    {
                        "nomeColumnPk": "CONTROLE",
                        "valorPk": "018-23-76800"
                    },
                    {
                        "nomeColumnPk": "TIPO",
                        "valorPk": "P"
                    },
                    {
                        "nomeColumnPk": "CODPARC",
                        "valorPk": 0
                    },
                    {
                        "nomeColumnPk": "CODLOCAL",
                        "valorPk": 70180000
                    },
                    {
                        "nomeColumnPk": "CODPROD",
                        "valorPk": 504
                    },
                    {
                        "nomeColumnPk": "CODEMP",
                        "valorPk": 1
                    }
                ]
            }
        ]
     }
}

Além disso, existe uma forma de otimizar o processo e utilizar um parametro na requisição direta no loadRecords para puxar apenas registros que foram alterados a partir de um determinado momento. Basta inclui a propriedade "modifiedSince". na requisição.

Exemplo de uso direto no end-point loadRecords

{
  "serviceName": "CRUDServiceProvider.loadRecords",
  "requestBody": {
    "dataSet": {
      "rootEntity": "Parceiro",
      "includePresentationFields": "N",
      "offsetPage": "0",
      "modifiedSince":"2024-04-16T12:59:59",
      "criteria": {
        "expression": {
          "$": ""
        }
      },
      "entity": {
        "fieldset": {
          "list": "CODPARC,NOMEPARC,FORNECEDOR,CLIENTE,CODCID,CLIENTE,CLASSIFICMS"
        }
      }
    }
  }
}


O exemplo acima retorna todos os Parceiroso que foram editados a partir de 16/04/2024 12:59:59, conforme indicado no parametro "modifiedSince". presente na requisição.

Recent Requests
Log in to see full request history
TimeStatusUser Agent
Retrieving recent requests…
LoadingLoading…
Responses
201

Consulta efetuada com sucesso

400

Requisição inválida

500

Erro interno do servidor

Language
URL
LoadingLoading…
Response
Click Try It! to start a request and see the response here!