あるExperienceCloudサイトのVisualforceページ改修で意味不明のエラーを遭遇、
その時に対応内容をメモっておきます。
要約
Experience Cloud上で、Visualforceページを利用して、データ登録プログラムを実装。
登録処理で入力チェックを行い、入力エラーがある場合は、
ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.WARNING, 'エラーメッセージ'));
return null;
で元の画面に戻るようしていますが、
実際には下記のエラー画面が表示されてしまいます。
System.debugを「return null;」前に入れてみましたが、ちゃんと出力されているので
return null;は確実に実行されている。
デバッグログでの出力を時間順で見ると
操作の列は
/apex/xxxScreenName の次に
/apex/Exception がありその後に何らかのエラーが発生したよう見える、
中身を見てもエラーのようなものは見つかりませんでした。
Chromeの開発ツールから見ると戻り値のHttpコードは500:Internal Server Errorとなっています。
おそらくページの処理は終わり、その後ブラウザー側に戻す前になにかが発生したはず・・・
疑問
上記のVisualforceページで発生したエラーはどこかで見れるようにできますか?
いろいろググって
ExperienceCloudのサイトの指定で標準のエラーページの指定があり、
その指定したページを編集して、エラーの説明を出力できることが分かった。
手順
1.設定 ⇒ ユーザーインターフェース ⇒ サイトおよびドメイン ⇒ サイト
2.サイトの表示ラベル列で、対象のサイト名をクリック
3.エラーページセクションで、汎用エラーページの「サイトページ名」をクリック
4.表示されるVisualforceページで「編集」ボタンをクリックし下記のように修正
<apex:param value="{!$Site.ErrorMessage}"/>
を
<apex:param value="{!$Site.ErrorDescription}"/>
に変更する。
<apex:page showHeader="false" title="{!$Label.site.error2}" cache="false">
<apex:composition template="{!$Site.Template}">
<apex:define name="body">
<center>
<apex:panelGrid bgcolor="white" columns="1" style="align: center;">
<br/>
<br/>
<apex:panelGrid width="758" cellpadding="0" cellspacing="0" bgcolor="white" columns="1" styleClass="topPanelContainer">
<br/>
<apex:outputPanel layout="block" styleClass="topPanel">
<apex:panelGrid width="758" cellpadding="0" cellspacing="0" bgcolor="white" columns="3">
<apex:image url="{!URLFOR($Resource.SiteSamples, 'img/clock.png')}"/>
<apex:image url="{!URLFOR($Resource.SiteSamples, 'img/warning.png')}"/>
<apex:panelGroup >
<apex:outputText styleClass="title" value="{!$Label.site.error}">
<!-- this parameter needs to be italic in the site.error label
<apex:param value="{!$Site.ErrorMessage}"/>
-->
<apex:param value="{!$Site.ErrorDescription}"/>
</apex:outputText>
<br/>
<br/>
</apex:panelGroup>
</apex:panelGrid>
</apex:outputPanel>
<c:SitePoweredBy />
</apex:panelGrid>
<br/>
<apex:messages />
<br/>
</apex:panelGrid>
</center>
</apex:define>
</apex:composition>
</apex:page>
5.保存して閉じる、
6.テスト画面に戻って再度実行してみると、エラーの内容が表示されるようになった。
エラーの内容は分かったので、次は何とかできるでしょう。
エラーが解決できたらまた内容を追記しておきます。