Salesforce1開発
2
Safe Harbor
Safe harbor statement under the Private Securities Litigation Reform Act of 1995:
This presentation may contain forward-looking statements that involve risks, uncertainties, and assumptions. If any such
uncertainties materialize or if any of the assumptions proves incorrect, the results of salesforce.com, inc. could differ
materially from the results expressed or implied by the forward-looking statements we make. All statements other than
statements of historical fact could be deemed forward-looking, including any projections of product or service availability,
subscriber growth, earnings, revenues, or other financial items and any statements regarding strategies or plans of
management for future operations, statements of belief, any statements concerning new, planned, or upgraded services or
technology developments and customer contracts or use of our services.
The risks and uncertainties referred to above include – but are not limited to – risks associated with developing and
delivering new functionality for our service, new products and services, our new business model, our past operating losses,
possible fluctuations in our operating results and rate of growth, interruptions or delays in our Web hosting, breach of our
security measures, the outcome of any litigation, risks associated with completed and any possible mergers and
acquisitions, the immature market in which we operate, our relatively limited operating history, our ability to expand, retain,
and motivate our employees and manage our growth, new releases of our service and successful customer deployment, our
limited history reselling non-salesforce.com products, and utilization and selling to larger enterprise customers. Further
information on potential factors that could affect the financial results of salesforce.com, inc. is included in our annual report
on Form 10-K for the most recent fiscal year and in our quarterly report on Form 10-Q for the most recent fiscal quarter.
These documents and others containing important disclosures are available on the SEC Filings section of the Investor
Information section of our Web site.
Any unreleased services or features referenced in this or other presentations, press releases or public statements are not
currently available and may not be delivered on time or at all. Customers who purchase our services should make the
purchase decisions based upon features that are currently available. Salesforce.com, inc. assumes no obligation and does
not intend to update these forward-looking statements.
3
アジェンダ
• Salesforce1 背景、概要
• 開発
1. ポイント&クリックでの開発
2. Visualforce開発
• 3種類のアプローチ
• 画面遷移
• イベント処理
3. Flexible ページ開発
• 技術情報
4
モバイルコンピューティングの台頭
Source: Strategy Analytics. “Global Smartphone Shipments Hit Record 230 Million Units in Q2 2013.” July 2013.
Source. Gartner. July 2013.
社員、顧客
企業
iOS/Androidデバイス
2億3,000万台
販売台数
2008 Q3 2009 Q2 2010 Q1 2010 Q4 2011 Q3 2012 Q2 2013 Q1
PC
7,600万台
2013 Q2
5
2017 年には業務アプリケーションの90% がモバイル化
20%
Source: Gartner, Ian Finley, Research VP; 2010
モバイルに対応する
アプリケーション
2013 2017
90%
デスクトップ、モバイルの両方に
対応するアプリケーション
6
モバイルアプリ開発と展開の困難さ
Mobile Apps
Are Critical
Mobile Apps
Deployed
60%
40%
20%
App
Gap
PercentofRespondents
2013 Study of
1,300 Global Executives
“The State of the Customer-Led Economy”
Complexity of Form Factors
Limited Number of Developers
Multiple Operating Systems
Multiple Platforms
7
以前のモバイルアプリのポートフォリオ
Salesforce Platform
Content CompensationCollaborationDashboards
Digital Sales
Aid
Customer AppLog a Call Content CompensationCollaborationDashboardsLog a Call
8
Salesforce1によるモバイルアプリのポートフォリオ
Digital Sales
Aid
Customer
App
企業のモバイルアプ
リのコストを革命的
に激減
Content CompensationCollaborationDashboardsLog a Call
9
Salesforceモバイル・アプリケーション
Digital Sales
Aid
Customer
App
企業のモバイルアプ
リのコストを革命的
に激減
Salesforce
Classic
Salesforce
Touch
Chatter Mobile
Logger と
Forcepad
10
DB
ネイティブコード
(Java, Objective C)
DBDB
モバイルからコー
ルされるWebサー
ビス
モバイルからコー
ルされるWebサー
ビス
モバイルから呼ば
れるWebアプリ
ケーションコード
ただし、このコー
ドはモバイル側に
配置することも可
能
DB
モバイルから呼ば
れるWebアプリ
ケーションコード
HTML5の
localStorageで
javascriptからア
クセスできるDB使
用可能
DB
ネイティブアプリ ハイブリッドアプリ HTML5 アプリ
モバイルアプリケーションとは
Salesforce 1
ネイティブコード
(Java, Objective C)
11
Salesforce1 アプリケーション
最近 アプリケーション アクション
12
シンプルで汎用的な画面遷移
13
Salesforce1開発特徴
 簡単な画面ならポイント&クリックで開発
 レイアウト編集は標準機能のドラッグ&ドロップ
 デバイスへコードをダウンロードする必要がないため、最小開発環境はブラウ
ザーのみ
 ネイティブ(JavaやObjectiveC)言語の開発は不必要
 Android, iOSに対してシングルソースで対応
 VisualforceとApexでの画面開発 但しレスポンシブル対応を推奨しているの
でVisualforceタグライブラリは使用せず、一般技術(CSS, Javascript,
HTML)での画面開発
 Canvasアプリケーションのインテグレーション可能なので、既存
サービス、Heroku上でのアプリケーションの統合が可能
14
Salesforce1を触ってみましょう
1
環境によっては
https://ap.salesforce.comではあ
りません。
https://<server_name>/one/one.ap
p でアクセスして下さい
2
15
S1用ユーザフェース
16
開発可能な場所
ナビゲーションメニュー
専用オブジェクトアクション
グローバルアクション
VFページタブ、Flexible ページタブ
をメニューに追加可能
ポイント&クリックで並び替え可能
ポイント&クリックでアク
ション作成可能、またVF、
Canvasを使用してアクショ
ンを作成することもできま
す
ポイント&クリックでアク
ション作成可能、またVFを
使用してアクションを作成
することもできます
ポイント&クリックで表示
内容の変更可能
ポイント&クリックで表示
内容の変更可能、VFを追加
することもできる
17
ナビゲーションメニュー
最近使用したレ
コード • Flexibleページタブ、Visualforce
タブをナビゲーションメニューに
追加可能
• 最近使用したレコード以外は並び
替え可能
• 最近使用したレコードの並び替え
はある程度可能。PC画面の検索結
果で上位に表示させたいオブジェ
クトに「最上部に固定」と設定す
る
• カスタムオブジェクトは最近使用
したレコード領域に表示される
18
ナビゲーションメニュー
1
2
3
1. 標準、カスタムオブジェクト
2. Visualforce ページ
3. Flexi ページ
VisualforceページとApexを使ってページを作成す
るため、外部へのAPI接続など様々なことが可能で
す。ただし、モバイルアプリのためパフォーマンス
には気をつけて下さい。画面遷移は専用のjsオブ
ジェクトを使用してSalesforce1の標準画面にも遷
移可能です
ビュー、最近参照したレコード
が表示されますが、レイアウト
の変更はできません。
Flexibleページは複数オブジェク
ト一覧を表示するのに優れていま
す。また、アクションを追加する
ことも簡単です。コードでの実装
ではなく、XMLでの作成となりま
す。
19
グローバルアクション
グローバルアクションは特定の
レコードを自動的に関連させる
ことはできません。アクション
には4つのタイプがあります。
アクションタイプ 実装方法 備考
Create a Record ポイント&クリック 現時点ではAccount, Campaign, Case, Contact, Contract, Event,
Custom Object, Lead, Note, Opportunity, Taskしか作成できません。
Log a Call ポイント&クリック
Visualforce Apex, VF
Canvas なんでもOK Herokuのような外部プラットフォームが必要
20
オブジェクト専用アクション
アクションタイプ 実装方法 備考
Create a Record ポイント&クリック 作成できるオブジェクトは専用アクションが設定されているオブ
ジェクトに依存します。例えば、Account 専用アクションでは
account, case, contact, contract, event, note, opp, or task のレコード
を作成できます。また Caseの場合いには, case, event, or task レ
コードを作成できます
Log a Call ポイント&クリック
Visualforce Apex, VF Visualforceページのコントローラは必ずそのオブジェ
クトのStandardControllerを使用しなければいけませ
ん
Update a Record ポイント&クリック
オブジェクト専用アクションは
特定のレコードを自動的に関連
させることはできます。アク
ションには4つのタイプがあり
ます。
21
レコード詳細
モバイルカード:
拡張ルックアップ、Visualforceページを埋め込むことができます。
Visualforceページを作成する場合は必ずStandardContollerを使用する必要があ
ります。また、拡張ルックアップの種類は選択したオブジェクトによって変わり
ます。例えばAccount’のレコード詳細での拡張ルックアップはAccount Owner,
Created By, Last Modified By, and Parent Accountです。また、Opportunitiyでは
Account Name, Created By, Last Modified By, Opportunity Owner, Primary
Campaignです。
コンパクトレイアウト:
レコード詳細ページ上部に表示される注目エリア
です。ポイント&クリックで表示項目を変更でき
ます。
22
Salesforce1対応 appexchangeアプリ
23
Salesforce1対応 appexchangeアプリ
24
ポイント&クリック
開発
25
●ナビゲーションメニュー変更
スマート検索項目要素よりも下に配
置すると、ナビゲーションメニュー
の [アプリケーション] セクション
に表示されます。
1
2
26
●グローバルアクション登録
1
デフォルトで下記アクション群が用
意されています。新規ケースアク
ションを独自に新規作成することも
可能です。
2
27
アクション種別(4種類)
28
グローバルアクション登録
1
2
29
●オブジェクト専用アクション登録
1
取引先詳細画面にこのアクションを
登録します
3
2
30
オブジェクト専用アクション登録
1
選択した取引先に紐づく商談を作成
するアクションを登録
2
商談新規画面のレイアウト編集
Salesforce1実際の画面レイアウト
31
アクションをパブリッシャアクションへ登録
1
取引先のレイアウトエディタ
Salesforce1実際のパブリッシャアク
ション
ファイルアクションはネイティブ
アプリにしか表示されません。こ
の画面はブラウザでの表示です。
32
オブジェクト専用アクション 画面遷移
33
●コンパクトレイアウト変更
1
ロングテキストエリア、リッ
チテキストエリア、複数選択
リスト以外のタイプをサポー
ト
3
2
34
●モバイルカード変更
1
拡張ルックアップを選択し、
対象項目をドラッグしてモバ
イルカード領域へドロップし
ます
3
2
35
Visualforce
Salesforce1
基礎
36
Visualforceアプローチ
1. Visualforce単独
• Visualforceタグライブラリを使用してページを作成
2. Visualforce + HTML
• pageBlock, pageBlockButtons,
pageBlockSectionItem,pageBlockTableは使用しない
• デザインにはCSSを使用
3. JavaScript remoting + Static HTML
• Salesforce1にマッチした最善なアプローチ
• JavaScriptでのデータへのCRUD操作を行うためパフォーマンス
向上
37
1. Visualforce単独
メリット
• 通常のVisualforce開発のため新しい知識必要なし
• デスクトップ、モバイル共有ページ
デメリット
• ボタン、リンクなどの部品はデスクトップ用に最適化
されているため指でのタッチが難しい
• レスポンシブルデザインに対応していないため、
Salesforce1デザインに最適化されていない
38
Visualforce作成
1
3
2
39
ソースコード
<apex:page standardController="Account">
<apex:form>
<apex:pageBlock title="{!Account.Name}">
<apex:pageBlockSection title= "Warehouse Details" columns= "1">
<apex:inputField value="{!Account.Name}" />
</apex:pageBlockSection>
<apex:pageBlockButtons location="bottom">
<apex:commandButton action="{!quickSave}" value="Save" />
</apex:pageBlockButtons>
</apex:pageBlock>
</apex:form>
</apex:page>
40
Visualforceタブ作成
1
3
2
41
Visualforceタブ作成
1
2
42
モバイルナビゲーションへ追加
1
3
2
43
Visualforce単独での実装
1
2
44
2. Visualforce + HTML
メリット
• Visualforce単独での開発と違ってSalesforce1デザイン
に近い実装が可能
• データの受け渡しは通常のVisualforce開発と同じ
デメリット
• デスクトップで行われるrequest-responseサイクルのた
め大量データのやりとりが発生される(ViewState)
• デザインを統一するためCSSの実装必修
45
Visualforce作成
1
3
2
46
ソースコード
<apex:page standardController="Account">
<style> html, body, p { font-family: sans-serif; } </style>
<apex:form >
<h1>{!Account.Name}</h1>
<h2>Account Details</h2>
<div id="theForm">
<div>
<apex:outputLabel for="Name" value="Name"/>
<apex:inputField id="name"
value="{! Account.Name}"/>
</div>
</div>
<div id="formControls">
<apex:commandButton action="{!quickSave}" value="Save"/>
</div>
</apex:form>
</apex:page>
47
Visualforceタブの作成
1
3
2
48
Visualforceタブの作成
1
2
49
ナビゲーションメニューへ追加
1
2
50
Visualforce + HTMLでの実装
1
2
51
3. JavaScript Remoting & Static HTML
メリット
• Salesforce1にマッチした最善なアプローチ
• JavaScriptでのデータへのCRUD操作を行うためパフォ
ーマンス向上
デメリット
• コード量の増大
• CSS, JavaScript, Apex, HTML5でのWebアプリケーシ
ョン開発知識が必修
52
モバイルパックインストール
1
2
http://www2.developerforce.com/en/mobile/services/mobile-packs
53
モバイルパックインストール
1
3
2
54
モバイルパックインストール
1
2
55
モバイルパックインストール
56
Apex作成
1
3
2
57
ソースコード
global with sharing class AccountEditor{
public AccountEditor(ApexPages.StandardController ctl){ }
@RemoteAction
global static Boolean saveAccount(String name) {
Account acc = new Account();
acc.Name = name;
upsert acc;
return true;
}
}
58
Visualforce作成
1
3
2
59
ソースコード
<apex:page standardController="Account" extensions="AccountEditor"
showHeader="false" standardStylesheets="false"
docType="html-5.0" applyHtmlTag="false" applyBodyTag="false">
<apex:stylesheet value="{!URLFOR($Resource.MobileSample_Resources_jQueryMobile, 'jquery.mobile-1.3.0.min.css')}"/>
<apex:includeScript value="{!URLFOR($Resource.MobileSample_Resources_jQueryMobile, 'jquery-1.9.1.min.js')}"/>
<apex:includeScript value="{!URLFOR($Resource.MobileSample_Resources_jQueryMobile, 'jquery.mobile-1.3.0.min.js')}"/>
<head>
<style>
html, body, p { font-family: sans-serif; }
input { display: block; }
</style>
<script>
function saveAccount() {
// Call the remote action to save the record data
Visualforce.remoting.Manager.invokeAction(
'{!$RemoteAction.AccountEditor.saveAccount}',
$('#account_name_value').val(),
function(result, event){;
if(event.status){
console.log(accountId);
$('#action_status').text('Record updated.');
} else if (event.type === 'exception'){
console.log(result);
$('#action_status').text(
'Problem saving record.');
} else {
// unexpected problem...
}
});
}
</script>
</head>
<body>
<div id="detailPage">
<div class="list-view-header" id="account_name"></div>
<div id="action_status"></div>
<section>
<div class="content">
<h3>取引先</h3>
<div class="form-control-group">
<div class="form-control form-control-text">
<label for="account_name">
Name</label>
<input type="text" id="account_name_value" />
</div>
</div>
</div>
</section>
<section class="data-capture-buttons one-buttons">
<div class="content">
<section class="data-capture-buttons one-buttons">
<a href="#" id="updateAccount"
onClick="saveAccount();">save</a>
</section>
</div>
</section>
</div> <!-- end detail page -->
</body>
</apex:page>
60
Visualforceタブ作成
1
3
2
61
Visualforceタブの作成
1
2
62
ナビゲーションメニューに追加
1
3
2
63
JavaScript Remoting & Static HTMLでの実装
1
2
64
Visualforce
画面遷移
65
sforce.one JavaScript object
• Salesforce1用ナビゲーションフレームワーク
• Salesforce1で動作しているVisualforceページには自動
的にsforce.oneオブジェクトが追加されるため、特定の
JavaScriptライブラリをインクルードする必要なし
66
提供されている画面遷移メソッド
メソッド コメント
navigateToSObject(recordId, view) recordIdの詳細ページへ遷移、viewはオプショ
ンでchatter, related, detailを選択できる。
ViewパラメータはSummer '14で実装予定
navigateToURL(url) urlは絶対パス、相対パスをサポート。絶対パス
が選択された場合のみ、子供ウィンドウで表示
navigateToFeed(subjectId, type) 特定のFeedへ遷移、typeはNEWS,RECORD
他は???
navigateToFeedItemDetail(feedItemId) 特定のFeedItemへ遷移
navigateToRelatedList(relatedListId,
parentRecordId)
relatedListIdで指定した関連リストに遷移、
parentId
navigateToList(listViewId, listViewName,
scope)
listViewIdとlistViewNameで指定されたList
viewへ遷移
createRecord(entityName, recordTypeId) entityNameで指定された新規レコード作成画面
へ遷移、recordTypeIdは任意
editRecord(recordId) recordIdで指定された編集画面へ遷移
67
navigateToSObject(recordId, view)
recordIdで指定したレコードの詳細ページへ遷移。viewパラメータは
chatter, related, detailが選択できるが現時点では未実装。Summer
'14で実装予定
これがrecrodId
68
navigateToURL(url)
urlは絶対パス、あるいは相対パスをサポート。絶対パスが選択された
場合のみ、子供ウィンドウで表示
urlパラメータに
'/0011000000k8T1j'としてメソッ
ドコールをすると右図の詳細ペー
ジへ遷移する
69
navigateToFeed(subjectId, type)
特定のFeedへ遷移、typeはNEWS、RECORDは確認済み。subjectIdにユー
ザレコードID、typeにNEWSを設定すると特定のユーザNewFeed画面に遷
移する。他のTypeの値は調査中。
subjectIdに'0011000000k8T1j'と
type='RECORD'を指定
70
navigateToFeedItemDetail(feedItemId)
特定のFeedItemへ遷移。
feedItemId
71
navigateToRelatedList(relatedListId,
parentRecordId)
特定レコードの関連リストに遷移
relatedListIdに
'RelatedCaseList'、
parentRecordIdに
'0011000000k8T1j'
72
navigateToList(listViewId, listViewName,
scope)
listViewIdとlistViewNameで指定されたList viewへ遷移
listViewIdに '00B10000003hT4l'
listViewNameに 'You can set title here'
scopeに 'Account'
73
createRecord(entityName, recordTypeId)
entityNameで指定された新規レコード作成画面へ遷移、recordTypeId
は任意
entityNameに 'Account' に設定してメソッドを実行す
るとAccountの新規作成ページに遷移
74
editRecord(recordId)
recordIdで指定された編集画面へ遷移
recordIdに '0011000000k8T1j'を設定
75
Test them
取引先レコードIDを入力
Feed Item IDを入力
ListView IDを入力
次のスライドにあるVisualforcePageをコピー
し、自分の組織で新規VisualforcePageを作成、
VisualforceTab作成、Salesforce1にタブ追加
すると
https://ap.salesforce.com/one/one.appから
動作確認ができます。
76
Visualforceページ
<apex:page standardController="Account" extensions="AccountEditor"
showHeader="false" standardStylesheets="false"
docType="html-5.0" applyHtmlTag="false" applyBodyTag="false">
<head>
<script>
function createRecord() {
sforce.one.createRecord("Account");
}
function navigateToSObject() {
// http://salesforce.stackexchange.com/questions/22246/salesforce1-javascript-method-navigatetosobjectrecordid-view-not-changing-tab
// view parameter is not supported yet
sforce.one.navigateToSObject(getAccount(), 'related');
}
function navigateToAbsoluteURL() {
sforce.one.navigateToURL('http://www.google.com');
}
function navigateToRelativeURL() {
sforce.one.navigateToURL('/'+getAccount());
}
function navigateToFeed() {
sforce.one.navigateToFeed(getAccount(), 'RECORD');
//sforce.one.navigateToFeed('005100000021nht', 'NEWS');
}
function navigateToFeedItemDetail() {
var feed_item_id = getFeedItemId();
sforce.one.navigateToFeedItemDetail(feed_item_id);
}
function navigateToRelatedList() {
sforce.one.navigateToRelatedList('RelatedCaseList', getAccount());
}
function navigateToList() {
sforce.one.navigateToList(getListViewId(), 'You can set title here', 'Account');
}
function editRecord() {
sforce.one.editRecord(getAccount());
}
functionback() {
sforce.one.back(true);
}
function getAccount() {
return document.getElementById('account_id').value
}
function getFeedItemId() {
return document.getElementById('feed_item_id').value
}
function getListViewId() {
return document.getElementById('list_view_id').value
}
</script>
</head>
<body>
<p>
1. You do not need to enter any value<br/>
<a href="#" onClick="navigateToAbsoluteURL();">navigateToURL(absolute url)</a><br/>
<a href="#" onClick="createRecord();">createRecord(recordId, view)</a><br/>
</p>
<hr/>
<p>
2. Enter Account Record ID : <input type="text" id="account_id" /> <br/>
<a href="#" onClick="navigateToSObject();">navigateToSObject(recordId, view)</a><br/>
<a href="#" onClick="navigateToRelativeURL();">navigateToURL(relative url)</a><br/>
<a href="#" onClick="navigateToRelatedList();">navigateToRelatedList(relatedListId, parentRecordId)</a><br/>
<a href="#" onClick="editRecord();">editRecord(recordId)</a><br/>
<a href="#" onClick="navigateToFeed();">navigateToFeed(subjectId, type)</a><br/>
</p>
<hr/>
<p>
3. Enter Feed Item ID : <input type="text" id="feed_item_id" /> <br/>
<a href="#" onClick="navigateToFeedItemDetail();">navigateToFeedItemDetail(feedItemId)</a><br/>
</p>
<hr/>
<p>
4. Enter ListView ID of Account : <input type="text" id="list_view_id" /> <br/>
<a href="#" onClick="navigateToList();">navigateToList(listViewId, listViewName, scope)</a><br/>
</p>
</body>
</apex:page>
上記Visualforceを自分の組織へコピーして
77
Visualforce
イベント処理
78
Canvas イベント publisher.setupPanel
publisher.showPanel
publisher.clearPanelState
Cancel / Close
publisher.post
79
Subscribe
Sfdc.canvas.publisher.subscribe(
{ name : "publisher.post", onData:function(e) {} }
);
Sfdc.canvas.publisher.subscribe(
{ name : "publisher.setupPanel", onData:function(e) { }}
);
Sfdc.canvas.publisher.subscribe(
{ name : "publisher.showPanel", onData:function(e) {}}
);
Sfdc.canvas.publisher.subscribe(
{ name : "publisher.clearPanelState", onData:function(e) {}}
);
80
Publish
Sfdc.canvas.publisher.publish({ name : "publisher.setValidForSubmit", payload:"true"});
Sfdc.canvas.publisher.publish({ name : "publisher.setValidForSubmit", payload:"false"});
Sfdc.canvas.publisher.publish({ name : "publisher.close", payload : { refresh:"true" }});
Sfdc.canvas.publisher.publish({ name : "publisher.refresh", payload : { feed:true }});
81
オブジェクト専用アクションでテストしてみよう
82
テスト用サンプルVisualforce
• <apex:page docType="html-5.0" showHeader="false" sidebar="false" standardController="Account" standardStylesheets="false">
• <meta charset="UTF-8" />
• <apex:includeScript value="/canvas/sdk/js/publisher.js" />
• <script>
• function setValidForSubmitTrue() {
• Sfdc.canvas.publisher.publish({ name : "publisher.setValidForSubmit", payload:"true" });
• }
•
• function setValidForSubmitFalse() {
• Sfdc.canvas.publisher.publish({ name : "publisher.setValidForSubmit", payload:"false" });
• }
•
• function publisher_close() {
• Sfdc.canvas.publisher.publish({ name : "publisher.close", payload : { refresh:"true" }});
• }
•
• function publisher_refresh() {
• Sfdc.canvas.publisher.publish({ name : "publisher.refresh", payload : { feed:true }});
• }
•
• Sfdc.canvas.publisher.subscribe(
• { name : "publisher.post", onData:function(e) { alert('Post Event'); } }
• );
• Sfdc.canvas.publisher.subscribe(
• { name : "publisher.setupPanel", onData:function(e) { alert('SetupPanel Event'); }}
• );
•
• Sfdc.canvas.publisher.subscribe(
• { name : "publisher.showPanel", onData:function(e) { alert('ShowPanel Event'); }}
• );
• Sfdc.canvas.publisher.subscribe(
• { name : "publisher.clearPanelState", onData:function(e) { alert('ClearPanelState Event'); }}
• );
•
• </script>
•
• <a href="#" onClick="setValidForSubmitTrue()">setValidForSubmit payload: true</a><br/>
• <a href="#" onClick="setValidForSubmitFalse()">setValidForSubmit payload: false</a><br/>
• <a href="#" onClick="publisher_close()">publisher.close</a><br/>
• <a href="#" onClick="publisher_refresh()">publisher.refresh</a><br/>
• </apex:page>
83
Flexible Page
開発
84
Flexible Pageとは
• Flexible Pageとは、ページレイアウトとVisualforceペ
ージの中間的なページです。ページレイアウトのよう
にカスタムアイテムを追加することが可能となってい
ますが、Flexible Pageはページレイアウトとは違う構
造となっています。
• Flexible Pageでアプリケーションのホームページを作
成、Salesforce1のナビゲーションに追加できます。
• グローバルアクションをFlexible Pageに割り当てが可
能。Flexible Page上にある+ボタンを選択するとあな
たが割り当てたグローバルアクションが表示されます
85
どんなデータが表示可能?
カスタムオブジェクトの最
近使用したデータを表示
リストビューを表示、但
しサポートされていない
オブジェクトあり
グローバルアクションの追加
86
Flexible Page開発ステップ
1. 開発する前に
• どのリストビューを表示させるか?
• 何の「最近使ったデータ」を表示させるか?
• どのグローバルアクションを追加するのか?(任意)
2. XmlベースのFlexible Pageの作成
グローバルアクションを追加する場合にはXMLに記述する必要があ
ります。記述していないとFlexible Pageにはパブリッシャアクシ
ョンアイコン(+)が表示されません。
3. Force.com Migration Tool、Force.com IDE、Workbenchのいずれ
かのツールを使用してファイルを自分の組織へデプロイする
4. Flexible Pageカスタムタブの作成
5. Salesforce1のナビゲーションタブへFlexible Pageを追加する
87
Flexible Pageファイルについて
カスタムオブジェクトの最
近使用したデータを表示
リストビューを表示
Region名は必ずmainとする
パブリッシャアクションアイ
コンの追加
88
Flexible Pageファイルについて
• flexiPageRegionsエレメントは1つだけ
• ComponentInstanceは2種類
• filterListCard: リストビューを表示、但しそのビューから最初の
数レコードしか表示しない、またサポートしているのは、
Custom Objects, Account, Campaign, Case,
CollablrationGroup, Contact, Contract, Lead, LiveChatTransript,
Opportunityのみ
• recentItems: propertyで指定したカスタムオブジェクトの最近
しようしたデータを表示
詳細はこちらで確認ください
89
1. Flexible Page作成 Package.xml
FlexiblePage__cと
FlexiblePage2__cというカ
スタムオブジェクトを組織
に作成する必要があります
90
2. package.xml作成 Package.xml
91
3. Salesforceへ配置 Zipファイル作成
1
2
92
3. Salesforceへ配置
1
2
3
4
成功を確認する
93
4. Flexibleタブ作成
1
2
3
94
4. Flexibleタブ作成
1
2 3
作成されていることを確認する
95
5. 確認作業
96
サンプルコード
FlexiblePage__cとFlexiblePage2__cというカスタ
ムオブジェクトを組織に作成する必要があります
97
技術情報
98
情報
• Salesforce1 App スタイルガイドライン
• Salesforce1 App開発ガイド
• Salesforce1 Cheetsheet
• ISV向けSalesforce1 Webinar by Nakajima Kazuki
• Using Visualforce in Salesforce1

More Related Content

PDF
Salesforce1モバイルアプリケーション開発概要
PDF
Salesforce1モバイルアプリ開発入門Webinar
PDF
Salesforce1 Platformモバイル開発Tips Webinar
PDF
Salesforce1 で始めるモバイルアプリ開発
PDF
Jp visualforce in salesforce1
PDF
Salesforce1 Platform 入門 2014 〜改めて基本から理解するforce.com〜
PDF
食わず嫌いの為のSalesforce1 Platform入門
PDF
Salesforce1入門
Salesforce1モバイルアプリケーション開発概要
Salesforce1モバイルアプリ開発入門Webinar
Salesforce1 Platformモバイル開発Tips Webinar
Salesforce1 で始めるモバイルアプリ開発
Jp visualforce in salesforce1
Salesforce1 Platform 入門 2014 〜改めて基本から理解するforce.com〜
食わず嫌いの為のSalesforce1 Platform入門
Salesforce1入門

What's hot (20)

PDF
超初心者向けForce.com入門
PDF
Visualforceを使ってみよう
PDF
Salesforce1 PlatformアーキテクチャWebinar
PDF
Salesforce1 platformで爆速モバイル開発
PDF
Spring16 リリース開発者向け新機能Webセミナー
PDF
Go Faster with Lightning : Salesforce Lightning 概要Webinar
PDF
App Cloud モバイルアプリ開発戦略
PDF
Developer Keynote
PDF
Force.com開発基礎
PDF
はじめようLightningコンポーネント
PDF
Salesforce Platform Mobile Serviceを使ったアプリ開発
PDF
絶賛活躍中のモバイルアプリに学ぶモバイルならではのアイデア
PDF
Force.comとモバイルでイベント管理実例
PDF
Salesforce.comの情報セキュリティについて
PDF
THE REINVENTION OF APPS
PDF
PHP開発者のためのHeroku入門
PDF
Connected Products
PDF
2021Apr tableau_crm説明資料
PDF
Lightning App Builder による ビジュアルアプリケーション開発
PDF
Python開発者のためのHeroku入門
超初心者向けForce.com入門
Visualforceを使ってみよう
Salesforce1 PlatformアーキテクチャWebinar
Salesforce1 platformで爆速モバイル開発
Spring16 リリース開発者向け新機能Webセミナー
Go Faster with Lightning : Salesforce Lightning 概要Webinar
App Cloud モバイルアプリ開発戦略
Developer Keynote
Force.com開発基礎
はじめようLightningコンポーネント
Salesforce Platform Mobile Serviceを使ったアプリ開発
絶賛活躍中のモバイルアプリに学ぶモバイルならではのアイデア
Force.comとモバイルでイベント管理実例
Salesforce.comの情報セキュリティについて
THE REINVENTION OF APPS
PHP開発者のためのHeroku入門
Connected Products
2021Apr tableau_crm説明資料
Lightning App Builder による ビジュアルアプリケーション開発
Python開発者のためのHeroku入門
Ad

Similar to Salesforce1開発(s1 tour) (19)

PDF
Spring '15 開発者向け新機能Webinar
PDF
コンポーネントを”つなぐ”時代へ Web&Mobileアプリ開発最新動向
PDF
Salesforce開発プロジェクトの進め方とアプリケーションライフサイクルマネジメント
PDF
Lightning Process Builder で ビジネス・プロセスを自動化
PDF
さあ、はじめよう。Application Partner
PDF
Lightningコンポーネントの概要
PDF
実践!カスタマー エクスペリエンス 向上のためのアプリ開発 後編
PDF
Lightning Components で 次世代のアプリケーション開発
PDF
Lightning Experience 時代のフロー開発
PDF
実践!カスタマー エクスペリエンス向上のためのアプリ開発 前編
PDF
Salesforce DX & GitHub Deep Dive
PDF
Lightning アプリケーション開発 - Visualforce ページの移行
PDF
ビジネスアイデアを最速で形にできるApp exchange
PDF
Lightning を利用した開発とケーススタディ
PPTX
初めてのWave Analyticsデータセット作成
PDF
やれる Heroku - Java アプリケーション開発編
PDF
Salesforce 開発入門
PDF
Lightning コンポーネント Deep Dive
PDF
Einstein Next Best Action を試してみよう
Spring '15 開発者向け新機能Webinar
コンポーネントを”つなぐ”時代へ Web&Mobileアプリ開発最新動向
Salesforce開発プロジェクトの進め方とアプリケーションライフサイクルマネジメント
Lightning Process Builder で ビジネス・プロセスを自動化
さあ、はじめよう。Application Partner
Lightningコンポーネントの概要
実践!カスタマー エクスペリエンス 向上のためのアプリ開発 後編
Lightning Components で 次世代のアプリケーション開発
Lightning Experience 時代のフロー開発
実践!カスタマー エクスペリエンス向上のためのアプリ開発 前編
Salesforce DX & GitHub Deep Dive
Lightning アプリケーション開発 - Visualforce ページの移行
ビジネスアイデアを最速で形にできるApp exchange
Lightning を利用した開発とケーススタディ
初めてのWave Analyticsデータセット作成
やれる Heroku - Java アプリケーション開発編
Salesforce 開発入門
Lightning コンポーネント Deep Dive
Einstein Next Best Action を試してみよう
Ad

More from Akihiro Iwaya (20)

PPTX
Wt13 processing records
PPTX
Wt12 triggering flows
PPTX
Wt11 writing dataweave transformations
PPTX
Wt9 multicast an event
PPTX
Wt8 consuming web services
PPTX
Wt7 structuring mule applications
PPTX
Wt6 accessing and modifying mule event
PPTX
Wt5 deploying and managing ap is
PPTX
Wt4 building apis
PPTX
Wt3 designing apis
PPTX
Iot explore demo for cross clouds
PPTX
Iot explorer デモ (MC, CC, Heroku, Core)
PPTX
Df salesforce dx説明資料
PPTX
IoT explorer タクシー配車デモ
PPTX
Io t工場機器監視デモ
PPTX
Salesforce X AWS Machine Learning
DOCX
Visualforceとは
PPTX
Soracom X AWS Iot X Salesforce
PDF
Force.comハンズオン
PPTX
Lightingコンポーネントベーシック開発
Wt13 processing records
Wt12 triggering flows
Wt11 writing dataweave transformations
Wt9 multicast an event
Wt8 consuming web services
Wt7 structuring mule applications
Wt6 accessing and modifying mule event
Wt5 deploying and managing ap is
Wt4 building apis
Wt3 designing apis
Iot explore demo for cross clouds
Iot explorer デモ (MC, CC, Heroku, Core)
Df salesforce dx説明資料
IoT explorer タクシー配車デモ
Io t工場機器監視デモ
Salesforce X AWS Machine Learning
Visualforceとは
Soracom X AWS Iot X Salesforce
Force.comハンズオン
Lightingコンポーネントベーシック開発

Salesforce1開発(s1 tour)

Editor's Notes

  • #3: Before I begin, just a word from our lawyers.  This is our safe harbor statement which if you cannot read, you can find on our website.  Any purchasing decisions you make should be made based on currently available technology.
  • #6: And two-thirds of companies feel unprepared for this new social and mobile world. They&apos;re not ready. They don&apos;t know what to do.
  • #12: A key part of the Salesforce1 app is the Publisher which is basically the users launchpad to taking action in Salesforce. With the publisher you can create global actions for users to take anywhere like posting a file, a link or a poll. Or more contextual actions like creating a contact on an account or a DSR on an opportunity. Any business processes and workflows associated with creating these records are instantly kicked off. Admins can create standard actions like creating a task, event, or account or some more custom actions like logging an IT ticket, creating an invoice, or submitting an order. Additionally there are Salesforce partners that have built custom actions as well to allow customers to interact with information from other apps or take actions specific to an ISV app.