Scripts de pièces jointes utiles

  • Rversion finale: Australia
  • Mis à jour 12 mars 2026
  • 2 minutes de lecture
  • Il s’agit d’une version consultable des scripts de pièces jointes utiles.

    Avertissement :
    La personnalisation décrite ici a été développée pour être utilisée dans des instances spécifiques et n’est pas prise en charge par Now Support. Cette méthode est fournie telle quelle et doit être testée minutieusement avant sa mise en œuvre. Posez toutes les questions et tous les commentaires concernant cette personnalisation sur notre forum de la communauté.

    Copier les pièces jointes d’un enregistrement à l’autre

    Utilisez le script suivant pour copier une pièce jointe d’un enregistrement vers un autre enregistrement :
    GlideSysAttachment.copy('sourcetable','sys_id','destinationtable','sys_id');
    Remarque :
    GlideSysAttachment.copy copie toutes les pièces jointes ; Il ne peut pas sélectionner de pièces jointes spécifiques.

    Supprimer les pièces jointes en double

    Utilisez le script suivant dans une règle métier, un travail planifié ou un script en arrière-plan pour supprimer les pièces jointes en double situées dans la table Pièces jointes [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();
      }
    }

    Afficher si les tâches ont des pièces jointes dans la vue de liste

    Utilisez le script suivant dans une règle métier pour afficher si les tâches ont des pièces jointes lorsqu’elles sont affichées dans la vue de liste d’enregistrements. Notez que le script a besoin d’un champ personnalisé dans la table A des pièces jointes [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();
      }
    }
    Remarque :
    Planifiez l’exécution de la règle métier après l’insertion/la suppression.

    Lien vers les pièces jointes dans une notification par e-mail

    Utilisez le script suivant dans une notification ou un modèle par e-mail pour inclure des liens vers des pièces jointes :
    
    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>');
      }
    }
    Remarque :
    Remplacez « instance_name » par le nom de votre instance.

    Journalisation des pièces jointes

    Chaque fois qu’un utilisateur télécharge une pièce jointe, l’action écrit un enregistrement d’événement attachment.read dans le journal des événements. Si vous le souhaitez, vous pouvez traiter ces événements avec une action de script ou une notification par e-mail. Cela peut être utile si vous souhaitez effectuer une action lors de la lecture d’une pièce jointe. Par exemple, vous pouvez enregistrer quand et par qui certaines pièces jointes sont téléchargées. Pour cette fonctionnalité, la variable actuelle doit pointer vers un enregistrement sys_attachment et l’enregistrement d’événement doit utiliser les paramètres suivants :
    • parm1 : nom de fichier
    • parm2 : nom de table