Kitaarashi共有するFacebookTwitterEmailLinkedIn皆さん、こんにちは。Connectを取り上げてみたいと思います。Heroku間のデータを”コネクト”つまり同期するアドオンになり、Salesforce組織と連携したアプリケーションをHeroku上に構築するためには欠かせないサービスになります。リリースから2年以上が経過しており、当初から比べると機能面、性能面での向上が図られています。Connectの基本的な仕組み、提供する機能、そして実プロジェクトで利用する際の考慮点について書いていきたいと思います。Postgres上のテーブルを1:1でマッピングして、自動的に同期を行うサービスです。APIで行われ、Salesforce組織への追加設定は不要です。オブジェクトであれば同期することが可能なため、標準オブジェクト、カスタムオブジェクト、カスタム設定、カスタムメタデータが同期対象となります(全てのオブジェクトがサポートされているわけではないため、詳しくはこちらを参照)。Heroku側での簡単な設定により任意の数のオブジェクトを同期させることができます。Connectは一方向同期と双方向同期の2種類の同期をサポートしています。同期はサポートされていないことに注意して下さい。HerokuからSalesforceへ値を同期させたい場合は双方向同期を選択する必要があります。Heroku間の同期については下記の2つのモードが提供されています。Connectに通知が送られる。backされ、Postgres側に反映されるHerokuからSalesforceへの同期の仕組みは少し複雑であり、管理用のログテーブルを介してPostgres側での変更はSalesforce側に通知されます。backによりHeroku側に戻されるようになっています。_trigger_logテーブルであり、直近24時間以内に発生した書き込みが保持されます。_trigger_log_archiveテーブルに移動されます。双方向同期で障害が発生した場合は、このテーブルの中身を確認して、同期時の状況をレコード単位で詳細に調査することができます。Connectによる同期設定は非常に簡単であり、接続対象のSalesforce組織にログインした後は、画面上でマッピング対象のオブジェクトを選択するだけです。自動的に対象オブジェクトのメタデータからPostgres上の同期テーブルが作成され、すぐに初回の同期が始まります。オブジェクトの全ての項目を同期させる必要はなく、同期対象の項目は画面上で選択することができます。Mapping」をクリックして追加するオブジェクトを選択します。[マッピング項目の設定画面]上記はオブジェクトのマッピング項目と同期方法を選択する画面です。項目ごとに同期の有無をチェックボックスで選択できるだけでなく、インデックスの設定も行えます。Frequency」で同期間隔を設定します。Polling」をチェックするとポーリングモードで同期するようになります。項目設定はいつでも変更することができ、またSalesforce側でオブジェクト定義に変更があると、Postgres側のマッピング画面ではワーニングが表示されるようになります。双方向同期を設定するためには、オブジェクトに外部ID項目を追加する必要があります。Heroku側でのレコード挿入時にレコードを一意に識別するKeyとして外部IDを設定する必要があります。外部IDには36桁のUUIDを使用することが推奨されています。”ユニーク”と”外部ID”属性はチェックする必要があります。[マッピング画面における外部IDの指定]オブジェクトに外部ID項目が設定されていると、マッピング項目の設定画面で上記のように双方向同期を選べるようになります。データ型とPostgresのデータ型とのマッピングは自動的に決まります。typesの章を参照してみて下さい。Postgres側で自動生成されたマッピング先のテーブルには、必ず下記の2つの管理項目が追加されていて、同期状況やエラー時のログをレコードごとに確認できるようになっています。Connectを利用する際のいくつかの考慮点についてご紹介したいと思います。Connectからのリクエスト数はガバナ制約にカウントされないため、組織のライセンスによる制約を受けません。ストリーミングモードによる準リアルタイム同期ストリーングモードは比較的新しく導入された方式であり、変更頻度が高くなる分システムの負荷も高くなるため、頻繁に同期する必要がないオブジェクトはポーリングモードによる通常同期を選択しておいた方が無難と考えます。以前は、ストリーングモードの使用はストリーミングAPIイベント数にカウントされガバナ制約の対象になっていましたが、前述したように現在はガバナ制約を気にせずに使用することが可能です。Connectを使わずにSOAP/RESTによる直接同期を検討すべきでしょう。数式項目の同期には制約があります。レコード保存時に値が計算されるタイプの数式(自レコード内の項目に対する参照や計算式を使った数式)であれば、数式項目の値が更新されると変更値はHeroku側に同期されます。クロスオブジェクト数式(他のオブジェクトの値を参照する数式)は、参照先のオブジェクトで値が更新されても自レコードのSystemModStampが更新されないため同期は行われず、クロスオブジェクト数式以外の項目が変更されたタイミングでしかHeroku側には同期されません。積み上げ集計項目にも同様な制約があり、子レコードの値が更新されても親レコードの同期処理は走らないため、積み上げ集計項目もそのタイミングでは同期されません。バイナリデータは対象外ファイルが格納されるバイナリデータ型の項目は同期対象外となります。API経由で取得する必要があります。APIを使ってレコードの取得が行われます。Heroku間のデータ同期はかなりチューニングされていて高速であり、同期にかかる処理時間が問題なるケースは少ないのではないかと考えます。Connectとして保証する数値ではありません)。同期は並列で実施されるため、複数のオブジェクトに同時に更新がかかっても、並行して同期が行われます。双方同期の制約として、短時間に連続更新が起こると一時的にデータの先祖返りが起こってしまうというものがあります。back処理(SF側で採番・更新した値がHeroku側に連携される)が行われるのですが、この時に更新した値そのものも戻ってきます。backの間に同じ項目に対して連続して更新が入ると、下記のように一時的にデータが先祖返りしてしまう状況が発生します。back処理が終われば正しい値になるため、必ずしもこの挙動が大きな問題に繋がるわけではありませんが、私が参画したプロジェクトでは、更新項目がカウンター値であったためカウンター値の計算が途中で正しくなくなるという障害が起こりました。backが完了するまで更新をブロックする等)、短時間に連続して更新が発生する場合は利用を避けるといった対応が必要となります。issues数値型の桁数Salesforceの数値型は整数部と小数部込みで最大18桁まで保持できることになっています。Precision型は15桁までの整数および小数しか保持できないため、厳密にはSalesforceの数値型と互換が取れていません。数値型の項目に16桁以上の数値(1京以上)が格納されるケースはそうそうないため、この制約が問題になることはほとんどないでしょうが、仕様としては理解しておくと良いです。タイムスタンプ項目とUTCご存じのように、Salesforceの日付/時刻型に格納される時刻はUTC(世界協定時刻)であり、JST(日本時刻)から-9時間されています。Connectで同期されたPostgresのタイムスタンプ型にもUTC時間がセットされますので、Heroku側のアプリもUTC時間を取り扱う必要があり、入出力においてJSTとの変換が必要になります。PaaSプラットフォーム単体として優れた環境であり、最小限の手間でサーバープラットフォームの構築と維持ができ、開発生産性も高いです。Salesforceの傘下にあることもあり、Salesforceと連携したカスタムアプリケーション構築のプラットフォームとして検討されることも多いです。設定のみで2つのプラットフォーム間のデータを同期できるため、少ない工数でSalesforceを拡張するシームレスなアプリケーションを構築できるようになります。1方向同期のみの場合と比べると双方向同期が必要な場合は設計時の考慮点は多くなります。Connectを使うのかSOAP/RESTによる直接更新を行うかをよく検討する必要があるでしょう。Connectはリリースから2年を超えエンタープライズな環境での事例も出てきており、十分に実用的なサービスに育ってきていると思います。Connectの採用を検討しているエンジニアの一助になれば幸いです。著者についてアピリオのシニアコンサルとしてクラウドの世界に身を投じてはや5年あまり。プロジェクトでの立場に応じて、アーキテクト、リーダー、デベロッパーと様々なロールの仕事に携わっています。新しいサービスと技術が登場するSalesforceの世界はエンジニアとして常に刺激を持ち続けられるエリアであり、2019年からはMuleSoftソリューションの起ち上げに関わっています。アドオンのBlazeMeterをご紹介したいと思います。クラウドの世界においても構築したWebアプリケーションに対する負荷テストは従来と同様に重要なものです。入門編ブログをシリーズに渡ってお届けします。開発の基本から簡単な応用テクニックまでを網羅します。Platform」についてご紹介します。主導のシステム連携をサポートするための幅広い機能が単一のプラットフォーム上で提供されています。デプロイ作業について説明します。実装について説明しました。デプロイ作業について説明します。変換例を紹介しようと思います。変数や関数の利用、典型的な変換パターンを例を交えて説明します。使ったブラウザ環境でのMuleアプリケーションの開発についてご紹介します。Muleアプリケーションを作成することに比べて、とても手軽にアプリケーションを開発できます。して提供されている単体テスト用のフレームワークです。同じようにテストスイートを実行することで単体テストを自動実行できます。開発におけるテストについて考えていきます。つのレベルの検証を実施すべきと考えます。実装したらすぐに運用開始できるというものではありません。ポリシー設定についてご紹介します。API管理は標準のポリシーの組み合わせで幅広い要件をカバーできますが、場合によっては既存機能の拡張や新機能の定義が必要になります。今回は、「カスタムポリシー」の開発手順についてご紹介します。リソースのバージョン」)を管理する必要があります。バージョン管理についてご紹介します。アプリケーションの実装方法について紹介しようと思います。アプリケーションの実装方法を引き続きご紹介します。ついて、その特長と使い方をご紹介します。ComponentsがSrping'19から提供されることになりました。Componentsが登場してきた背景とその特長について説明します。Componentsの基本的な構成(メタデータ、html、JavaScript)や実装のルールについて説明します。JavaScriptコードなどはAuraコンポーネント時代からかなり変更された要素ではありますが、より簡潔にコードが書けるように進化しているという印象を受けました。今回は簡単なサンプル・コンポーネントを通して、LWCの基本的な実装方法とSalesforceサーバーからのデータの取得方法を見ていくことにします。Serviceというノンコーディングでサーバーからデータを取得できる便利な方法が導入されており、いくつかの方法でサーバーデータを取得できます。本稿ではその特長と使い分けについて解説してみます。CLIを使って行います。今回はこのCLI(コマンドライン・インターフェース)にスポットを当ててみたいと思います。CLIは従来はAPIでのみ提供されていたSalesforceサーバーに対する様々な機能をコマンド形式で実行できる環境であり、Winter’18で正式にリリースされました。第5回目の今回は応用編ということで、本格的なLWCの実装時に必要となるテクニックをいくつか紹介します。各種資料ENGLISHこのハブをシェアするFacebookTwitterEmailLinkedIn。