tyoshikawa1106のブログ

- Force.com Developer Blog -

SFDC:RemoteActionとnot found on controllerエラー

RemoteActionの処理を実行時に次のようなエラーに遭遇しました。
f:id:tyoshikawa1106:20160305135529p:plain

Method 'getAccount' not found on controller S1AccountController. Check spelling, method exists, and/or method is RemoteAction annotated.


S1AccountControllerクラスのgetAccountメソッドが見つかりません..というエラーです。


このクラスもこのメソッドもちゃんと用意されているし、別の処理で実際に動いているのに。。と思ったのですが、原因は引数にセットされている値でした。


今回エラーが出た時の処理は、レコードIDを条件に対象レコードを取得するという処理です。
f:id:tyoshikawa1106:20160305135920p:plain:w300


このレコードIDはAngularJSの『$routeParams.id』をつかって取得しようとしました。
f:id:tyoshikawa1106:20160305140024p:plain


$routeParams.idは値が存在しない場合、NULLでもブランク値でもなく『undefined』がセットされます。この『undefined』をRemoteActionの引数として渡そうとしたことでエラーが発生していました。
f:id:tyoshikawa1106:20160305140627p:plain


次のように値の存在判定をして、『undefined』の場合はNULLをセットするようにしておけば、このエラーを回避できます。
f:id:tyoshikawa1106:20160305140315p:plain


RemoteActionの処理でnot found on controllerというエラーが発生した場合はこのあたりもチェックしてみると良さそうです。