StandardControllerとCustomControllerを一緒に使ったときにハマったこと
題名の通りではあるんですけど、
昨日あったことなので、取れたてホヤホヤです。
StandardControllerを指定する際にvisualforceに書くと思いますが、
例えば
<apex:page standardController="Account" extensions="HogeController" >
とあった場合に
HogeController内でgetRecordをすればAccountの項目が
取得出来るのはご存知かと思いますが、
Accountの項目を取得するのではなく、
その一階層下の項目を取得する必要がありました。
その場合、私はvisualforceに
<apex:inputHidden value="{!accounts.hogehoge__c}"
と実装していました。
そうすると、目的の画面を表示し、編集ボタンを押すと
謎のエラーが!
「system.security.NoAccessException: hogehogeObject__c の更新アクセスが拒否されました」
なんぞーーーーーーーーーーーー
なんぞおおおおおおおおおおおおおお
とハマりつつ、Google先生に助けて頂きながら
https://help.salesforce.com/apex/HTViewSolution?id=000002417&language=en_US
結局はこういう場合には、
visualforceでinputHiddenを書いてはいけないというのだけは理解出来ました。
(英語わからないよ・・・)
なので、apex:inputHiddenの実装をやめて
カスタムコントローラに、
this.hogeController.addFields(new List<String>{'accounts.hogehoge__c'});
と実装することで事なきを得ました。
普段スタンダードコントローラを使わないので、結構ビビリましたが
もう大丈夫です(´ー`)
以下の2点が問題発生する要因です。
・画面を参照・編集するユーザーのプロファイルがhogeObjectを参照権限のみになっている。
(今回の私のPJの場合は、Accountの画面でhogeObjectは編集する必要がなかった為、この権現で問題なかった)
・動作確認をする際に、システム管理者で行ってしまっていた。
これから動作確認する場合には、
使用するユーザーのプロファイルで確認するように気を付けようと思います。