tyoshikawa1106のブログ

- Force.com Developer Blog -

SFDC:またまたFileExporterでハマった話と対応方法について

またまたFileExporterでハマってしまいました。というよりも前回うまくいったと思っていたやつが何か間違ったやり方をしていてたまたま上手く行っているように勘違いしていただけでした。。。


・・・というわけで追加でハマった話と対応方法についてです。


WHERE句の条件に "%" をつかったあいまい検索を指定するとエラーが発生します。
※WHERE句の条件はbeans.xmlの1行目で指定しています。
f:id:tyoshikawa1106:20130902233245p:plain

エラーメッセージはこんな感じです。
f:id:tyoshikawa1106:20130902233404p:plain

エクスポートに失敗したため対象のデータがないよという感じのエラーです。これをずっとセキュリティの問題でエクスポートに失敗していると思っていたのですが、検索条件で"%"を指定していることが原因だったことが判明しました。

エラー内容はLog.txtファイルで確認できます。
f:id:tyoshikawa1106:20130902233730p:plain

ログファイルの中身はこんな感じです。
f:id:tyoshikawa1106:20130902233642p:plain


エラー内容です。

SAXParseException: The entity name must immediately follow the '%' in the parameter entity reference.


ちなみにこのSOQLをデータローダで直接実行すると正常に動作します。なのでSOQLに問題はありませんでした。ということでこのエラーメッセージでGoogle先生に質問してみました。

そしたらこんなサイトが・・・
f:id:tyoshikawa1106:20130902234147p:plain

Cosminexus XML Processor ユーザーズガイド
http://www.hitachi.co.jp/Prod/comp/soft1/manual/pc/d3M4420/M0440147.HTM

そしてこの中にさっきのエラーメッセージが・・・ありました。
f:id:tyoshikawa1106:20130902234246p:plain

なんかSOQLとかセキュリティは関係なく、XMLファイルとしての問題だったみたいです。

XMLファイルでは特定の文字はエスケープが必要みたいです。
"%"はこの中に含まれていなかったのですが、なんか特殊な意味を持つような感じで使用している箇所があった気がするので、おそらくこれもそうだと思います。

※エスケープ文字についてはこちらのサイトで確認できました。

XML詳細仕様 エンティティ参照(エスケープ文字)
http://gogodiet.net/z/xml/3_10.htm

一応ヘルプにはOKみたいな感じの内容があったのですが・・・
f:id:tyoshikawa1106:20130902234553p:plain

ダメだったのか・・・・

解決方法

今回の問題の解決方法です。
WHERE句の条件を変数にセットして使用することで問題が起こるみたいです。なのでWHERE句に直接条件を指定することで回避することができるみたいです。
f:id:tyoshikawa1106:20130902235642p:plain

※注意

1行目の変数にセットしているところは除外する必要があります。WHERE句に直接指定するので記載があっても関係ないかと思ったのですが、あそこで"%"の指定がある時点でエラーとして扱われるみたいです。というわけで1行目は削除してしまうのが一番安全そうでした。


この対応で処理が正常に実行されます。
f:id:tyoshikawa1106:20130902235912p:plain

ちなみにこれで取得できたのは1件です。
この取得件数が正しいのか開発者コンソールで同じクエリを実行して確認してみました。

f:id:tyoshikawa1106:20130903000220p:plain

取得件数は1件・・・問題なさそうです。
こんな感じで"%"をつかったあいまい検索を条件にする際は!ENTITYの変数にセットせずに直接入力する必要があるということがわかりました。今度こそ問題は解決したと思います。


FileExporter・・すごくハマってしまいました。ここまでハマるとちょっと挫けそうです。(^_^;)


ただちゃんとした使い方をすればすごい便利なツールだと思います。


・・いろいろハマりましたが、とりあえずこれで問題は解決できたので次からは順調に作業できるはず!・・です。