コミュニティでの相対パスの取扱い
委託先にコミュニティのライセンスを付与して、社内画面と同じものを提供して運用しています。
※salesforceライセンスは高いので、使用用途が決まっていればコミュニティライセンスで費用を抑えることができるため
ところがvisualforceページ上に相対パスでリンクを作成している箇所でエラーページに飛んでしまう。(社内からは問題なく遷移できた)
調べたところ、、
内部ユーザでは正常に動作しているカスタムボタンやリンクが
相対パスを使用して定義しているにも関わらずエラーとなります。
これはコミュニティ上ではURLにコミュニティ名がを必要とするためとなります。
Visualforce ページのURLへ遷移する場合の比較例
- 内部ユーザ用のURL : /apex/<Visualforceページ名>
例. /apex/VFPage- コミュニティ用のURL : <コミュニティ名>/apex/<Visualforceページ名>
例. /cp01/apex/VFPage
というヘルプを発見。
元の拡張コントローラに、urlからgetpathでコミュニティを判定。
遷移先を可変するように対応しました。
以下のようにしても対応できるようです。
カスタムボタン、カスタムリンクのURL記載箇所に以下の様に数式を組み込む事で対応できます。
※VFPage は Visualforce ページ名です。
{!IF( $Site.Prefix <> null, URLFOR($Site.Prefix + "/apex/VFPage"), URLFOR("/apex/VFPage"))}
処理内容としては、$Site.Prefix がコミュニティ名を定義するグローバル変数となるため
この変数の有無に応じて、遷移先のURLを適切なものへ振り分けています。