You need to sign in to do that
Don't have an account?

遷移先の画面にメッセージを埋め込む方法
初めて投稿します。
拡張コントローラ内の処理で、遷移先の画面に警告メッセージを埋め込むことは可能でしょうか?
※なお、遷移先の画面は、標準の画面です。
今考えているコードは以下のような感じですが・・この場合、遷移先の画面にメッセージが表示されません。
public PageReference aaaa(){ if(xxxx){ // 警告メッセージをセット ApexPages.Message msg = new ApexPages.Message(ApexPages.Severity.WARNING, 'xxxxx'); ApexPages.addMessage(msg); // 遷移先画面を指定 PageReference page = new ApexPages.StandardController(xxx).view(); page.setRedirect(true); return page; } }
遷移した後に、何かしらメッセージを通知できれば良いのですが・・解決方法がありましたら、ご教示お願いします。
どうぞよろしくお願いします。
原因はPageReferenceに setRedirect(true); を設定しているためですね。
これを指定していると次のページへは新しいリクエストとして処理されるため、前のリクエストで設定されたメッセージが引き継がれません。
setRedirect(true)の指定をやめるか、別の方法(たとえば、リクエストパラメータでメッセージ文字列を渡し、次のページのコントローラでMessageにセットする、等)を考えるしかありません。
返信、ありがとうございます!
ただ、setRedirect に false を指定しても、遷移先の画面にメッセージを表示できませんでした。。
setRedirect(false); を実行しているコントローラは、当方で作成したカスタムオブジェクトの標準コントローラを拡張した拡張コントローラで、遷移先画面は、そのカスタムオブジェクトの標準画面となるのですが、
拡張コントローラによるVisualforceページ ⇒ 標準コントローラによる標準画面 に遷移する場合、
ApexPages.Message は引き継がれないのでしょうか?
たびたびですみません。もう少し詳細な情報を以下に記載します。
--
カスタムボタンをクリックした際に、何かしらのロジックを実行し、併せて画面遷移を行いたいため、以下(※1)のような構成にしており、このような処理の流れを想定しています。
※遷移先のVisualforceページは、実際には表示されないまま、doActionメソッド内で指定した画面に遷移する想定です。
1.標準画面に追加したカスタムボタンをクリックする
↓
2.Foo.pageをコールする
↓
3.Foo.pageをレンダリングする前に、HogeControllerのdoActionを実行する
↓
4.doAction内で指定した別の標準画面に遷移する
※doAction内でメッセージを追加している場合には、そのメッセージを画面に表示させたい。
⇒ただ、実際には、画面にメッセージは表示されません。。。。
Foo.pageをレンダリングする前に、HogeControllerのdoAction内で、メッセージを作成・追加するあたりに無理があるのでしょうか・・?
何かしらアドバイスを頂けると、大変助かります。何卒よろしくお願いします。
(※1)
■(CustomObject)におけるカスタムボタンの設定
動作:現在のウィンドウにサイドバーなしで表示
内容のソース:Visualforceページ
コンテンツ:Foo
■遷移先のVisualforceページ(ページ名:Foo.page)
■拡張コントローラ (HogeController)
遷移先がVisualforceページではなく、標準画面なのですね。
ApexPages.addMessage(msg);はVisualforceでしか利用できません。
標準画面でエラーメッセージを表示させたいのであれば、sObjectに対してaddError('エラーメッセージ'); としてください。
ご返信、ありがとうございます!
sObjectに対して、addError でエラーメッセージを追加するよう修正しても、遷移先画面でメッセージ通知はできませんでした。。
addError でエラーメッセージを追加する場合、ApexPages.StandardController(stdObj).view() と「view()」を指定しているのが問題なのか・・?と思って、「edit()」を指定しても結果は変わらずでした。
デバッグログを見る限りでは、メッセージは追加されているようですが、遷移先画面で表示されないようです。
addError でエラーメッセージを追加する場合も、Visualforceでしか利用できない、といった制約がありますでしょうか?
上記のような制約があるのであれば、カスタムボタンでJavascriptを実行するよう変更しようかと思います。
何度も質問して恐縮ですが、アドバイス等頂けると幸いです。 どうぞよろしくお願いします。
(以下、修正したコードです。ご参考までです。)