10
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Salesforce1におけるレコードへのダイレクトアクセス方法

Last updated at Posted at 2014-03-31

Salesforce1について

Salesforce1とは、Salesforceが提供しているスマフォ版モバイルアプリ(およびその関連プラットフォームの総称としても用いられます)です。
利用方法としてはハイブリッドアプリであるSalesforce1をAppStoreなりGoogle Playなりからダウンロードする方法と、各組織内のURL (https://{インスタンス名}.salesforce.com/one/one.app) にWebブラウザからアクセスする、という方法があります。

Salesforce1.png

外部アプリからの連携

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)))

Salesforce1ChromeDevTools.png

エンコードされている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()
}))

するとハッシュに設定したレコードの詳細ページが開きました。

Salesforce1ChromeDevTools_after.png

免責事項

以上の動作は特にマニュアルに記載されたものではないので、予告なく動作が変更になる可能性があります。その辺ご考慮の上でご利用下さい

10
10
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?