便利な添付ファイル スクリプト

  • リリースバージョン: Xanadu
  • 更新日 2024年08月01日
  • 所要時間:6分
  • これは、便利な添付ファイル スクリプトの検索可能なバージョンです。

    警告:
    ここに記載されているカスタマイズは、特定のインスタンスで使用するために開発されたものであり、Now Support ではサポートされていません。この方法は現状のまま提供され、実装の前に完全にテストする必要があります。このカスタマイズに関するすべての質問およびコメントは、コミュニティフォーラムに投稿してください。

    添付ファイルをレコードからレコードにコピー

    1 つのレコードから別のレコードに添付ファイルをコピーするには、以下のスクリプトを使用します。
    GlideSysAttachment.copy('sourcetable','sys_id','destinationtable','sys_id');
    注:
    GlideSysAttachment.copy はすべての添付ファイルをコピーします。特定の添付ファイルを選択することはできません。

    重複添付ファイルを削除する

    添付ファイル [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();
      }
    }

    リストビューでタスクに添付ファイルがあるかどうかを表示する

    レコードリストビューで表示されたタスクに添付ファイルがあるかどうかを表示するには、ビジネスルールで以下のスクリプトを使用します。スクリプトには、添付ファイルあり [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();
      }
    }
    注:
    挿入/削除の後にビジネスルールを実行するようにスケジュールします。

    メール通知の添付ファイルへのリンク

    添付ファイルへのリンクを含めるには、メール通知またはテンプレートで以下のスクリプトを使用します。
    
    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>');
      }
    }
    注:
    「instance_name」をインスタンス名に置き換えます。

    添付ファイルのログ記録

    ユーザーが添付ファイルをダウンロードするたびに、attachment.read イベント レコードをイベント ログに記録します。必要に応じて、これらのイベントをスクリプト アクションまたはメール通知で処理することができます。これは、添付ファイルが読み込まれたときに何かを実行したい場合に便利です。たとえば、特定の添付ファイルがいつ、誰によってダウンロードされたかを記録できます。この機能を有効にするためには、変数 current が sys_attachment レコードを指し示していなければならず、イベント レコードでは次のパラメーターを使用する必要があります。
    • parm1:ファイル名
    • parm2:テーブル名