More Related Content
Similar to Streaming API で実現する クラウド ⇔ イントラ連携
Similar to Streaming API で実現する クラウド ⇔ イントラ連携 (20)
More from Shinichi Tomita
More from Shinichi Tomita (20)
Streaming API で実現する クラウド ⇔ イントラ連携
- 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オブジェクトの行を更新
• リクエスト側にレスポンスメッセージが通知
- 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; }
}
}
- 12. 利用例
• レコード更新 イントラ内のDBを検索
しオンデマンドでアップデート(事前
同期不要)
• モバイルから社内文書を検索・閲覧
• イントラ内DBとのマッシュアップ