Upload
akira-kuratani
View
1.112
Download
0
Embed Size (px)
DESCRIPTION
2012年7月27日に行われた「Developer [Social Enterprise] Summit」(通称:夏サミ)のA-2ブレイクアウトセッションの中で発表した講演資料です。
Citation preview
ソーシャル機能を取り入れた
エンタープライズアプリケーション チームスピリットのご紹介
倉谷 彰
デジタルコースト株式会社
研究開発グループ
エンジニア
デジタルコーストとは
1 2012/7/30 Copyright © DigitalCoast Inc. All Rights Reserved.
を開発・提供している会社です。
を組み込んだ、 ソーシャル・ワークフォースマネジメント・サービス
2012/7/30 Copyright © DigitalCoast Inc. All Rights Reserved. 2
勤怠管理
プロジェクト
工数管理
経費精算
タイムライン
行動を記録
デモを ご覧ください
とは
実労働時間
Project A Project B 移動
ビジネスで起こる全ての活動をタイムラインで記録
少し技術的なお話
ソーシャル・エンタープライズを実現する業務アプリの作り方
チームスピリットのアーキテクチャ
2012/7/30 Copyright © DigitalCoast Inc. All Rights Reserved. 4
認証
権限管理
Chatter
承認プロセス
レポート/ダッシュボード
勤怠管理
プロジェクト工数管理
経費精算
業務に関連する機能 汎用的な機能
例えば、Chatter
2012/7/30 Copyright © DigitalCoast Inc. All Rights Reserved. 5
Chatter投稿
コードはどうなっているか?
2012/7/30 Copyright © DigitalCoast Inc. All Rights Reserved. 6
public with sharing class TxsActivityLogic { public static void insertActivity( Map<String,Object> r, RestRequest req) { Map<String, String> p = req.params; String s = p.get('time'); DateTime tim = TxsUtil.now(); if(s != null) tim = DateTime.valueOf(s); TxsLog__c log = new TxsLog__c(TargetTime__c=tim); log.Status__c = null; ・・・(位置情報や画像をレコードにセットする) String feed = p.get('feed'); if(feed != null) { FeedItem post = new FeedItem(); post.ParentId = UserInfo.getUserId(); post.Body = feed; post.Type = 'TextPost'; insert post; log.FeedId__c = post.Id; } insert log; r.put('id', log.Id); } ・・・
Force.com
行動ログ TxsLog
クラス TxsActivity
クラス TxsActivity
Logic
REST
リソース
モバイル { “time” : ”2012/07/27”,
“feed” : “今日は○○社の・・・”, “latitude” : 35.684337, “longitude” : 139.739649 “placeId” : “WGS84”,
“placeName” : “デジタルコースト・・・” }
Chatter投稿
行動ログレコード追加
Force.com
例えば、承認プロセス
2012/7/30 Copyright © DigitalCoast Inc. All Rights Reserved. 7
承認プロセスの設定
承認申請
コードはどうなっているか?
2012/7/30 Copyright © DigitalCoast Inc. All Rights Reserved. 8
// id : 承認申請対象とするオブジェクトのID // comment : 承認申請時のコメント // approver : 承認プロセスのID ・・・ Approval.ProcessSubmitRequest req1 = new Approval.ProcessSubmitRequest(); req1.setObjectId(id); req1.setComments(comment); if(approver != null) { req1.setNextApproverIds(new Id[]{ approver }); } Approval.ProcessResult result = Approval.process(req1); ・・・
Force.com側
モバイル・アプリケーション
2012/7/30 Copyright © DigitalCoast Inc. All Rights Reserved. 9
OAuth2.0
Apex REST
Salesforce Toolkit for Appcelarator
{ “time” : ”2012/07/27”,
“feed” : “今日は○○社の・・・”, “latitude” : 35.684337, “longitude” : 139.739649 “placeId” : “WGS84”,
“placeName” : “デジタルコースト・・・” }
JSON
クラウドサービス側 モバイル側
OAuth2.0
2012/7/30 Copyright © DigitalCoast Inc. All Rights Reserved. 10
Force.com側
Apex REST:コードはどうなっているか?
RestResourceアノテーションを利用することで簡単に RESTリソースを公開できます
2012/7/30 Copyright © DigitalCoast Inc. All Rights Reserved. 11
@RestResource(urlMapping='/txsapi2/activity/*') global with sharing class TxsActivity { @HttpPost global static void doPost(RestRequest req, RestResponse res) { Map<String,Object> r = new Map<String,Object>(); try { String id = TxsUtil.getParamId(req); if(id != null) TxsActivityLogic.updateActivity(r, req, id); else TxsActivityLogic.insertActivity(r, req); r.put('success', true); } catch(Exception e) { TxsUtil.setException(r, e); } res.responseBody = Blob.valueof(JSON.serialize(r)); } @HttpGet global static void doGet(RestRequest req, RestResponse res) { Map<String,Object> r = new Map<String,Object>(); ・・・
postBtn.addEventListener(‘click’, function() { ・・・ var oauthJson = JSON.parse(oauthData); var uri = '/services/apexrest/txsapi2/activity/?'; uri += 'time=' + TSX.timeAsString(); uri += '&feed=' + (commentText.value ? commentText.value : ''); var restUrl = encodeURI( Ti.Network.decodeURIComponent(oauthJson.instance_url) + uri); var xhr = Ti.Network.createHTTPClient(); xhr.onload = function() { var res = JSON.parse(this.responseText); // Callbackでの処理 ・・・ }; xhr.open(“GET”, restUrl, true); xhr.setRequestHeader( “Authorization”, “OAuth ” + Ti.Network.decodeURIComponent(oauthJson.access_token)); xhr.setRequestHeader("Content-Type", "application/json"); xhr.send(); ・・・ };
モバイル側 Force.com側
モバイルとForce.comアプリの役割分担
2012/7/30 Copyright © DigitalCoast Inc. All Rights Reserved. 12
OAuth2.0
RESTリソース TxsExpense2
Salesforce Toolkit for Appcelarator
サーバ側にロジックを集約
複雑な勤怠計算や経路探索はサーバ側に任せた
クライアント側は画面制御に特化
短期間でプロトタイプを開発し、試作を繰り返すことができた
モバイル側 クラウドサービス側
RESTリソース TxsActivity
RESTリソース TxsWorkTimeLogic
駅探経路探索エンジン
勤怠計算エンジン
ロジック
ロジック
ロジック
外部
Web サービス
画面制御
最後に
ソーシャル化した企業はどのように変わったか?
業務アプリをソーシャル化するということ
エンジニアのちょっとしたアイデアで
お客様の業務が大きく変えることができる
2012/7/30 Copyright © DigitalCoast Inc. All Rights Reserved. 14
2012/7/30 Copyright © DigitalCoast Inc. All Rights Reserved. 15