Skip to main content

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 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 サービスの実行に習熟していない場合は、ニーズと経験に一致するプログラミング言語とフレームワークを選択してください。

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 サービスで大きなデータセットを公開する場合に欠かせないものです。

Salesforce ヘルプで Trailhead のフィードバックを共有してください。

Trailhead についての感想をお聞かせください。[Salesforce ヘルプ] サイトから新しいフィードバックフォームにいつでもアクセスできるようになりました。

詳細はこちら フィードバックの共有に進む