写真を保存したり、書類の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エンコードした文字列をセットする必要があるのがポイントです。