sf org open
でtarget-org
に設定されてる組織をブラウザで開ける。でも設定画面が開くので、毎回開発中のアプリをランチャーから選択して開き直さないといけいけない。できれば直接アプリを開きたい。
試行錯誤したところこんな感じでできた。
sf org open --path=/lightning/app/$(sf data query --query "SELECT DurableId FROM AppDefinition WHERE DeveloperName = 'アプリのAPI参照名'" --json | jq -jr ".result.records[].DurableId")
解説
sf org open
の--path
オプションでSalesforceの任意のページを開ける。
例えばリードの一覧画面ならこう:
sf org open --path=/lightning/o/Lead/list
--path
オプションでSalesforceアプリケーションのパスを指定できればアプリを開ける。
しかしSalesforceアプリケーションは特定のURLを持たないっぽい。
なのでランチャーのリンクからパスを取り出す。手元のスクラッチ組織でセールスアプリのリンク先はこうなっていた。
https://app-app-881-dev-ed.scratch.lightning.force.com/lightning/app/06m1y000000UWNUAA4
このURLのパス部分を--path
に渡すとセールスアプリがブラウザで開く。
sf org open --path=/lightning/app/06m1y000000UWNUAA4
このパスのIDのところを任意のアプリのものに変更すれば任意のアプリをブラウザで開くことができるはず。
このIDは、このヘルプからリンクされてる、
このページによると、
06m
で始まるIDはAppDefinition
オブジェクトのIDとのこと。
SOQLで叩いてみる。
$ sf data query --query "SELECT FIELDS(ALL) FROM AppDefinition LIMIT 1" --json
{
"status": 0,
"result": {
"records": [
{
"attributes": {
"type": "AppDefinition",
"url": "/services/data/v58.0/sobjects/AppDefinition/06m1y000000UWNBAA4"
},
"Id": "000000000000000AAA",
"DurableId": "06m1y000000UWNBAA4",
"Label": "セールス",
"MasterLabel": "salesforce",
"NamespacePrefix": "standard",
"DeveloperName": "Sales",
"LogoUrl": "/img/salesforce-noname-logo-v2.svg",
"Description": "世界で最も高い評価を受けた営業支援ソリューション",
"UiType": "Aloha",
"NavType": "Standard",
"UtilityBar": null,
"HeaderColor": "#0070D2",
"IsOverrideOrgTheme": false,
"IsSmallFormFactorSupported": false,
"IsMediumFormFactorSupported": false,
"IsLargeFormFactorSupported": false,
"IsNavPersonalizationDisabled": false,
"IsNavAutoTempTabsDisabled": false,
"IsNavTabPersistenceDisabled": false
}
],
"totalSize": 1,
"done": true
},
"warnings": []
}
取得できた。DurableId
に先ほどのIDと似たものが見える。
AppDefinition
オブジェクトを確認するとDurableId
は「アプリケーションの一意の仮想 Salesforce ID」らしい。
AppDefinition | Salesforce プラットフォームのオブジェクトリファレンス | Salesforce Developers
DeveloperName
がAPI参照名で一意になってそうなので、その辺りを踏まえてワンライナーにする。
sf org open --path=/lightning/app/$(sf data query --query "SELECT DurableId FROM AppDefinition WHERE DeveloperName = 'アプリのAPI参照名'" --json | jq -jr ".result.records[].DurableId")
これでできた。