Heroku AppLinkの使い方(DML)
Heroku AppLinkの使い方のサンプル第2弾でも。
※サンプルコードは Node.js 版のSDKを使ったものに限定です。SDKのリポジトリは https://github.com/heroku/heroku-applink-nodejs を参照してください。
1. レコードの作成
※もちろん添付ファイルを作成することも可能
import * as salesforcesdk from "@heroku/applink";
async function sample () {
const sdk = salesforcesdk.init();
// ※Authorized Userを使います
const org = await sdk.addons.applink.getAuthorization(process.env.HEROKU_APPLINK_CONNECTION_NAME);
//----------------------------------------------------------
// (1)レコードを作成
// - 参照先を設定する際には、外部キーの指定も可能
const new_record = await org.dataApi.create({
type: "customobject__c", // オブジェクトAPI
fields: {
key__c: ulid(),
text01__c: 'xxxxx',
longtextarea01__c: description,
num01__c: 123,
datetime01__c: new Date().toISOString(),
check01__c: false,
other_object__r: { key__c: 'other_key' },
},
});
//----------------------------------------------------------
// (2)contentversionの場合も
// JSONファイルを作成してBase64エンコード
const jsonData = JSON.stringify(someobject, null, 2);
const base64Data = Buffer.from(jsonData, 'utf-8').toString('base64');
const fileName = 'xxx.json';
// ContentVersionを直接作成
const contentVersionResult = await org.dataApi.create({
type: 'ContentVersion',
fields: {
Title: fileName,
PathOnClient: fileName,
VersionData: base64Data,
ContentLocation: 'S'
}
});
// ContentDocumentIdを取得するためにContentVersionをクエリ
const contentVersionQuery = await org.dataApi.query(`SELECT ContentDocumentId FROM ContentVersion WHERE Id = '${contentVersionResult.id}'`);
const contentDocumentId = contentVersionQuery.records[0]?.fields?.ContentDocumentId;
// ContentDocumentLinkを直接作成してレコードに関連付け
const linkResult = await org.dataApi.create({
type: 'ContentDocumentLink',
fields: {
ContentDocumentId: contentDocumentId,
LinkedEntityId: '(record id)',
ShareType: 'V',
Visibility: 'AllUsers'
}
});
}2. レコードの更新
import * as salesforcesdk from "@heroku/applink";
async function sample () {
const sdk = salesforcesdk.init();
// ※Authorized Userを使います
const org = await sdk.addons.applink.getAuthorization(process.env.HEROKU_APPLINK_CONNECTION_NAME);
// レコードを更新
// - 参照先を設定する際には、外部キーの指定も可能
const new_record = await org.dataApi.update({
type: "customobject__c", // オブジェクトAPI
fields: {
id: '(オブジェクトid)',
text01__c: 'xxxxx',
longtextarea01__c: description,
num01__c: 123,
datetime01__c: new Date().toISOString(),
check01__c: false,
other_object__r: { key__c: 'other_key' },
},
});
}3. レコードの削除
※ type と id を指定するだけ
import * as salesforcesdk from "@heroku/applink";
async function sample () {
const sdk = salesforcesdk.init();
// ※Authorized Userを使います
const org = await sdk.addons.applink.getAuthorization(process.env.HEROKU_APPLINK_CONNECTION_NAME);
// レコードを削除
const new_record = await org.dataApi.delete({
type: "customobject__c", // オブジェクトAPI
fields: {
id: '(オブジェクトid)',
},
});
}そんなにややこしいAPIになってないので、素直に利用できる。
が、upsert がないのが残念...
ちなみに、dataApi.insert() の中身を掘り下げていくと、こんな記述をお目にかかります。
import { Connection } from "jsforce/lib/connection";Heroku AppLinkのNode.js SDKの内部では、stomita先生のjsforceが使われている、ということでした。さすが。