tyoshikawa1106のブログ

- Force.com Developer Blog -

SFDC:JSforceとApex RESTについて

SalesforceのApexでは『@RestResource』を使うことでREST APIから処理を実行することが可能になっています。


JSforceではApex REST APIを簡単に実行できるようにサポートされているのでちょっと試してみました。
f:id:tyoshikawa1106:20150824221905p:plain


Apex RESTで実行した処理は取引先先のレコードを一件作成するシンプルな処理です。
f:id:tyoshikawa1106:20150824222051p:plain


JSforceのサイトで使い方を確認できたので、Herokuに用意したサンプルアプリから実行してみたところエラーが発生しました。
f:id:tyoshikawa1106:20150824222529p:plain


開発者コンソールで確認してみると次のエラーメッセージが・・・
f:id:tyoshikawa1106:20150824222738p:plain

XMLHttpRequest cannot load https://ap2.salesforce.com/services/apexrest/Account/. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://tyoshikwa1106-jsforce-sample.herokuapp.com' is therefore not allowed access. The response had HTTP status code 401.


以前、こんな感じのエラーが発生したときはCORSの設定ができていないことが原因でした。(リンク先ページの下の方で確認しています。)

Rails:Heroku & JSforceでSalesforceと連携してみる - tyoshikawa1106のブログ


今回はCORSの設定は行っていたのとJSforceサイトから実行したときは問題なく実行できていたので、何が原因なのかなと思っていたのですがTwitterで原因と解決方法を教えてもらいました。


Apex RESTを実行したい場合は、プロキシを通す必要があるみたいです。

Apex REST はSalesforce側でCORS設定サポートしてないので、外のドメインからアクセスする場合プロキシ通す必要あります


接続アプリケーションの設定をしてログインしていればなんでもできるのかと思っていたのですが、こういった設定も必要になるんですね。プロキシ設定はまだよくわかっていないのでまた今度勉強したいと思います。