Salesforce1について
Salesforce1とは、Salesforceが提供しているスマフォ版モバイルアプリ(およびその関連プラットフォームの総称としても用いられます)です。
利用方法としてはハイブリッドアプリであるSalesforce1をAppStoreなりGoogle Playなりからダウンロードする方法と、各組織内のURL (https://{インスタンス名}.salesforce.com/one/one.app
) にWebブラウザからアクセスする、という方法があります。
外部アプリからの連携
Salesforceに外部から連携するモバイルアプリを作成している場合、あるSalesforce内のレコード(取引先とか商談とか)のモバイル用の詳細画面にダイレクトにアクセスしたい、という要求があります。
PC版のURLは https://{インスタンス名}.salesforce.com/{recordId}
でアクセスできますが、Salesforce1のレコード詳細画面のURLについては、/one/one.app#eyJ......
のような意味不明な文字列が#
以下に設定されており、よくわかりません。
しかし、この文字列は解析不可能なものではありません。実はレコード情報を含むJSON文字列をBase64encodeしたものになっています。
Google Chrome でSalesforce1画面を立ちあげ、任意のレコード詳細画面を表示した状態で Developer Tools を開き、以下のスクリプトを実行してみます。
JSON.parse(atob(location.hash.substring(1)))
エンコードされているJSONは以下の様な形式になっています。
{
"componentDef": "force:recordHome",
"attributes": {
"values": {
"recordId": "0018000000OxOkjAAF"
}
},
"t": 1396239886613
}
atob
はBase64デコードを行う組み込み関数です。iOS, Androidを含め、Webkitベースの最新のモバイルブラウザはほぼ対応しています。反対にBase64エンコードを行う関数はbtoa
で提供されています
ここで、JSON内のrecordId
の部分を表示したいレコードのIDを設定し、同様のJSON文字列を生成してBase64エンコードしたものをハッシュに設定してみます。(t
はおそらくタイムスタンプ)
location.hash = "#" + btoa(JSON.stringify({
"componentDef": "force:recordHome",
"attributes": {
"values": {
"recordId": "00580000001oRWZAA2"
}
},
"t": Date.now()
}))
するとハッシュに設定したレコードの詳細ページが開きました。
免責事項
以上の動作は特にマニュアルに記載されたものではないので、予告なく動作が変更になる可能性があります。その辺ご考慮の上でご利用下さい