進行状況の追跡を始めよう
Trailhead のホーム
Trailhead のホーム

Salesforce Connect を使用した Salesforce と Heroku のインテグレーション

学習の目的

この単元を完了すると、次のことができるようになります。

  • Salesforce Connect アーキテクチャを理解する。
  • Salesforce Connect カスタムアダプタを作成する。
  • いつどのように Heroku で Salesforce Connect を使用するかを理解する。

Salesforce Connect と Heroku

Salesforce Connect を使用すると、外部データをデータベースにコピーすることなく Salesforce に容易にプロキシ化できます。この方法では、データを Salesforce に取り込んで、そのデータを Salesforce の他のオブジェクトに関連付けることができます。Salesforce Connect は、さまざまなデータソースと連携します。

  • Salesforce Connect を使用してあらゆる OData 2.0 データソースを Salesforce に取り込むことができます。
  • Heroku Connect は、Heroku Postgres データベースを Salesforce Connect に公開できます。
  • Heroku アプリケーションは、Salesforce Connect で使用できるエンドポイントを提供できます。

外部オブジェクトを使用して、SAP、Oracle、Workday、Heroku を通じて使用できる外部データに外部的に接続できることを示す画像

この単元では 3 番目のオプションに焦点を当てます。他のオプションについては、Salesforce Connect で Heroku Postgres データベースを使用する方法をHeroku 外部オブジェクトで確認できます。または、Trailhead モジュールSalesforce Connectに進んでください。

Heroku アプリケーションは、Web アプリケーションやモバイルアプリケーションだけでなく REST サービス用の Web エンドポイントを提供できます。Apex を使用すると Salesforce で REST サービスを簡単に使用できるため、Salesforce Connect のカスタムアダプタを記述して、REST サービスが提供するデータを簡単にプロキシ化できます。

Salesforce Connect カスタムアダプタの主な使用事例は、標準の Salesforce UI に役立つデータを外部システム (Heroku アプリケーションなど) が提供している場合です。たとえば、顧客向けの不動産アプリケーションが Heroku 上にあり、REST データを JavaScript およびモバイル UI に公開しているとします。いくつかの不動産データを Salesforce UI に取り込めむことができたら、バックオフィスのビジネスプロセスとレポートでそのデータを使用することができます。この場合、必要なことは、Heroku で実行されている REST サービスから Salesforce Connect 構造へのアダプタを記述するだけです。

従来の ETL の方法ではなく Salesforce Connect を使用する主な利点は、データが常に同期されていることです。データはコピーされるのではなく、ほぼリアルタイムで取得されるためです。

Salesforce Connect と Heroku の使用開始

Salesforce Connect カスタムアダプタの学習を開始するには、ブログ投稿 「Rendering GitHub JSON Data in Salesforce (Salesforce で GitHub JSON データを表示する)」を確認してください。Heroku での REST サービスの実行に習熟していない場合は、ニーズと経験に一致するプログラミング言語とフレームワークを選択してください。開始点がわからない場合は、まず Ionic 2 サンプルアプリケーションと REST サービスから始めることをお勧めします。1 回クリックするだけで Heroku にリリースすることができます。リリースした後、不動産データ用の次のような REST エンドポイントが作成されます: https://ionic2-realty-rest-demo.herokuapp.com/properties/

Heroku の REST エンドポイントを使用する準備ができたら、Salesforce Connect とサービスをつなぐための Apex コードを書くだけです。不動産 REST サービスの例では、簡単な Apex アダプタを使用できます。このアダプタは、次のような基本構造で DataSource.Connection クラスを拡張し、sync()、query()、および search() メソッドを実装します。

  global class RealEstateConnection extends DataSource.Connection {
      override global List<DataSource.TableResult> search(DataSource.SearchContext searchContext) { }
      override global List<DataSource.Table> sync() { }
      override global DataSource.TableResult query(DataSource.QueryContext queryContext) { }
    }
 

カスタム検索機能を使用して search() メソッドを実装したり、この検索の標準のユーティリティを使用したりできます。

override global List<DataSource.TableResult> search(DataSource.SearchContext searchContext) {
    return DataSource.SearchUtils.searchByName(searchContext, this);
  }

sync() メソッドは、外部オブジェクトのデータ構造について Salesforce に指示します。この例では、数個の列を持つ 1 つのテーブルのみを追加できます。ExternalId、DisplayUrl、および Name 項目は必須です。

override global List<DataSource.Table> sync() {
  List<DataSource.Column> columns = new List<DataSource.Column>();
  columns.add(DataSource.Column.text('ExternalId', 255));
  columns.add(DataSource.Column.url('DisplayUrl'));
  columns.add(DataSource.Column.text('Name', 128));
  columns.add(DataSource.Column.text('city', 128));
  columns.add(DataSource.Column.text('price', 128));
  List<DataSource.Table> tables = new List<DataSource.Table>();
  tables.add(DataSource.Table.get('Properties', 'Name', columns));
  return tables;
}

Salesforce のユーザが外部オブジェクトのレコードリストにアクセスすると、query() メソッドがデータを取得および解析して、sync() メソッドで定義されたデータ構造にデータを変換します。不動産 REST サービスの query() メソッドの例を次に示します。

override global DataSource.TableResult query(DataSource.QueryContext queryContext) {
   List<Map<String, Object>> properties = DataSource.QueryUtils.process(queryContext, getProperties());
   DataSource.TableResult tableResult = DataSource.TableResult.get(queryContext, properties);
   return tableResult;
 }
 public List<Map<String, Object>> getProperties() {
   Http httpProtocol = new Http();
   HttpRequest request = new HttpRequest();
   String url = 'https://ionic2-realty-rest-demo.herokuapp.com/properties/';
   request.setEndPoint(url);
   request.setMethod('GET');
   HttpResponse response = httpProtocol.send(request);
   List<Map<String, Object>> properties = new List<Map<String, Object>>();
   for (Object item : (List<Object>)JSON.deserializeUntyped(response.getBody())) {
     Map<String, Object> property = (Map<String, Object>)item;
     property.put('ExternalId', property.get('id'));
     property.put('DisplayUrl', 'https://ionic2-realty-rest-demo.herokuapp.com/');
     property.put('Name', property.get('title'));
     properties.add(property);
   }
   return properties;
 }

getProperties() メソッドは、Heroku 上の不動産 REST API への要求を実行します。query() メソッドは、データを外部オブジェクトのデータ構造に変換します。

その他の設定手順を完了したら、不動産データを Salesforce で使用できます。

Salesforce Connect はデータをプロキシ化します。そのため、ユーザがデータを要求するたびに Salesforce Connect がアダプタを使用してデータを取得します。これで、データが Heroku 上のアプリケーションから取得されていることを除き、データを Salesforce 内の他のデータと同様に表示して使用できます。

Salesforce Connect の高度な機能

Salesforce Connect カスタムアダプタを使用すると、データを Heroku から Salesforce に簡単に取り込むことができます。これはとても簡単です。また、異なるデータセット間でリレーションを定義することもできます。外部オブジェクトのリファレンスについては、DataSource.Column に関するドキュメントを確認してください。

プロのヒント: この簡単な例では匿名データを使用していますが、ほとんどの場合で、外部データストアとの何らかの認証形式を使用します。Apex ドキュメントで外部データソースの認証についての詳細を確認してください。

Salesforce Connect カスタムアダプタは、データページングを処理することもできます。これは、REST サービスで大きなデータセットを公開する場合に欠かせないものです。