tiagomacul
Giga Sage

Artigo: Consultas Avançadas à Tabela sys_audit com GlideRecord: Um Guia para Desenvolvedores e Administradores

 

Introdução: A Tabela sys_audit como Fonte de Governança e Segurança

 

No ecossistema ServiceNow, a tabela sys_audit é muito mais do que um simples registro de atividades. Ela é a espinha dorsal da rastreabilidade e governança, capturando automaticamente as mudanças em campos auditados em qualquer registro do sistema. Para desenvolvedores e administradores, dominar a interação com essa tabela não é apenas uma habilidade técnica; é uma competência fundamental para a segurança da informação e a conformidade regulatória.

Em sintonia o ServiceNow, que enfatiza a importância de uma gestão robusta e uma cultura de melhoria contínua, o uso eficaz da sys_audit permite auditar a trilha completa das alterações. Isso se alinha diretamente com o princípio de "Colaborar e Promover Visibilidade", garantindo que todas as partes interessadas possam rastrear e entender a evolução dos registros. A seguir, exploraremos como usar o poder do GlideRecord para extrair o máximo de valor dessa tabela, indo além do básico e incorporando boas práticas de desenvolvimento.

 

>> System Definition > Tables

tiagomacul_0-1755308608255.png

 

Search by =sys_audit

tiagomacul_1-1755308650746.png

 

https://<instance>.service-now.com/now/nav/ui/classic/params/target/sys_db_object.do%3Fsys_id%3D9c0a70109000021087de3cfccdb0d6e5%26sysparm_record_target%3Dsys_db_object%26sysparm_record_row%3D1%26sysparm_record_rows%3D1%26sysparm_record_list%3Dsys_update_nameISNOTEMPTY%255Ename%253Dsys_audit%255EORDERBYDESCsys_updated_on

 

tiagomacul_2-1755308719709.png

 

Fundamentos do GlideRecord para sys_audit

 

O GlideRecord é a API mais comum no ServiceNow para interagir com o banco de dados. Ele atua como um invólucro (wrapper) sobre as linhas da tabela, permitindo a execução de operações CRUD (Create, Read, Update, Delete). Para a tabela sys_audit, o uso do GlideRecord é crucial para:

  • Consultar (Select): Encontrar e iterar sobre registros que atendem a critérios específicos (ex: todas as mudanças em um Incidente ou a alteração de um campo específico).

  • Inserir (Insert): Raramente usada em produção, mas útil para testes ou cenários de carga de dados históricos.

  • Atualizar (Update): Semelhante à inserção, é usada com cautela, principalmente em scripts de correção ou manutenção.

A principal força do GlideRecord está na sua capacidade de construir consultas complexas de forma programática, garantindo que a lógica de negócio seja aplicada com precisão.

 

 

Como testar / debugar o seu script?

 

System Definition > Scripts - Background

 

Exemplo para Update

 

//

var ObjAudit = new GlideRecord("sys_audit");

ObjAudit.addQuery("documentkey", "14d1e2de0fe20300975587ece1050e65");

ObjAudit.orderByDesc('sys_created_on');

ObjAudit.query();

ObjAudit.next();

 

gs.print("documentkey=" + ObjAudit.documentkey);

gs.print("fieldname=" + ObjAudit.fieldname);

gs.print("internal_checkpoint=" + ObjAudit.internal_checkpoint);

gs.print("internal_checkpoint=" + ObjAudit.internal_checkpoint);

gs.print("newvalue=" + ObjAudit.newvalue);

gs.print("oldvalue=" + ObjAudit.oldvalue);

gs.print("reason=" + ObjAudit.reason);

gs.print("sys_created_by=" + ObjAudit.sys_created_by);

gs.print("sys_created_on=" + ObjAudit.sys_created_on);

gs.print("sys_created_on=" + ObjAudit.sys_created_on);

gs.print("sys_id=" + ObjAudit.sys_id);

gs.print("tablename=" + ObjAudit.tablename);

gs.print("user=" + ObjAudit.user);

 

ObjAudit.user.setValue("TestA");

ObjAudit.update();

//

 

 

Exemplo para Insert

 

var ObjAudit = new GlideRecord("sys_audit");  

ObjAudit.initialize();

ObjAudit.documentkey ="14d1e2de0fe20300975587ece1050e65";

ObjAudit.fieldname = "Attachment";

ObjAudit.sys_created_on = "2017-11-27 10:41:39";

ObjAudit.newvalue = "new attach";

ObjAudit.sys_created_by = "Tiago Macul";

ObjAudit.user = "Tiago Macul";

ObjAudit.insert();

 

 

Onde verificar:

https://<InstanceName>.service-now.com/sys_audit_list.do?sysparm_query=documentkeySTARTSWITH14d1e2de...

 

XML

 

<xml>

 

<sys_audit>

 

 

<documentkey>14d1e2de0fe20300975587ece1050e65</documentkey>

 

<fieldname>short_description</fieldname>

<internal_checkpoint>15fea2ae3830000001</internal_checkpoint>

<newvalue>teste update 10</newvalue>

<oldvalue>teste update 9</oldvalue>

<reason/>

<record_checkpoint>41</record_checkpoint>

<sys_created_by>admin</sys_created_by>

<sys_created_on>2017-11-23 18:36:40</sys_created_on>

<sys_id>e3c29b2a0f2e0300975587ece1050ecd</sys_id>

<tablename>incident</tablename>

<user>TestA</user>

</sys_audit>

 

</xml>

 

 

Rest API Explorer

https://<InstanceName>.service-now.com/nav_to.do?uri=/$restapi.do

 

WSDL

https://<InstanceName>.service-now.com/api/now/table/sys_audit?sysparm_limit=1

 

WSDL Response Body

{
  "result": [
  {
  "fieldname": "version",
  "reason": "",
  "sys_id": "21737a1337210200f212cc028e41f1ae",
  "newvalue": "1.0",
  "sys_created_on": "2015-04-22 22:27:44",
  "documentkey": "27d3f35cc0a8000b001df42d019a418f",
  "internal_checkpoint": "14ef5ad7c3b0000001",
  "record_checkpoint": "10",
  "tablename": "cmdb_ci_service",
  "user": "admin",
  "oldvalue": "",
  "sys_created_by": "admin"
  }
  ]

 

 

 

Image result for knowmore