プログラマ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エンコードした文字列をセットする必要があるのがポイントです。