プログラマ38の日記

主にプログラムメモです。

Salesforce: JavaScript FileReaderとsforce.connectionを使って添付ファイルを登録する。

写真を保存したり、書類のPDFを保存したりなどSalesforceにファイルを保存することは多いと思います。

 

写真はプレビューで確認してから登録したり、複数ファイルをまとめて登録する時など、ファイルを登録する際に便利なのがJavaScriptのFileReaderだと思いますが、FileReaderを使って添付ファイルを登録する際のメモです。

 

<script src="/soap/ajax/39.0/connection.js"></script>


<script>

  var attachments = [];

  //onchangeなどでファイル名とファイルデータを取得後呼ばれる
  function fileload(filename,filedata){
  
    var attachment = new sforce.SObject("Attachment");
    attachment.parentId = {!parentId}; //どこかのオブジェクトID
    attachment.name = filename;

    reader.onload = function(e) {
    
        var bytes = new Uint8Array(reader.result);
        var binaryText = '';
        for (var index = 0; index < reader.result.byteLength; index++) {
            binaryText += String.fromCharCode(bytes[index]);
        }
        attachment.body = window.btoa(binaryText);
        attachments.push(attachment);
    };
    
    reader.onloadend = function () {
      //ここで登録ボタンを押せるような制御を行う
    }
    reader.readAsArrayBuffer(filedata);
  }

  //ファイル登録ボタンなどから呼ばれる
  function createAttachment(){
      sforce.connection.sessionId = "{!$Api.Session_ID}"; 
      var result = sforce.connection.create(attachments);
      
      //登録後の処理
  }
</script>

 Salesforceの添付ファイル(Attachment)のbodyには、base64エンコードした文字列をセットする必要があるのがポイントです。