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