Scripts de anexo úteis

  • Versão de lançamento: Zurich
  • Atualizado 31 de jul. de 2025
  • 2 min. de leitura
  • Esta é uma versão pesquisável dos scripts de anexo úteis.

    Aviso:
    A personalização descrita aqui foi desenvolvida para uso em instâncias específicas e não é compatível com Now Support. Este método é fornecido no estado em que se encontra e deve ser testado cuidadosamente antes da implementação. Publique todas as perguntas e comentários sobre esta personalização no fórum da nossa comunidade.

    Copie anexos de registro para registro

    Use o script a seguir para copiar um anexo de um registro para outro registro:
    GlideSysAttachment.copy('sourcetable','sys_id','destinationtable','sys_id');
    Nota:
    GlideSysAttachment.copy copia todos os anexos; não é possível selecionar anexos específicos.

    Exclua anexos duplicados

    Use o script a seguir em uma regra de negócios, trabalho agendado ou script em segundo plano para excluir anexos duplicados localizados na tabela Anexos [sys_attachment]:
    function fixDuplicateImages(){
      var now_GR = new GlideRecord('sys_attachment');
      now_GR.addQuery('table_name','LIKE','ZZ_YY%');
      now_GR.orderBy('table_sys_id');
      now_GR.orderByDesc('sys_created_on');
      now_GR.query();
      var lastID ='not_a_match';
      var lastFile ='not_a_match';
      while(now_GR.next()){
        var isDuplicate = (lastID == now_GR.table_sys_id)&&(lastFile == now_GR.file_name);
        lastID = now_GR.table_sys_id;
        lastFile = now_GR.file_name;
        gs.print(now_GR.table_sys_id + ' ' + now_GR.table_name + ' ' + now_GR.file_name + ' ' + now_GR.sys_created_on + ' ' + isDuplicate);
        if(isDuplicate)
          now_GR.deleteRecord();
      }
    }

    Exibir se as tarefas têm anexos na exibição de lista

    Use o script a seguir em uma regra de negócios para exibir se as tarefas têm anexos quando exibidas na exibição de lista de registros. Observe que o script precisa de um campo personalizado na tabela Tem anexos [u_has_attachments].
    checkAttachment();
     
    function checkAttachment(){
      // if inserting then the task has an attachment
      if(current.operation()=='insert') {
        hasAttachment('true'); // if deleting attachment check for other attachments
        if(current.operation()=='delete') {
          var timeNow3 =new GlideDateTime();
          gs.log('has_attachment br: gliderecord query start date time is: '+ timeNow3.getNumericValue(),'jwtest');
          var attachCount = new GlideAggregate('sys_attachment');
          attachCount.addQuery('table_sys_id',current.sys_id);
          attachCount.addAggregate('COUNT');
          attachCount.query();
          var numAttachments ='0'; 
    
          // if no other attachments task does not have attachment
          if(attachCount.next()){
            numAttachments = attachCount.getAggregate("COUNT");
            if(numAttachments >0){
              hasAttachment ='true';
            } else {
              hasAttachment('false');
            }
            var timeNow4=new GlideDateTime();
            gs.log('has_attachment br: gliderecord query start date time is: '+ timeNow4.getNumericValue(),'jwtest');
          }
     
    function hasAttachment(answer){
      var task = new GlideRecord('task');
      task.addQuery('sys_id',current.table_sys_id);
      task.query();
     
      if(task.next()){
        task.u_has_attachment= answer;
        task.autoSysFields(false);  //Don't set the lastUpdatedTime or the Simultaneous Update Alert will likely get triggered
        task.setWorkflow(false);  //Don't allow other business rules to run, otherwise multiple notifications will likely be sent
        task.update();
      }
    }
    Nota:
    Programe a regra de negócio para ser executada após inserir/excluir.

    Link para anexos em uma notificação por e-mail

    Use o script a seguir em uma notificação por e-mail ou modelo para incluir links para anexos:
    
    printattachments(); 
     
    function printattachments(){
      var now_GR =new GlideRecord('sys_attachment');
      now_GR.addQuery('table_sys_id',current.sys_id);
      now_GR.query();
      while(now_GR.next()){
        template.print('Attachment: <a href="http://'+gs.getProperty("instance_name")+'.service-now.com/sys_attachment.do?sys_id='+ now_GR.sys_id+'">'+ now_GR.file_name+'</a>');
      }
    }
    Nota:
    Substitua "instance_name" pelo nome da sua instância.

    Registro em log de anexo

    Sempre que um usuário baixa um anexo, a ação grava um anexo.lido registro de evento para o log de eventos. Se desejar, você pode processar esses eventos com uma Ação de script ou uma Notificação por e-mail. Isso pode ser útil se você quiser fazer algo quando um anexo for lido. Por exemplo, você pode registrar quando e por quem determinados anexos são baixados. Para esta funcionalidade, o atual a variável deve apontar para um registro sys_attachment e o registro de evento deve usar os seguintes parâmetros:
    • Parm1: Nome do arquivo
    • Parm2: Nome da tabela