まず、ご支援いただきありがとうございます。私はapexには比較的慣れていませんが、プログラミングには慣れていません。したがって、誰かがすぐに答えを持っている場合は感謝しますが、答えを見つけるためにこれをどのようにデバッグしたかにも同様に興味があります。では、本題に…
VF ページのクエリ文字列値に基づいて SOQL ステートメントを作成し、連絡先の結果セットを返すコントローラーがあります。結果セットは JSON 形式で返されます。これを force.com 内で実行すると、コントローラのテストとして正しく動作します...
PageReference pr = new PageReference('/');
Test.setCurrentPageReference(pr);
MyController con = new MyController ();
pr.getParameters().put('action', 'search');
System.debug(con.JsonString);
これは戻ります
{"SearchResults":[***ARRAY OF MANY CONTACT RECORDS***],"PaginationInfo":
{"RecordsPerPage":10,"TotalRecords":5,"TotalPages":1,"PageNumber":1}}
これを force.com の外部で表示する場合は、次のような VF ページへのリンクを使用します: https://mysite.secure.force.com/requestpage?action=search
また、json を正しくダンプします。カスタム フィールドにアクセスすると問題が発生します。フィールドを追加する上で同じテストを実行すると、すべてが force.com で正しく機能します。
PageReference pr = new PageReference('/');
Test.setCurrentPageReference(pr);
MyController con = new MyController ();
pr.getParameters().put('action', 'search');
pr.getParameters().put('specialty', 'a0xH0000001u5YtIAI');
System.debug(con.JsonString);
コントローラーに対するテストで上記を実行すると、複数の連絡先レコードを含む JSON オブジェクトが吐き出されます。ただし、パラメーターhttps://mysite.secure.force.com/requestpage?action=search&specialty=a0xH0000001u5YtIAIを追加する外部呼び出しを行うと、空の結果セットが返されます。
{"SearchResults":[],"PaginationInfo":
{"RecordsPerPage":10,"TotalRecords":null,"TotalPages":null,"PageNumber":1}}
したがって、最初に考えたのは、コントローラー内のテストが実際に結果セットを返すため、フィールドに何らかの認証の問題があるということです。基本的に、テストを実行している管理者としてログインしたコントローラーは機能します。ゲスト ユーザーとしてサイトから外部からアクセスされる VF ページは機能しませんが、そのフィールドに対してのみ機能します。フィールドでフィルタリングしていない上記の最初のリクエストを実行すると、連絡先オブジェクトが返されます。さらに、json オブジェクトが返されるという事実から、コード内で例外が発生していないと思われます。昨夜、フィールド レベルの認証を理解するために数時間を費やしました。いくつかの投稿に基づいて、force.com のサイトにアクセスし、パブリック アクセス設定、カスタム フィールド レベル セキュリティに移動し、正しいと思われるセクションを編集しました。そこにあるすべてのフィールドが表示可能としてチェックされます。そこで「読み取り専用」がどのように機能するかわかりません。写真を含めてみましたが、私のレベルでは許可されていません。
また、エラーログが強制的に表示される方法を調査しようとしました。開発者コンソールを開き、デバッグ ログをセットアップしようとしましたが、これらのツールを使用して自分の状況をデバッグする方法がわかりません。それで、誰かが私を正しい方向に向けることができますか?最後に、これはおそらく認証の問題だと思いますが、おそらく何かが欠けていて、コードの問題です。テストを実行しても失敗しないので、わかりにくいです。繰り返しになりますが、ご協力いただきありがとうございます。