Welcome to Community Week 2025! Join us to learn, connect, and be recognized as we celebrate the spirit of Community and the power of AI. Get the details  

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