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.

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