More Related Content
Similar to Force.comハンズオン (20)
More from Akihiro Iwaya (20)
Force.comハンズオン
- 5. アプリケーションの作成
1. 設定>作成>アプリケーション
2. 【新規】ボタン
3. ステップ 1. 種別の選択
1. カスタムアプリケーションを選択
4. ステップ 2. 詳細を⼊入⼒力力
1. アプリケーションの表⽰示ラベル:社内業務
2. アプリケーション名:CustomApplication(デフォルト)
5. ステップ 3. カスタムアプリケーションロゴに使⽤用する画像のソースの選択
1. 次へ
6. ステップ 4. タブの選択
1. ホーム・Chatter・レポート・ダッシュボードを選択
7. ステップ 5. プロファイルへの割り当て
1. 全てのプロファイルで参照可能に
5
- 9. 経費精算カスタムオブジェクトの作成
1. 設定>作成>オブジェクト
2. 【新規カスタムオブジェクト】ボタン
3. カスタムオブジェクトの定義の編集
1. 表⽰示ラベル:経費精算
2. オブジェクト名:Expense
3. データ型:⾃自動採番(データ型を⾃自動採番にすると表⽰示形式と開始番号が⼊入⼒力力可能)
4. 表⽰示形式:{YYYY}{MM}{DD}-‐‑‒{0000}(注:全て半⾓角です)
5. 開始番号:1
6. レポートを許可:☑️
7. デフォルトのページレイアウトに、メモと添付ファイルを追加する:☑️
8. カスタムオブジェクトの保存後、新規カスタムタブウィザードを起動する:☑️
4. 【保存】を押すと、新規カスタムタブ画⾯面に移⾏行行
9
- 11. 経費精算カスタムタブの作成
1. ステップ 1. 詳細を⼊入⼒力力
1. タブスタイル:銀⾏行行を選択(ここは任意のものを選択できます)
2. ステップ 2. プロファイルに追加
1. 1 つのタブ表⽰示をすべてのプロファイルに適⽤用する:デフォルトで表⽰示
(実際は利利⽤用可能な⼈人だけに表⽰示されるようにします)
3. ステップ 3. カスタムアプリケーションに追加
1. 社内業務のみを選択
11
- 13. 経費明細カスタムオブジェクトの作成
1. 設定>作成>オブジェクト
2. 【新規カスタムオブジェクト】ボタン
3. カスタムオブジェクトの定義の編集
1. 表⽰示ラベル:経費明細
2. オブジェクト名:ExpenseItem
3. データ型:⾃自動採番(データ型を⾃自動採番にすると表⽰示形式と開始番号が⼊入⼒力力可能)
4. 表⽰示形式:EI-‐‑‒{00000000}(注:全て半⾓角です)
5. 開始番号:1
6. レポートを許可:☑️
7. デフォルトのページレイアウトに、メモと添付ファイルを追加する:☑️
8. カスタムオブジェクトの保存後、新規カスタムタブウィザードを起動する:☑️
4. 【保存】を押すと、新規カスタムタブ画⾯面に移⾏行行
13
- 15. 経費明細カスタムタブの作成
1. ステップ 1. 詳細を⼊入⼒力力
1. タブスタイル:札束を選択(ここは任意のものを選択できます)
2. ステップ 2. プロファイルに追加
1. 1 つのタブ表⽰示をすべてのプロファイルに適⽤用する:デフォルトで表⽰示
(実際は利利⽤用可能な⼈人だけに表⽰示されるようにします)
3. ステップ 3. カスタムアプリケーションに追加
1. 社内業務のみを選択
15
- 17. 経費明細カスタム項⽬目の作成ー経費精算への関係
1. 設定>作成>オブジェクト>経費明細
2. カスタム項⽬目 & リレーション【新規】ボタン
3. ステップ 1. データ型の選択:主従関係を選択して【次へ】ボタン
4. ステップ 2. 関連オブジェクトの選択:関連先に経費精算を選択して【次へ】ボタン
5. ステップ 3. 参照項⽬目の表⽰示ラベルと名前を⼊入⼒力力:以下を⼊入⼒力力して【次へ】ボタン
1. 項⽬目の表⽰示ラベル:経費精算
2. 項⽬目名:Expense
3. ⼦子リレーション名:ExpenseItemR
6. ステップ 4. 参照項⽬目に対する項⽬目レベルセキュリティの設定:【次へ】ボタン
7. ステップ 5. ページレイアウトへの参照項⽬目の追加:【次へ】ボタン
8. ステップ 6. カスタム関連リストの追加:【保存】ボタン
17
- 21. 経費明細カスタム項⽬目の作成ー利利⽤用⽇日の追加
1. カスタム項⽬目 & リレーション【新規】ボタン
2. ステップ 1. データ型の選択:⽇日付を選択して【次へ】ボタン
3. ステップ 2. 詳細を⼊入⼒力力:以下を⼊入⼒力力して【次へ】ボタン
1. 項⽬目の表⽰示ラベル:利利⽤用⽇日
2. 項⽬目名:Date
3. 必須項⽬目:☑︎値の⼊入⼒力力を必須にする
4. ステップ 3. 項⽬目レベルセキュリティの設定:【次へ】ボタン
5. ステップ 4. ページレイアウトへの追加:【保存】ボタン
21
- 22. 経費明細カスタム項⽬目の作成ー使途の追加
1. カスタム項⽬目 & リレーション【新規】ボタン
2. ステップ 1. データ型の選択:選択リストを選択して【次へ】ボタン
3. ステップ 2. 詳細を⼊入⼒力力:以下を⼊入⼒力力して【次へ】ボタン
1. 項⽬目の表⽰示ラベル:使途
2. 選択リストの各値:交通費
タクシー代
宿泊費
⾷食費
交際費
雑費
3. 項⽬目名:Uses
4. ステップ 3. 項⽬目レベルセキュリティの設定:【次へ】ボタン
5. ステップ 4. ページレイアウトへの追加:【保存】ボタン
22
- 23. 経費明細カスタム項⽬目の作成ー費⽤用の追加
1. カスタム項⽬目 & リレーション【新規】ボタン
2. ステップ 1. データ型の選択:通貨を選択して【次へ】ボタン
3. ステップ 2. 詳細を⼊入⼒力力:以下を⼊入⼒力力して【次へ】ボタン
1. 項⽬目の表⽰示ラベル:費⽤用
2. 項⽬目名:Cost
3. 必須項⽬目:☑︎値の⼊入⼒力力を必須にする
4. ステップ 3. 項⽬目レベルセキュリティの設定:【次へ】ボタン
5. ステップ 4. ページレイアウトへの追加:【保存】ボタン
23
- 24. 経費明細カスタム項⽬目の作成ー備考の追加
1. カスタム項⽬目 & リレーション【新規】ボタン
2. ステップ 1. データ型の選択:テキストエリアを選択して【次へ】ボタン
3. ステップ 2. 詳細を⼊入⼒力力:以下を⼊入⼒力力して【次へ】ボタン
1. 項⽬目の表⽰示ラベル:備考
2. 項⽬目名:Note
4. ステップ 3. 項⽬目レベルセキュリティの設定:【次へ】ボタン
5. ステップ 4. ページレイアウトへの追加:【保存】ボタン
24
- 31. 経費精算カスタム項⽬目の作成ー費⽤用合計の追加
1. 設定>作成>オブジェクト>経費精算
2. カスタム項⽬目 & リレーション【新規】ボタン
3. ステップ 1. データ型の選択:積み上げ集計を選択して【次へ】ボタン
4. ステップ 2. 詳細を⼊入⼒力力:以下を⼊入⼒力力して【次へ】ボタン
1. 項⽬目の表⽰示ラベル:費⽤用合計
2. 項⽬目名:TotalCost
5. ステップ 3. 集計の定義:以下を⼊入⼒力力して【次へ】ボタン
1. 集計対象オブジェクト:経費明細
2. 積み上げ種別の選択:合計
3. 集計する項⽬目:費⽤用
6. ステップ 4. 項⽬目レベルセキュリティの設定:【次へ】ボタン
7. ステップ 5. ページレイアウトへの追加:【保存】ボタン
8. 作成済みのデータを再表⽰示してみてください。登録したデータはどうなりましたか?
31
- 37. タクシー代には理理由が必要
1. 設定>作成>オブジェクト
2. 経費明細
3. 新規⼊入⼒力力規則
1. ルール名:UsingTaxiRequiredText
2. エラー条件数式:AND(ISPICKVAL(Uses_̲_̲c, 'タクシー代'), ISBLANK(Note_̲_̲c))
3. エラーメッセージ:タクシー代の場合は、備考に理理由を記載してください。
4. エラー表⽰示場所:項⽬目「備考」
4. タクシー代の経費明細を編集してみてください
37
- 62. 開発者コンソールを起動し、Apexのコードを記述
1. あなたの名前>開発者コンソール
2. Debug>Open Execute Anonymous Window
3. Enter Apex Code
for (Integer i = 1; i <= 10; i++) {
System.debug('Hi ' + i);
}
4. Open LogをチェックしExecuteボタンを押す
5. Apexプログラミング⾔言語は、Javaと似たシンタックスを採⽤用しています。さらに、強⼒力力なORマッピングの機能により、
埋め込み型のデータアクセスを容易易に記述できます。
62
- 63. データベーストリガをApexで記述
1. 設定>作成>オブジェクト>経費精算
2. トリガ>新規
trigger ExpenseCreated on Expense_̲_̲c (after insert) {
List<FeedItem> s= new List<FeedItem>();
for (Expense_̲_̲c e: Trigger.new) {
s.add(new FeedItem(ParentId = UserInfo.getUserId(),
Body = '【経費精算】' + e.Name + 'が作成されました。'));
}
System.debug('FeedItems: ' + s);
insert s;
}
3. 経費精算レコードを新規に作成してください
4. Chatterタブを開いて結果を確認してください
5. トリガは、オブジェクト操作に起因して実⾏行行される処理理(Apexプログラム)です
6. なぜ繰り返し処理理をしているか考えましょう
7. すべての処理理をApexで記述するForce.comのメリットは何ですか?
63
- 65. 標準コントローラを使った画⾯面
65
1. ブラウザのURLを設定
https://ap.salesforce.com/apex/ExpenseList
2. Apex ページ「ExpenseList」は存在しません。
Create Page ExpenseListをクリック
<apex:page standardController=“Expense_̲_̲c” recordSetVar=“expenses”>
<h1>全ての経費精算リスト</h1>
<apex:dataTable value="{!expenses}" var="expense" rowClasses="odd,even" border="1”>
<apex:column headerValue="経費精算”>
<apex:outputLink value="/{!expense.Id}">{!expense.Name}</apex:outputLink>
</apex:column>
<apex:column headerValue="費⽤用合計”>
<apex:outputField value="{!expense.TotalCost_̲_̲c}"/>
</apex:column>
</apex:dataTable>
</apex:page>
3. 標準コントローラはオブジェクト毎に⾃自動的に⽤用意され、Visualforce(画⾯面)にデータベースから取得したデータを提供し
たり、ユーザの操作に伴いデータを追加したり変更更したりします。コントローラは、WebアプリケーションのMVCモデ
ルで構成される処理理の部分(Controller)を意味します。
- 66. カスタムコントローラを使った画⾯面
66
1. ブラウザのURLを設定
https://ap.salesforce.com/apex/ExpenseRecent
2. Apex ページ「ExpenseRecent」は存在しません。
Create Page ExpenseRecentをクリック
<apex:page standardController=“ExpenseRecent”>
<h1>最近の経費精算リスト</h1>
<apex:dataTable value="{!expenses}" var="expense" rowClasses="odd,even" border="1”>
<apex:column headerValue="経費精算”>
<apex:outputLink value="/{!expense.Id}">{!expense.Name}</apex:outputLink>
</apex:column>
<apex:column headerValue="費⽤用合計”>
<apex:outputField value="{!expense.TotalCost_̲_̲c}"/>
</apex:column>
</apex:dataTable>
</apex:page>
3. Apex クラス「ExpenseRecent」は存在しません
Apex クラス「public with sharing class ExpenseRecent」を作成をクリック
public with sharing class ExpenseRecent {
public List<Expense_̲_̲c> getExpenses() {
return [select Name, TotalCost_̲_̲c from Expense_̲_̲c where CreatedDate >= last_̲month];
}
}
- 67. ⾃自動でオブジェクトを作成するには
67
1. ブラウザのURLを設定
https://ap.salesforce.com/apex/AutoExpense
2. AutoExpenseページ
<apex:page controller="AutoExpense”>
<apex:form >
<apex:commandButton action="{!doCreate}" value="⾃自動⽣生成"/>
</apex:form>
</apex:page>
3. AutoExpenseクラス
public with sharing class AutoExpense {
public PageReference doCreate() {
Expense_̲_̲c e = new Expense_̲_̲c();
insert e;
List<ExpenseItem_̲_̲c> eis = new List<ExpenseItem_̲_̲c>();
Date t = System.today();
eis.add(new ExpenseItem_̲_̲c(Expense_̲_̲c = e.Id, Date_̲_̲c = t, Uses_̲_̲c = '交通費', Cost_̲_̲c = 800));
eis.add(new ExpenseItem_̲_̲c(Expense_̲_̲c = e.Id, Date_̲_̲c = t, Uses_̲_̲c = '⾷食費', Cost_̲_̲c = 1080));
eis.add(new ExpenseItem_̲_̲c(Expense_̲_̲c = e.Id, Date_̲_̲c = t, Uses_̲_̲c = '宿泊費', Cost_̲_̲c = 9800));
eis.add(new ExpenseItem_̲_̲c(Expense_̲_̲c = e.Id, Date_̲_̲c = t, Uses_̲_̲c = '⾷食費', Cost_̲_̲c = 3240));
insert eis;
return null;
}
}