夏サミ2012...
DESCRIPTION
2012年7月27日に行われた「Developer [Social Enterprise] Summit」(通称:夏サミ)のA-2ブレイクアウトセッションの中で発表した講演資料です。TRANSCRIPT
![Page 1: 夏サミ2012 [A-2]ソーシャルプラットフォームを使った業務アプリ開発の現場(ソーシャル機能を取り入れたエンタープライズアプリケーション)](https://reader034.vdocuments.mx/reader034/viewer/2022051400/557ad45ad8b42a2c0f8b5374/html5/thumbnails/1.jpg)
ソーシャル機能を取り入れた
エンタープライズアプリケーション チームスピリットのご紹介
倉谷 彰
デジタルコースト株式会社
研究開発グループ
エンジニア
![Page 2: 夏サミ2012 [A-2]ソーシャルプラットフォームを使った業務アプリ開発の現場(ソーシャル機能を取り入れたエンタープライズアプリケーション)](https://reader034.vdocuments.mx/reader034/viewer/2022051400/557ad45ad8b42a2c0f8b5374/html5/thumbnails/2.jpg)
デジタルコーストとは
1 2012/7/30 Copyright © DigitalCoast Inc. All Rights Reserved.
を開発・提供している会社です。
を組み込んだ、 ソーシャル・ワークフォースマネジメント・サービス
![Page 3: 夏サミ2012 [A-2]ソーシャルプラットフォームを使った業務アプリ開発の現場(ソーシャル機能を取り入れたエンタープライズアプリケーション)](https://reader034.vdocuments.mx/reader034/viewer/2022051400/557ad45ad8b42a2c0f8b5374/html5/thumbnails/3.jpg)
2012/7/30 Copyright © DigitalCoast Inc. All Rights Reserved. 2
勤怠管理
プロジェクト
工数管理
経費精算
タイムライン
行動を記録
デモを ご覧ください
とは
実労働時間
Project A Project B 移動
ビジネスで起こる全ての活動をタイムラインで記録
![Page 4: 夏サミ2012 [A-2]ソーシャルプラットフォームを使った業務アプリ開発の現場(ソーシャル機能を取り入れたエンタープライズアプリケーション)](https://reader034.vdocuments.mx/reader034/viewer/2022051400/557ad45ad8b42a2c0f8b5374/html5/thumbnails/4.jpg)
少し技術的なお話
ソーシャル・エンタープライズを実現する業務アプリの作り方
![Page 5: 夏サミ2012 [A-2]ソーシャルプラットフォームを使った業務アプリ開発の現場(ソーシャル機能を取り入れたエンタープライズアプリケーション)](https://reader034.vdocuments.mx/reader034/viewer/2022051400/557ad45ad8b42a2c0f8b5374/html5/thumbnails/5.jpg)
チームスピリットのアーキテクチャ
2012/7/30 Copyright © DigitalCoast Inc. All Rights Reserved. 4
認証
権限管理
Chatter
承認プロセス
レポート/ダッシュボード
勤怠管理
プロジェクト工数管理
経費精算
業務に関連する機能 汎用的な機能
![Page 6: 夏サミ2012 [A-2]ソーシャルプラットフォームを使った業務アプリ開発の現場(ソーシャル機能を取り入れたエンタープライズアプリケーション)](https://reader034.vdocuments.mx/reader034/viewer/2022051400/557ad45ad8b42a2c0f8b5374/html5/thumbnails/6.jpg)
例えば、Chatter
2012/7/30 Copyright © DigitalCoast Inc. All Rights Reserved. 5
Chatter投稿
![Page 7: 夏サミ2012 [A-2]ソーシャルプラットフォームを使った業務アプリ開発の現場(ソーシャル機能を取り入れたエンタープライズアプリケーション)](https://reader034.vdocuments.mx/reader034/viewer/2022051400/557ad45ad8b42a2c0f8b5374/html5/thumbnails/7.jpg)
コードはどうなっているか?
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
![Page 8: 夏サミ2012 [A-2]ソーシャルプラットフォームを使った業務アプリ開発の現場(ソーシャル機能を取り入れたエンタープライズアプリケーション)](https://reader034.vdocuments.mx/reader034/viewer/2022051400/557ad45ad8b42a2c0f8b5374/html5/thumbnails/8.jpg)
例えば、承認プロセス
2012/7/30 Copyright © DigitalCoast Inc. All Rights Reserved. 7
承認プロセスの設定
承認申請
![Page 9: 夏サミ2012 [A-2]ソーシャルプラットフォームを使った業務アプリ開発の現場(ソーシャル機能を取り入れたエンタープライズアプリケーション)](https://reader034.vdocuments.mx/reader034/viewer/2022051400/557ad45ad8b42a2c0f8b5374/html5/thumbnails/9.jpg)
コードはどうなっているか?
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側
![Page 10: 夏サミ2012 [A-2]ソーシャルプラットフォームを使った業務アプリ開発の現場(ソーシャル機能を取り入れたエンタープライズアプリケーション)](https://reader034.vdocuments.mx/reader034/viewer/2022051400/557ad45ad8b42a2c0f8b5374/html5/thumbnails/10.jpg)
モバイル・アプリケーション
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
クラウドサービス側 モバイル側
![Page 11: 夏サミ2012 [A-2]ソーシャルプラットフォームを使った業務アプリ開発の現場(ソーシャル機能を取り入れたエンタープライズアプリケーション)](https://reader034.vdocuments.mx/reader034/viewer/2022051400/557ad45ad8b42a2c0f8b5374/html5/thumbnails/11.jpg)
OAuth2.0
2012/7/30 Copyright © DigitalCoast Inc. All Rights Reserved. 10
Force.com側
![Page 12: 夏サミ2012 [A-2]ソーシャルプラットフォームを使った業務アプリ開発の現場(ソーシャル機能を取り入れたエンタープライズアプリケーション)](https://reader034.vdocuments.mx/reader034/viewer/2022051400/557ad45ad8b42a2c0f8b5374/html5/thumbnails/12.jpg)
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側
![Page 13: 夏サミ2012 [A-2]ソーシャルプラットフォームを使った業務アプリ開発の現場(ソーシャル機能を取り入れたエンタープライズアプリケーション)](https://reader034.vdocuments.mx/reader034/viewer/2022051400/557ad45ad8b42a2c0f8b5374/html5/thumbnails/13.jpg)
モバイルと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 サービス
画面制御
![Page 14: 夏サミ2012 [A-2]ソーシャルプラットフォームを使った業務アプリ開発の現場(ソーシャル機能を取り入れたエンタープライズアプリケーション)](https://reader034.vdocuments.mx/reader034/viewer/2022051400/557ad45ad8b42a2c0f8b5374/html5/thumbnails/14.jpg)
最後に
ソーシャル化した企業はどのように変わったか?
![Page 15: 夏サミ2012 [A-2]ソーシャルプラットフォームを使った業務アプリ開発の現場(ソーシャル機能を取り入れたエンタープライズアプリケーション)](https://reader034.vdocuments.mx/reader034/viewer/2022051400/557ad45ad8b42a2c0f8b5374/html5/thumbnails/15.jpg)
業務アプリをソーシャル化するということ
エンジニアのちょっとしたアイデアで
お客様の業務が大きく変えることができる
2012/7/30 Copyright © DigitalCoast Inc. All Rights Reserved. 14
![Page 16: 夏サミ2012 [A-2]ソーシャルプラットフォームを使った業務アプリ開発の現場(ソーシャル機能を取り入れたエンタープライズアプリケーション)](https://reader034.vdocuments.mx/reader034/viewer/2022051400/557ad45ad8b42a2c0f8b5374/html5/thumbnails/16.jpg)
2012/7/30 Copyright © DigitalCoast Inc. All Rights Reserved. 15