SlideShare a Scribd company logo
3
Most read
4
Most read
17
Most read
2014年12月25日
株式会社FLECT
小西俊司
 Heroku Postgres上のデータをSalesforceの外部オ
ブジェクトとして参照したいらしい
 ODataの細かい仕様がどうなっているのかという点に
は全く踏み込んでいない
◦ 所詮2,3日調べた程度なので多くを期待してはいけない
 Open Data Protocol
◦ http://www.odata.org/
◦ Microsoft が主導で推進しているらしい
 httpのREST APIだけでデータの参照・更新・削除を
行うための仕様
 SQLのhttp版くらいに思っておけばOKだと思う
◦ ↑というか、まさに今この程度の理解
◦ 具体的な検索条件やソートの指定の仕方等はなんとなく試し
てみた程度でちゃんと調べてはいない
 httpだけでデータを読み書きできることにつきる
 CORS(Cross Origin Resource Sharing)との組み
合わせを考えるとこんな状況もありえるかも?
◦ 近年色々な鉄道会社が時刻表や電車の遅延情報などをAPI
で提供し始めている(気がする)
◦ しかし、それぞれの鉄道会社はAPIはRESTではあっても全部
独自形式(知らないけど多分)
◦ 各社のAPIはCORSには対応していないのでブラウザから直
接は叩けず、サーバで実行するしかない(に違いない)
◦ CORSとODataがサポートされればブラウザから直接各社の
データに統一規格でアクセスできるのサーバ不要でアプリが
作れる(公開先はもはやGitHub.ioで良いですね(^^v)
 まぁ希望なんで当分なさそうではあるけど
 V1からV4まであるらしい
◦ V4は近日正式リリース予定らしい
 どこが変わったのかは知らないけど、多分できること
が増えているのであろう
 現在広く使われているバージョンはV2
◦ かどうかは確信が無いが、とりあえずSalesforceの外部デー
タ参照でサポートされているのはV2のみ
◦ V4も近い将来サポートされるらしい
 http://www.odata.org/libraries/
 MS主導のため.NETのライブラリが一番充実している
 Javaのライブラリで有力なのは以下の二つ
◦ Apache Olingo
 V2 and V4
 サーバ/クライアント両対応
◦ odata4j
 V1 – V3
 サーバ/クライアント両対応
 odata4jはコミットログを見る限り停滞しているように
見えるので、Olingoを使うのが良さげ
 一部クラスがServlet API依存なので、Play等の非
Servletから扱うのはしんどい
◦ やりかけたけど途中であきらめました。
 ライブラリの完成度はやや怪しいかも。。。(--
◦ 2,3日の評価なんで何とも言えないけど(後述)
V4はまったく未検証
 https://github.com/shunjikonishi/odata-
producer
 Olingoで作成したOData Producer
◦ JPAのエンティティを作成することでテーブルをODataとして
公開出来る
◦ サンプルデータとして、Car, Makerという二つのテーブルと
テストデータを生成する
◦ ベーシック認証対応
 サンプルはHeroku上で公開されているので以下の
URLにアクセス
◦ BasicAuth: test/password
◦ http://flect-odata-test.herokuapp.com/odata
◦ http://flect-odata-test.herokuapp.com/odata/$metadata
◦ http://flect-odata-test.herokuapp.com/odata/Cars
◦ http://flect-odata-test.herokuapp.com/odata/Cars(1)
◦ http://flect-odata-
test.herokuapp.com/odata/Cars?$filter=Car_name%20eq%2
0%27LEGACY%27
 設定 > 開発 > External Data Sources
 設定項目
◦ サーバURL: OData ProducerのURL
(Ex. https://flect-odata-test.herokuapp.com/odata)
◦ 種別: OData 2.0
◦ 形式: AtomPub
◦ Basic認証を設定した場合以下の認証設定が必要
◦ ID種別: 指定ユーザ
◦ 認証プロトコル: パスワード認証
◦ ユーザ名とパスワード
 設定 > 開発 > 外部オブジェクト
◦ 外部データソースを指定する以外は通常のカスタムオブジェ
クトとあまり変わらない
◦ API参照名には「__x」が付加される
◦ 作成直後は外部IDと表示URLだけが項目として設定されて
おり、各フィールドは手動でカスタム項目として追加する必要
がある
 データ型等を指定できる
 大文字小文字の差異に注意($metadataでフィールド名を確認
しながら設定を行うと良い)
◦ 他の外部オブジェクトや標準/カスタムオブジェクトに対して
参照関係が設定できる
 多分、通常の参照/親子関係と同じ感覚で使用できると思う
 Car#maker_id -> Maker#maker_idの参照関係
を設定した例(デフォルトのまま)
 サブクエリ等も使えるがSOQLとして正しくてもエラー
となるケースもあるらしい
 成功するクエリの例
◦ SELECT
car_name__c,
maker__r.maker_name__c
FROM car__x
WHERE maker__r.maker_name__c = 'HONDA’
 EXTERNAL_OBJECT_UNSUPPORTED_EXCEPTION
◦ LIKE検索で発生
◦ ODataのfilterにLIKE構文はない
 QUERY_TOO_COMPLICATED
◦ 参照テーブルにLIKE構文を使用したらエラーコードが変わっ
た
◦ これもfilterの制限と思われる
原理的にODataでサポートしていない検索はできないはず
 http://flect-odata-
test.herokuapp.com/odata/Cars?$filter=inde
xof(Car_name, ‘WING’) eq 0
仕様にあるfilterのindexofとか実装されていない。
ただし、SalesforceからのOdata APIのキックでOlingo側の
未実装が問題となるケースには遭遇していない
 External Datasourceの設定画面にこんな項目がある
 多分filterのカスタム関数を自前で作ればそれが使えるんだと
思う
 この辺を参考にすれば実装できそう
 http://olingo.apache.org/doc/odata2/tutorials/Olingo_T
utorial_AdvancedRead_FilterVisitor.html
 必要に迫られれば作る(PullRequest歓迎)
 https://github.com/shunjikonishi/odata-
producer をフォーク
 環境変数DATABASE_URLに接続先のPostgreSQLの
URLを定義
◦ 現在はPostgreSQL固定になっているので、MySQL等を使う場合
はHerokuEntityManagerFactoryとpersistense.xmlの修正が
必要
 サンプルエンティティ(src/…/entities/*.java)を削除
 公開したいエンティティをentities以下に定義
 いじょ
◦ ローカルでの動作確認はrun.sh(run.bat)でできます。
◦ Herokuで動かす場合は環境変数「APP_OPTS」でBASIC認証が
設定できます。
 JPAのエンティティとして定
義する
◦ Lombokが入っているので
getter/setterは不要
 余計な修飾は一切いらな
い
◦ OneToManyとか
ManyToOneとかは
Salesforce側で解決される
ので不要
◦ 下手に付けるとOlingoがエ
ラーで落ちることがある
◦ @Columnでフィールド名を
変更しても良いけど
Salesforce側でも設定でき
るのであまり意味はない
 紆余曲折あったが、結局のところ公式ドキュメント
(http://olingo.apache.org/doc/odata2/index.htm
l)のJPAの章ほぼそのままで動いた
 ただしデフォルトでは例外発生時にStackTraceがでない
のでそこだけは手を入れた方が良い
◦ MyODataJPAServiceFactory#getCallback参照
◦ 当初OneToManyの定義が書き方によって動かなくて、原因を特
定するのにえらい苦労した
 フックポイントは多いので多分何でもできるはず
◦ ODataの仕様書をちゃんと読めばね。。。。
◦ ちょいちょいNot implementedを見かけるがそれも自力で解決で
きると思われる
 ちゃんと使おうと思ったら絶対ソースは読むべき(基本)
 とりあえずSalesforceから参照可能なODataProducerを
作るだけなら難しくはない
◦ 現状一番の問題はLIKEが使えないこと
◦ 認証がBASIC認証だけで良いかは課題
 HerokuのOAuthを使っても良いけどあんまり意味が無い気がする
◦ パフォーマンス、実用性などは実案件に即した検証が必要
 V4の今後がどうなるかは謎なので現状V2でどこまで作り
込むべきかは不明
◦ 1年以内にV4が来るならV2での実装は不要と思う
◦ しかしOlingoのV4ドキュメントは現状ほとんどない。。。(--
 OData自体はSalesforceと関係なくWatchする価値のあ
る技術

More Related Content

PDF
PostgreSQL のイケてるテクニック7選
PDF
PostgreSQLの運用・監視にまつわるエトセトラ
PDF
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
PDF
ネットワークコンフィグ分析ツール Batfish との付き合い方
PDF
レプリケーション遅延の監視について(第40回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
平成最後の1月ですし、Databricksでもやってみましょうか
PDF
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
PDF
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
PostgreSQL のイケてるテクニック7選
PostgreSQLの運用・監視にまつわるエトセトラ
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
ネットワークコンフィグ分析ツール Batfish との付き合い方
レプリケーション遅延の監視について(第40回PostgreSQLアンカンファレンス@オンライン 発表資料)
平成最後の1月ですし、Databricksでもやってみましょうか
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話

What's hot (20)

PDF
MesonでPostgreSQLをビルドしてみよう!(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
PDF
3分でわかるAzureでのService Principal
PDF
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
PDF
SolrとElasticsearchを比べてみよう
PPTX
Dockerからcontainerdへの移行
PPTX
今さら聞けない人のためのGitLabの始め方 Ubuntu編
PPTX
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
PPTX
Redisの特徴と活用方法について
PDF
CRDT in 15 minutes
PDF
爆速クエリエンジン”Presto”を使いたくなる話
PDF
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
PPTX
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
PPTX
WayOfNoTrouble.pptx
PPTX
分析指向データレイク実現の次の一手 ~Delta Lake、なにそれおいしいの?~(NTTデータ テクノロジーカンファレンス 2020 発表資料)
PDF
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
PPTX
大量のデータ処理や分析に使えるOSS Apache Spark入門 - Open Source Conference2020 Online/Fukuoka...
PPTX
Data Factory V2 新機能徹底活用入門
PDF
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
MesonでPostgreSQLをビルドしてみよう!(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
3分でわかるAzureでのService Principal
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
SolrとElasticsearchを比べてみよう
Dockerからcontainerdへの移行
今さら聞けない人のためのGitLabの始め方 Ubuntu編
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
Redisの特徴と活用方法について
CRDT in 15 minutes
爆速クエリエンジン”Presto”を使いたくなる話
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
WayOfNoTrouble.pptx
分析指向データレイク実現の次の一手 ~Delta Lake、なにそれおいしいの?~(NTTデータ テクノロジーカンファレンス 2020 発表資料)
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
大量のデータ処理や分析に使えるOSS Apache Spark入門 - Open Source Conference2020 Online/Fukuoka...
Data Factory V2 新機能徹底活用入門
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
Ad

Similar to Salesforce連携のためのOData入門 (10)

PDF
業務システムで使える可視化テクニック - Apache HTTP編 -
PDF
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
PDF
[Postgre sql9.4新機能]レプリケーション・スロットの活用
PDF
20190925_DBTS_PGStrom
PDF
[B22] PostgresPlus Advanced Server の Oracle Database 互換機能検証 by Noriyoshi Shinoda
PPTX
20150822 Application Insightsでお手軽WPアプリ監視
PDF
SWF+FlowFrameworkを使ってみた@JAWS-UG高尾山 2015.09.27
PPT
リンクトオープンデータ(LOD)の紹介と、その先にある参画・協働・復興促進
PDF
20120525 mt websocket
PPTX
できる!サーバレスアーキテクチャ
業務システムで使える可視化テクニック - Apache HTTP編 -
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
[Postgre sql9.4新機能]レプリケーション・スロットの活用
20190925_DBTS_PGStrom
[B22] PostgresPlus Advanced Server の Oracle Database 互換機能検証 by Noriyoshi Shinoda
20150822 Application Insightsでお手軽WPアプリ監視
SWF+FlowFrameworkを使ってみた@JAWS-UG高尾山 2015.09.27
リンクトオープンデータ(LOD)の紹介と、その先にある参画・協働・復興促進
20120525 mt websocket
できる!サーバレスアーキテクチャ
Ad

More from Shunji Konishi (20)

PDF
Salesforceのハッカソンに参加した話
PDF
プロキシーを使ってテストを楽にする
PDF
Javascriptのあれやこれやをまとめて説明してみる
PDF
MochaとChaiでやるJavaScriptテスト
PPTX
SendGridサンプルの紹介
PDF
セキュリティの考え方
PDF
一番簡単なWebSocketの試し方
PDF
WebSocketでリアルタイムクイズアプリを作ってみた
PDF
良質なコードを高速に書くコツ
PPTX
Heroku tips1
PDF
Playframework1でSeleniumテスト
PPTX
Heroku Dyno再起動時の振る舞い
PPTX
Dyno cycling behavior of Heroku
PPTX
Herokuで使えるRDBMS管理者ツール
PPTX
Play1 to Play2
PDF
お手軽Ajaxアプリケーションの作り方
PPTX
Herokuのログ解析ツール
PPTX
Excel2 canvas
PDF
特盛!Heroku
PPTX
文字コードのお話
Salesforceのハッカソンに参加した話
プロキシーを使ってテストを楽にする
Javascriptのあれやこれやをまとめて説明してみる
MochaとChaiでやるJavaScriptテスト
SendGridサンプルの紹介
セキュリティの考え方
一番簡単なWebSocketの試し方
WebSocketでリアルタイムクイズアプリを作ってみた
良質なコードを高速に書くコツ
Heroku tips1
Playframework1でSeleniumテスト
Heroku Dyno再起動時の振る舞い
Dyno cycling behavior of Heroku
Herokuで使えるRDBMS管理者ツール
Play1 to Play2
お手軽Ajaxアプリケーションの作り方
Herokuのログ解析ツール
Excel2 canvas
特盛!Heroku
文字コードのお話

Salesforce連携のためのOData入門