狠狠撸

狠狠撸Share a Scribd company logo
Streaming API で実現する
クラウド     イントラ連携


   株式会社マッシュマトリックス
        冨田 慎一
Streaming API
? サーバでの更新がリアルタイムにクラ
  イアントに通知される仕組み

? Spring ’12 からGA
? Bayeuxプロトコル
 -   JavaScript(dojo, faye),Java,Ruby,Pythonなどのライ
     ブラリが利用可能
何に使う?
? Salesforceは、TwitterやFacebookほど更
 新が頻繁にはない

? Chatterでも10分に一度のポーリング
 で十分なレベル

? 1分1秒は争わないことに対して開発
 コストを掛けるか?
名前にだまされない


? “Streaming” はそんなに重要じゃない
? サーバ クライアント “Push” が重要
Force.comでのその他の通知
?   HTTPアウトバウンド系

    -   アウトバウンドメッセージ (ワークフロー)、
        HTTP Callout (Apex)

?   電子メール系

    -   メールアラート(ワークフロー)、Outbound
        Email (Apex)

?   APIポーリング
Streaming API
?   Firewallの影響を受けない
    (× HTTPアウトバウンド)

    ?   通信はHTTPを利用、接続はクライアントから

?   リアルタイムな通知
    (× 電子メール、APIポーリング)

?   サーバリソースの利用負荷が低い
    (× APIポーリング)
构成

          リクエスト           レスポンス
                                        リソース
                                        サーバ
                                       (Javascript,
                                       Java, Ruby,
         Streaming        Streaming   Python, etc...)
 リクエスト
クライアント
フロー
?   メッセージやり取り用のカスタムオブジェクトを作成

    -   リクエストメッセージとレスポンスメッセージを項目として持つ

?   リクエスト側のTopicとリソース側のTopicを用意

?   リクエストを送信する時はSオブジェクトに行を作成

?   リソース側にリクエストメッセージが通知

?   同リクエストのレスポンスとしてSオブジェクトの行を更新

?   リクエスト側にレスポンスメッセージが通知
Apexからの利用
? ResponseListenerインターフェースを実
 装したオブジェクトを登録

 -   リクエストメッセージとともにオブジェク
     トもシリアライズされる

? レスポンス到着時にトリガ経由でオブ
 ジェクトのメソッドが呼び戻される
コード例
public class LeadFaceCapture {

	   public static void startCapture(Id id) {
	   	   SecureConnect.ResponseListener listener = new LeadFaceCaptureResponseListener(id);
	   	   SecureConnect.request('capture', null, listener);
	   }
	
	   public class LeadFaceCaptureResponseListener implements SecureConnect.ResponseListener {
	   	   Id id;
	   	
	   	   public LeadFaceCaptureResponseListener(Id id) { this.id = id; }
	   	
	   	   public void onResponse(String responseCode, String responseData) {
	   	   	   if (responseCode == 'captureImage') {
	   	   	   	   String data = (String) JSON.deserialize(responseData, String.class);
	   	   	   	   Attachment attch = new Attachment();
	   	   	   	   attch.ParentId = this.id;
	   	   	   	   attch.Name = 'Captured Image';
	   	   	   	   attch.Body = EncodingUtil.base64decode(data.substring(23));
	   	   	   	   insert attch;
	   	   	   	   Lead lead = new Lead(Id=this.id);
	   	   	   	   lead.CaptureImageId__c = attch.Id;
	   	   	   	   update lead;
	   	   	   }	
	   	   }
	   	   public Type getClassType() { return LeadFaceCaptureResponseListener.class; }
	   }
}
Demo
利用例
? レコード更新   イントラ内のDBを検索
 しオンデマンドでアップデート(事前
 同期不要)

? モバイルから社内文書を検索?閲覧
? イントラ内DBとのマッシュアップ
Node-Salesforce

? Streaming APIにも対応した
  Node.jsでのSalesforceクライアントライ
  ブラリ

? github.com/stomita/node-salesforce
おわり

More Related Content

Streaming API で実現する クラウド ? イントラ連携

  • 1. Streaming API で実現する クラウド イントラ連携 株式会社マッシュマトリックス 冨田 慎一
  • 2. Streaming API ? サーバでの更新がリアルタイムにクラ イアントに通知される仕組み ? Spring ’12 からGA ? Bayeuxプロトコル - JavaScript(dojo, faye),Java,Ruby,Pythonなどのライ ブラリが利用可能
  • 3. 何に使う? ? Salesforceは、TwitterやFacebookほど更 新が頻繁にはない ? Chatterでも10分に一度のポーリング で十分なレベル ? 1分1秒は争わないことに対して開発 コストを掛けるか?
  • 5. Force.comでのその他の通知 ? HTTPアウトバウンド系 - アウトバウンドメッセージ (ワークフロー)、 HTTP Callout (Apex) ? 電子メール系 - メールアラート(ワークフロー)、Outbound Email (Apex) ? APIポーリング
  • 6. Streaming API ? Firewallの影響を受けない (× HTTPアウトバウンド) ? 通信はHTTPを利用、接続はクライアントから ? リアルタイムな通知 (× 電子メール、APIポーリング) ? サーバリソースの利用負荷が低い (× APIポーリング)
  • 7. 构成 リクエスト レスポンス リソース サーバ (Javascript, Java, Ruby, Streaming Streaming Python, etc...) リクエスト クライアント
  • 8. フロー ? メッセージやり取り用のカスタムオブジェクトを作成 - リクエストメッセージとレスポンスメッセージを項目として持つ ? リクエスト側のTopicとリソース側のTopicを用意 ? リクエストを送信する時はSオブジェクトに行を作成 ? リソース側にリクエストメッセージが通知 ? 同リクエストのレスポンスとしてSオブジェクトの行を更新 ? リクエスト側にレスポンスメッセージが通知
  • 9. Apexからの利用 ? ResponseListenerインターフェースを実 装したオブジェクトを登録 - リクエストメッセージとともにオブジェク トもシリアライズされる ? レスポンス到着時にトリガ経由でオブ ジェクトのメソッドが呼び戻される
  • 10. コード例 public class LeadFaceCapture { public static void startCapture(Id id) { SecureConnect.ResponseListener listener = new LeadFaceCaptureResponseListener(id); SecureConnect.request('capture', null, listener); } public class LeadFaceCaptureResponseListener implements SecureConnect.ResponseListener { Id id; public LeadFaceCaptureResponseListener(Id id) { this.id = id; } public void onResponse(String responseCode, String responseData) { if (responseCode == 'captureImage') { String data = (String) JSON.deserialize(responseData, String.class); Attachment attch = new Attachment(); attch.ParentId = this.id; attch.Name = 'Captured Image'; attch.Body = EncodingUtil.base64decode(data.substring(23)); insert attch; Lead lead = new Lead(Id=this.id); lead.CaptureImageId__c = attch.Id; update lead; } } public Type getClassType() { return LeadFaceCaptureResponseListener.class; } } }
  • 11. Demo
  • 12. 利用例 ? レコード更新 イントラ内のDBを検索 しオンデマンドでアップデート(事前 同期不要) ? モバイルから社内文書を検索?閲覧 ? イントラ内DBとのマッシュアップ
  • 13. Node-Salesforce ? Streaming APIにも対応した Node.jsでのSalesforceクライアントライ ブラリ ? github.com/stomita/node-salesforce