Comments
Description
Transcript
Force.com ワークブック
Force.com ワークブック Salesforce Platform のワークショップ, Summer ’16 @salesforcedocs 最終更新日: 2016/04/25 本書の英語版と翻訳版で相違がある場合は英語版を優先するものとします。 © Copyright 2000–2016 salesforce.com, inc. All rights reserved. Salesforce およびその他の名称や商標は、salesforce.com, inc. の登録商標です。本ドキュメントに記載されたその他の商標は、各社に所有権があります。 目次 ワークブックについて . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 対象利用者 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 バージョン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 サポートされるブラウザ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 タブレットまたは携帯端末を使用できますか? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Developer Edition にサインアップする . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 省略可能: Warehouse アプリケーションをインストールする . . . . . . . . . . . . . . . . . . . . . 3 アプリケーションおよびデータベースを作成する . . . . . . . . . . . . . . . . . . . . . . . . . 4 Warehouse アプリケーションを作成する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 ステップ 1: クラウドアプリケーションとデータベースを構築する . . . . . . . . . . . . . . 4 ステップ 2: アプリケーションを試す . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 ステップ 3: アプリケーションを探索する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 モバイルデバイスからアプリケーションにアクセスする . . . . . . . . . . . . . . . . . . . . . . . . 8 ステップ 1: モバイルアクセスを設定する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 ステップ 2: モバイルアプリケーションを試す . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 ステップ 3: モバイルアプリケーションを探索する . . . . . . . . . . . . . . . . . . . . . . . . 12 オブジェクトに項目を追加する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 ステップ 1: [Price (価格)] 項目を Merchandise オブジェクトに追加する . . . . . . . . . . . 14 ステップ 2: [Quantity (数量)] 項目を Merchandise オブジェクトに追加する . . . . . . . . 14 ステップ 3: アプリケーションを試す . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 新規オブジェクトを作成する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 ステップ 1: ウィザードを使用して Invoice オブジェクトを作成する . . . . . . . . . . . . 17 ステップ 2: [Invoice (請求書)] タブをアプリケーションに追加する . . . . . . . . . . . . . . 19 ステップ 3: アプリケーションのタブを並び替える . . . . . . . . . . . . . . . . . . . . . . . . 20 ステップ 4: [Status (状況)] 項目を Invoice オブジェクトに追加する . . . . . . . . . . . . . . 20 ステップ 5: アプリケーションを試す . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 オブジェクトを関連付ける . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 ステップ 1: Line Item オブジェクトを作成する . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 ステップ 2: [Quantity (数量)] 項目を追加する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 ステップ 3: 品目を請求書に関連付ける . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 ステップ 4: 商品品目をルックアップする . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 ステップ 5: アプリケーションを試す . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 ステップ 6: スキーマを表示する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 まとめ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 カスタムオブジェクトのインポートウィザードを使用してデータを読み込む . . . . . . . . 29 ステップ 1: データファイルを作成する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 ステップ 2: データを読み込む . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 ステップ 3: アプリケーションを試す . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 目次 ユーザインターフェースをカスタマイズする . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 データのビューを作成する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 ステップ 1: 請求書のリストを表示する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 ステップ 2: 新規ビューを作成する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 ステップ 3: アプリケーションを試す . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 ページレイアウトを変更する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 ステップ 1: ページレイアウトエディタを開く . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 ステップ 2: ページレイアウトについて理解する . . . . . . . . . . . . . . . . . . . . . . . . . . 37 ステップ 3: ページレイアウトに項目を再配置する . . . . . . . . . . . . . . . . . . . . . . . . 38 ステップ 4: 項目を関連リストに追加する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 ステップ 5: アプリケーションを試す . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 ステップ 6: ミニページレイアウトを編集する . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 モバイルアクセス用にレイアウトをカスタマイズする . . . . . . . . . . . . . . . . . . . . . . . . . 41 ステップ 1: モバイルユーザ用にページレイアウトを作成する . . . . . . . . . . . . . . . . 41 ステップ 2: コンパクトレイアウトを使用して主要項目を表示する . . . . . . . . . . . . 43 ステップ 3: モバイルカードを関連情報ページに追加する . . . . . . . . . . . . . . . . . . . 44 ソーシャルコラボレーションを有効にする . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 ステップ 1: Merchandise のページレイアウトを確認する . . . . . . . . . . . . . . . . . . . . 46 ステップ 2:請求書に関するコラボレーションを有効にする . . . . . . . . . . . . . . . . . . 47 ステップ 3: アプリケーションを試す . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 ステップ 4: モバイルの通知を有効化する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 コーディングせずに、数回のクリックでアプリケーションロジックを追加す る . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 ワークフローを使用して項目の更新を自動化する . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 ステップ 1: 品目の詳細ページを確認する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 ステップ 2: [Unit Price (単価)] 項目を作成する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 ステップ 3: [Unit Price (単価)] 項目に自動的にデータを取り込む . . . . . . . . . . . . . . . 52 ステップ 4: 注文の実行時に全在庫数量を更新する . . . . . . . . . . . . . . . . . . . . . . . . 54 ステップ 5: ワークフロールールを有効にする . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 ステップ 6: アプリケーションを試す . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 数式項目を追加する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 ステップ 1: 各 Line Item の合計金額を計算する . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 ステップ 2: アプリケーションを試す . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 積み上げ集計項目を追加する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 ステップ 1: 積み上げ集計項目を使用して合計を計算する . . . . . . . . . . . . . . . . . . . 58 ステップ 2: アプリケーションを試す . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 ビジネスルールを適用する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 ステップ 1: ビジネスルールについて理解する . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 ステップ 2: 入力規則を作成する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 ステップ 3: アプリケーションを試す . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 ステップ 4: 入力規則を変更する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 ステップ 5: 新しい入力規則を試す . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 承認プロセスの作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 目次 ステップ 1: 承認プロセスを作成する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 ステップ 2: 承認プロセスの詳細ページを確認する . . . . . . . . . . . . . . . . . . . . . . . . 66 ステップ 3: 承認プロセスアクションを変更する . . . . . . . . . . . . . . . . . . . . . . . . . . 67 ステップ 4: 承認プロセスを有効化する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 ステップ 5: アプリケーションを試す . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 ステップ 6: Chatter および Salesforce1 の承認を設定する . . . . . . . . . . . . . . . . . . . . 69 フローを作成する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 ステップ 1: フロー変数を追加する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 ステップ 2: フォーム画面を追加する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 ステップ 3: [レコードの作成] 要素を追加する . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 ステップ 4: [レコードの更新] 要素を追加する . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 ステップ 5: 確認画面を追加する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 ステップ 6: カスタムボタンを追加する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 ステップ 7: アプリケーションを試す . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 ステップ 8: 障害画面を追加する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 レポートとダッシュボードでデータを分析する . . . . . . . . . . . . . . . . . . . . . . . . . . 86 レポートを作成する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 ステップ 1: 簡単なレポートを作成する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 ステップ 2: レポートから詳細情報を取得する . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 ステップ 3: レポートにバケットを追加する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 ステップ 4: レポートデータをグラフで表示する . . . . . . . . . . . . . . . . . . . . . . . . . . 90 ステップ 5: レコードページにレポートグラフを埋め込む . . . . . . . . . . . . . . . . . . . 91 ダッシュボードを作成する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 ステップ 1: 新しいダッシュボードを作成する . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 ステップ 2: 円グラフコンポーネントを追加する . . . . . . . . . . . . . . . . . . . . . . . . . . 93 ステップ 3: アプリケーションを試す . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 ステップ 4: モバイルアプリケーションからダッシュボードにアクセスする . . . . . . 95 Salesforce レポートおよびダッシュボード REST API を使用してレポートを活用する . . . . 96 ステップ 1: レポートを同期して実行する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 ステップ 2: レポートを非同期に実行する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 ステップ 3: レポートデータを絞り込む . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 ステップ 4: ダッシュボードを検索、表示、更新する . . . . . . . . . . . . . . . . . . . . . 100 アクションでモバイルの操作性を高める . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 グローバルアクションを使用してレコードをすばやく作成する . . . . . . . . . . . . . . . . . 103 ステップ 1: グローバルアクションを作成する . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 ステップ 2: グローバルレイアウトをカスタマイズする . . . . . . . . . . . . . . . . . . . . 104 オブジェクト固有のアクションを使用して関連レコードを作成する . . . . . . . . . . . . . . 106 ステップ 1: オブジェクト固有のアクションを定義する . . . . . . . . . . . . . . . . . . . . 106 ステップ 2: 項目を選択して項目値を事前に定義する . . . . . . . . . . . . . . . . . . . . . . 107 ステップ 3: オブジェクト固有のレイアウトをカスタマイズする . . . . . . . . . . . . . 107 システムをセキュリティで保護する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 目次 プロファイルと権限セットを作成する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 ステップ 1: プロファイルを作成する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 ステップ 2: プロファイルを編集する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 ステップ 3: マネージャ権限セットを作成する . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 ステップ 4: 営業担当者権限セットを作成する . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 新規ユーザを作成する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 ステップ 1: 新規ユーザを作成する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 ステップ 2: レコードアクセスをテストする . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 ステップ 3: 権限セットをユーザに割り当てる . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 ステップ 4: レコードアクセスをテストする . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 組織の共有設定を行う . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 ステップ 1: 請求書の OWD を変更する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 ステップ 2: レコードアクセスをテストする . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 ロール階層を使用してレコードを共有する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 ステップ 1: ロール階層を作成する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 ステップ 2: ユーザをロールに割り当てる . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 ステップ 3: レコードアクセスをテストする . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 カスタムアプリケーションロジックをコーディングする . . . . . . . . . . . . . . . . . . 122 開発者コンソールと Apex を探索する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 ステップ 1: 開発者コンソールを起動する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 ステップ 2: 基本的な Apex コードを実行する . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 ステップ 3: 実行ログを確認する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 Apex クラスおよびメソッドを作成する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 ステップ 1: Apex クラスを作成する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 ステップ 2: 基本となるクラスメソッドを作成する . . . . . . . . . . . . . . . . . . . . . . . 126 ステップ 3: 請求書とその品目を取得する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 ステップ 4: クラスメソッドの最終バージョンを作成する . . . . . . . . . . . . . . . . . . 127 ステップ 5: Apex クラスメソッドを手動でテストする . . . . . . . . . . . . . . . . . . . . . 129 ボタンを使用して Apex クラスメソッドをコールする . . . . . . . . . . . . . . . . . . . . . . . . . 130 ステップ 1: カスタムボタンを作成する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 ステップ 2: ボタンをページレイアウトに追加する . . . . . . . . . . . . . . . . . . . . . . . 132 ステップ 3: Apex クラスを変更する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 ステップ 4: 新しいボタンをテストする . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 データベーストリガを作成する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 ステップ 1: データベーストリガを作成する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 ステップ 2: トリガを手動でテストする . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 単体テストを作成する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 ステップ 1: 単体テストを作成する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 ステップ 2: 単体テストを実行する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 Visualforce を使用してカスタムユーザインターフェースを作成する . . . . . . . . . 139 カスタムユーザインターフェースをコーディングする . . . . . . . . . . . . . . . . . . . . . . . . 139 ステップ 1: Visualforce 開発モードを有効にする . . . . . . . . . . . . . . . . . . . . . . . . . . 139 目次 ステップ 2: Visualforce ページを作成する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 ステップ 3: スタイルシートの静的リソースを追加する . . . . . . . . . . . . . . . . . . . . 141 ステップ 4: ページにコントローラを追加する . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 ステップ 5: Visualforce ページとして在庫数量シートを表示する . . . . . . . . . . . . . . 144 ステップ 6: インライン編集サポートを追加する . . . . . . . . . . . . . . . . . . . . . . . . . 146 まとめ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 ワークブックについて このワークブックでは、クラウドアプリケーションの作成方法を一連のチュートリアルで解説します。Salesforce Platform では、あらゆるタイプのアプリケーションを作成できますが、大部分のアプリケーションでは、次の ような機能が共通して使用されています。 • データベース: アプリケーション内の情報をモデル化します。 • ユーザインターフェース: アプリケーションを利用するユーザにデータや機能を提供します。 • ビジネスロジックとワークフロー: 条件に基づき特定のタスクを自動的に実行します。 また、Salesforce Platform で開発されたアプリケーションでは、自動的に次がサポートされます。 • データおよび機能にアクセスできる公開 Web サイトおよびモバイルアプリケーション • ユーザとやりとりしたり、データを操作したりできるネイティブのソーシャル環境 • データを保護し、組織全体にわたるアクセスを定義する組み込みセキュリティ • 外部システムと統合するための複数の API • パッケージ化されたアプリケーションをインストールまたは作成する機能 このワークブックチュートリアルでは、非常に単純な倉庫管理システムの構築に焦点を当てます。倉庫には、 コンピュータハードウェアや周辺機器、たとえばラップトップ、デスクトップ、タブレット、モニタなどが含 まれています。商品が倉庫からどのように移動されるかを追跡するために、請求書を使用します。請求書は品 目のリストです。各品目には特定の商品と、注文された項目数が含まれます。請求書では、すべての価格と数 量を集計して合計請求額を計算します。これは非常に単純なデータモデルですが、基本的な概念を説明するに は十分です。 開発はボトムアップ方式で進めます。つまり、商品を追跡するためのアプリケーションとデータベースモデル を最初に構築します。その後、ユーザインターフェースを変更したり、ビジネスロジックを追加したりして、 作業を続けます。チュートリアルを順に進めていくことで、アプリケーションの開発を進めながら、プラット フォームに関する知識を学べるようになっています。 対象利用者 これらのチュートリアルは、Salesforce Platform を初めて使用する開発者や、アプリケーション開発をさらに詳 しく学習したい Salesforce システム管理者を対象にしています。 1 ワークブックについて バージョン バージョン Salesforce の Summer '14 バージョンを使用して、すべての手順を正常に実行できます。 サポートされるブラウザ Microsoft Edge Salesforce Classic では、Windows 10 の Microsoft Edge がサポートされています。次の制限があります。 • Microsoft Edge の HTML ソリューションエディタは、Salesforce ナレッジではサポートされていません。 • Microsoft Edge は、開発者コンソールではサポートされていません。 • Microsoft Edge は、CTI Toolkit バージョン 4.0 以降を使用して作成された Salesforce CRM Call Center ではサポート されていません。 タブレットまたは携帯端末を使用できますか? 大部分のチュートリアルはタブレットまたは携帯端末を使用して実行できますが、一部のチュートリアルでは 画面のサイズが問題になる場合があります。また、コードを入力する場合はキーボードのほうが便利です。ま た、次に注意してください。 • ローカルファイルシステムからクラウドにデータを移動する必要のあるチュートリアルでは、デバイスの 機能によって実行できない可能性があります。たとえば、CSV ファイルをアップロードしようとしても、デ バイスでは写真の閲覧しかできない場合があります。 • チュートリアルの中には、異なるユーザに切り替える必要があるものもあります。このような作業を行う 場合、同時に 2 つの異なるブラウザを開くほうが作業はかなり簡単です。デバイスで 1 つのブラウザしか 使用できない場合、ユーザを切り替えるたびにログインとログアウトを行う必要があります。 Developer Edition にサインアップする 学習では、開発用の Developer Edition 組織 (または短縮して「DE 組織」) を使用します。DE 組織は、アプリケー ションの開発、パッケージ化、テスト、インストールを行うためのすべての機能と権限が備わった汎用の環境 です。 1. ブラウザで http://sforce.co/YrZZJ3 にアクセスします。 2. 各項目にユーザ情報と会社情報を入力します。 3. [Email Address (メールアドレス)] 項目には、Web ブラウザから簡単に確認できる公開アドレスを使用 してください。 4. 一意の [ユーザ名] を入力します。ユーザ名もメールアドレスの形式にする必要がありますが、メールアド レスと同じにする必要はなく、通常は違うものを入力することをお勧めします。ユーザ名は developer.salesforce.com でのログイン情報および ID であるため、自分自身を表す [email protected] などのユーザ名を選ぶことで、より有益に使用できます。 2 ワークブックについて 省略可能: Warehouse アプリケーションをインストール する 5. [Master Subscription Agreement (主登録契約)] を読み、チェックボックスをオンにしてから [Submit Registration (登録を実行)] をクリックします。 6. その後まもなく、ログインリンクを記載したメールが届きます。リンクをクリックし、パスワードを変更 します。 省略可能: Warehouse アプリケーションをインストールする 100 レベルのチュートリアルをスキップする場合は、Warehouse アプリケーションをパッケージとしてインス トールできます。パッケージは、通常はアプリケーションであるコンポーネントの集合体であり、組織に組み 込むことができます。 パッケージアプリケーションのオプションは、カスタムオブジェクト、項目、リレーション、基本 UI、および アプリケーションロジックに対処する方法をすでに理解している上級開発者や管理者にとって便利です。ただ し、経験豊富な開発者であっても、このプラットフォームを初めて使用する場合は、100 レベルのチュートリ アルを完了し、特にモバイルコンテンツについて確認しておくことをお勧めします。 Warehouse アプリケーションをインストールする手順は、次のとおりです。 1. インストール用 URL リンク https://login.salesforce.com/packaging/installPackage.apexp?p0=04ti0000000Pj8s をクリック します。 2. すでにログインしている場合は、DE 組織のユーザ名とパスワードを入力します。 3. [Package Installation Details (パッケージインストールの詳細)] ページで、[Continue (次へ)] をクリックします。 4. [次へ] をクリックし、[Security Level (セキュリティレベル)] ページで [Next (次へ)] をクリックします。 5. [Install (インストール)] をクリックします。 6. [Deploy Now (今すぐデプロイ)] をクリックしてから、[Deploy (デプロイ)] をクリックします。 7. インストールが完了したら、右上のアプリケーションピッカーから Warehouse アプリケーションを選択でき ます。 8. データを作成するには、[Data (データ)] タブをクリックします。 9. [データを作成] をクリックします。 メモ: 間違ってパッケージをインストールした場合や、それを削除する必要がある場合は、[設定] から [クイック検索] ボックスに「インストール済みパッケージ」と入力し、[インストール済みパッケージ] を 選択してパッケージを削除してください。 3 アプリケーションおよびデータベースを作成する 所要時間: 40 ~ 60 分 Salesforce Platform を使用すると、カスタムアプリケーションとデータベースをクラウドに簡単に作成できます。 このレッスンでは、手順に従って何度かクリックするだけで基本的なアプリケーションを構築し、基盤となる データベースを拡張する方法を学習します。また、データ入力を検証する方法とデータを読み込む方法につい ても学習します。 Warehouse アプリケーションを作成する レベル: 初級/所要時間: 5 ~ 10 分 クラウドでアプリケーションを実行すると、サーバの設定やソフトウェアのインストール、継続的なインフラ ストラクチャのメンテナンスが不要になります。このチュートリアルでは、クラウドアプリケーションを構築 する方法を学習します。 このチュートリアルでは、商品在庫を管理するカスタムアプリケーションを作成します。アプリケーションを 作成すると、特定の商品に関する情報 (商品名、説明、価格など) を追跡するためのデータオブジェクトが自動 的に作成されます。Salesforce Platform では、こうしたデータオブジェクトのことを「カスタムオブジェクト」 と呼びます。カスタムオブジェクトは、データベースのテーブルのようなものだと考えることができます。 オブジェクトを作成すると、複数の標準項目が自動的に追加されるほか、オブジェクトの概要をリスト形式で 確認できるページ、詳細情報を確認できるページ、データを編集するためのページが自動的に生成されます。 ユーザは必要に応じて独自の項目を追加して、さまざまなデータを管理したり参照したりできます。ではこれ から、商品名、商品説明、価格など、商品に関するさまざまな情報を参照、編集できる独自のメニュー、タ ブ、オブジェクトを備えたアプリケーションの作成方法を順に説明します。 ステップ 1: クラウドアプリケーションとデータベースを構築する 数回クリックするだけでアプリケーションを作成できます。このチュートリアルでは、[アプリケーションの クイックスタート] ウィザードを使用して、倉庫の商品レコードの管理に役立つアプリケーションを作成しま す。 1. ブラウザを起動して、https://login.salesforce.com に移動します。 2. ユーザ名 (電子メールアドレスの形式) とパスワードを入力します。 3. Force.com の [設定] ページの [使用開始] セクションで [アプリケーションを追加する] をクリックします (他の 場所から始める場合は、右上隅にある [設定] をクリックします)。 4 アプリケーションおよびデータベースを作成する ステップ 1: クラウドアプリケーションとデータベースを 構築する 4. フォームに次のように入力します。 • [アプリケーション] に「Warehouse」(倉庫) と入力します。 • [表示ラベル] に「Merchandise」(商品) と入力します。 • [表示ラベル (複数形)] に「Merchandise」(商品) と入力します (お客様の言語設定によっては、この項 目は表示されない場合があります)。 5. [作成] をクリックすると、自動的に追加された機能がいくつか表示されます。 6. [私のアプリケーションに移動] をクリックして、新しいアプリケーションを表示します。 7. [ツアーの開始] をクリックして、アプリケーションに組み込まれたユーザインターフェースの簡単な概要 説明に従います。 5 アプリケーションおよびデータベースを作成する ステップ 2: アプリケーションを試す 1. Force.com アプリケーションメニュー — 使用できるアプリケーションを示します。ここでは、直前に作成 したアプリケーションが選択されています。 2. タブ — オブジェクトに格納された情報に容易にアクセスするための機能です。現在開いている [Merchandise] タブでは、レコードの作成、参照、編集を行えます。その他のタブは、すべてのアプリケーションに含ま れる標準機能のタブです。 3. レコードの作成 — [新規] をクリックしてカスタムオブジェクトにレコードを追加します。現時点でこのボ タンをクリックすると、オブジェクトの 1 つのデータ入力項目しか表示されませんが、この後に複数の入 力項目を作成します。 4. Force.com クイックアクセスメニュー — 関連するアプリケーションのカスタマイズ機能にすばやくアクセ スできます。クイックアクセスメニューは、「アプリケーションのカスタマイズ」権限を持つユーザにの み表示され、すべてのオブジェクトリストビューページとレコードの詳細ページからアクセスできます。 もうひとこと... アプリケーションは複数のタブで構成されますが、タブ同士が互いに関連していなくてもかまいません。たと えば、「頻繁に使用する」という基準でタブを選択してアプリケーションを作成することも可能です。「[取 引先] タブをよく使用する」ということであれば、今回作成したアプリケーションにもそのタブを追加できま す。作成、購入、インストールしたアプリケーションはアプリケーションメニューに追加され、簡単に切り替 えが可能です。 ステップ 2: アプリケーションを試す 作成したアプリケーションにはまだあまり機能がありませんが、すぐに使い始めることができます。 1. 新しいアプリケーションを試すには、[新規] をクリックして新しい Merchandise レコードを作成します。 6 アプリケーションおよびデータベースを作成する ステップ 3: アプリケーションを探索する 2. 新しい Merchandise レコードとして「Laptop」(ラップトップ) を追加し、[保存] をクリックします。 ステップ 3: アプリケーションを探索する 単純なアプリケーションは、すぐに構築できます。しかし、作成が簡単なのは基本的なアプリケーションだけ ではありません。Salesforceは強力なプラットフォームであるため、かなり高度なアプリケーションでも、コー ドをまったく記述しないで同様に簡単に作成できます。画面を詳しく見て、デフォルトで含まれているすべて の機能を確認してみましょう。 7 アプリケーションおよびデータベースを作成する モバイルデバイスからアプリケーションにアクセスする 1. すべてのアプリケーションに、オブジェクトおよび Chatter フィードのすべてのテキスト項目に対する全文 検索機能があります。 2. Salesforce のすべてのオブジェクトには、Chatter という「フィード」が自動的に付属します。これにより、 承認されたアプリケーションユーザは、そのオブジェクトに関するソーシャル活動やコラボレーションを 行うことができます。Chatter を使用して、ユーザはオブジェクトのフィードに更新を投稿し、投稿に対し てコメントし、フィードをフォロー (登録) して、転送された更新を取得できます。たとえば、Merchandise レコードで、あるユーザがレコードに関する質問を投稿すると、フォロワーや他のユーザが投稿への返信 でコメントできます。 3. すべての DE 組織にはごみ箱があり、削除されたレコードの表示や復元に使用できます。 4. Salesforce のすべてのレコードには、強力なセキュリティシステムの基礎として機能する「所有者」が存在 し、所有者ベースのレコード共有をサポートします。 5. [活動予定] または [活動履歴] 関連リストのレコードに関連する活動を管理することもできます。活動には、 実行すべき ToDo (電話をかける、メールを送る、など)、予定されている行動、および要請済みミーティン グなどがあります。 6. すべての DE 組織には、チャットウィンドウがあり、ユーザ同士が会話できます。 モバイルデバイスからアプリケーションにアクセスする レベル: 初級/所要時間: 5 ~ 10 分 8 アプリケーションおよびデータベースを作成する ステップ 1: モバイルアクセスを設定する 作成したサンプルアプリケーションは、すでにモバイルアプリケーションとしてアクセスできます。そうで す。Salesforceで作成したほとんどのものはモバイルデバイス経由で使用でき、ユーザは必要な情報すべてに、 どこからでもアクセスできます。このワークブックでは引き続き作成を行いますが、フルサイトで行ったすべ ての作業内容は Salesforce1 モバイルアプリケーションに反映されます。 倉庫の使用事例では、倉庫の従業員は一般的に在庫の物理的なチェックを行う必要があります。ラップトップ を持ち歩いたり、ペンと紙で記録したデータを転送したりするのではなく、その場で携帯端末を使用して更新 できます これは、商品が使用できるかどうかすぐに確認できるため、外出中のサービス技術者にとって有用 です。 ステップ 1: モバイルアクセスを設定する Salesforce1 にアクセスする方法には 2 つあります。ダウンロード可能アプリケーションまたはモバイルブラウ ザアプリケーションを使用します。 1. まず、Salesforce1 にアクセスできる必要があります。 • ダウンロード可能アプリケーションを使用するには、モバイルデバイスのブラウザを使用して www.salesforce.com/mobile に移動し、該当のプラットフォームを選択して Salesforce1 をダウンロー ドします。 • モバイルブラウザアプリケーションを有効にするには、[設定] から [クイック検索] ボックスに「Salesforce1 の設定」と入力し、[Salesforce1 の設定] を選択して [Salesforce モバイルブラウザアプリケーションを有 効化] を選択します。これで、モバイルブラウザから login.salesforce.com に移動すると、モバイ ルデバイスから作業していることが Salesforce で認識されるようになり、Salesforce1 モバイルブラウザア プリケーションにリダイレクトされます。 9 アプリケーションおよびデータベースを作成する ステップ 2: モバイルアプリケーションを試す 2. モバイルデバイスから Salesforce1 を開きます。 3. Salesforce ログイン情報を入力し、[Salesforce へのログイン] をタップします。モバイルデバイスを確認する ように求められる場合があります。 もうひとこと... モバイルブラウザアプリケーションでは次の機能がサポートされていないため、一般的にダウンロード可能モ バイルアプリケーションをお勧めします。 • Today: モバイルデバイスのカレンダーの予定を Salesforce の ToDo、取引先責任者、および個人取引先と統合 することで、1 日のスケジュールの計画や管理をサポートします。 • 転送通知: ユーザがアプリケーションを使用していない場合に重要事項を通知します。 ステップ 2: モバイルアプリケーションを試す モバイルアプリケーションを起動し、モバイルデバイスで [Merchandise (商品)] タブとその項目がどのように表 示されるのかを確認します。 1. ダウンロード可能アプリケーションを使用してログインした場合、データへのアクセスを許可するように 要求されます。[OK] をタップして続行します。 2. 最初の画面で、最初の投稿を作成するように要求されます。アクションバーの投稿アクションをタップし ます。 3. 「最初の投稿!」などのテキストを入力し、[共有] をタップします。 4. 左隅の をタップしてナビゲーションメニューを開きます。 10 アプリケーションおよびデータベースを作成する ステップ 2: モバイルアプリケーションを試す 5. 下へスクロールして [さらに表示] をタップします。 6. [Merchandise (商品)] をタップします。 7. モバイルデバイスから新しい商品を簡単に作成できます。[新規] をタップします。 8. 「E–reader」という名前を付けて、[保存] をタップします。 もうひとこと... Salesforce フルサイトと異なり、[ホーム] タブがなく、Warehouse アプリケーションのようには見えません。ま た、[Merchandise (商品)] タブを見つけるのにある程度の労力がかかりました。これはなぜでしょうか? • 各タブは、Salesforce1 ナビゲーションメニューの [最近] セクションのメニュー項目を介して表示されます。 アプリケーションの [Merchandise (商品)] タブは新しいタブであるため、使用を開始するまで [最近] セクショ ンには表示されません。アプリケーションを少し使用すれば、デフォルトタブ ([取引先] や [ケース] など) は、最も頻繁に使用しているタブに置き換わります。 • Salesforce アプリケーション (セールスアプリケーションやカスタム Warehouse アプリケーションなど) は Salesforce1には表示されません。これは、モバイルアプリケーションによって、最も頻繁に参照しているレ コードが判断されるためです。Force.com アプリケーションメニューを使用して、ユーザが定期的に参照す るタブをカスタマイズするのではなく、[最近]セクションのスマート検索項目は、ユーザの最近のオブジェ クトの履歴に基づいて並び替えられます。 • レイアウトやナビゲーションは完全に動的ということではありません。ほぼすべてのモバイルアプリケー ションの項目、アクション、アプリケーション、およびナビゲーションをカスタマイズできます。これに ついては、後のチュートリアルで説明します。 11 アプリケーションおよびデータベースを作成する ステップ 3: モバイルアプリケーションを探索する ステップ 3: モバイルアプリケーションを探索する Salesforce1 には、多くの機能が標準搭載されています。どのような機能があるのか探索してみましょう。 1. まだ新しい商品品目の詳細ページが表示されていると思います。その詳細ページからこのレコードを編集、 コピー、または削除できます。 2. 左にスワイプすると、この品目に関連する活動のページが表示されます。これが関連情報ページです。 3. 詳細ビューから右にスワイプすると、フィードの空白ページが表示されます。何らかの変更を行うと、す ぐにフィード項目がここに表示されます。 4. ページ下部のアクションバーから をタップすると、アクションを表すアイコンのリストが表示されま す。この領域は、アクションメニューと呼ばれます。 5. [投稿] をタップして、アクションを試します。 6. 「在庫に E-reader を追加する」 などのテキストを入力し、[実行] をタップします。E-reader のフィードで 作成した投稿を自動的に参照できます。この項目をフォローしているすべてのユーザがその更新を取得し ます。 7. をタップし、今度は [新規 ToDo] をタップします。 8. [件名] に「価格の入力」と入力し、カレンダーをタップして [期日] に [今日] を選択します。 9. [保存] をタップします。 10. 詳細ページで、左にスワイプして [活動予定] をタップすると、作成した自分の ToDo が表示されます。 コントロールとナビゲーションが異なるだけで、モバイルアプリケーションでフルサイトと同じ機能を得られ ます。 12 アプリケーションおよびデータベースを作成する オブジェクトに項目を追加する もうひとこと... • 関連情報ページには活動のリストが表示されていましたが、他の関連情報を追加できるか疑問に思われた かもしれません。 はい。このページには、メモ、添付ファイル、Visualforce ページ、およびモバイルカード を追加できます。これについては、後で説明します。 • アクションバーで実行できる多数のアクション (投稿の作成、活動の記録、ケースの作成など) を見てきま した。もちろん、トレイから項目を追加または削除したり、順序を変更したりできます。後のレッスンで 説明しますが、これはすべてページレイアウトエディタで行われます。 オブジェクトに項目を追加する レベル: 初級/所要時間: 5 ~ 10 分 最初のチュートリアルでは、倉庫の商品を管理するためのクラウドアプリケーションを作成しました。同時 に、プラットフォームによってアプリケーションのデータベースが作成されました。このチュートリアルで は、アプリケーションのデータベースを構築する方法の初歩を学習します。データベースでは、データが整理 されて管理されるため、ユーザは効率よくデータを使用できます。従来のリレーショナルデータベースでは、 テーブルを使用して、関連性がある可能性のある個別の情報の集合体を、データ型固有の列 (属性) と行 (レコー ド) に編成します。Salesforce では、これらをオブジェクトと呼びます。 DE 組織には、あらかじめ用意されているアプリケーションをサポートする多くの標準オブジェクト (取引先、 商品、ToDo など) が付属しています。ユーザが作成する新しいオブジェクトは、カスタムオブジェクトと呼ば れます。Merchandise オブジェクトはこうしたカスタムオブジェクトの 1 つです。このチュートリアルでは、2 つの新しいカスタム項目 ([Price (価格)] と [Inventory (在庫)]) を追加して、オブジェクトにすでに設定 されている標準項目 ([Name、Owner、CreatedBy、LastModifiedBy]) を補足します。 次の画像は、これから構築するデータモデルのプレビューですが、オブジェクト、項目、リレーションを表示 できます。 13 アプリケーションおよびデータベースを作成する ステップ 1: [Price (価格)] 項目を Merchandise オブジェク トに追加する ステップ 1: [Price (価格)] 項目を Merchandise オブジェクトに追加する 前のステップで Merchandise オブジェクトを作成しましたが、このオブジェクトでは、単価、在庫数など、さま ざまな情報を参照したり、管理したりする必要があります。そのような場合には、カスタム項目を作成して追 加します。 1. [設定] から、[クイック検索] ボックスに「オブジェクト」と入力し、[オブジェクト] を選択します。 2. [Merchandise (商品)] をクリックし、[カスタム項目 & リレーション] 関連リストまで下へスクロールして [新 規] をクリックします。 3. [カスタム項目の新規作成] ウィザードを使用すると、名前、アプリケーションページに使用する表示ラベ ル、ヘルプ情報、表示設定、セキュリティ設定など、新しい項目に関するさまざまな情報をすばやく指定 できます。[Price (価格)] 項目を次のように作成します。 a. [データ型] で [通貨] を選択し、[次へ] をクリックします。 b. 各項目に次のように値を入力します。 • 項目表示ラベル: Price (価格) • 長さ: 16 • 小数点の位置: 2 • [必須項目] チェックボックスをオンにします。 c. その他の値はデフォルトのまま変更せず、[次へ] をクリックします。 d. [次へ] を再度クリックして、項目レベルの表示とセキュリティのデフォルト設定を受け入れます。 e. [保存 & 新規] をクリックして [Price (価格)] 項目を保存し、ウィザードの最初のステップに戻りま す。 ステップ 2: [Quantity (数量)] 項目を Merchandise オブジェクトに追加 する [カスタム項目の新規作成] ウィザードはすでに開始しているので、同じ方法で [Quantity (数量)] 項目を作成でき ます。 1. [データ型] で [数値] を選択し、[次へ] をクリックします。 2. 項目の詳細を次のように入力します。 • 項目の表示ラベル: Quantity (数量) • [必須] を選択します。 3. その他の値はデフォルトのまま変更せず、[次へ]、[次へ] の順にクリックします。 4. [保存] をクリックします。 この図で、Merchandise カスタムオブジェクトの内容を確認しましょう。 14 アプリケーションおよびデータベースを作成する ステップ 2: [Quantity (数量)] 項目を Merchandise オブジェ クトに追加する 1. Merchandise の詳細ページ — Merchandise カスタムオブジェクトに関するあらゆる情報を表示します。この後 のステップで、リレーション、入力規則などの機能を追加していきます。 2. API参照名 — 自動的に生成される値です (オブジェクトの作成では、入力を行う必要はありませんでした)。 プログラムがオブジェクトを参照する場合、この名前が使用されます。すべてのカスタムオブジェクトの API 参照名には末尾に「__c」が付加され、標準オブジェクトと区別できるようになっています。 3. 標準項目 — オブジェクトで自動的に生成される項目が表示されます。たとえば、レコードの作成者を自動 的に追跡する [所有者] という項目もそのような標準項目の 1 つです。 4. カスタム項目 — このステップで作成した項目が表示されています。カスタムオブジェクトと同様に、カス タム項目の API 参照名にも末尾に「__c」が付加されます。 もうひとこと... • これまでに作成したカスタム項目は単純なものですが、複雑な操作も可能です。プラットフォームでは、 通貨、メール、地理位置情報、URL、日付/時間など、ほとんどすべてのタイプのデータを追跡するための サポートが備えられています。項目には静的な値だけが含まれるのではなく、値を数式から派生させたり、 他のオブジェクトから取得したりできます。 • オブジェクト名と項目の表示ラベルだけでなく、API参照名も指定されるのはなぜでしょうか。表示ラベル はアプリケーションでラベル名として使用されます。そのため、ユーザにとってわかりやすい名前を指定 する必要があります。また、このラベルにはスペースを含めることができます。一方、API参照名はアプリ ケーション内部のコードで使用されます。そのため、スペースや許可されていない文字を含めることはで きません。たとえば、[項目の表示ラベル] で「Customer ph# :」と入力した場合、[API 参照名] に入力されるテ 15 アプリケーションおよびデータベースを作成する ステップ 3: アプリケーションを試す キストは「Customer_ph」となります (スペースがアンダースコアに変更され、「#」や「:」は削除されま す)。 ステップ 3: アプリケーションを試す これで、名前、価格、数量など、倉庫品目の項目が揃いました。次は在庫を何件か作成してみましょう。 最初のチュートリアルでは、名前 (Laptop (ラップトップ)) のみの Merchandise レコードを 1 件作成しました。こ のチュートリアルでは、新しい [Price (価格)] 項目と [Quantity (数量)] 項目を含む Merchandise レコー ドをさらに数件作成します。 1. [Merchandise (商品)] タブをクリックして [設定] からアプリケーションに戻ります。 2. [最近使った Merchandise] リストで [Laptop (ラップトップ)] をクリックします。 3. [編集] をクリックし、価格と数量を次のように指定します。 • Price (価格): 500 • Quantity (数量): 1000 先に進む前に、プラットフォームによって自動的に Laptop (ラップトップ) レコードに追加された新しい [Price (価格)] 項目と [Quantity (数量)] 項目を確認します。ウィザードで新しい項目を追加すると、 項目は既存のオブジェクトに追加され、さらにアプリケーションのユーザインターフェースに自動的に公 開されます。このように、手間がかかりません。 4. [保存] をクリックします。 5. E-reader 項目をモバイルチュートリアルで作成した場合は、その項目を同様の方法で編集します。そうでな い場合は、次の項目値を使用して E-reader という新しい Merchandise レコードを作成します。 • Price (価格): 100 • Quantity (数量): 1500 6. [保存 & 新規] をクリックし、次の属性で Desktop (デスクトップ) 用の Merchandise レコードを作成します。 • Price (価格): 1000 • Quantity (数量): 500 7. [保存 & 新規] をクリックし、次の属性で Tablet (タブレット) 用の Merchandise レコードを作成します。 • Price (価格): 300 16 アプリケーションおよびデータベースを作成する 新規オブジェクトを作成する • Quantity (数量): 5000 8. [保存] をクリックします。 もうひとこと... Merchandise レコードを詳しく見てみましょう。Owner、CreatedBy、および LastModifiedBy 項目に注目し ます。これらは、プラットフォームが自動的に管理する標準項目です。ユーザは、標準項目の Name を、カス タム項目の Price や Quantity と同様に編集できます。 サイドバーの [最近使ったデータ] も見てみましょう。この便利な機能では、データベースで最近変更されたレ コードの表示やアクセスができます。このサイドバーのリンク名として、各オブジェクトの Name 項目が表示 されます。 新規オブジェクトを作成する レベル: 初級/所要時間: 10 ~ 15 分 Warehouse アプリケーションをより現実的にするには、請求書で入出庫される注文を追跡する必要があります。 このチュートリアルでは、アプリケーションを次のように拡張する方法を学習します。 • 別のカスタムオブジェクトを追加して請求書を追跡できるようにする。このオブジェクトには、請求書の 状況 (進行中、完了、処理中) を追跡するための Status 項目が必要です。 • アプリケーションにタブを追加してユーザが請求書を処理できるようにする。 • タブを並び替えて移動しやすくする。 ステップ 1: ウィザードを使用して Invoice オブジェクトを作成する 商品の入出庫では請求書が必要になります。このステップでは、Invoice オブジェクトを作成して、それぞれに 一意の番号、状況、説明を含む、複数の請求書明細を作成できるようにします。 1. [設定] から、[クイック検索] ボックスに「オブジェクト」と入力し、[オブジェクト] を選択します。 2. [新規カスタムオブジェクト] をクリックします。 3. 各項目に次のように値を入力します。 • [表示ラベル] 項目に、「Invoice」(請求書) と入力します。 • [表示ラベル (複数形)] 項目に、「Invoices」(請求書) と入力します (お客様の言語設定によっては、 この項目は表示されない場合があります)。 17 アプリケーションおよびデータベースを作成する ステップ 1: ウィザードを使用して Invoice オブジェクト を作成する • [母音で始まる場合はチェック] を選択します。 • [レコード名] 項目に、「Invoice Number」(請求書番号) と入力します (Name を Number で置き換えま す)。 • [データ型] で、[自動採番] を選択します。 • [表示形式] 項目に「INV–{0000}」と入力します (スペースを入れずに指定します)。 • [開始番号] 項目に「0」と入力します。 4. [追加の機能] セクションで、[レポートを許可] を選択します (後でレポートを作成する場合に備えます)。 5. [カスタムオブジェクトの保存後、新規カスタムタブウィザードを起動する] を選択します。 18 アプリケーションおよびデータベースを作成する ステップ 2: [Invoice (請求書)] タブをアプリケーションに 追加する 6. [保存] をクリックします。 もうひとこと... • 母音のチェックボックスによって、適切な冠詞 (「a」や「an」など) が使用されるようになります。 • [自動採番] データ型を選択すると、作成された新規レコードごとに、指定した番号で開始する番号を自動 的に割り当てるようにプラットフォームに指示します。選択した表示形式により、請求書番号は、INV-0000、 INV-0001、と割り当てられていきます。 • 請求書は任意の番号から開始できますが、ここでは INV-0000 から開始して、プラットフォームがゼロベー スであることがわかるようにしています。 ステップ 2: [Invoice (請求書)] タブをアプリケーションに追加する [Merchandise (商品)] タブをクリックすると、Merchandise レコードのリストが表示されます。同様に、請求書を表 示するタブを作成する必要があります。 1. [新規カスタムタブウィザードを起動する] が表示されない場合は、[設定] から [クイック検索] ボックスに 「タブ」と入力し、[タブ] を選択して、[カスタムオブジェクトタブ] セクションで [新規] をクリックしま す。次に、Invoice オブジェクトを選択します。 2. [タブスタイル] ルックアップで、[フォーム] を選択し、[次へ] をクリックして再度 [次へ] をクリックしま す。 3. Warehouse アプリケーションにこの新しいタブを表示します。[カスタムアプリケーションに追加] ページで、 [Warehouse (倉庫)] 以外のすべてのアプリケーションの横にあるチェックボックスをオフにします。 4. [保存] をクリックします。 19 アプリケーションおよびデータベースを作成する ステップ 3: アプリケーションのタブを並び替える ステップ 3: アプリケーションのタブを並び替える 画面上部に並んだタブを見ると、新しい [Merchandise (商品)] タブが [Invoice (請求書)] タブの横にありません。タ ブの順序は自由に変えることができるため、この 2 つのタブを隣同士にしましょう。 1. [設定] から、[クイック検索] ボックスに「アプリケーション」と入力し、[アプリケーション] を選択して、 Warehouse アプリケーションの横にある [編集] をクリックします。 2. [選択されたタブ] リストで、[Invoices (請求書)] を選択し、上矢印を使用して [Merchandise (商品)] の下に移動し ます。 3. [保存] をクリックし、タブの表示を確認します。 ステップ 4: [Status (状況)] 項目を Invoice オブジェクトに追加する 現時点で請求書を作成しようとしても、あまり役に立ちません。すべて標準の自動管理された項目であるた め、変更できる項目がありません。このステップでは、Invoice オブジェクトを拡張して新しい [Status (状 況)] 選択リスト項目を追加し、各請求書の状況を追跡できるようにします。 1. [設定] から、[クイック検索] ボックスに「オブジェクト」と入力し、[オブジェクト] を選択して [請求書] を クリックします。 2. [カスタム項目 & リレーション] 関連リストまで下方向へスクロールして [新規] をクリックします。 3. [データ型] で [選択リスト] を選択し、[次へ] をクリックします。 4. 各項目に次のように値を入力します。 a. 項目の表示ラベル: Status (状況) b. 表示されたボックスに、1 行に 1 エントリずつ次の選択リスト値を入力します。 Open Closed Negotiating Pending c. [最初の値をデフォルト値とする] を選択します。 d. [ヘルプテキスト] 項目で、「Choose a value from the drop-down list」(ドロップダウンリスト から値を選択) と入力します。 20 アプリケーションおよびデータベースを作成する ステップ 5: アプリケーションを試す 5. その他の値はデフォルトのまま変更せず、[次へ]、[次へ]、[保存] の順にクリックします。 もうひとこと... 次のステップに進む前に、[Status (状況)] 項目に追加したヘルプテキストを思い出してください。ユーザ がポインタを [Status (状況)] 項目の上に置くと、指定したヘルプテキストがポップアップバブルに表示さ れます。このチュートリアルの範囲ではありませんが、コードを 1 行も書かずに、アプリケーションの表示ラ ベルとヘルプテキストに独自の翻訳を作成して複数の言語をサポートできます。とても便利です。 ステップ 5: アプリケーションを試す アプリケーションはまだ完成していませんが、請求書を作成して保存できます。請求書にまだ足りない項目が あっても問題ありません。Invoice オブジェクトにさらに項目を追加すると、すでに存在するレコードに新しい 項目が自動的に表示されます。 1. [Invoices (請求書)] タブをクリックします。 2. [新規] をクリックします。請求書の状況を選択できますが、[Open (進行中)] のままにしておきます。 3. [保存] をクリックします。 4. [Invoices (請求書)] タブを再度クリックすると、番号 INV-0000 の新しい請求書が表示されます。今度は [Closed (完了)] 状況の新しい請求書をもう 1 つ作成します。 5. [Invoices (請求書)] タブを再度クリックすると、2 つの請求書が表示されます。 21 アプリケーションおよびデータベースを作成する オブジェクトを関連付ける データベースは充実してきましたが、まだ不完全です。請求書は、品目 (注文された商品の種類と数量の一覧) で構成されます。次のチュートリアルでは、さらに Line Item オブジェクトを追加して、作成済みの他のオブ ジェクトに関連付けます。 もうひとこと... • ここではまだ数件のレコードしかありませんが、レコードが数百件もあったらページの外観はどうなるで しょうか。利便性を考慮し、タブのデフォルトリストビューには最近使ったレコードのみが表示され、標 準のナビゲーションコントロールを使用してレコードをページ単位で表示できます。 • 他にもリストビューという組み込み機能があります。リストビューは、カスタマイズされたデータの表示 方法で、定義した条件に基づいて必要な項目のみが表示されます。たとえば、金額が 1000 ドルより大き い、進行中の請求書のみに関心があるとします。それらのレコードのみを表示するカスタムリストビュー を作成できます。これは、後のチュートリアルで説明します。 オブジェクトを関連付ける レベル: 初級/所要時間: 10 ~ 15 分 ここまでのチュートリアルでは、独立したオブジェクトを作成してきました。Merchandise オブジェクトの項目 には、Invoice オブジェクトの項目との関連付け (リレーション) はありません。このチュートリアルでは、Line Item オブジェクトを作成します。この新しいオブジェクトの項目には、Invoice オブジェクトと Merchandise オブ ジェクトの両方とのリレーションを設定します。 • 請求書には 1 つ以上の品目が含まれます。実際には、特定の請求書がその品目を「所有」していると考え ることもできます。この種のリレーションは主従関係と呼ばれ、詳細 (従) レコードがマスタ (主) レコード を参照します。 • Line Item と Merchandise の間には、参照関係と呼ばれる別の種類のリレーションもあります。以前に Status 項目で類似のものを見ました。新しい請求書を作成するとき、選択リストから状況を選択できます。一方、 参照項目の値は、選択リストから静的にではなく、カスタムオブジェクトから動的に取得されます。 主従関係と参照関係は、説明だけでは紛らわしいかもしれませんが、実装してみると非常に明確になります。 22 アプリケーションおよびデータベースを作成する ステップ 1: Line Item オブジェクトを作成する ステップ 1: Line Item オブジェクトを作成する 請求書は複数の請求書品目で構成され、各品目は所定の価格で販売された商品品目の数を表します。ここでは まず Line Item オブジェクトを作成し、後でそのオブジェクトを Invoice オブジェクトと Merchandise オブジェクト に関連付けます。 1. [設定] から、[クイック検索] ボックスに「オブジェクト」と入力し、[オブジェクト] を選択します。 2. [新規カスタムオブジェクト] をクリックし、カスタムオブジェクト定義を入力します。 • 表示ラベル: Line Item (品目) • 表示ラベル (複数形): Line Items (品目) • レコード名: Line Item Number (品目番号) • データ型: Text (テキスト) 23 アプリケーションおよびデータベースを作成する ステップ 2: [Quantity (数量)] 項目を追加する 3. [追加の機能] オプションで、[レポートを許可] を選択し、[保存] をクリックします。 もうひとこと... このステップでは、[Line Item Number (品目番号)] 項目に数値を手動で入力しました。数値を指定するなら、[Invoice (請求書)] のように自動採番にしてもよいはずですが、あえてテキスト項目にしているのには理由があります。 それは、この項目はテキスト情報として処理したほうが扱いやすく、チュートリアルの説明がわかりやすくな るためです。 ステップ 2: [Quantity (数量)] 項目を追加する 各品目では、注文数量を追跡する必要があります。そのため、次に [Quantity (数量)] 項目を追加する必要があり ます。Merchandise オブジェクトにも、在庫数を追跡するための [Quantity (数量)] 項目があります。項目を作成す る手順は同じです。 1. 品目の詳細ページで、[カスタム項目 & リレーション] まで下へスクロールして、[新規] をクリックします。 2. [データ型] で [数値] を選択し、[次へ] をクリックします。 3. 項目の詳細を次のように入力します。 • 項目の表示ラベル: Quantity (数量) 24 アプリケーションおよびデータベースを作成する ステップ 3: 品目を請求書に関連付ける • [必須] を選択します。 4. その他の値はデフォルトのまま変更せず、[次へ]、[次へ]、[保存] の順にクリックします。 ステップ 3: 品目を請求書に関連付ける データモデルを表すオブジェクトをすべて作成できたので、次はそれらのオブジェクトを相互に関連付ける必 要があります。品目は請求書 (請求書は複数の品目から構成される) と商品 (品目は商品の価格情報を取得する) の両方に関連付けられます。 1. Line Item オブジェクトの詳細ページを表示し、[カスタム項目 & リレーション] 関連リストまでスクロールし て、[新規] をクリックします。 2. [データ型] で [主従関係] を選択し、[次へ] をクリックします。 3. [関連先] 項目で Invoice カスタムオブジェクトを選択し、[次へ] をクリックします。 4. [項目の表示ラベル] と [項目名] に「Invoice」(請求書) と入力します。 5. 続く 3 つの画面では、すべてデフォルトの設定のまま [次へ] をクリックします。 6. 最後の画面で、[保存 & 新規] をクリックします。 もうひとこと... この主従関係は、請求書がその品目を「所有」したと考えることもできます。つまり、請求書が複数の品目を 包含できるようになりました。主従関係には、積み上げ集計項目がサポートされるため子レコードの情報を集 計できるという利点があります。この機能については、後続のチュートリアルで取り上げます。 ステップ 4: 商品品目をルックアップする ここでは、参照関係というもう 1 つのリレーションを作成する必要があります。名前が示すように、参照関係 では項目が別のオブジェクトを動的にルックアップ (参照) して情報を取得します。前のステップで [保存 & 新 規] を使用したので、すでに [カスタム項目の新規作成] ダイアログは開いています。 1. [データ型] で [参照関係] を選択し、[次へ] をクリックします。 2. [関連先] 項目で [Merchandise (商品)] を選択し、[次へ] をクリックします。 3. [項目の表示ラベル] と [項目名] に「Merchandise」(商品) と入力します。 4. 設定内容が次のようになっていることを確認して、[次へ] をクリックします。 25 アプリケーションおよびデータベースを作成する ステップ 5: アプリケーションを試す 5. 後に続く画面ではデフォルトの設定のまま、[次へ] をクリックし、[次へ] を再度クリックします。 6. 最後の画面で、[Merchandise Layout (商品のレイアウト)] および [関連リストを、ユーザの既存のカス タマイズ設定に追加する] のチェックボックスをオフにします ([Merchandise (商品)] ページに品目リストを表 示しない)。 7. [保存] をクリックします。 もうひとこと... この時点で、主従関係 (Invoice レコードが複数の Line Item を包含できる) と参照関係 (特定の Line Item を 1 つの Merchandise に関連付ける) の 2 つのリレーションがあります。 ステップ 5: アプリケーションを試す 前掲のチュートリアルで述べたように、オブジェクトを作成すると自動的にユーザインターフェースが作成さ れ、そのオブジェクトのレコードを参照、編集、削除、更新できるようになります。作成したオブジェクトに リレーションを設定すると、さらに、関連先オブジェクトのレコードを操作することも可能になります。この ステップではその手順を説明します。すべての動作を確認するために、もう 1 件請求書レコードを作成しま す。 1. [Invoices (請求書)] タブ、[新規]、[保存] の順にクリックします。 2. [New Line Item (新規品目)] をクリックします。 3. [新規 Line Item] に「1」と入力します。 4. [新規 Line Item] に「2」と入力します。 5. [Merchandise (商品)] 項目に、laptop の最初の数文字を入力し、[検索] アイコンをクリックします。 26 アプリケーションおよびデータベースを作成する ステップ 6: スキーマを表示する 6. [Laptop (ラップトップ)] をクリックしてから、[保存] をクリックします。 もうひとこと... 在庫の商品に詳しい場合は、個別の商品の最初の数文字を入力して [保存] をクリックしてもかまいません。 [検索] アイコンをクリックする必要はありません。システムで自動的に商品が検索され、レコードを保存する ときに追加されます。このように、豊富な機能が標準搭載されています。 ステップ 6: スキーマを表示する これで 3 つのカスタムオブジェクト、複数の項目、2 種類のリレーションが設定できました。すべて理解でき ましたでしょうか。できていなくても問題ありません。ここでは「百聞は一見にしかず」ということわざに従 いましょう。 1. [設定] で、[Schema Builder (スキーマビルダー)] をクリックします。 2. 左ペインで、[選択解除] をクリックしてスキーマから標準オブジェクトを削除します。 3. [Merchandise (商品)]、[Invoice (請求書)]、および [Line Item (品目)] のチェックボックスをオ ンにします。 4. 必要に応じて、[自動レイアウト] をクリックしてオブジェクトを並び替えるか、手動でレイアウトを調整 します。 27 アプリケーションおよびデータベースを作成する まとめ スキーマビルダーでは、オブジェクト、項目、およびリレーションが標準のエンティティリレーション図で表 されます。リレーションでは、線の端にある「鳥の足」が、1 対多リレーションの「多」側を示します (1 つの 請求書が複数の品目を包含できる)。スキーマの確認が終了したら、[閉じる] をクリックします。 メモ: スキーマビルダーは、スキーマの表示だけでなく、新しいオブジェクトと項目を作成するためのド ラッグアンドドロップ開発もサポートしています。ただし、ここまで使用してきたウィザードとは異な り、スキーマビルダーで追加した項目はページレイアウトに自動的に追加されません。新しい項目をユー ザに表示するには、ページレイアウトを設定する必要があります。項目の表示設定とページレイアウト は、後続のチュートリアルで取り上げます。 まとめ ここまでで、Merchandise、Invoice、Line Item という 3 つのカスタムオブジェクトを作成し、各オブジェクトにテ キスト、数値、通貨などを表すさまざまなカスタム項目を追加しました。これらのうち 2 つの項目にはシステ ムで生成された値が設定されました。[状況] 選択リストにはデフォルト値として「Open (進行中)」が設定さ れ、さらに [請求書番号] 項目には自動的に自動採番データ型の番号が割り当てられます。品目ごとに値を入 力した [Quantity (数量)] など、ユーザ定義項目も作成しました、最後に、このチュートリアルでは他のオ ブジェクトから値を取得する 2 つのリレーション項目を作成して基本データモデルを拡張しました。 主従関係の場合は、情報の集計ができるため、各請求書に複数の品目を包含して、それらの品目を集計するこ とができます。参照関係の場合では、動的なコンテンツを取り込めるため、品目の各商品には自動的に価格が 取得されます。リレーションには他にも利点があります。各請求書品目の価格を合算して請求書の合計を集計 したり、ユーザインターフェースで関連するレコードに移動したりできます。次のチュートリアルでは、こう した操作を宣言して行う方法を学習します。その後にはコードで実行する方法も学習します。次に進みましょ う。 28 アプリケーションおよびデータベースを作成する カスタムオブジェクトのインポートウィザードを使用し てデータを読み込む カスタムオブジェクトのインポートウィザードを使用してデータ を読み込む 所要時間: 5 ~ 10 分 ほとんどの組織では、ドキュメントやスプレッドシートなどのさまざまな場所に重要なデータを保持します。 このチュートリアルでは、個人スプレッドシートに現在含まれているデータを、組織の全員が参照および管理 できる Warehouse アプリケーションに読み込む方法を学習します。 データの読み込み方法にはいくつかありますが、このチュートリアルではカスタムオブジェクトのインポート ウィザードを使用する方法のみを示します。このウィザードでは、ソースとして CSV ファイルを使用します。 CSV ファイルはテキスト形式のファイルであり、各項目はコンマで区切られているため「カンマ区切り値」と 呼ばれます。 前提条件 テキストエディタ このチュートリアルでは、テキストエディタと、コンピュータからファイルをアップロードする機能が必 要です。タブレットまたはモバイルデバイスを使用している場合、その機能によってはこのチュートリア ルを完了できないことがあります。 ステップ 1: データファイルを作成する 最初のステップでは、このチュートリアルで使用できる簡単なデータファイルを作成します。 1. 時間を節約するため、CSV 形式の必要なテキストファイルを次の URL からダウンロードします。 https://raw.github.com/joshbirk/workshop2013/master/files/Merchandise.csv 2. ファイルを右クリックして、ローカルに保存します。ファイルは次のようになります。 "Merchandise Name","Price","Quantity" "17 Inch Monitor",99,200 "21 Inch Monitor",129,200 "25 Inch Monitor",179,200 29 アプリケーションおよびデータベースを作成する ステップ 2: データを読み込む もうひとこと... CSV ファイルでは次の点に注意してください。 • 項目名は、最初の行にあります。項目名は、Merchandise オブジェクトの項目ラベルと一致します。 • テキスト項目が引用符で囲まれるため、テキスト項目内に空白や特殊文字を含めることができます。数値 データ型の項目には、引用符は不要です。 ステップ 2: データを読み込む CSV からカスタムオブジェクトへのデータの読み込みは、カスタムオブジェクトのインポートウィザードを使 用すると簡単に行えます。 1. [設定] の [クイック検索] 項目に「インポート」と入力し、[カスタムオブジェクトのインポート] をクリック します。 2. ページ下部の [インポートウィザードの開始] をクリックします。 3. ウィザードが開始したら、[Merchandise (商品)] を選択し、[次へ] をクリックします。 4. [いいえ] を選択し、[次へ] をクリックします。 5. [いいえ] を選択し、[次へ] をクリックします。 6. [ファイルを選択] または [参照...] をクリックし、作成済みのデータファイルを選択して [次へ] をクリックし ます。 7. [項目の対応付け] ステップでは、CSV ファイルのヘッダーを Salesforce の項目名と一致させることができま す。これは CSV ファイルですでに行われているため、[次へ] をクリックします。 30 アプリケーションおよびデータベースを作成する ステップ 3: アプリケーションを試す 8. [インポート開始] をクリックしてから、[完了] をクリックします。 もうひとこと... ウィザードを完了したら、プラットフォームによりデータの読み込みがキューに入ります。大量のデータの場 合は、データの読み込みに時間がかかることがあります。データの読み込みが完了すると、メールで通知され ます。この処理を詳しく監視するには、[設定] で [インポート] をクリックします。 ステップ 3: アプリケーションを試す データの読み込みが完了したら、アプリケーションに戻り、新しい Merchandise レコードが存在することを確認 します。 1. [Merchandise (商品)] タブをクリックします。 2. [ビュー] ドロップダウンリストの横で [すべて] が選択されていることを確認し、[Go!] をクリックします。 31 ユーザインターフェースをカスタマイズする レベル: 初級/所要時間: 30 ~ 40 分 基本アプリケーションの作成、オブジェクトの作成や関連付け、および標準ユーザインターフェースのカスタ マイズの方法についてはすでに把握しています。このチュートリアルでは、高度なポイント & クリック開発に ついて説明し、基盤となるデータベースをさらに拡張して、UI を改善しながらステップを進めていきます。 データのビューを作成する レベル: 初心者; 所要時間: 5 分 アプリケーションのカスタムオブジェクトタブはナビゲーション要素であり、クリックすると対応するオブ ジェクトのデータが表示されます。たとえば、Warehouse アプリケーションの [Invoices (請求書)] をクリックす ると、最近参照した請求書のデフォルトリストビューが表示されます。このチュートリアルでは、ビューに関 する詳細や、特定のニーズを満たすようにカスタムビューを作成する方法について学習します。 ステップ 1: 請求書のリストを表示する [すべて] ビューでは、レコードがアルファベット順に並び替えられ、長いリストにはナビゲーションコント ロールが提供されます。このように、標準搭載された複数のデフォルトビューで請求書のリストを表示できま す。ただし、カスタムビューが必要な場合はどうすればよいでしょうか。問題ありません。 1. Warehouse アプリケーションをクリックして、[Invoices (請求書)] カスタムオブジェクトタブをクリックしま す。デフォルトでは、[Recent Invoices (最近使った請求書)] ビューに最近参照したレコードが表示されます。 ビューの右上隅に選択リストがあります。この選択リストを [最近作成したデータ] や他のさまざまなオプ ションに変更して、ビューの表示を更新できます。 32 ユーザインターフェースをカスタマイズする ステップ 2: 新規ビューを作成する 2. [Go!] をクリックして [Recent Invoices (最近使った請求書)] ビューから切り替え、すべての請求書のリストを表 示します。 [すべて] ビューでは、レコードがアルファベット順に並び替えられ、長いリストにはナビゲーションコン トロールが提供されます。 もうひとこと... 標準搭載されている複数の事前構築されたビューでは、請求書のリストを表示し、ナビゲーションや並び替え ができます。ただし、カスタムビューが必要な場合はどうすればよいでしょうか。完了した請求書のみが必要 であるとします。問題ありません。 ステップ 2: 新規ビューを作成する このステップでは、[Closed (完了)] の状況の請求書のみを示すカスタムビューを作成します。 1. [Invoices (請求書)] タブで [新規ビューの作成] をクリックし、「Closed Invoices」(完了した請求書) という 名前を付けます。 33 ユーザインターフェースをカスタマイズする ステップ 2: 新規ビューを作成する 2. [All Invoices (すべての請求書)] を選択して、「状況 次の文字列と一致する Closed」という検索条件 を指定します。 3. カスタムビューには選択する項目のみが表示されます。[Invoice Number (請求書番号)]、[Status (状 況)]、および [Last Modified Date (最終更新日)] のみを使用して、[選択済みの項目] リストを更新し ます。 4. [自分にのみ表示] を選択し、[保存] をクリックします。 34 ユーザインターフェースをカスタマイズする ステップ 3: アプリケーションを試す もうひとこと... このビューの表示を制限したことに注目してください。会社内のすべてのユーザやユーザグループを対象にし てデータのビューを作成したり、自分のみが表示できるビューを作成したりすることができるため、これは非 常に重要な機能です。 ステップ 3: アプリケーションを試す ここでは、アプリケーションの新しいビューをテストします。 1. アプリケーションの任意の場所から新しい [Closed Invoices (完了した請求書)] ビューを表示するには、[Invoices (請求書)] タブをクリックし、[Closed Invoices (完了した請求書)] を選択して、[Go!] をクリックします。 2. 画面が更新されても、新しい [Closed Invoices (完了した請求書)] ビューに請求書が含まれていない場合があり ます。この場合、1 つ以上の請求書を編集して、状況を [Closed (完了)] に変更します。このようにして完了 した請求書に戻ると、カスタムビューの便利な機能を確認できます。 もうひとこと... この時点で、ビューはカスタムオブジェクトのデータの参照のみの表示と思うかもしれませんが、そうではあ りません。新しい [Closed Invoices (完了した請求書)] ビューで、特定の請求書の [Status (状況)] 項目に移動し ます。その項目がビューから直接編集可能なインラインであることを示す鉛筆のアイコンが項目に表示されま す。[Status (状況)] 項目をダブルクリックすると、項目を編集する方法が提示されます。 35 ユーザインターフェースをカスタマイズする ページレイアウトを変更する ページレイアウトを変更する レベル: 初級/所要時間: 20 ~ 30 分 「データのビューを作成する」 (ページ 32)では、データリストのカスタマイズしたビューを作成する方法を 学習しました。また、この他にも特定のレコードの詳細ページの表示内容 (ページレイアウト) をカスタマイズ することもできます。請求書をクリックすると、この画像のようなすべての請求書のデフォルトのページレイ アウトを確認できます。 このチュートリアルでは、ページレイアウトの詳細と、その変更方法を学習します。 36 ユーザインターフェースをカスタマイズする ステップ 1: ページレイアウトエディタを開く ステップ 1: ページレイアウトエディタを開く 次のいずれかの方法を使用して、ページレイアウトエディタを開きます。 • 編集するレコードページで、次の操作を実行します。 – [レイアウトを編集する] をクリックします。 – 右側の [クイックアクセス] メニューをクリックし、[レイアウトを編集する] を選択します。 • [設定] から、[クイック検索] ボックスに「オブジェクト」と入力し、[オブジェクト] を選択してレイアウト を変更するオブジェクトをクリックし、[ページレイアウト] セクションまでスクロールダウンして、編集 するレイアウトの横にある [編集] をクリックします。 ステップ 2: ページレイアウトについて理解する エディタには上部と下部のセクションがあります。上部セクションはパレットと呼ばれる格納式ツールボック スです。下部セクションはプレビューペインです。ページをスクロールダウンすると、それに従ってパレット が一緒に移動するため、長いページを編集するのも簡単です。 ページレイアウトには、関連情報がまとめられた複数のセクションがあります。 • 強調表示パネルは、主な情報をページ上部に表示するのに便利です。 • [Salesforce Classic パブリッシャーのクイックアクション] セクションは、Salesforce フルサイトのパブリッシャー に表示されるアクションをカスタマイズする場合に便利です。 37 ユーザインターフェースをカスタマイズする ステップ 3: ページレイアウトに項目を再配置する • [Salesforce1 および Lightning Experience アクション] セクションでは、Salesforce1 に表示されるアクションをカス タマイズできます。 • 請求書の詳細の上部に、標準ボタン ([編集]、[削除] など) とカスタムボタン用の領域があります。 • その下に、請求書の詳細があります。請求書の詳細には、次の 3 つのデフォルトセクションがあります。 – 通常、ユーザがレコードの (作成および更新) ライフサイクル中のいくつかの時点で操作できる項目が情 報に含まれています。デフォルトで、このセクションには項目用の 2 つの列が含まれています。 – 通常、システム情報にはプラットフォームによって自動的に維持される項目、つまりユーザが編集でき ない項目が含まれます。このセクションも、2 列のレイアウトで構成されています。 – 通常、カスタムリンクにはカスタムナビゲーションリンクが含まれています。 • 請求書の詳細の下に、モバイルカードのセクションがあります。デフォルトでは、このセクションは空で す。モバイルカードは Salesforce1 にのみ表示されます。 • ページの最後には、関連品目の関連リストが表示されます。 ページレイアウトには多数の変更を行えます。 1. セクションタイトルにマウスポインタを置きます。マウスポインタの形状が変わり、他のセクションから 相対的な新しい場所に、セクションをドラッグできることが示されます。 2. いずれかのセクションの右上にマウスポインタを置きます。2 つのボタンが表示されます。1 つはセクショ ンを削除するもので (これをクリックしないでください)、もう 1 つはプロパティを編集するためのもので す。ここで、 をクリックします。セクションの名前 (デフォルトのセクション以外)、セクションヘッ ダーを表示するタイミング、セクションレイアウト (1 列または 2 列)、およびセクション項目間のタブキー の順序を編集できます。[キャンセル] をクリックします。 ステップ 3: ページレイアウトに項目を再配置する このステップでは、ページレイアウトの請求書の詳細領域にいくつか簡単な変更を行います。 1. [情報] セクションの (場所については上記の説明を確認してください) をクリックして、セクションレイ アウトを 1 列に変更します。[OK] をクリックします。 2. [Owner (所有者)] を [Status (状況)] 項目の上にドラッグします。完了すると、次のような変更され た請求書の詳細領域が表示されます。 38 ユーザインターフェースをカスタマイズする ステップ 4: 項目を関連リストに追加する ステップ 4: 項目を関連リストに追加する 現状の品目の関連リストには、品目番号しかなく、情報が足りません。このステップでは、新しい項目をいく つか追加して関連リストを改善します。 1. [関連リストのプロパティ] ([Line Items (品目)] セクションの上にあるレンチアイコン) をクリックし、 [Merchandise (商品)] と [Quantity (数量)] を [選択済みの項目] リストに追加して、[OK] をクリック します。ページレイアウトエディタに戻ると、次のような関連リストプレビューが表示されます。 2. これで、ページレイアウトの変更が終了しました。ページ上部のツールボックスで、[Save (保存)]をクリッ クします。 ステップ 5: アプリケーションを試す 作業の結果を確認しましょう。 1. [Invoices (請求書)] タブをクリックしてアプリケーションに戻ってから、少なくとも 1 品目を含む請求書をク リックします。 2. 請求書の詳細領域の項目が再配置され、[Line Items (品目)] 関連リストに新しい項目が表示されています。 39 ユーザインターフェースをカスタマイズする ステップ 6: ミニページレイアウトを編集する ステップ 6: ミニページレイアウトを編集する Warehouse アプリケーション内で、[最近使ったデータ] サイドバーを見てみましょう。具体的にいえば、最近の 請求書の上にポインタを置くと、ミニページがポップアップして請求書情報のプレビューが表示されます。以 下の図のように、情報はあまり充実していません。 このデフォルトのミニページレイアウトも簡単に変更できます。 1. 請求書のページレイアウトエディタに戻ります。 2. パレットの上部にある [ミニページレイアウト] をクリックします。 3. [請求書番号]、[所有者]、および [状況] を選択済み項目のリストに追加し、[保存] をクリックします。改 善されたポップアップは、次のようになります。 40 ユーザインターフェースをカスタマイズする モバイルアクセス用にレイアウトをカスタマイズする モバイルアクセス用にレイアウトをカスタマイズする レベル: 初級/所要時間: 25 ~ 30 分 適切に設計されたページレイアウトは、デスクトップデバイスとモバイルデバイスの両方に使用できます。こ れまでのチュートリアルでは、大きくてモバイル画面に不適切なオブジェクトはありませんでした。ただし、 100 個の項目を含むようなオブジェクトを携帯端末で使用するのが困難であることは容易に想像できます。こ のような場合は、モバイル専用のページレイアウトを作成した方が便利です。前に変更したページレイアウト と同様に、モバイル向けに最適化されたレイアウトはさまざまなロールに割り当てることができるため、主に 携帯端末を使用するユーザはモバイルバージョンを使用し、デスクトップ専用ユーザは標準バージョンを使用 できます。 このチュートリアルでは、次の操作を行う方法を学習します。 • モバイルデバイス向けに最適化されるように既存のページレイアウトを変更する — ユーザがデスクトップ デバイスおよびモバイルデバイスからアプリケーションにアクセスする場合は、さまざまなフォーム要素 で操作できるようにページレイアウトを最適化してください。ただし、ユーザがほとんどすべての場合に モバイルデバイスしか使用しない場合は、モバイル固有のレイアウトの方が生産性が高まります。 • コンパクトレイアウトを作成する — フルサイトでのレコードの [特長] 領域およびフィード項目に表示され る項目は、コンパクトレイアウトによって決まります。コンパクトレイアウトは、レコードの重要な項目 を一目で確認できるよう表示するための優れた手段です。 • モバイルカードを関連情報ページに追加する — モバイルカードには、参照情報または Visualforce ページを 表示できます。 メモ: グローバルアクションの表示場所を決定する、グローバルパブリッシャーレイアウトと呼ばれる別 の種類のモバイルレイアウトもあります。このレイアウトについては、「グローバルアクションを使用 してレコードをすばやく作成する」 (ページ 103)でグローバルアクションを作成するときに学習します。 ステップ 1: モバイルユーザ用にページレイアウトを作成する Warehouse アプリケーションのオブジェクトには、モバイルページレイアウトが必要である理由を示すのに十 分な項目がないため、この手順では取引先オブジェクトのページレイアウトをカスタマイズします。このオブ ジェクトは Warehouse アプリケーションでは使用されませんが、モバイルレイアウトの練習に有用です。 1. まず、(+) タブをクリックしてから [取引先] をクリックして、既存の取引先に移動します。 41 ユーザインターフェースをカスタマイズする ステップ 1: モバイルユーザ用にページレイアウトを作成 する 2. [ビュー] ドロップダウンリストで、[すべての取引先] を選択します。 3. 最初の取引先 [Burlington Textiles Corp of America] をクリックします。このページにはさまざまな情報が含ま れているため、小さい画面で移動するのは困難な場合があります。 4. [設定] から、[クイック検索] ボックスに「取引先」と入力し、[ページレイアウト] を選択します。 5. ページレイアウトに「取引先モバイルレイアウト」という名前を付け、[保存] をクリックします。 6. モバイル技術者にとって重要な項目をいくつか追加します。[取引先 部門]、[住所(納入先)]、および [電 話] 項目を、プレビューペインの [項目] セクションにドラッグします。 7. パレットで [関連リスト] カテゴリをクリックし、[ケース] および [取引先責任者] 要素を [関連リスト] セク ションにドラッグします。関連リストが、Salesforce1 でレコードの関連情報ページに表示されます。この ページレイアウトに割り当てられたモバイルユーザが取引先レコードの関連情報を参照すると、プレビュー カードが表示され、それをクリックしてその取引先のケースと取引先責任者に関する情報を表示できます。 42 ユーザインターフェースをカスタマイズする ステップ 2: コンパクトレイアウトを使用して主要項目 を表示する 8. [保存] をクリックし、ユーザのカスタマイズ済み関連リストを上書きするかどうかが尋ねられたら、[いい え] をクリックします。 9. 次に、モバイル向けに最適化されたページレイアウトをユーザプロファイルに割り当てる必要があります。 [ページレイアウトの割り当て] をクリックしてから、[割り当ての編集] をクリックします。 10. [システム管理者] をクリックします。 11. [使用するページレイアウト] ドロップダウンリストから、[Account Mobile Layout (取引先モバイルレイアウト)] を選択し、[保存] をクリックします。 12. これで、モバイル向けに最適化されたレイアウトを使用して、取引先オブジェクトにアクセスできるよう になりました。では、Salesforce1 に移動し、ナビゲーションメニューの [取引先] をタップして試してみま しょう。 フルサイトから取引先の Burlington Textiles Corp of America にアクセスしたばかりであるため、それが [最近の 取引先] リストに表示されています。 13. その取引先をタップします。 もうひとこと... 通常、モバイルユーザ用にページレイアウトを作成したら、それをモバイルユーザのプロファイルに追加しま す。ここでは、ログアウトとユーザの切り替えをはぶいて操作を簡単にするために、ページレイアウトを自分 のプロファイルに追加しました。 ステップ 2: コンパクトレイアウトを使用して主要項目を表示する 前のチュートリアルでは、標準ページレイアウトを使用してモバイルユーザ用にレイアウトを最適化する方法 を学習しました。ただし、モバイル環境でデータの表示方法をカスタマイズできる方法は、ページレイアウト だけではありません。Salesforce1 では、コンパクトレイアウトを使用して、レコードの主要項目が一目でわか るように表示されます。 このチュートリアルでは、カスタムコンパクトレイアウトを作成し、それを Merchandise オブジェクトの主コン パクトレイアウトとして設定します。 1. [設定] から、[クイック検索] ボックスに「オブジェクト」と入力し、[オブジェクト] を選択して Merchandise オブジェクトをクリックします。 2. [コンパクトレイアウト] 関連リストが表示されるまでスクロールダウンし、[新規] をクリックします。 3. [表示ラベル] 項目に「Merchandise Compact Layout」(Merchandise コンパクトレイアウト) と入力します。 4. [Merchandise Name (商品名)]、[Price (価格)]、および [Quantity (数量)] を [選択済み項目] リス トに移動し、[保存] をクリックします。 5. 次に、これを主コンパクトレイアウトに設定する必要があります。[コンパクトレイアウトの割り当て] を クリックします。 6. [割り当ての編集] をクリックし、作成したコンパクトレイアウトを選択して [保存] をクリックします。 43 ユーザインターフェースをカスタマイズする ステップ 3: モバイルカードを関連情報ページに追加す る もうひとこと... • この練習では 3 つの項目しか使用しませんでしたが、コンパクトレイアウトに割り当てる最初の 4 つの項 目が、各レコードビューの上部にあるレコードの [特長] セクションに入力されます。 • Salesforce1 にはコンパクトレイアウトを作成する必要はありません。コンパクトレイアウトを作成しない と、参照のみのデフォルトコンパクトレイアウトを使用してレコードが表示されます。カスタムコンパク トレイアウトを作成したら、デフォルトを新しいレイアウトで置き換えることができます。 • コンパクトレイアウトはモバイル専用ではありません。デスクトップブラウザから Salesforce にアクセスす る場合は、コンパクトレイアウトによってフィード項目の作成時にどの項目が表示されるかが決まります。 ステップ 3: モバイルカードを関連情報ページに追加する 関連情報ページは、「ステップ 3: モバイルアプリケーションを探索する」 (ページ 12)ですでに参照している ため、デフォルトではこのページに活動が表示されます。レコードの詳細ページで左にスワイプして、関連情 報ページに移動します。モバイルカードを使用して、関連ルックアップカードおよび Visualforce ページカード をこのレコードの関連情報ページに追加できます。 このステップでは、関連ルックアップカードを Merchandise オブジェクトに追加します。Merchandise には、すで に自動的に生成された参照項目 [最終更新者] があるため、それを使用できます。 1. [設定] から、[クイック検索] ボックスに「オブジェクト」と入力し、[オブジェクト]を選択して[Merchandise (商品)] を選択し、Merchandise のページレイアウトを開きます。 2. [ページレイアウト] セクションまでスクロールダウンし、Merchandise レイアウトの横にある[編集]リンクを クリックします。 3. パレットで、[拡張ルックアップ] カテゴリをクリックします。 44 ユーザインターフェースをカスタマイズする ソーシャルコラボレーションを有効にする 4. [最終更新者] を [モバイルカード] セクションにドラッグし、[保存] をクリックします。 5. これをテストするには、モバイルデバイスに戻り、商品を確認します。 6. 左にスワイプして関連情報ページにアクセスすると、追加したモバイルカードが表示されます。 もうひとこと... • まだ Visualforce ページはありませんが、モバイル用に有効にすると、今行ったようにそれらのページを [モ バイルカード] セクションに追加できます。 • [モバイルカード] セクションを使用して、[コンポーネント] カテゴリから要素を追加することもできます。 このチュートリアルでは、カスタムオブジェクトで使用できるコンポーネントがないため、カテゴリは表 示されません。 • コンパクトレイアウトとは異なり、モバイルカードは Salesforce1 にのみ表示されます。 ソーシャルコラボレーションを有効にする レベル: 初級/所要時間: 5 ~ 10 分 45 ユーザインターフェースをカスタマイズする ステップ 1: Merchandise のページレイアウトを確認する ユーザは Chatter を使用して Merchandise レコードをフォローし、コラボレーションできます。レコードをフォ ローすると、更新に関する通知がプラットフォームから自動的に転送されます。レコードのフィードは実行ロ グになり、ユーザはコメント、ファイル、リンクなどをフィードで投稿することによってデータレコードに関 してコラボレーションできます。 Warehouse アプリケーションでデフォルトの請求書ページレイアウトを見ると、ソーシャルコラボレーション は使用できません。なぜでしょうか。Warehouse アプリケーションを作成したとき、アプリケーションウィザー ドが自動的に元のオブジェクト (この場合は Merchandise) のフィード追跡を有効にしました。ただし、新しいカ スタムオブジェクトの場合、プラットフォームのデフォルトではフィード追跡は有効化されません。この機能 は、数分あればユーザが簡単に有効化できます。 フィード追跡を有効化すると、モバイルデバイスでも通知を受信できるため、誰かが自分の投稿にコメントし たり、自分とやりとりしようするとわかります。このチュートリアルの最後に転送通知を有効化し、Salesforce1 ダウンロード可能アプリケーションを使用していないときでもモバイルデバイスにアラートが送信されるよう にします。 ステップ 1: Merchandise のページレイアウトを確認する Merchandise にすでにフィードがあるか確認しましょう。 1. [Merchandise (商品)] タブをクリックします。 2. いずれかの商品をクリックして Merchandise ページレイアウトを確認します。ページの上半分はソーシャル コラボレーション専用です。個別の商品のフォロー、ファイルの添付、役に立つリンクの投稿ができます。 この機能は、Invoice にも必要です。 46 ユーザインターフェースをカスタマイズする ステップ 2:請求書に関するコラボレーションを有効にす る ステップ 2:請求書に関するコラボレーションを有効にする フィード追跡を有効にする手順は、次のとおりです。 1. [設定] から、[クイック検索] ボックスに「feed」(フィード) と入力します。 2. [フィード追跡] をクリックします。 3. Merchandise では 2 つの項目が追跡されています。Invoice オブジェクトを見ると、追跡されている項目はあり ません。 4. 請求書のフィード追跡を有効にするには、[請求書]をクリックし、[フィード追跡の有効化] を選択し、[状 況] を選択して、[保存] をクリックします。 47 ユーザインターフェースをカスタマイズする ステップ 3: アプリケーションを試す ステップ 3: アプリケーションを試す Invoice ページレイアウトの変更が終了したので、いろいろと試してみましょう。 1. [Invoices (請求書)] タブをクリックし、請求書の詳細ページをクリックすると、請求書の Chatter フィードが有 効になっています。 2. [フォローする] をクリックすると、この請求書に関してコラボレーションできます。請求書を更新すると ([Closed (完了)] から [Open (進行中)] に変更するなど)、請求書の状況の変更が自動的に自分とこの請求書をフォ ローしている他のユーザの Chatter フィードに表示されます。 もうひとこと... このチュートリアルで学習するのは、カスタムオブジェクトのフィードに焦点を絞った Chatter のほんの一部の 機能です。組織のデータをフィード中心のビューで表示するには、右上のアプリケーションメニューから Salesforce Chatter を選択します。Chatter アプリケーションを使用すると、自分と同僚だけの非公開で安全な Facebook のように、組織の他のユーザと安全にコラボレーションできます。 48 ユーザインターフェースをカスタマイズする ステップ 4: モバイルの通知を有効化する ステップ 4: モバイルの通知を有効化する フィードを有効化すると更新がChatterに表示されますが、アプリケーションが稼動していなくても更新をモバ イルデバイスで受信することもできます。更新を受信するには、通知を有効化する必要があります。 1. [設定] から、[クイック検索] ボックスに「Salesforce1 通知」と入力し、[Salesforce1通知]を選択します。 2. Salesforce1 ユーザが受信する通知を選択します。 3. 会社で許可されている場合は、[転送通知に完全なコンテンツを含める] を選択します。 4. [保存]をクリックします。[転送通知に完全なコンテンツを含める] チェックボックスを選択すると、ポップ アップに契約条件が表示されます。[OK] または [キャンセル] をクリックします。このオプションを有効化 することで、会社に代わって契約条件に同意することになります。詳細は、Salesforce ヘルプの「Salesforce1 モバイルアプリケーションの通知」を参照してください。 これで、あなたが作成したコメントまたは投稿に誰かがメンションすると、Salesforce1 ダウンロード可能アプ リケーションが稼動していなくてもデバイスに通知を受信します。更新を行う別のユーザを作成する必要があ るため、まだ通知は表示できません。後のレッスンでそれを行います。 49 コーディングせずに、数回のクリックでアプリケー ションロジックを追加する レベル: 初級/所要時間: 30 ~ 40 分 この時点で、基本アプリケーションの作成、オブジェクトの作成や関連付け、および標準ユーザインターフェー スのカスタマイズの方法についてはすでに把握しています。この一連のチュートリアルでは、高度なポイント & クリック開発を習得して、基盤となるデータベースをさらに拡張し、UI を改善しながら、ステップを進めて いきます。 ワークフローを使用して項目の更新を自動化する レベル: 初級/所要時間: 10 ~ 15 分 企業では、組織内で標準化された手続きと自動化されたビジネスプロセスを使用することにより、業務をさら に効率化できます。Salesforceでは、ワークフロールールの使用により、手続きやプロセスを自動化することが 可能です。ワークフロールールでは、時間ベースのトリガ、条件、数式に基づいて、メールアラート、タスク の割り当て、項目の更新、アウトバウンドメッセージの送信などのアクションを実行できます。 デフォルト値を使用して項目にデータを自動的に取り込むのは、一般的なビジネスルールです。2 つの関連オ ブジェクトで参照項目を使用して、同様の作業をすでに実行したことを思い出してください。品目によって商 品を「ルックアップ」(参照) することができ、ユーザは必要な項目を選択できます。一方、ユーザに選択させ るのではなく、項目にデータが自動的に取り込まれるようにするにはどうしたらよいでしょうか? このような 場合、ワークフロールールが必要になります。ワークフロールールを使用することで、Salesforceでは、さまざ まな状況に応じて、適切な値を項目に自動的に取り込むことができます。ユーザによる介入は必要ありませ ん。 ステップ 1: 品目の詳細ページを確認する 開始する前に、前のチュートリアルの Invoice オブジェクトおよび Line Item オブジェクトを簡単に確認します。 1. アプリケーションピッカーから Warehouse アプリケーションを選択して、[Invoices (請求書)] タブをクリック します。 2. いずれかの請求書を開き、品目の詳細ページを開きます。品目には価格項目がないことがわかります。 50 コーディングせずに、数回のクリックでアプリケーショ ンロジックを追加する ステップ 2: [Unit Price (単価)] 項目を作成する このチュートリアルでは、Line Item オブジェクトに [Unit Price] (単価) という名前の新しい項目を作成しま す。ユーザが独自に価格を作成しないようにする必要があります。価格はすでに Merchandise オブジェクトに保 存されているため、ワークフロールールと呼ばれる優れた機能を使用して、この項目に自動的にデータを取り 込むことができます。 ステップ 2: [Unit Price (単価)] 項目を作成する 新しい [Unit Price (単価)] 項目を作成するステップは、Merchandise オブジェクトに [Price (価格)] 項 目を作成した場合と本質的に同じですが、今回は、項目に [Unit Price (単価)] という名前を付けることの み異なります。 1. Line Item タブまたはレコードから、クイックアクセスメニュー (ウィンドウの右側からポップアップ表示さ れるタブ) をクリックし、[項目を参照] にカーソルを置いて [新規] をクリックします (まだ Line Item オブジェ クトを開いていない場合は、[設定] から [クイック検索] ボックスに「オブジェクト」と入力し、[オブジェ クト] を選択します。次に [品目名] をクリックし、[カスタム項目 & リレーション] セクションで [新規] をク リックします)。 2. データ型に [通貨] を選択し、[次へ] をクリックします。 3. カスタム項目の詳細に、次のように値を入力します。 • [項目の表示ラベル:] Unit Price (単価) • [桁数:] 16 • [小数点の位置:] 2 4. 残りの項目のデフォルトはそのまま変更しません。[保存] をクリックできるようになるまで、後に続く画 面で [次へ] をクリックし続けます。 5. 既存の請求書に戻り、新しい品目を追加します。[Unit Price (単価)] の新しい項目が表示されますが、 項目に手動でデータを取り込む必要があります。この項目には自動的にデータを取り込むようにするため、 [キャンセル] をクリックしてこの新しい機能を追加します。 51 コーディングせずに、数回のクリックでアプリケーショ ンロジックを追加する ステップ 3: [Unit Price (単価)] 項目に自動的にデータを取 り込む ステップ 3: [Unit Price (単価)] 項目に自動的にデータを取り込む 新しい [Unit Price (単価)] 項目に自動的にデータを取り込むために、ワークフロールールを作成します。 1. [設定] から、[クイック検索] ボックスに「ワークフロールール」と入力し、[ワークフロールール] を選択し ます。 2. 必要に応じて簡単な概要を確認し、[次へ]をクリックしてから、[New Rule (新規ルール)]をクリックします。 3. Line Item オブジェクトを選択し、[次へ] をクリックします。 4. ルール名に 「Pupulate Unit Price」(単価を自動入力) と入力し、説明には「Line Item オブジェクト の [Unit Price (単価)] 項目に Merchandise オブジェクトの [Price (価格)] 項目の値を使用して データを取り込む」のような説明を入力します。 5. 評価条件には、[作成されたとき] を選択します。 6. 最初のルール条件行で、項目に [Line Item: Quantity (品目: 数量)]、演算子に [>=] を選択し、値 に「1」を入力します。 7. [保存 & 次へ] をクリックします。 メモ: 新しいレコードの作成時にデフォルトの項目値を効果的に割り当てるようにするため、新しい 品目に対してのみ、このワークフロールールが開始されるようにするのが適切です。後で、ユーザが 各品目での商品の価格の調整が必要な場合があります (たとえば、割引の提供など)。 52 コーディングせずに、数回のクリックでアプリケーショ ンロジックを追加する ステップ 3: [Unit Price (単価)] 項目に自動的にデータを取 り込む 続いて、次のステップではワークフロールールにアクションを割り当てて、[Unit Price (単価)] 項目が自 動的に更新されるようにします。 1. [ワークフローアクションの追加] ドロップダウンリストから [新規項目自動更新] を選択します。 2. [名前] 項目に、「Copy Unit Price」(単価をコピー) と入力します。 3. [更新する項目] リストで、[Line Item (品目)] を選択してから [Unit Price (単価)] を選択します。 4. [数式を使用して新しい値を設定する] オプションを選択します、次に進む前に、画面が次と同様であるこ とを確認します。 5. [数式エディタの表示] をクリックして、[項目の挿入] をクリックします。 53 コーディングせずに、数回のクリックでアプリケーショ ンロジックを追加する ステップ 4: 注文の実行時に全在庫数量を更新する 6. 最初の列で [Line Item (品目)>] を選択し、第 2 列で [Merchandise (商品)>] を選択して、第 3 列で [Price (価格)] を選択します。 7. 画面が次と同様であることを確認してから、[挿入] をクリックします。 8. [保存] をクリックしてから [完了] をクリックし、新しいワークフロールールの詳細ページに戻ります。 もうひとこと... 数式の中に、いくつかの新しい構文「Merchandise__r」があります。__c がすでに使用されていたことは確 認しています。それでは、__r はどうでしょうか? これは別のオブジェクトに関連する項目用のプラットフォー ムのオブジェクト表記です。関連する項目を使用して、オブジェクトリレーションをトラバースし、関連する 項目にアクセスできます。この場合、数式は Line Item レコードと Merchandise オブジェクトの間のリレーション を使用して、Price に対して、対応する Merchandise レコードの値を取得します。 ステップ 4: 注文の実行時に全在庫数量を更新する 商品の在庫は、注文が実行されたときに自動的に管理される必要があります。新しい請求書 (「Open (進行中)」 の状況) を作成するときに、すべての新しい品目の全在庫数量を販売個数分だけ減算する必要があります。同 様に、既存の品目への更新で、全在庫数量に販売個数の差分を適用する必要があります。 この更新を行う方法はいくつかあります。Apexコードの使用、フローの作成、または別のワークフロールール の作成で更新できます。簡易化のため、ここではワークフローを使用しますが、ワークフロー項目自動更新は 参照関係では機能しないという小さな問題を最初に修正する必要があります。そのため、最初のステップでは 参照関係を主従関係に変更します。プラットフォームではこのような変更を非常に簡単に行うことができま す。 1. [設定] から、[クイック検索] ボックスに「オブジェクト」と入力し、[オブジェクト] を選択して [品目名] を クリックします。 2. [カスタム項目 & リレーション] 関連リストまで下へスクロールして、Merchandise の横にある [編集] をクリッ クします。 3. [データ型の変更] をクリックして、[主従関係] を選択します。 54 コーディングせずに、数回のクリックでアプリケーショ ンロジックを追加する ステップ 5: ワークフロールールを有効にする 4. [次へ] をクリックして、[保存] をクリックします。 これでワークフロールールを作成できるようになりました。 1. [設定] から、[クイック検索] ボックスに「ワークフロールール」と入力し、[ワークフロールール] を選択し ます。 2. [すべてのワークフロールール] ページで、[New Rule (新規ルール)] をクリックします。 3. Line Item オブジェクトを選択し、[次へ] をクリックします。 4. [ルール名] 項目に、「Line Item Updated」(品目の更新) と入力します。 5. [レコードが次の場合にルールを評価:] で [作成されたとき、および編集されるたび] を選択します。 6. [ルール条件] 項目で、[条件が一致する] が選択されたままにします。 7. [項目] ドロップダウンリストで、[Invoice: Status (請求書: 状況)] を選択します。[演算子]で [次の文 字列と一致する] を選択します。[値] でルックアップアイコンをクリックし、[Open (進行中)] を選択し て [選択したものを挿入] をクリックします。 8. [保存 & 次へ] をクリックします。 9. [ワークフローアクションの追加]をクリックして[新規項目自動更新]を選択します。新規項目自動更新ウィ ザードが開きます。 10. [Name (名前)] 項目で、「Update Stock Inventory」(在庫の更新) と入力します。 11. 最初の [更新する項目] ドロップダウンリストで、[Merchandise (商品)] を選択します。2 番目では [Quantity (数 量)] を選択します。 12. [数式を使用して新しい値を設定する] を選択します。 13. [数式エディタの表示] をクリックします。 14. [項目の挿入] をクリックして [Line Item (品目)] > [Merchandise (商品)] > [Quantity (数量)] を選択します。[挿入] をクリックしてエディタに項目を追加します。 15. [演算子の挿入] をクリックして [– 減算] を選択します。 16. [項目の挿入] をクリックして [Line Item (品目)] > [Quantity (数量)] を選択します。[挿入] をクリックしてエディ タに項目を追加します。 完成した数式は Merchandise__r.Quantity__c - Quantity__c となります。 17. [構文を確認] をクリックして、必要に応じて修正します。 18. [保存]をクリックして新規項目自動更新ウィザードを閉じ、ワークフローウィザードのステップ 3 に戻りま す。 19. [完了] をクリックします。 ステップ 5: ワークフロールールを有効にする このステップは短いですが、重要なステップです。デフォルトで、ワークフロールールは無効になっていま す。 1. [設定] から、[クイック検索] ボックスに「ワークフロールール」と入力し、[ワークフロールール] を選択し て [すべてのワークフロールール] ページに移動します。 55 コーディングせずに、数回のクリックでアプリケーショ ンロジックを追加する ステップ 6: アプリケーションを試す 2. [Line Item Updated (品目の更新)] と [Populate Unit Price (単価を自動入力)] の横に [有効化] リンクが表示されてい ます。各ワークフロールールの横のリンクをクリックします。 もうひとこと... ワークフロールールは、一括処理の実行中はオフにする場合があるため、デフォルトでは有効ではありませ ん。たとえば、同時にすべてのレコードを一括で更新し、ワークフロールールを起動するたびに処理が無効化 されないようにする必要があります。ワークフロールールは更新通知メールを送信することなどもできるの で、単に価格変更を行っただけで何千通ものメールが送信されないように、オフにする場合もあります。 ステップ 6: アプリケーションを試す 修正されたアプリケーションを使用して、新しいワークフロールールによってビジネスロジックがどのように 実行されるかを確認します。 1. [Invoices (請求書)] タブをクリックして、新しい請求書を作成するか、既存の請求書を編集します。 2. [新規 Line Item] クリックして追加し、Merchandise を選択した後、[保存] をクリックします。 3. クリックして新規 Line Item の詳細ページに戻り、作成した最初のワークフロールールによって、選択した Merchandise の [Price (価格)] が参照され、[Unit Price (単価)] 項目にデータが自動的に取り込まれたことを確認し ます。すばらしいです。 数式項目を追加する レベル: 初級/所要時間: 5 ~ 10 分 Line Item オブジェクトに足りないもう 1 つの項目は、各品目の商品の [Quantity (数量)] と [Unit Price (単価)] から計 算される [Line Item Total (品目の合計値)] 項目です。このチュートリアルでもコードは作成せずに、Line Item オブ ジェクトに新しい数式項目を作成することでこの一般的なビジネスロジックを実装します。 ステップ 1: 各 Line Item の合計金額を計算する 最初のステップでは、Line Item カスタムオブジェクトに [Line Item Total] (品目の合計値) という新しい数式項目を 作成します。設定作業では、品目の数と価格を掛け合わせて各品目の合計金額を計算する数式を追加します。 56 コーディングせずに、数回のクリックでアプリケーショ ンロジックを追加する ステップ 1: 各 Line Item の合計金額を計算する 1. [設定] から、[クイック検索] ボックスに「オブジェクト」と入力し、[オブジェクト] を選択します。 2. [品目名] オブジェクトをクリックします。次に、[カスタム項目 & リレーション] 関連リストで、[新規] をク リックします。 3. [数式] を選択して、[次へ] をクリックします。 4. [項目の表示ラベル] に「Line Item Total」(品目の合計値) と入力します。 5. [数式の戻り値のデータ型] で、[通貨] を選択し、[次へ] をクリックします。 6. [差し込み項目の挿入] ドロップダウンリストをクリックし、[Unit Price (単価)] を選択します。下のテキスト ボックスには「Unit_Price__c」と表示されます。 7. [演算子の挿入] ドロップダウンリストで、[乗算] を選択します。 8. [差し込み項目の挿入] ドロップダウンリストから [Quantity (数量)] を選択します。下のテキストボックスに は「Unit_Price__c * Quantity__c」と表示されます。 9. [次へ]、[次へ]、および [保存] をクリックします。 57 コーディングせずに、数回のクリックでアプリケーショ ンロジックを追加する ステップ 2: アプリケーションを試す もうひとこと... [数式] データ型は、他の項目の値を使用して自動的に値を計算する場合に非常に便利です。今回は、同じオブ ジェクト内の 2 つの項目の値を乗算する簡単な数式を作成しました。数式の入力時に [高度な数式] タブを使用 すると、さらに複雑な処理を指定できます。 ステップ 2: アプリケーションを試す 新しい [Line Item Total (品目の合計値)] 数式項目を表示するには、新しい品目を作成する必要があります。 1. [Invoices (請求書)] タブをクリックし、既存の請求書をクリックします。 2. 新しい品目を追加し、商品を選択して、数量を入力します。 3. 品目を保存すると、数式項目の計算結果が表示されます。 積み上げ集計項目を追加する レベル: 初級/所要時間: 5 ~ 10 分 請求書には、すべての品目を 1 つの大きな請求書合計として集計する項目がまだありません。オブジェクトが 主従関係にある場合は、積み上げ集計項目を使用できるため、この項目を簡単に追加できます。 ステップ 1: 積み上げ集計項目を使用して合計を計算する 前のステップでは、各品目の合計金額を計算できるようにしました。このステップでは、計算した値を足し合 わせて、Invoice Statement の合計金額を取得できるようにします。Line Item は Invoice と主従関係にあるため、積 み上げ集計項目を使用して合計金額を求めることができます。積み上げ集計項目は、主従関係のリレーション が設定されている場合に子オブジェクトの情報を集計するための機能です。今回は、各品目の合計金額を集計 します。 1. [クイック検索] ボックスに「オブジェクト」と入力し、[オブジェクト] を選択して [請求書] をクリックし、 Invoice カスタムオブジェクトのページに戻ります。 2. [カスタム項目 & リレーション] 関連リストで、[新規] をクリックします。 3. [データ型] で [積み上げ集計] を選択し、[次へ] をクリックします。 58 コーディングせずに、数回のクリックでアプリケーショ ンロジックを追加する ステップ 2: アプリケーションを試す 4. [項目の表示ラベル] 項目に「Invoice Total」(請求書合計) と入力し、[次へ] をクリックします。 5. [集計対象オブジェクト] リストで、[Line Items (品目)] を選択します。 6. [積み上げ種別] で、[合計] を選択します。 7. [集計する項目] リストで、[Line Item Total (品目の合計値)] を選択します。 8. 画面が次のようになっていることを確認します。[次へ]、[次へ]、および [保存] をクリックします。 ステップ 2: アプリケーションを試す 新しい Invoice Total (請求書合計) 数式項目の動作を確認するには、請求書を調べます。 1. [Invoices (請求書)] タブをクリックし、既存の請求書をクリックします。 2. 新しい [Invoice Total (請求書総額)] 項目で、詳細オブジェクトの [Line Item Total (品目の合計値)] から すべての値が積み上げ集計されていることがわかります。 3. 詳細ページに [Line Item Total (品目の合計値)] 項目を表示するには、ページレイアウトを編集する必要があり ます (まだ編集していない場合は、「ページレイアウトを変更する」 (ページ36)を参照してください)。ペー ジレイアウトを変更すると、次のようなページが表示されます。 59 コーディングせずに、数回のクリックでアプリケーショ ンロジックを追加する ビジネスルールを適用する ビジネスルールを適用する レベル: 初級/所要時間: 5 ~ 10 分 通常、どのビジネスアプリケーションも、不正なデータがシステムに入力されるのを防止するルールを適用し ます。ユーザが自発的にルールに従うとは限らないため、こうしたルールがないと、すぐに雑多なデータが混 在した状態になります。このチュートリアルでは、Warehouse アプリケーションに基本的なビジネスルール (注 文数量を 0 以下にできない) を適用する方法を学習します。入力規則を作成してテストしますが、コーディン グせずにすべての作業が数分で終了します。 ステップ 1: ビジネスルールについて理解する 開始する前に、ここで使用する具体的なビジネスルールを明確に理解していることを確認します。 1. Warehouse アプリケーションを選択します。 2. [Invoices (請求書)] タブをクリックし、請求書を選択して、特定の品目を確認します。 3. 品目の数量項目をいろいろな値に設定してみましょう。値は必須ですが、0、-10、3.14159 など、任意の値 に設定できます。これを改善して、ユーザが不正なデータ (負の数値など) を入力できないようにする必要 があります。 ステップ 2: 入力規則を作成する 基本的なビジネスルールの適用は簡単で、コーディングも必要ありません。 1. [設定] から、[クイック検索] ボックスに「オブジェクト」と入力し、[オブジェクト] を選択して [品目名] を クリックし、[入力規則] 関連リストまでスクロールダウンして [新規] をクリックします。 2. [ルール名] に「Validate_Quantity」と入力します。 60 コーディングせずに、数回のクリックでアプリケーショ ンロジックを追加する ステップ 2: 入力規則を作成する 3. 必要に応じて [説明] 項目に入力します。他の開発者がルールの目的を理解しやすいように、ビジネスロ ジックをドキュメント化することをお勧めします。このページの詳細なヘルプが必要な場合は、ドキュメ ントリンクを使用してください。 4. [エラー条件数式] 領域で、入力規則のエラー条件数式を作成して、エラー条件が TRUE と評価されたら識別 できるようにします。 a. [項目の挿入] をクリックすると、[項目の挿入] ポップアップウィンドウが開きます。 b. 第 1 列で [Line Item > (品目 >)] を選択し、第 2 列で [Quantity (数量)] を選択します。 c. [挿入] をクリックします。 d. 次のように、数式に「以下」記号 (<=) と数値の 0 を入力します。 Quantity__c <= 0 5. [構文を確認] をクリックし、エラーがないことを確認します。エラーが見つかった場合は、修正してから 作業を再開します。 6. [エラーメッセージ] 項目に「You must order at least one item」 (少なくとも 1 つの品目を注文する 必要があります) と入力します。 7. [エラー表示場所] で [項目] を選択し、ドロップダウンリストから [Quantity (数量)] を選択します。 61 コーディングせずに、数回のクリックでアプリケーショ ンロジックを追加する ステップ 3: アプリケーションを試す 8. [保存] をクリックします。 もうひとこと... 入力規則の詳細ページを簡単に確認しましょう。新しい入力規則は「有効」で、プラットフォームが現在この ルールを適用していることを示しています。ワークフロールールとは異なり、入力規則はデフォルトで有効に なります。特定の状況では、一時的にルールを無効にする必要が生じることもあります (大量のデータを読み 込む前など)。これは、[有効] ボックスをオフにするだけで簡単に無効にできます (ここでは行いません)。 ステップ 3: アプリケーションを試す ルールが設定されて有効になったため、試してみてください。 1. [Invoices (請求書)] タブをクリックして既存の請求書を選択します。 2. [New Line Item (新規品目)] をクリックします。 3. 品目番号と数量「–1」を入力します。 4. 商品品目を選択し、[保存] をクリックすると、ルールに設定したエラーメッセージが表示されます。 62 コーディングせずに、数回のクリックでアプリケーショ ンロジックを追加する ステップ 4: 入力規則を変更する 5. 有効な数量を入力してエラーを修復し、[保存] をクリックします。 もうひとこと... • エラーメッセージが表示されなかった場合は、入力規則数式を再確認します。条件が TRUE と評価された ら、ルールが起動されるようにする必要があります。 • このチュートリアルの数式は比較的単純ですが、もっと複雑なこともできます。プラットフォームの数式 構文を使用すると、1 つのオブジェクトだけでなく、他の関連するオブジェクトも組み込んだ幅広いビジネ スルールを適用できます。 ステップ 4: 入力規則を変更する 既存の入力規則を変更して、品目の在庫数を確認します。 1. [設定] から、[クイック検索] ボックスに「オブジェクト」と入力し、[オブジェクト] を選択して [品目名] を 選択し、[入力規則] 関連リストまでスクロールダウンして [Validate_Quantity] ルールを編集します。 2. [説明] 項目を編集して、在庫数を超える数の品目を注文できないことを説明します。 3. [エラー条件数式] 領域で、まず最初のルールを括弧で囲み、OR 論理演算子を挿入した後、もう 1 組の括弧 を追加して次のようなエラー条件を作成します。 (Quantity__c <= 0) || () 4. 2 組目の括弧の間をクリックし、[項目の挿入] をクリックすると、[項目の挿入] ポップアップウィンドウが 開きます。 5. 第 1 列で [Line Item (品目) >] が選択されたままにし、第 2 列で [数量] を選択し、[挿入] をクリック します。 6. 大なり記号 (>) を入力または挿入します。 7. [項目の挿入] をクリックして、第 1 列で [Line Item (品目) >]、第 2 列で [Merchandise (商品) >]、 第 3 列で [Quantity (数量)] を選択します。 8. [挿入] をクリックして、次のようなコードになっていることを確認します。 (Quantity__c <= 0) || (Quantity__c > Merchandise__r.Quantity__c) 9. [構文を確認] をクリックし、エラーがないことを確認します。 10. 最後に、[エラーメッセージ] 項目を編集して、「You can’t order more items than are in stock」 (在庫数を超える数の品目は注文できません) と入力し、[保存] をクリックします。 もうひとこと... 作成した数式を見てみましょう。 • Mechandise__r — Merchandise オブジェクトは Line Item オブジェクトに関連付けられているため、プラット フォームでは、Line Item レコードから Merchandise レコードに移動できます。Mechandise__r はそうした参 照を行います。 • Quantity__c — Merchandise レコード上に作成した、合計在庫数を追跡するためのカスタム項目。 63 コーディングせずに、数回のクリックでアプリケーショ ンロジックを追加する ステップ 5: 新しい入力規則を試す • Merchandise__r.Quantity__c — Line Item レコードに関連付けられた Merchandise レコード上の Quantity 項目の値をシステムに取得させます。 • Quantity__c — 現在の (Line Item) レコード上の Quantity 項目を参照します。 以上の要素を組み合わせ、Line Item レコードの販売個数を、同レコードに関連付けられた Merchandise レコード の在庫数と比較します。[エラー条件数式] のセクションに記載されているように、エラーメッセージはこの数 式で true が返された場合に表示されます。ここでは、在庫数の値が販売個数の値よりも小さい場合に true が返 されます。 ステップ 5: 新しい入力規則を試す 変更した入力規則をテストしましょう。 1. [Invoices (請求書)] タブをクリックして既存の請求書を選択します。 2. [New Line Item (新規品目)] をクリックして品目を作成し、[Quantity (数量)] に「6000」を入力します。 3. 商品品目を選択し、[保存] をクリックします。ルールに設定したエラーメッセージが表示されます。 4. 有効な数量を入力してエラーを修正し、[保存] をクリックします。 もうひとこと... • 入力規則と数式を組み合わせることによって、わずかな開発作業で非常に強力なビジネスロジックを作成 できます。 • サンプル入力規則の一覧は、Salesforce ヘルプの「入力規則の例」 (https://help.salesforce.com/HTViewHelpDoc?id=fields_useful_field_validation_formulas.htm) を参照してください。 承認プロセスの作成 レベル: 初級/所要時間: 10 ~ 15 分 承認プロセスでは、承認するレコードの条件と各承認ステップの承認者を指定します。各承認ステップは、そ の承認プロセスの対象レコードすべてに適用することも、特定の属性を持つレコードのみに適用することもで きます。承認プロセスでは、レコードが初めて承認申請され、承認、却下、または取り消される時に実施する アクションも指定します。 ステップ 1: 承認プロセスを作成する 承認プロセスの作成は、[設定] で開始します。 1. [設定] から、[クイック検索] ボックスに「承認プロセス」と入力し、[承認プロセス] を選択します。 2. [承認プロセスを管理するオブジェクト] ドロップダウンリストから、[Line Item (品目)] を選択します。 3. [承認プロセスの新規作成]をクリックしてから、[ジャンプスタートウィザードを使用]をクリックします。 64 コーディングせずに、数回のクリックでアプリケーショ ンロジックを追加する ステップ 1: 承認プロセスを作成する 4. [名前] 項目に、「Approve Unit Price Change」(単価の変更を承認) と入力します。 5. [次の場合に、この承認プロセスを使用します。] の横にあるドロップダウンリストをクリックして、[数式 の評価が true になる] を選択します。 6. 数式項目で [項目の挿入] をクリックし、[Line Item (品目)>] を選択してから [Unit Price (単価)] を選択します。[挿入] をクリックします。 7. [演算子の挿入] をクリックして [<> 一致しない] を選択します。 8. [項目の挿入]をクリックし、[Line Item (品目)>]、[Merchandise (商品)>] の順に選択してから [Price (価格)] を選択します。[挿入] をクリックします。操作を続行する前に、設定内容が次のようになってい ることを確認してください。 9. 次に、承認をユーザに割り当てる必要があります。複数のユーザが承認を付与できる大規模な企業の場合 は、これをキューに割り当てることがあります。DE 組織にはユーザが 2 人しかいないため、[自動的に承認 者に割り当てる] のオプションをクリックして [管理ユーザ] を選択します (プロファイルを編集した場合は、 65 コーディングせずに、数回のクリックでアプリケーショ ンロジックを追加する ステップ 2: 承認プロセスの詳細ページを確認する 自分の名前になります。名前が表示されない場合は、ルックアップアイコンをクリックしなければならな い場合もあります)。 10. 設定内容が次のようになっていることを確認し、[保存] をクリックして作業を保存します。 11. ポップアップで [OK] をクリックし、次に [承認プロセスの詳細ページの参照] をクリックします。 ステップ 2: 承認プロセスの詳細ページを確認する 承認プロセスの詳細ページではさまざまな操作を行うため、ユーザインターフェースを試してみてください。 1. 承認プロセスのすべてのステップを編集します。 66 コーディングせずに、数回のクリックでアプリケーショ ンロジックを追加する ステップ 3: 承認プロセスアクションを変更する 2. 承認プロセスをコピーまたは削除します。 3. 承認プロセスを有効化または無効化します。 4. 承認プロセスダイアグラムをフローチャートとして表示します。 5. 承認プロセスの一般的な詳細を表示します。 さらに、新しいステップやアクション (メールアラート、項目自動更新、およびアウトバウンドメッセージ) を どこにでも追加することができます。 ステップ 3: 承認プロセスアクションを変更する このステップでは承認プロセスを変更して、価格の変更が却下された場合に価格を元に戻すようにします。 1. [最終承認時のアクション] セクションで、[レコードのロック] の横にある [編集] をクリックします。 2. [レコードを編集するためにロック解除する] を選択してから、[保存] をクリックします。 3. [最終却下時のアクション] セクションで [新規アクションの追加] をクリックし、[項目自動更新] を選択しま す。 4. [名前] 項目に、「Reset Price」(価格をリセット) と入力します。 5. [更新する項目] で、[Unit Price (単価)] を選択します。 6. [数式を使用して新しい値を設定する] を選択します。 7. [数式エディタの表示] をクリックします。 8. 数式エディタを使用して [Line Item (品目)>]、[Merchandise (商品)>]、[Price (価格)] の順に選 択します。 9. [挿入] をクリックして、[保存] をクリックします。 ステップ 4: 承認プロセスを有効化する ワークフロールールを使用する場合と同様に、承認プロセスを使用する前に有効化する必要があります。この ステップは、承認プロセスを実行しない状況が生じるまでは不要です。たとえば、特別な販売促進を行い、未 処理のすべての請求書について特定のラップトップの価格を下げるとします。これにより、未処理のすべての 請求書で承認プロセスが実行され、注文が出荷されてしまうというボトルネックが生じることになります。こ のような場合は、バッチ更新を実行する前に承認プロセスを無効化します。その処理が終了したら、承認プロ セスを再度有効化します。 1. [有効化] をクリックし、ポップアップで [OK] をクリックします。 2. 詳細ページで [ダイアグラムの表示] をクリックして、承認プロセスを視覚的に表示します。任意のノード をクリックすると、詳細を表示できます。 67 コーディングせずに、数回のクリックでアプリケーショ ンロジックを追加する ステップ 5: アプリケーションを試す 承認プロセスの動作を確認する前に、該当するレコードをユーザが承認申請できることを確認する必要があり ます。承認申請できなければ、承認プロセスは開始しません。このステップでは、[承認申請] ボタンを品目 ページレイアウトに追加します。 1. [設定] から、[クイック検索] ボックスに「オブジェクト」と入力し、[オブジェクト] を選択して [品目名] を クリックします。 2. [ページレイアウト] 関連リストで、品目レイアウトの横にある [編集] をクリックします。 3. パレットの [ボタン] カテゴリから、[承認申請] ボタンを [標準ボタン] 領域にドラッグします。 4. [保存] をクリックします。 これで、このページレイアウトに割り当てられたすべてのユーザが、品目を承認申請できるようになります。 ステップ 5: アプリケーションを試す それでは、新しい承認プロセスを試し、変更の申請者および承認者の両方でワークフローをシミュレーション してみましょう。 1. [Invoices (請求書)] タブをクリックし、既存の請求書を選択します。 2. 新しい品目を請求書に追加します。 3. 新しい品目の横にある [編集] をクリックし、[Unit Price (単価)] の値を減らしてから [保存] をクリッ クします。 4. [承認申請]、[OK] の順にクリックします。 5. レコードがロックされ、デフォルトのメールが送信されて、[承認履歴] 関連リストのすべての状況が [待機 中] になります。 68 コーディングせずに、数回のクリックでアプリケーショ ンロジックを追加する ステップ 6: Chatter および Salesforce1 の承認を設定する 6. メールで取得したリンクをクリックし、コメントを追加してから[承認]をクリックします。レコードがロッ ク解除され、すべての状況が [承認済み] になります。 7. ステップ 1 ~ 6 を繰り返しますが、今度は価格の変更を却下します。[Unit Price (単価)] がデフォルト の商品価格に戻ります。 もうひとこと... 承認プロセスは、[ホーム] タブに自動的に含まれます。[ホーム] タブをクリックすると、承認を必要とする品 目を表示し、そこで却下することができます。 ステップ 6: Chatter および Salesforce1 の承認を設定する 承認プロセスには Chatter 投稿のサポートが組み込まれており、モバイルデバイスにも表示できます。 1. [設定] から、[クイック検索] ボックスに「Chatter 設定」と入力し、[Chatter 設定] を選択します。 2. [編集] をクリックします。 3. [承認を許可] を選択し、[保存] をクリックします。 これで、承認フィード項目がユーザのフルサイトの Chatter フィードおよび Salesforce1 に表示されます。 フローを作成する メモ: Salesforce1 では、Visual Workflow はサポートされていません。 69 コーディングせずに、数回のクリックでアプリケーショ ンロジックを追加する ステップ 1: フロー変数を追加する レベル: 初級/所要時間: 15 ~ 20 分 Visual Workflowでは、ユーザが画面を順に進み、データの収集と更新を行える「フロー」というアプリケーショ ンを構築できます。Cloud Flow Designer のドラッグアンドドロップユーザインターフェースを使用すると、フ ローを視覚的に構築できます。コーディングは必要ありません。 このチュートリアルでは、実行するたびに次の処理を行う単純なフローを作成します。 • ユーザに品目情報の入力を要求する。 • 請求書の品目レコードを作成する。 • 在庫内の商品数量から品目の注文数量を引く。 ステップ 1: フロー変数を追加する フロー変数を使用して、レコード項目を更新するための値として参照される、フロー全体で使用可能なデータ を保存できます。このチュートリアルでは、2 つのフロー変数を作成します。 1. [設定] から、[クイック検索] ボックスに「フロー」と入力し、[フロー] を選択します。 2. [新規フロー] をクリックします プロンプトが表示されたら、Adobe® Flash® プラグインを有効化します。 3. 最初の変数を作成します。 a. [リソース] タブで、[変数] をダブルクリックします。 b. 変数を設定する手順は、次のとおりです。 項目 値 一意の名前 vQuantityAvailable 説明 Quantity of merchandise in stock. (在庫内の商品数量。) データ型 数値 スケール 0 c. [OK] をクリックします。 4. 2 番目の変数を作成します。 a. [リソース] タブで、[変数] をダブルクリックします。 b. 変数を設定する手順は、次のとおりです。 項目 値 一意の名前 vInvoiceId 説明 ID of the invoice to which the flow adds the new line item. (フローで新しい品目を追加する請求書の ID。) A custom button on the Invoice detail page launches the flow and passes the invoice 70 コーディングせずに、数回のクリックでアプリケーショ ンロジックを追加する 項目 ステップ 2: フォーム画面を追加する 値 ID into this variable. (請求書の詳細ページのカスタムボタンをクリック すると、フローが起動して、この変数に請求書 ID が渡されます。) データ型 テキスト 入力および出力 入力のみ このオプションにより、カスタムボタンでフローが起動したときに変数を設定 できます。 c. [OK] をクリックします。 5. [エクスプローラ] をクリックして、変数が保存されていることを確認します。 6. フローを保存します。 a. [保存] をクリックします。 b. [名前] に、「Add Line Item from Invoice and Update Stock Quantity」と入力します。 [一意の名前] は、このエントリに基づいて自動的に入力されます。 c. [種別] には [フロー] を選択します。 d. [OK] をクリックします。 現時点では、すべての有効化の警告を無視します。 ステップ 2: フォーム画面を追加する 画面でフォームスタイルの項目を使用して、フローユーザからデータ (この場合は品目情報) を収集できます。 1. [パレット] タブから、キャンバスに [画面] をドラッグします。 [一般情報] タブが選択された状態で [画面] フロート表示が開きます。 2. [名前] に、[Get Line Item Info From User (ユーザから品目情報を取得)]と入力します。 [一意の名前] は、このエントリに基づいて自動的に入力されます。 3. [Line Item Number (品目番号)] の項目を追加します。 a. [項目の追加] タブから、[テキストボックス] をダブルクリックします。 [画面] フロート表示の右側にあるプレビューペインにテキストボックス項目が表示されます。 b. プレビューペインで [Textbox] をクリックします。 71 コーディングせずに、数回のクリックでアプリケーショ ンロジックを追加する ステップ 2: フォーム画面を追加する c. [項目設定] タブで、次のように項目を設定します。 項目 値 表示ラベル Line Item Number [一意の名前] は、このエントリに基づいて自動的に入力されます。 デフォルト値 1 4. [Merchandise (商品)] の項目を追加します。 a. [項目の追加] タブから、[ドロップダウンリスト] をダブルクリックします。 プレビューペインにドロップダウンリスト項目が表示されます。 b. プレビューペインで [Dropdown List] をクリックします。 c. [項目設定] タブで、次のように項目を設定します。 項目 値 表示ラベル Merchandise [一意の名前] は、このエントリに基づいて自動的に入力されます。 値のデータ型 テキスト d. [選択設定] セクションで、ドロップダウン矢印をクリックして、[新規作成] > [動的レコード選択肢] をク リックします。 [動的レコード選択肢] フロート表示が表示されます。 72 コーディングせずに、数回のクリックでアプリケーショ ンロジックを追加する ステップ 2: フォーム画面を追加する 5. 動的レコード選択肢リソースを作成します。これは選択オプション (データベースの Merchandise レコードを 表す) で実行時に動的に [Merchandise (商品)] 項目を入力します。 a. 次の値を入力します。 項目 値 一意の名前 dcMerchandise 値のデータ型 テキスト それぞれの選択肢を作成 Merchandise__c b. 在庫がある商品のみが動的レコード選択肢で返されるように検索条件を設定します。 項目 値 項目 Quantity__c 演算子 > 値 0 c. 各 Merchandise レコードの名前を使用してアルファベット順で選択肢が表示されるように次の項目を設定 します。また、ユーザが選択した Merchandise レコードの ID が選択肢で保存されるようにします。 項目 値 選択肢表示ラベル 名前 選択肢保存値 Id 結果の並び替え基準 名前 昇順 d. ユーザが選択した Merchandise レコードから、すでに作成したフロー変数に在庫内の数量を保存します。 項目 値 項目 Quantity__c 変数 {!vQuantityAvailable} e. [OK] をクリックします。 [動的レコード選択肢] フロート表示が閉じ、[画面] フロート表示が表示されます。 73 コーディングせずに、数回のクリックでアプリケーショ ンロジックを追加する ステップ 2: フォーム画面を追加する 6. 品目の注文数量をキャプチャする項目を追加します。 a. [項目の追加] タブから、[数値] をダブルクリックします。 [画面] フロート表示の右側にあるプレビューペインに数値項目が表示されます。 b. プレビューペインで [数値] をクリックします。 c. [項目設定] タブで、次のように項目を設定します。 項目 値 表示ラベル Quantity Ordered [一意の名前] は、このエントリに基づいて自動的に入力されます。 スケール 0 7. 商品の単価をキャプチャする項目を追加します。 a. [項目の追加] タブから、[通貨] をダブルクリックします。 b. プレビューペインで [通貨] をクリックします。 c. [項目設定] タブで、次のように項目を設定します。 項目 値 表示ラベル Unit Price [一意の名前] は、このエントリに基づいて自動的に入力されます。 スケール 2 これで、[画面] フロート表示のプレビューペインに 4 つの項目が表示されます。 74 コーディングせずに、数回のクリックでアプリケーショ ンロジックを追加する ステップ 3: [レコードの作成] 要素を追加する 8. [OK] をクリックします。 9. フローを保存します。 a. [保存] をクリックします。 b. 現時点では、有効化の警告を無視します。 c. [OK] をクリックします。 ステップ 3: [レコードの作成] 要素を追加する Line Item レコードの作成に必要なすべてのデータをフローに含めることができるようになったため、[レコード の作成] 要素を追加してこれを行いましょう。 1. [パレット] タブから、キャンバスに [レコードの作成] をドラッグします。 2. [名前] に、[Create Line Item (品目を作成)]と入力します。 [一意の名前] は、このエントリに基づいて自動的に入力されます。 3. [作成] 項目で、[Line_Item__c] と入力します。 4. フロー変数と画面項目の値を使用して、レコードの項目を設定します。 a. 5 つの行が割り当てられるまで [行を追加] をクリックします。 b. 次のように項目および値を設定します。 項目 値 Invoice__c {!vInvoiceId} Merchandise__c {!Merchandise} 名前 {!Line_Item_Number} Quantity__c {!Quantity_Ordered} Unit_Price__c {!Unit_Price} 5. [OK] をクリックします。 これで、[画面] 要素および [レコードの作成] 要素がキャンバスに表示されます。 6. [画面] 要素の下部でノードを [レコードの作成] 要素にドラッグして、2 つの要素を接続します。 ノードは移動しませんが、ノードから別の要素にドラッグするとコネクタ線が表示されます。 7. [画面] 要素の上にマウスポインタを置いて、 をクリックします。 これにより、フローの実行時に最初に実行される要素が識別されます。 8. 要素をドラッグして任意の位置に配置できます。 特定の開始要素から適切な順序でフローが実行されるように、コネクタで要素同士をリンクすることが重 要です。 75 コーディングせずに、数回のクリックでアプリケーショ ンロジックを追加する ステップ 4: [レコードの更新] 要素を追加する 9. [保存] をクリックします。 開始要素を設定して要素同士をリンクすると、有効化の警告が表示されなくなります。 ステップ 4: [レコードの更新] 要素を追加する 関連する Merchandise レコードを更新するため[レコードの更新] 要素を追加して、品目の利用可能な数量から注 文数量を引いてみましょう。 1. [パレット] タブから、キャンバスに [レコードの更新] をドラッグします。 2. [名前] に、[Decrement Available Stock (在庫を減らす)]と入力します。 [一意の名前] は、このエントリに基づいて自動的に入力されます。 3. [更新] 項目で、[Merchandise__c] と入力します。 4. 品目に関連付けられた Merchandise レコードのみがフローで更新されるように検索条件を設定します。 項目 値 項目 Id 演算子 次の文字列と一致する 値 {!Merchandise} 5. レコード項目を更新する [項目] 列で、「Quantity__c」と入力します。 6. [値] 列で、矢印をクリックして [新規作成] > [数式] を選択します。 7. 商品数量から品目の注文数量を引く数式を設定します。 項目 値 一意の名前 fDecrementAvailableStock 値のデータ型 数値 スケール 0 76 コーディングせずに、数回のクリックでアプリケーショ ンロジックを追加する ステップ 4: [レコードの更新] 要素を追加する 項目 値 数式テキストボックス {!vQuantityAvailable} - {!Quantity_Ordered} 8. [OK] をクリックします。 [数式] フロート表示が閉じ、[レコードの更新] フロート表示が表示されます。 9. [OK] をクリックします。 10. [レコードの作成] 要素の下部からノードを [レコードの更新] 要素にドラッグして接続します。 11. [保存] をクリックします。 77 コーディングせずに、数回のクリックでアプリケーショ ンロジックを追加する ステップ 5: 確認画面を追加する ステップ 5: 確認画面を追加する ジョブを実行できるだけのフローが完成しましたが、次にフローの完了をユーザに通知する画面を追加しま す。 1. [パレット] タブから、キャンバスに [画面] をドラッグします。 [一般情報] タブが選択された状態で [画面] フロート表示が開きます。 2. [名前] に、[完了]と入力します。 [一意の名前] は、このエントリに基づいて自動的に入力されます。 3. [項目の追加] タブから、[表示テキスト] をダブルクリックします。 4. プレビューペインで [Display Text] をクリックします。 5. [項目設定] タブで、次のように項目を設定します。 項目 値 一意の名前 confirmation_message テキストボックス Thank you. (よろしくお願い申し上げます。) Your line item has been added to the invoice, and the available quantity of merchandise has been updated. (品目が請求書に追加され、利用 可能な商品数量が更新されました。) 6. [OK] をクリックします。 7. [レコードの更新] 要素の下部からノードを新しい [画面] 要素にドラッグして接続します。 8. [保存] をクリックします。 78 コーディングせずに、数回のクリックでアプリケーショ ンロジックを追加する ステップ 6: カスタムボタンを追加する 9. [閉じる] をクリックします。 フローの詳細ページにフロー URL が表示されます。これは、後でこのフローを起動するためのカスタムボ タンを作成するときに必要になります。 ステップ 6: カスタムボタンを追加する フローが完成したので、カスタムボタンを追加して、ユーザが請求書の詳細ページからフローを起動できるよ うにします。このボタンでは次の操作を行います。 • フロー URL で指定されたフローを起動する。フロー URL は、フローの詳細ページにあります。 • 関連する請求書 ID をフロー変数に渡す。 • フローユーザが [完了] をクリックすると、関連する請求書の詳細ページにブラウザが戻るよう、フローの 終了動作を設定する。 1. Line Item カスタムオブジェクトのカスタムボタンを作成します。 79 コーディングせずに、数回のクリックでアプリケーショ ンロジックを追加する ステップ 6: カスタムボタンを追加する a. [設定] から、[クイック検索] ボックスに「オブジェクト」と入力し、[オブジェクト] を選択して [品目名] を選択します。 b. [ボタン、リンク、およびアクション] 関連リストで、[新規ボタンまたはリンク] をクリックします。 c. カスタムボタンを定義します。 項目 値 表示ラベル Add Line Item and Update Stock Qty (品目を追加して在庫数量を更新 する) [名前] は、このエントリに基づいて自動的に入力されます。 表示の種類 リストボタン 動作 現在のウィンドウにサイドバーおよびヘッダーなしで表示 内容のソース URL URL テキストボックス /flow/Add_Line_Item_from_Invoice_and_Update_Stock_Quantity ?vInvoiceId={!Invoice__c.Id}&retURL=/{!Invoice__c.Id} d. [保存] をクリックします。 e. [OK] をクリックします。 2. カスタムボタンを請求書ページレイアウトに追加します。 a. [設定] から、[クイック検索] ボックスに「オブジェクト」と入力し、[オブジェクト] を選択して [請求書] を選択します。 b. [ページレイアウト] 関連リストで、請求書レイアウトの [編集] をクリックします。 c. [Line Items (品目)] 関連リストの をクリックします。 80 コーディングせずに、数回のクリックでアプリケーショ ンロジックを追加する ステップ 6: カスタムボタンを追加する d. [ボタン] セクションを展開します。 e. [利用可能なボタン] の下で、[Add Line Item and Update Stock Qty (品目を追加して在庫量を更新する)] を選 択します。 f. をクリックします。 [選択したボタン] の下にボタン名が表示されます。 g. [OK] をクリックします。 3. [Line Items (品目)] 関連リストのプレビュー領域にボタンが表示されることを確認します。 81 コーディングせずに、数回のクリックでアプリケーショ ンロジックを追加する ステップ 7: アプリケーションを試す 4. [保存] をクリックします。 ステップ 7: アプリケーションを試す ここでは、修正したアプリケーションを試して、フローの動作を確認します。 1. アプリケーションを試して実際の結果を得られるよう、既存の Merchandise レコードの既知の開始値を設定 します。 a. [Merchandise (商品)] タブをクリックします。 b. [デスクトップ] をクリックします。 c. [編集] をクリックします。 d. [Quantity (数量)] を 1000 に設定します。 e. [保存] をクリックします。 これで、フローを試すと、商品数量が正しく更新されることを簡単に確認できます。 2. [Invoices (請求書)] タブをクリックして、新しい請求書を作成するか、既存の請求書を編集します。 3. 作成した [Add Line Item and Update Stock Qty (品目を追加して在庫量を更新する)] カスタムボタンをクリック します。 4. 請求書の詳細ページに結果を表示するには、品目に次の値を入力します。 項目 値 Line Item Number 11 (品目番号) Merchandise (商品) デスクトップ Quantity Ordered 100 (注文数量) Price (単価) 1000 5. [次へ] をクリックし、[完了] をクリックします。 82 コーディングせずに、数回のクリックでアプリケーショ ンロジックを追加する ステップ 8: 障害画面を追加する 6. 請求書の詳細ページに品目が正しく表示されることを確認します。 7. [Merchandise (商品)] タブをクリックします。 8. [デスクトップ] をクリックします。 9. [Quantity (数量)] が 1000 から 900 に変更されたことを確認します。 以上でこのステップは完了です。在庫が正常に更新されました。ただし、エラーが発生したらどうなるでしょ うか。フローの標準動作では、組織のシステム管理者に汎用的なメッセージがメールで送信されますが、フ ローを変更してユーザに即座に通知することもできます。これは、次のチュートリアル (省略可能) で行いま す。 ステップ 8: 障害画面を追加する フローがデータベースを操作している間にエラーが発生した場合、フローは汎用の未処理障害メッセージを表 示します。システムから組織のシステム管理者宛てに、問題の特定に役立つ情報がメールで送信されます。画 面への障害パスを設定して、画面でこの情報をフローユーザに表示することもできます。システムからのメー ル受信を待つまでもなく、フロー内で情報を参照し、即座に問題を修復することができます。 1. 必要に応じてフローを再度開きます。 2. [パレット] タブから、キャンバスに [画面] をドラッグします。 [一般情報] タブが選択された状態で [画面] フロート表示が開きます。 3. [名前] に、「Fault Screen」と入力します。 [一意の名前] は、このエントリに基づいて自動的に入力されます。 83 コーディングせずに、数回のクリックでアプリケーショ ンロジックを追加する ステップ 8: 障害画面を追加する 4. [項目の追加] タブから、[表示テキスト] をダブルクリックします。 5. プレビューペインで [Display Text] をクリックします。 6. [項目設定] タブで、次のように項目を設定します。 項目 値 一意の名前 fault_message テキストボックス Sorry, an error occurred in the flow. For help, provide your flow administrator with the following information: {!$Flow.FaultMessage} (フローでエラーが発生しました。問題解 決に役立てるため、フロー管理者に次の情報を提供してください: {!$Flow.FaultMessage}) 7. [OK] をクリックします。 8. [レコードの作成] 要素と [レコードの更新] 要素の両方を障害画面に関連付けます。 a. [レコード作成] 要素の下部からノードを新しい [画面] 要素にドラッグします。 b. [レコード更新] 要素の下部からノードを新しい [画面] 要素にドラッグします。 これらの新しいコネクタには、[FAULT (障害)] という表示ラベルが付けられます。 84 コーディングせずに、数回のクリックでアプリケーショ ンロジックを追加する ステップ 8: 障害画面を追加する 9. [保存] をクリックします。 10. [閉じる] をクリックします。 これで、フローで入力規則違反またはエラーが発生した場合に、フローユーザには、汎用の未処理障害メッ セージではなく、わかりやすいエラーメッセージが表示されます。 フローがすでに問題なく動作している場合でも、前のチュートリアルで作成した入力規則に適合しない値を入 力することで、障害画面をテストできます。具体的には、フローの実行中に、商品の注文可能数量よりも明ら かに大きい [Quantity Ordered (注文された数量)] 値を入力します。 85 レポートとダッシュボードでデータを分析する レベル: 初級/所要時間: 30 ~ 40 分 倉庫にある各品目の在庫数のレポートを毎朝受信箱で確認できると非常に役立ちます。または、いつでも携帯 端末のアプリケーションにアクセスしてその情報をグラフで表示できると便利です。 この一連のチュートリアルでは、レポートとダッシュボード (Salesforce レポートおよびダッシュボード) につい て紹介します。レポートを定義したら、そのレポートをダッシュボードに配置して主要な総計値を一目で確認 できます。Salesforce レポートおよびダッシュボードを使用すれば、好みの場所に好みの形式で、重要な情報を 表示できます。 レポートを作成する レベル: 初心者; 所要時間: 15 分 アプリケーションのクイックスタートウィザードで作成した Warehouse アプリケーションには、レポートを作 成、編集、実行、スケジュールできる [レポート] タブが含まれています。最初に、倉庫にある品目ごとに在庫 数を示す簡単なレポートを作成します。次に、グループと条件を使用して、レポートのデータを最大限に活用 します。 バケットを試して即座にグループ化し、グラフとしてのレポートデータのグラフィカル表示を試してみます。 グラフをを自由に使いこなせるようになったら、グラフをレコード詳細ページに埋め込んで貴重なコンテキス トをユーザに提供する方法を確認します。 ステップ 1: 簡単なレポートを作成する このステップでは、簡単な表形式のレポートを作成して、倉庫にある商品と、それぞれの在庫数を表示しま す。表形式レポートはスプレッドシートに似ており、シンプルな行と列でデータを表示します。これらを使用 して合計値、平均値、最大値、最小値などの集計を列ごとに表示できます。 1. [レポート] タブから、[新規レポート] をクリックします。 2. [クイック検索] ボックスに、「Merchandise」(商品) と入力し、[その他のレポート]フォルダで[Merchandise (商品)] を選択します。 3. [作成]をクリックします。 4. レポートビルダーには、[Merchandise Name (商品名)] 項目がすでに存在します。後は、各商品品目の 数量を表す項目を 1 つ追加するだけです。[項目] ペインから、Quantity をプレビューにドラッグします。 86 レポートとダッシュボードでデータを分析する ステップ 1: 簡単なレポートを作成する 5. [保存] をクリックして、レポートに「Merchandise in Stock」(在庫のある商品) など、わかりやすい名 前を付けます。 6. [レポートフォルダ] ドロップダウンリストから [未整理公開レポート] を選択して、全員がアクセスできるよ うにします (このレポートにアクセスできるユーザを限定するには、フォルダを作成して、異なるユーザに 異なるアクセスレベルを割り当てます。詳細は後で説明します)。 7. [レポートを保存して実行] をクリックします。 これで完成です。新しいレポートが使用できる状態になりました。 レポートではさまざまな機能を使用できます。このレポートはその基本となるものです。この簡単なレポート でさえ、多くの機能があることがわかります。 87 レポートとダッシュボードでデータを分析する ステップ 2: レポートから詳細情報を取得する • Merchandise オブジェクトの任意の項目に基づいてレポートを集計するには、[集計情報] ドロップダウンリス トを使用します。たとえば、[所有者 氏名] に基づいて集計すると、各商品を入力したユーザと、その商 品の数が表示されます。 • 自分の商品のみ、自分のチームの商品、またはすべての商品のうちどれを表示するかを指定するには、[表 示] ドロップダウンリストを使用します。 • [期間条件] セクションでは、作成日、変更日、または最終活動日に基づいてこのレポートを実行したり、 表示する日付範囲を選択して実行したりできます。 • [レポート実行] をクリックして、レポートをすぐに実行するか、将来の日付に実行するかを選択します。 将来の日付に実行することを選択した場合、さらに数回クリックするだけで毎日または指定した頻度でレ ポートを受信箱に受け取ることができます。 • 多くの詳細ではなく概要を表示する場合は、[詳細を非表示] をクリックします。 • レポートを変更する場合は、[カスタマイズ] をクリックすると、レポートの作成で使用した、使い慣れた ドラッグアンドドロップインターフェースに戻ります。 • さらに、[詳細のエクスポート]をクリックすると、印刷ドキュメント、スプレッドシート、または CSV ファ イルとしてレポートをエクスポートできます。 もうひとこと... • 列ヘッダーをクリックすると、表示順序を昇順または降順に切り替えることができます。[総計] には、レ コードの総数と、選択した集計値が表示されます。このレポートをさらに変更するには、[カスタマイズ] をクリックします。 • Salesforceのすべてのレポートに共通の特性として、レポートに含まれるデータレコードをクリックすると、 そのレコードの詳細にアクセスできます。たとえば、レポートにリストされている任意の商品名をクリッ クすると、その詳細ページを表示できます。 • レポートフォルダの共有設定によって、そのフォルダ内のレポートでだれがどの操作を実行できるかが決 まります。[レポート] タブでフォルダの横にある をクリックし、[共有] をクリックします。ユーザに は、閲覧者、エディタまたはマネージャという 3 レベルのアクセス権を付与できます。詳細は、Salesforce ヘルプの「レポートフォルダまたはダッシュボードフォルダの共有」を参照してください。 ステップ 2: レポートから詳細情報を取得する レポートビルダーには、データを表示するさまざまな方法が用意されています。通常、データをグループ単位 で表示すると、内容が理解しやすくなります。この場合、商品品目、価格、合計販売個数でグループ化すると 便利です。 まず、簡単な表形式のレポートを少し複雑なサマリーレポートにして、グループ化します。 1. [カスタマイズ] をクリックします。 2. デフォルトは表形式ですが、サマリーレポートが必要です。[表形式]をクリックして、代わりに[サマリー] を選択します。 3. [Price (価格)] 項目を見つけ、レポートにドラッグします。 4. [Price (価格)] の横にある をクリックします。 をクリックし、[この項目を集計] をクリックし、[平均] を選択して [適用] 88 レポートとダッシュボードでデータを分析する 5. [Quantity (数量)] の横にある [適用] をクリックします。 ステップ 3: レポートにバケットを追加する をクリックし、[この項目を集計] をクリックし、[合計] を選択して 6. ([項目] パネルまたは [プレビュー] パネルから) [Merchandise Name (商品名)] 項目を選択し、[グルーピ ングを作成するには、ここに項目をドロップします]という表示ラベルの領域にドラッグします。これによ り、一意の商品品目でデータが集計されます。 これで、レポートが商品でグループ化され、レベルごとに合計数量と平均価格が含まれるようになりました。 もうひとこと... [条件] ペインの [追加] ドロップダウンリストから、クロス条件を追加してみてください。クロス条件では、単 純な「関連する」または「関連しない」条件を使用して、レポートの子オブジェクトを絞り込むことができま す。クロス条件についての詳細は、「Using Cross Filters in Reports (レポートでのクロス条件の使用)」をご覧くだ さい。 ステップ 3: レポートにバケットを追加する バケットを使用することで、数式またはカスタム項目を作成せずに、レポートレコードをすばやくグループ化 できます。たとえば、数量で複数の範囲にもグループ化するとします。これを行うには、[Quantity (数量)] でバケット項目を作成し、範囲を定義します。 まず、小、中、大の範囲の [Quantity (数量)] に基づいてバケット項目を作成します。バケット項目を使用 して、グルーピングを作成します。 1. [Quantity (数量)] で をクリックし、[この項目をバケット項目にする] をクリックします。 2. バケット項目名に「Quantity Range」(数量範囲) と入力します。 3. 範囲を [小] (500 未満)、[中] (500 ~ 1000)、[大] (1000 を上回る) で定義します。 4. [OK] をクリックします。 5. レポートにすでに存在する [Quantity Range (数量範囲)] 項目を [Merchandise Name (商品名)] の上にある ドロップゾーンにドラッグして、第 1 レベルのグループ化します。 これで、2 つのレベル (第 1 レベルは数量範囲 (小、中、大) 別、第 2 レベルは商品名別) でグループ化されたデー タがレポートに表示されます。 89 レポートとダッシュボードでデータを分析する ステップ 4: レポートデータをグラフで表示する もうひとこと... バケット項目は、レポート内の他の項目と同様に絞り込むことができます。たとえば、「Quantity Range not equal to Small」(数量範囲 次の文字列と一致しない 小) という条件を設定すると、数量が中または大 の範囲にある商品のみが表示されます。 バケット項目についての詳細は、「Getting Started with Buckets (バケットの使用開始)」をご覧ください。 ステップ 4: レポートデータをグラフで表示する レポートデータを視覚的に表示すると、理解しやすくなることがよくあります。レポートに組み合わせグラフ を追加してみましょう。 1. [プレビュー] ペインで [グラフを追加] をクリックして、データを表すグラフを作成します。表示されるグ ラフエディタで、縦棒グラフをクリックします。 2. [Y 軸] ドロップダウンリストで、[Sum of Quantity (合計数量)] を選択したままにします。 3. [X 軸] ドロップダウンリストから、[Merchandise: Merchandise Name (商品: 商品名)] を選択します。2 つのグルー ピングがあるため、バケット項目である [Quantity Range (数量範囲)] も使用できます。 4. [プロット追加値] を選択します。 5. [表示] ドロップダウンリストから [折れ線] を選択します。 6. [第 2 軸を使用] を選択します。 90 レポートとダッシュボードでデータを分析する ステップ 5: レコードページにレポートグラフを埋め込 む 7. [値] ドロップダウンリストから [Average of Price (平均価格)] を選択します。 8. [OK] をクリックし、[保存] をクリックします。 組み合わせグラフは、在庫内の商品数 (棒グラフ) が平均価格 (折れ線グラフ) との対比で表示されます。 ステップ 5: レコードページにレポートグラフを埋め込む 作成したレポートは、多くの方法で共有できます。レコード詳細ページでレポートグラフを埋め込む方法は、 ユーザが作業するときにグラフを表示でき、[レポート] タブに移動する必要がなくなるため、最適な方法の 1 つです。「ページレイアウトを変更する」 (ページ 36)では、特定のレコードタイプに対する詳細ページの表 示内容をカスタマイズする方法を学習しました。ここでは、この操作を Merchandise レコードに対して行いま す。 1. [設定] から、[クイック検索] ボックスに「オブジェクト」と入力し、[オブジェクト]を選択して[Merchandise (商品)] を選択します。 2. [ページレイアウト] 関連リストで、Merchandise レイアウトの横にある [編集] をクリックします。 3. パレットで [レポートグラフ] をクリックします。 4. [セクション] 要素を [プレビュー] ペインにドラッグし、[モバイルカード] 領域の上に配置します。セクショ ン名に「Charts」 (グラフ) と入力し、レイアウトに 1 列を選択します。 5. [クイック検索] ボックスにレポート名を入力し、 をクリックしてレポートグラフを検索および選択しま す (必要に応じて 2 つ追加してもかまいません)。最近参照した 200 個までのレポートを参照できます。ただ し、表示されるのはグラフが存在するレポートのみです。 6. [Merchandise In Stock (在庫の商品)] レポートグラフをレイアウトにドラッグします。 7. [保存] をクリックして、Merchandise レコードを確認します。レコードは次のようになります。 91 レポートとダッシュボードでデータを分析する ダッシュボードを作成する これで、レコード詳細ページを離れずに、在庫内の商品数をすばやく確認できるようになりました。デフォル トではグラフが自動的に絞り込まれ、表示中の特定のレコードタイプに関連するデータのみが表示されます。 ページレイアウトで異なる条件を設定し直すこともできます。グラフで をクリックするだけで、カスタマ イズできます。 レコードページでのレポートグラフの埋め込みについての詳細は、「Embedding Charts Anywhere (グラフを任意 の場所に埋め込む)」をご覧ください。 もうひとこと... Salesforceには、データにリモートでアクセスして独自のアプリケーションと視覚効果を作成できるレポートお よびダッシュボード REST API が備えられています。標準 Web インターフェースを介してレポートで実行可能な ほとんどすべての操作を行うための API リソースがあります。たとえば、Visualforce を使用してカスタムアプリ ケーションを作成し、そのアプリケーションに [レポート] タブを追加する必要があるとします。または、レ ポートビルダーの標準オプションに含まれていない特別な種類のグラフを必要としているとします。 レポートおよびダッシュボード REST API を使用したクイックスタートについての詳細は、『Salesforce Reports and Dashboards REST API Developer Guide』 を参照してください。 ダッシュボードを作成する レベル: 初心者; 所要時間: 15 分 Salesforce のダッシュボードでは、車のダッシュボードのように、重要な情報を一目で確認できます。ダッシュ ボードでは、データをグラフ、ゲージ、テーブル、総計値、Visualforce ページで表示できます。当然、必要な ものだけを表示するためにダッシュボードをカスタマイズできます。 このチュートリアルでは、前のチュートリアルで作成したレポートと連動する新しいダッシュボードを作成し ます。 ステップ 1: 新しいダッシュボードを作成する Warehouse アプリケーションに、作成済みの [Merchandise in Stock (在庫のある商品)] レポートと連動する新しい ダッシュボードを作成します。 1. [レポート] タブ、[新規ダッシュボード] の順にクリックします。 2. エディタの [コンポーネント] タブをクリックし、縦棒グラフコンポーネントをドラッグして、新しいダッ シュボードの第 1 列にドロップします。 92 レポートとダッシュボードでデータを分析する ステップ 2: 円グラフコンポーネントを追加する 3. エディタの [データソース] タブをクリックし、[レポート] > [未整理公開レポート] の下からレポートをド ラッグしてダッシュボード内の新しい縦棒グラフコンポーネントの上部にドロップします。 ステップ 2: 円グラフコンポーネントを追加する レポートをとても簡単に追加できました。それでは、別の種別のダッシュボードコンポーネントも追加してみ ましょう。 1. 前のステップを繰り返しますが、今度は第 2 列に円グラフコンポーネントを使用します。 2. 続いて、第 3 列ヘッダーにある [この列を削除] ( ) をクリックして、使用しない第 3 列をレイアウトから削 除します。終了すると、次のようなダッシュボードプレビューが表示されます。 93 レポートとダッシュボードでデータを分析する ステップ 3: アプリケーションを試す 3. [保存] をクリックし、ダッシュボードに「Merchandise Overview」(商品の概要) という名前を付け、[保 存] をクリックします。 ステップ 3: アプリケーションを試す 1. エディタで [閉じる] をクリックし、ポップアップダイアログで、[保存 & 閉じる] を選択します。エディタ を終了するとダッシュボードが自動的に実行されます。次の画像のようなダッシュボードが表示されます。 2. Warehouse アプリケーションで [レポート] または [ダッシュボード] タブをクリックすると、このダッシュボー ドにいつでもアクセスできます。 94 レポートとダッシュボードでデータを分析する ステップ 4: モバイルアプリケーションからダッシュボー ドにアクセスする もうひとこと... • ダッシュボードの実行ユーザを指定すると、ダッシュボードは特定のユーザのセキュリティ設定のみを使 用して実行されます。個人のセキュリティ設定に関係なく、ダッシュボードへのアクセス権を持つすべて のユーザに同じデータが表示されます。実行ユーザを指定するには、ダッシュボードの編集画面で、[次の ユーザとしてダッシュボードを参照] 項目の横にある をクリックします。 • ダッシュボードは、手動で、または設定したスケジュールに基づき自動で更新できます。また、メールや モバイルで送信することもできます。 • ダッシュボードは、設定しない限り自動的に更新されることはありません。ダッシュボードを表示するた びに、右上に最終更新日時が示されます。ダッシュボードのデータを更新するには、[更新] をクリックし ます。 • ダッシュボードの編集時に、[検索条件を追加]をクリックして条件を追加できます。検索条件を使用して、 ダッシュボードのデータをさまざまなビューで表示できます。各ダッシュボードには、最大 3 つの検索条 件 (それぞれ 10 個以内の条件式を指定可能) を追加できます。レポートレベルで絞り込む代わりに、ダッ シュボードデータを直接操作します。 ステップ 4: モバイルアプリケーションからダッシュボードにアクセ スする モバイルダッシュボードは、外出先で何が重要かを一目で確認できる最も迅速でわかりやすい方法を提供しま す。 1. Salesforce1 で、 をタップしてナビゲーションメニューを開きます。 2. [ダッシュボード]をタップし、最新のダッシュボードリストから[Merchandise Overview (商品の概要)]をタッ プします。 3. ダッシュボードの外観と移動方法は、モバイルデバイスではやや異なります。列を切り替えるには、左ま たは右にスワイプします。 95 レポートとダッシュボードでデータを分析する Salesforce レポートおよびダッシュボード REST API を使 用してレポートを活用する 4. コンポーネントをタップすると、その詳細が表示されます。 5. コンポーネントビューでデータポイントをタップすると、その値が強調表示されます。 Salesforce レポートおよびダッシュボード REST API を使用してレ ポートを活用する レベル: 中級者; 所要時間: 40 分 ここまで、このワークブックでは、いくつかのかなり高度なレポートの操作方法について学習しました。で は、さらに高度な操作が必要な場合はどうすればよいでしょうか。たとえば、ユーザが独自のビジネス要件に 合わせて特別に調整したカスタムアプリケーションをどうしても必要としている場合はどうでしょうか。 問題ありません。自分で少しコーディングができるか、コーディングができる人物に連絡を取れるユーザに、 Salesforce では、標準の Web インターフェースを介してレポートに関するほとんどすべての処理を実行できる API を用意しています。 たとえば、Visualforce を使用してカスタムアプリケーションを作成し、そのアプリケーションでレポートデー タを表示する必要があるとします。または、ダッシュボードの作成時に、標準オプションに含まれていない特 別な種類のグラフを必要としているとします。このチュートリアルでは、ユーザが各自の目的を達成できるよ うにするいくつかの方法について確認していきます。 メモ: これは、Salesforce レポートおよびダッシュボード REST API を使用してユーザが実行できる便利な操 作を示した簡単な概要です。完全な手順と詳細なリファレンスについては、『Salesforce Reports and Dashboards Developer Guide』を参照してください。 API を使用するには、アプリケーションで Salesforce 組織が実行されているインスタンスに基づく URL に要求を 送信します。たとえば、組織が na1.salesforce.com でホストされている場合は、 96 レポートとダッシュボードでデータを分析する Salesforce レポートおよびダッシュボード REST API を使 用してレポートを活用する https://na1.salesforce.com/analytics/reports への要求を送信することで所持しているすべてのレ ポートのリストを取得できます。 Salesforce レポートおよびダッシュボード REST API で実行できる基本的な操作を次に示します。次のいくつかの ステップではこれらの操作をいくつか使用します。 アクション メソッド リクエ ストボ ディ 最近使用した、サポートさ /analytics/reports れているすべてのレポート をリストする GET N/A 指定したレポートのレポー /analytics/reports/<reportId>/describe ト、レポートタイプおよび 関連するメタデータを取得 する GET N/A 指定したレポートを実行す /analytics/reports/<reportId> る GET N/A 指定したレポートを動的検 /analytics/reports/<reportId> 索条件を使用して実行する POST レポー トメタ データ 指定したレポートを非同期 /analytics/reports/<reportId>/instances に実行する POST N/A 指定したレポートを検索条 /analytics/reports/<reportId>/instances 件を使用して非同期に実行 する POST レポー トメタ データ 指定したレポートの最新の /analytics/reports/<reportId>/instances 200 個の実行インスタンスを 一覧表示する GET N/A 指定したレポートの指定し /analytics/reports/<reportId>/instances/<instanceId> GET た実行インスタンスを取得 する N/A 最近使用したダッシュボー /analytics/dashboards ドのリストを取得する GET N/A 指定されたダッシュボード /analytics/dashboards/<dashboardID> のメタデータ、データ、お よび状況を取得する GET N/A ダッシュボードの更新をト /analytics/dashboards/<dashboardID> リガする PUT N/A URL 97 レポートとダッシュボードでデータを分析する ステップ 1: レポートを同期して実行する 指定されたダッシュボード /analytics/dashboards/<dashboardID>/status の状況を取得する GET N/A すべての Salesforce レポートおよびダッシュボード REST API リソースには、以下を使用してアクセスします。 • 会社の基本 URI (https://na1.salesforce.com など) • バージョン情報 (/services/data/v29.0/analytics など) • 名前付きリソース (/reports など) これらを組み合わせるとリソースへの完全な URL 例は次のようになります。 https://na1.salesforce.com/services/data/v29.0/analytics/reports/ ステップ 1: レポートを同期して実行する 迅速な処理が必要な場合は、同期実行を行います。レポートは参照するたびに実行されて最新の状態になり、 アプリケーションにはすぐに更新内容が表示されます。組織のユーザが常に変化を追跡する必要がある場合、 レポートを同期して実行できます。 Merchandise レポートを実行することで、Salesforce レポートおよびダッシュボード REST API を使用してみましょ う。今回は検索条件を使用せずに同期して実行します。 • 実行するレポートの ID を指定して GET コマンドを送信し、レポートを起動します。 コマンドは次のようになります。 curl -s -H 'Authorization: OAuth token ...' https://na1.salesforce.com/services/data/v29.0/analytics/reports/00OD0000001ZbP7MAK メモ: この例では、インスタンスとして NA1 を使用しています。ご使用の Salesforce 組織がホストされ ているインスタンスに置き換えてください。 これで、API から最初のレポートを実行できました。結果の読み取りについてはまだ心配しないでください。 それはこの後に続く数ページの中で説明します。 ステップ 2: レポートを非同期に実行する レポートを非同期に実行するというのは、要求を送信してからしばらく後に結果を取得するということです。 API を使用したレポートの非同期実行にはいくつかの利点があります。 • 非同期に実行すると、結果は実行後 24 時間いつでも使用できるキャッシュに保持されます。また、キャッ シュされた結果を再利用する API コマンドでは、1 時間あたり 1,200 個の要求制限にはカウントされません (ただし、一般的な API 要求の制限ではカウントされます)。 • 非同期レポートでは、タイムアウト期間がより長く設定されています。そのため、レポートが非常に大き なデータセットを対象としていることがわかっていて、タイムアウトのリスクを回避したい場合は、非同 期に実行することをお勧めします。 98 レポートとダッシュボードでデータを分析する ステップ 3: レポートデータを絞り込む • 1 時間あたり最大 1,200 個の非同期レポートを実行できます。これは、同期レポートの制限の 2 倍以上です。 そのため、多数のユーザがアプリケーションを参照することが見込まれる場合は、非同期実行が適切であ る可能性があります。 1. POST コマンドを https://<instance>//analytics/reports/<reportId>/instances に送信して、 非同期レポートを実行します。 コマンドは次のようになります。 curl -s -H 'Authorization: OAuth token ...' https://na1.salesforce.com/services/data/v29.0/analytics/reports/00OD0000001ZbP7MAK/instances -X POST -d '' 2. 非同期実行の結果を取得するには、GET を使用してレポート実行インスタンスをポーリングします。 レポートの特定の非同期実行はインスタンスと呼ばれます。各インスタンスには ID があります。インスタ ンスに含まれるデータセットを取得するには、該当するインスタンスをその ID で指定してシステムに要求 を送信します。これは、インスタンスのポーリングと呼ばれています。レポートの実行が完了すると、ポー リング要求への応答として、要求したデータセットが返されます。(完了しなかった場合は、「in progress (処 理中)」という応答が返されます)。 curl -s -H 'Authorization: OAuth token ...' https://na1.salesforce.com/services/data/v29.0/analytics/reports/00OD0000001ZbP7MAK/instances/instance_id これで、レポートの同期実行および非同期実行を行うことができました。次に、得られた結果を絞りこむこと で、データをさらに活用できるようにします。 ステップ 3: レポートデータを絞り込む レポートは、検索条件を使用して返されるデータを絞り込むときに最も役立ちます。 「レポートを作成する」 (ページ 86)では、標準 Web インターフェイスを使用してその場で検索条件を設定す る方法について学習しました。API でレポートを絞り込むこともできます。API には検索条件を追加、編集、ま たは削除するコマンドがあります。 たとえば、12 個を超える項目のみを表示するように条件設定済みの保存されたレポートを実行したとします。 そして、次に保存されたレポートを変更することなく、さらに数量を絞リ込む必要があるとします。これを実 行するには、編集した検索条件を指定してレポートのメタデータオブジェクトを送信します。 1. レポート実行が返す可能性がある一般的なメタデータをいくつか次に示します。 '{reportMetadata":{"name":"MerchandiseReport","id":"00OD0000001ZbP7MAK","developerName":"MerchandiseReport", "reportType":{"type":"MerchandiseList","label":"Merchandise"},"reportFormat":"MATRIX", "reportBooleanFilter":null,"reportFilters":[{"column": "QUANTITY", "operator":"greaterThan", "value":"12"}],"detailColumns":["MERCHANDISE.NAME","CREATED_DATE","QUANTITY"], "currency":null,"aggregates":["RowCount"],"groupingsDown":[{"name":"CONTACT2.COUNTRY_CODE", "sortOrder":"Asc","dateGranularity":"None"}],"groupingsAcross":[{"name": "OWNER","sortOrder":"Asc","dateGranularity":"None"}]}}' 99 レポートとダッシュボードでデータを分析する ステップ 4: ダッシュボードを検索、表示、更新する 2. 検索条件を変更して、レポートを実行します。コードは次のようになります。編集した検索条件は太字で 示されています (この例は同期ですが、非同期実行でも同様に実行されます)。 curl -s -H 'Authorization: OAuth token ...' https://na1.salesforce.com/services/data/v29.0/analytics/reports/00OD0000001ZbP7MAK -X POST -d '{reportMetadata":{"name":"MerchandiseReport","id":"00OD0000001ZbP7MAK", "developerName":"MerchandiseReport","reportType":{"type":"CaseList","label":"Cases"}, "reportFormat":"MATRIX","reportBooleanFilter":null,"reportFilters":[{"column": "QUANTITY", "operator":"lessThan", "value":"12"}], "detailColumns":["MERCHANDISE.NAME","CREATED_DATE","QUANTITY"], "currency":null,"aggregates":["RowCount"],"groupingsDown":[{"name":"CONTACT2.COUNTRY_CODE", "sortOrder":"Asc","dateGranularity":"None"}],"groupingsAcross":[{"name":"OWNER", "sortOrder":"Asc","dateGranularity":"None"}]}}' これで、条件設定済みレポートを実行し、データを取得できました。今後は、この便利な方法で実践できま す。いくつかのアイデア、および完全な手順と詳細なリファレンスについては、『Salesforce Reports and Dashboards REST API Developer Guide (Salesforce レポートおよびダッシュボード REST API 開発者ガイド)』を参照してください。 ステップ 4: ダッシュボードを検索、表示、更新する ユーザの多くは、通常ダッシュボードを使用してレポートを操作します。レポートおよびダッシュボード REST API を使用すると、レポートと同じくらい簡単に、ダッシュボードにアクセスしたりダッシュボードを更新し たりできます。 たとえば、ユーザが必要なダッシュボードを見つけるためにいくつもの画面に目を通さなければならず、うん ざりしているとします。レポートおよびダッシュボード REST API を使用すれば、最近表示したダッシュボード の中から選ぶことができます。 1. Dashboard List リソースに対して GET 要求を実行すれば、最近使用したダッシュボードのリストを取得できる ため、ユーザがダッシュボードを簡単に見つけられるようになります。 /services/data/v31.0/analytics/dashboards 各ダッシュボードについて、Dashboard List リソースから次のような情報が返されます。URL ハンドルには、 ダッシュボードの状況または結果が保存されます。リストは、ダッシュボードの最終更新日順に並び替え られます。 [ { "id" : "01ZD00000007QeuMAE", "name" : "Adoption Dashboard", "statusUrl" : "/services/data/v31.0/analytics/dashboards/01ZD00000007QeuMAE/status", "url" : "/services/data/v31.0/analytics/dashboards/01ZD00000007QeuMAE" }] 2. ユーザがアプリケーションを使用しているプラットフォームやデバイスに応じて、ダッシュボードのデー タを異なる方法で表示することも可能です。Dashboard Results リソースに GET 要求を実行すれば、ダッシュ ボードからデータをプルできます。 /services/data/v31.0/analytics/dashboards/01ZD00000007S89MAE 100 レポートとダッシュボードでデータを分析する ステップ 4: ダッシュボードを検索、表示、更新する 返される情報は、ダッシュボードの実際のデータとそのメタデータ (ダッシュボード ID、名前、コンポーネ ントメタデータ、検索条件) およびその更新状況です。結果は次のように表示されます。 { { "componentData" : [ { "componentId" : "01aD0000000a36LIAQ", "reportResult" : { // Report result data omitted for brevity. }, "status" : { "dataStatus" : "DATA", "errorCode" : null, "errorMessage" : null, "errorSeverity" : null, "refreshDate" : "2014-04-10T20:37:43.000+0000", "refreshStatus" : "IDLE" } } ], "dashboardMetadata" : { "attributes" : { "dashboardId" : "01ZD00000007S89MAE", "dashboardName" : "Simple Dashboard", "statusUrl" : "/services/data/v31.0/analytics/dashboards/01ZD00000007S89MAE/status", "type" : "Dashboard" }, "canChangeRunningUser" : false, "components" : [ { "componentData" : 0, "footer" : null, "header" : null, "id" : "01aD0000000a36LIAQ", "properties" : { "aggregateName" : "s!AMOUNT", "maxRows" : null, "sort" : { "column" : "TYPE", "sortOrder" : "asc" }, "visualizationProperties" : { }, "visualizationType" : "Bar" }, "reportId" : "00OD0000001g2nWMAQ", "title" : null, "type" : "Report" } ], "description" : null, "developerName" : "Simple_Dashboard", "filters" : [ { "name" : "Amount", "options" : [ { "alias" : null, "endValue" : null, 101 レポートとダッシュボードでデータを分析する ステップ 4: ダッシュボードを検索、表示、更新する "id" : "0ICD00000004CBiOAM", "operation" : "greaterThan", "startValue" : null, "value" : "USD 2000000" } ], "selectedOption" : null } ], "id" : "01ZD00000007S89MAE", "layout" : { "columns" : [ { "components" : [ 0 ] } ] }, "name" : "Simple Dashboard", "runningUser" : { "displayName" : "Allison Wheeler", "id" : "005D00000016V2qIAE" } } } 3. ユーザに最新データが表示されないのではないかと懸念する場合は、更新するダッシュボードの ID を指定 して、PUT Dashboard Results 要求を送信すれば、ダッシュボードをリモートで更新できます。 /services/data/v31.0/analytics/dashboards/01ZD00000007S89MAE 応答には、更新済みのダッシュボードの状況 URL が含まれます。 { "statusUrl" : "/services/data/v31.0/analytics/dashboards/01ZD00000007S89MAE/status" } 102 アクションでモバイルの操作性を高める レベル: 初級/所要時間: 20 ~ 25 分 モバイルデバイスでアプリケーションの機能をどのように使用できるかについてはすでに見ました。実際に、 すべてのSalesforce開発者はモバイル開発者であると言えます。ただし、ここまででは、一部のデータ操作とレ イアウトのカスタマイズを見ただけです。モバイル開発の実に優れた点は、ユーザが外出先で非常に生産的に 作業できるカスタムモバイル機能を提供可能なことです。 このチュートリアルでは、クイックアクションを作成します。クイックアクションは、グローバルアクション とオブジェクト固有のアクションの 2 つのカテゴリに分類されます。グローバルアクションは、アプリケー ション内のほぼすべての場所から何かをすばやく作成する場合に使用します。オブジェクト固有のアクション は、作業内容を自動的に他の項目と関連付ける場合に使用します。 グローバルアクションを使用してレコードをすばやく作成する グローバルアクションは、アプリケーションの任意の場所で何かをすばやく作成する場合に使用されます。た とえば、あるユーザが展示会で働いていて、1 日中新しい人たちに会うとします。この場合、レコードへの移 動や、他の情報との関連付けを行わずにその人を連絡先としてすばやく追加する方法が必要です。グローバル アクションはこのためにあり、後でフォローアップできるレコードをすばやく作成できます。 グローバルアクションは、サポートされているオブジェクトのページレイアウトや、グローバルパブリッシャー レイアウトにも含めることができます。つまり、グローバルアクションはどこからでも使用できるということ です。 グローバルアクションを作成するための全体的な手順は、次のとおりです。 1. グローバルアクションを作成します。 2. ユーザに表示する項目を選択し、可能であれば必須項目の値を事前定義します。 3. アクションをグローバルページレイアウトに追加します。 ステップ 1: グローバルアクションを作成する グローバルパブリッシャーレイアウトを使用するとグローバルアクションをどこにでも表示できるため、すば やく行う操作 (必ずしも完了する必要はない) に便利です。 1. [設定] から、[クイック検索] ボックスに「アクション」と入力し、[グローバルアクション] を選択します。 選択可能なアクションがすでにいくつかあります。一部のアクションはSalesforce1ですでに説明しました。 103 アクションでモバイルの操作性を高める ステップ 2: グローバルレイアウトをカスタマイズする 2. [新規アクション]をクリックします。 3. [アクション種別] で、[レコードを作成] が選択されたままにします。 4. [対象オブジェクト] で [Merchandise (商品)] を選択します。 5. [表示ラベル]に、「New Merch」(新規商品) と入力します。 6. [保存] をクリックします。 保存すると、アクションレイアウトエディタが開きます。ここに表示される項目をこの時点でカスタマイズす るのが一般的ですが、このオブジェクトには項目が少ししかないため、その必要はまだありません。[保存]を クリックします。 もうひとこと... • [New Merch (新規商品)] というカスタム表示ラベルを作成しましたが、生成済みのいずれかの表示ラベルを [標準の表示ラベル種別] ドロップダウンリストから選択することもできます。 • グローバルアクションの詳細ページの下部には、定義済みの値のセクションがあります。必須項目を事前 定義する場合は、その項目をページに表示する必要はありません。項目の事前定義は、モバイル操作環境 をカスタマイズするための優れた手段でもあるため、それについては後で説明します。 ステップ 2: グローバルレイアウトをカスタマイズする Salesforce のフルサイトまたは Salesforce1 のいずれかでグローバルアクションが表示されるようにするには、あ らかじめグローバルパブリッシャーレイアウトに追加する必要があります。 1. [設定] から、[クイック検索] ボックスに「パブリッシャーレイアウト」と入力し、[パブリッシャーレイアウ ト] を選択します。 2. グローバルレイアウトの横にある [編集] をクリックします。 3. エディタの [Salesforce Classic パブリッシャーのクイックアクション] セクションには、[投稿]、[ファイル]、[新 規 ToDo] などのさまざまな項目があります。[New Merch (新規商品)] アクションを、[Salesforce Classic パブリッ シャーのクイックアクション] セクションの左側にある [投稿] と [ファイル] の間にドラッグします。 104 アクションでモバイルの操作性を高める ステップ 2: グローバルレイアウトをカスタマイズする 4. [Quick Save (適用)] をクリックします。 5. [Salesforce1 および Lightning Experience アクション] セクションで、[定義済みアクションを上書き] をクリック します。 6. パレットで [Salesforce1 アクション] カテゴリをクリックし、リストの 2 番目の項目になるように [New Merch (新規商品)] を [Salesforce1 および Lightning Experience アクション] セクションにドラッグします。 7. [保存] をクリックします。 8. Salesforce1 を開いて試してみましょう。アクションバーに [New Merch (新規商品)] アクションが表示されま す。 もうひとこと... • Salesforce1では、グローバルアクションは、グローバルパブリッシャーレイアウトが適用されるページのア クションバー (フィード、グループ、別のパブリッシャーレイアウトで上書きされていない範囲のレイアウ トなど) に表示されます。 • [New Merch (新規商品)] アクションをリストの最初に追加すると、Salesforce フルサイトを使用する全ユーザが Chatter を開くたびに、そのアクションの項目の拡張リストが表示されます。この配置は操作の妨げとなる ことがあります。そのため、多くの項目を必要とするアクションは、下のほうに配置するようにしてくだ さい。 • 通常のページレイアウトの場合と同様に、グローバルパブリッシャーレイアウトをさまざまなユーザプロ ファイルに割り当てることができます。これにより、さまざまなユーザが異なるグローバルアクションを 指定できます。 105 アクションでモバイルの操作性を高める オブジェクト固有のアクションを使用して関連レコード を作成する オブジェクト固有のアクションを使用して関連レコードを作成す る オブジェクト固有のアクションにより、ユーザは関連レコードと自動的に関連付けられるレコードを作成でき ます。現在、Warehouse アプリケーションにはオブジェクト固有のアクションに関する適切な使用例がないた め、この例ではすべての Developer Edition 組織に存在する標準の取引先オブジェクトとケースオブジェクトを使 用します。 この例では、まだ客先にいるモバイル技術者が新しいケースを作成できる方法を求めているとします。ケース を対象オブジェクトとする取引先オブジェクトに対してレコード作成アクションを追加すると、技術者は自分 のモバイルデバイスで顧客の取引先レコードを参照し、そこからケースを直接ログ記録することができます。 オブジェクト固有のアクションを作成するための全体的な手順は、次のとおりです。 1. オブジェクト固有のアクションを作成します。 2. ユーザに表示する項目を選択します。可能な場合は、必須項目の値を事前定義します。 3. そのオブジェクトの 1 つ以上のページレイアウトにアクションを追加します。 ステップ 1: オブジェクト固有のアクションを定義する このシナリオでは、既存の取引先に関連付けられた請求書を作成します。 1. [設定] から、[クイック検索] ボックスに「取引先」と入力し、[ボタン、リンク、およびアクション] を選択 します。 2. [新規アクション]をクリックします。 3. [アクション種別] で、[レコードを作成] が選択されたままにします。 4. [対象オブジェクト] で [ケース] を選択します。 5. [表示ラベル] に 「ケースの作成」と入力し、[保存] をクリックします。 アクションレイアウトエディタが開きます。ここでは、アクションに割り当てられた項目をカスタマイズ できます。 6. パレットにドラッグして [Status (状況)] 項目をレイアウトから削除し、[保存] をクリックします。 7. 必須項目に関する警告メッセージが表示されます。これについては、次で対処するので、[はい] をクリッ クします。 もうひとこと... 必須項目をドラッグしてページレイアウトから削除しました。当然、プラットフォームから警告メッセージが 表示され、ユーザはモバイルアクションからケースを作成できるようにはなりません。この項目を削除した理 由は、次のステップでこの項目の値を事前に定義するときに明らかになります。 106 アクションでモバイルの操作性を高める ステップ 2: 項目を選択して項目値を事前に定義する ステップ 2: 項目を選択して項目値を事前に定義する オブジェクトには複数の項目を設定できるため、ユーザがそのようなオブジェクトのレコードを作成する場 合、リストが長くなり、モバイルユーザには確保できない画面のスペースや時間を占有する可能性がありま す。そのため、アクションレイアウトに表示される項目を選択することは重要です。また、項目値を事前に定 義して、アクションレイアウトから項目を削除することもできます。 この例では、モバイル技術者がすでにサイトでケースを登録しています。ケースを作成するたびに状況を選択 するように要求するのではなく、項目値を事前に定義できます。その後、アクションレイアウトから必須項目 を削除できます。[ケースの作成] アクションが使用されるたびに、状況が自動的に設定されます。 1. [設定] から、[クイック検索] ボックスに「取引先」と入力し、[ボタン、項目、およびアクション] を選択し ます。 2. 作成した [ケースの作成] アクションをクリックします。 3. [定義済みの値] 関連リストで、[新規] をクリックします。 4. [項目名] ドロップダウンリストから、[状況] を選択します。 5. その固有の値を [Working (作業中)] に設定し、[保存] をクリックします。 もうひとこと... 定義済みの値はデフォルト値より優先されます。前の例では、Salesforceフルサイトで作成されるケースは新規 ケースであることが一般的であるため、そこでケースが作成された場合はデフォルト値が [オープン] に設定さ れます。ただし、モバイルデバイスから新規ケースが作成された場合は、現場にモバイル技術者がいるため、 そのケースを実際に処理しています。モバイルデバイスから登録される新規ケースでは、デフォルト値が上書 きされて、「作業中」として事前に定義されます。このように、定義済み項目値は画面のスペースを確保する だけでなく、モバイルユーザの作業内容への最適化にも使用できます。 ステップ 3: オブジェクト固有のレイアウトをカスタマイズする Salesforce フルサイトまたは Salesforce1 のいずれかにアクションを表示するには、アクションをページレイアウ トに追加する必要があります。 1. [設定] から、[クイック検索] ボックスに「取引先」と入力し、[ページレイアウト] を選択します。 2. 取引先のモバイルレイアウトの横にある [編集] をクリックします。 このレイアウトは、以前に作成したレイアウトです。[Salesforce1 および Lightning Experience アクション] セク ションは空になっており、このレイアウトのアクションはSalesforceによって定義済みであることを示すメッ セージが表示されています。この状態は望ましくありません。モバイルユーザが実行する必要のある作業 に関連するように、このレイアウトのアクションをカスタマイズしてください。 3. [Salesforce1 および Lightning Experience アクション] セクションで、[定義済みアクションを上書き] をクリック します。 4. パレットで [Salesforce1 アクション] カテゴリをクリックし、リストの 2 番目の項目になるように [ケースを 作成] をドラッグします。 107 アクションでモバイルの操作性を高める ステップ 3: オブジェクト固有のレイアウトをカスタマ イズする パレット内には [新規ケース] 項目もあります。[新規ケース] 項目は、取引先オブジェクトに割り当てられ たデフォルトアクションですが、編集はできません。[ケースの作成] カスタムアクションを作成している ので、このデフォルトアクションは必要ありません。 5. [保存] をクリックします。これで、すべてのモバイル技術者の Salesforce1 の取引先レコードページのアク ションバーに、新しい [ケースの作成] アクションが表示されます。 6. 取引先に移動して、モバイルデバイスでテストします。 7. 取引先の詳細ページで、[ケースの作成] アクションをタップします。 ケースの [状況] 必須項目は表示されませんが、そこに存在しています。この特定の取引先への関連付けにつ いても同様です。 もうひとこと... オブジェクト固有のレイアウトを作成する場合、リストの最初の 4 個のアクションのみが、Salesforce1 のアク ションバーに表示されることに留意してください。残りのアクションには、ユーザがアクションバーで タップしたときに、アクションメニューからアクセスできます。 108 を システムをセキュリティで保護する レベル: 初級/所要時間: 35 ~ 40 分 このプラットフォームでは、すべてのユーザ種別に最小権限のセキュリティポリシーを簡単に実装できます。 各ユーザには、作業を行うのに必要な権限のみを付与する必要があります。すべての組織は、最初にプロビ ジョニングするときに厳密にロックダウンされます。これらのチュートリアルでは、適切なユーザが適切なと きに適切なデータのみにアクセスできるように、ユーザ、プロファイル、権限セット、ロールなどのさまざま な機能を使用して、アクセス権を徐々に開放していく方法について説明します。 これを行う手順のプレビューを次に示します。 1. プロファイルと権限セットを作成する — 各種別がアクセスする必要がある異なる機能に基づいて、アプリ ケーションで必要な異なるユーザ種別を特定します。これらの機能を実行するためにそのユーザ種別に必 要な権限のみが各プロファイルに含まれるように、各ユーザ種別の基本レベルプロファイルを作成します。 次に、ユーザがその他いくつかの権限が必要な可能性がある場合の例外を処理するための権限セットを作 成します。 2. ユーザを作成する — アプリケーションとデータベースにアクセスする必要がある各個人に対して、ユーザ を作成し、そのユーザを適切なプロファイルと権限セットに割り当てます。 3. 共有モデルを設定する — 各オブジェクトに対して、組織の共有設定レコードの共有モデルを設定し、各 ユーザが所有するレコードを公開するか非公開にするかを決定します。 4. 非公開レコードを共有する — ロール、グループ、レコード共有ルール、その他の方法を使用して、非公開 レコードを他のユーザと共有します。 前提条件 ブラウザの切り替え このチュートリアルでは、ユーザ間を切り替える必要があります。そのためには、1 つのブラウザを管理 者/開発者 (これまで使用しているログイン) として開いたままにしておき、他のユーザとしては別のブラウ ザを使用すると便利です。たとえば、管理者/開発者のログインに Safari を使用している場合、マネージャ や営業担当者ユーザには Mozilla Firefox などの別のブラウザを使用します。この方法では、異なるブラウザ間 を切り替えるだけで、セキュリティを設定した後にログアウトとログインを繰り返すことなくレコードア クセス権をテストできます。Google Chrome を使用している場合、Chrome シークレットモードを使用して、 同じブラウザで複数のユーザとしてログインすることもできます。 109 システムをセキュリティで保護する プロファイルと権限セットを作成する プロファイルと権限セットを作成する 所要時間: 5 ~ 10 分 ユーザを作成する前に、1 つ以上のプロファイルと権限セットを作成しておくことが最良です。プロファイル と権限セットは、ユーザが実行できる操作を制御するための機能権限と設定のコレクションです。たとえば、 プロファイルと権限セットの制御内容には、次のものがあります。 • システムレベルのアクセス権。時間ベースおよび IP ベースのログイン制限や、ユーザ管理など、組織内の 異なる機能に適用される権限があります。 • オブジェクトレベルのアクセス権。データベース内のオブジェクトごとにレコードを作成、更新、削除す る権限があります。 • 項目レベルのアクセス権。オブジェクトの項目を参照または編集する機能があります。 • Apex クラスやカスタムロジックを呼び出すためのアクセス権。 プロファイルと権限セットの違いは何でしょうか? ユーザには、1 つのプロファイルしか設定できませんが、 権限セットは複数設定できます。この仕組みは次のとおりです。たとえば、類似していても異なる権限要件を 持つ多種のユーザを対象とするセキュリティポリシーを実装する必要があるとします。わずかに異なる多くの プロファイルを作成して管理するよりも、共通権限を管理する 1 つのプロファイルを作成し、権限セットを使 用して特定の権限を管理したほうが効率的です。 メモ: プロファイルと権限セットの作成を開始する前に、関連付けられたユーザライセンスに応じて、プ ロファイルまたは権限セットに設定できる権限が異なる点に注意してください。 ステップ 1: プロファイルを作成する 次の手順を実行して、Warehouse アプリケーションの基本プロファイルを作成します。 1. [設定] から、[クイック検索] ボックスに「プロファイル」と入力し、[プロファイル] を選択します。 2. [標準 Platform ユーザ] の横にある [コピー] をクリックします。 3. 新しいプロファイルに「Warehouse アプリケーションユーザ」という名前を付け、[保存] をクリックしま す。 もうひとこと... コピーするプロファイルによって使用するユーザライセンス種別が決まるため、十分に考慮してください。た とえば、DE 組織では、このチュートリアルで使用する Salesforce Platform ユーザライセンスが 3 種類あります。 ステップ 2: プロファイルを編集する では、すべての Warehouse アプリケーションユーザが作業を行う必要がある共通権限が提供されるように、新 しいプロファイルを編集してみましょう。すべての Warehouse アプリケーションユーザは、特に次の操作を行 える必要があります。 • Warehouse アプリケーションに切り替える • [Invoice (請求書)] タブを表示し、[Merchandise (商品)] タブは必ずしも表示しない 110 システムをセキュリティで保護する ステップ 3: マネージャ権限セットを作成する • Merchandise は参照オブジェクトであるため Merchandise レコードを参照する 次の手順を実行して、Warehouse アプリケーションユーザのベースラインプロファイルを作成します。 1. Warehouse アプリケーションユーザの詳細ページで、[編集] をクリックします。 2. [カスタムアプリケーション設定] セクションで、Warehouse アプリケーションの [参照可能] と [デフォルト] を選択します。 3. [タブの設定] セクションで、[Invoices (請求書)] を [デフォルトで表示]、[Merchandise (商品)] を [タブを隠す] に 設定します。 4. [カスタムオブジェクト権限] セクションで、Merchandise オブジェクトの [参照] を有効化 (次の画像を参照) し、[保存] をクリックします。 ステップ 3: マネージャ権限セットを作成する この手順では、2 種類の Warehouse アプリケーションユーザ (営業マネージャと営業担当者) にセキュリティを設 定します。どちらに種別のユーザも、基本権限には Warehouse アプリケーションプロファイルを使用できます が、それ以降は異なる権限が必要です。この要件に対応するため、2 つの異なる権限セットを作成します。 「Warehouse Manager (Warehouse マネージャ)」権限セットを作成するには、次の手順を実行します。 1. [設定] から、[クイック検索] ボックスに「権限セット」と入力し、[権限セット] を選択して [新規] を選択し ます。 2. [表示ラベル] に 「Warehouse Manager」(Warehouse マネージャ) と入力します。 3. [ユーザライセンス] で、[Salesforce Platform] を選択し、[保存] をクリックします。 次に、新しい権限セットを変更して、Merchandise オブジェクトレコードを作成、更新、削除し、[Merchandise (商品)] タブを表示できるようにします。 1. Warehouse マネージャの権限セット詳細ページで、[オブジェクト設定] をクリックします。 2. [Merchandise (商品)] をクリックします。 3. [編集] をクリックします。 4. [タブの設定] で、[選択可能] と [参照可能] を有効化します。 5. [オブジェクト権限] で、すべての権限を有効化します。 6. [保存] をクリックします。 111 システムをセキュリティで保護する ステップ 4: 営業担当者権限セットを作成する ステップ 4: 営業担当者権限セットを作成する 「Warehouse Salesperson (Warehouse 営業担当者)」権限セットを作成するには、次の手順を実行します。 1. [設定] から、[クイック検索] ボックスに「権限セット」と入力し、[権限セット] を選択して [新規] を選択し ます。 2. [表示ラベル] に「Warehouse Salesperson」(Warehouse 営業担当者) と入力します。 3. [ユーザライセンス] で、[Salesforce Platform] を選択し、[保存] をクリックします。 次に、新しい権限セットを変更して、Line Item オブジェクトレコードを作成、更新、削除し、[Invoice (請求書)] タブを表示できるようにします。 1. Warehouse 営業担当者の権限セット詳細ページで、[オブジェクト設定] をクリックします。 2. [Invoice (請求書)] をクリックしてから、[編集] をクリックします。 3. [タブの設定] で、[選択可能] と [参照可能] を有効化します。 4. [オブジェクト権限] で、[既読]、[作成]、[編集]、および [削除] 権限を有効化します。 5. [保存] をクリックします。 6. ブレッドクラムメニューで、[オブジェクト設定] をクリックします。 7. [Line Items (品目)] をクリックします。 8. [編集] をクリックします。 9. [オブジェクト権限] で、[既読]、[作成]、[編集]、および [削除] 権限を有効化します。 10. [保存] をクリックします。 112 システムをセキュリティで保護する 新規ユーザを作成する 「Warehouse Salesperson (Warehouse 営業担当者)」権限セットでは、Invoices と Line Items にのみアクセスでき、 Merchanise にはアクセスできません。このことは、権限セットの [オブジェクト設定] ページで確認できます。 新規ユーザを作成する 所要時間: 5 ~ 10 分 プロファイルと権限セットの処理が完了したら、ユーザに注目します。すべての新しい組織は、プロファイ ル、権限セット、他のユーザなど、組織内のすべての情報にアクセスしてカスタマイズできるスーパーユーザ 管理者で開始されます。今そのスーパーユーザとしてログインしています。このような権限やアクセス権を全 員に付与する必要はないため、対象ユーザを制限する必要があります。 このチュートリアルでは、Warehouse で作業する 2 人のユーザ (営業マネージャと営業担当者) を新規作成しま す。これらはすでに作成したプロファイルおよび権限セットと同じ名前ですが、ここではそれらをユーザに割 り当てます。 113 システムをセキュリティで保護する ステップ 1: 新規ユーザを作成する ステップ 1: 新規ユーザを作成する 「営業マネージャ」としての役割を果たすユーザを新規作成するには、次の手順を実行します。次の手順で は、すぐにアクセスできるメールアドレスを必ず使用してください。 1. [設定] から、[クイック検索] ボックスに「ユーザ」と入力し、[ユーザ] を選択します。 2. [新規ユーザ] をクリックします。 3. フォームに次のように入力します。 • [名:] Sales (営業) • [姓:] Manager (マネージャ) • [メール:] あなたのメールアドレス • [ユーザ名:] あなたのユーザ名.manager@あなたのドメイン • ニックネーム: あなたのユーザ名.manager • [ロール:] この項目はとりあえず空白にし、後でロールを設定します。 • [ユーザライセンス:] Salesforce Platform • [プロファイル:] Warehouse App User (Warehouse アプリケーションユーザ) • 一番下で、ニュースレター用のチェックボックスはオフにしますが、[パスワードをリセットしてユーザ に通知する:] はオンにします。 4. [保存] をクリックします。 次の例外を除き、「営業担当者」としての役割を果たすユーザを新規作成する場合も、同じ処理を繰り返しま す。 • [名:] Sales (営業) • [姓:] Person (担当者) • [メール:] あなたのメールアドレス • [ユーザ名:] あなたのユーザ名.sales@あなたのドメイン • ニックネーム: あなたのユーザ名.sales • [ロール:] この項目はとりあえず空白にし、後でロールを設定します。 • [ユーザライセンス:] Salesforce Platform • [プロファイル:] Warehouse App User (Warehouse アプリケーションユーザ) • 一番下で、ニュースレター用のチェックボックスはオフにしますが、[パスワードをリセットしてユーザに 通知する:] はオンにします。 これで、Warehouse アプリケーションユーザプロファイルを使用する 2 人のユーザが作成されました。また、 それぞれの新規ユーザについて、アクティベーションメールが電子メール受信箱に送信されているはずです (合計 2 つのメール)。 114 システムをセキュリティで保護する ステップ 2: レコードアクセスをテストする ステップ 2: レコードアクセスをテストする Warehouse アプリケーションユーザプロファイルは両方の新規ユーザに割り当てられているため、DE 組織にロ グインして Warehouse アプリケーションを開始することはできますが、それ以上の操作はできません。まず、 営業マネージャとしてログインします。 1. 受信箱にメールがあるので、そのリンクをクリックして営業マネージャとしてログインします。 メモ: 前提条件で記載されているように、この時点でブラウザを切り替えてください。 2. パスワードを変更すると、[ホーム] タブが表示されます。 3. デフォルトのアプリケーションは Warehouse ですが [Merchandise (商品)] タブまたは [Invoices (請求書)] タブは表 示されません。 (Warehouse が表示されなくても問題ありません。プロファイルで設定されていなければプ ロファイルを編集してから、Warehouse アプリケーションを選択します) なぜでしょうか。これは、アプリ ケーション機能の基盤となるオブジェクトにアクセスするために必要な権限がユーザのプロファイルに指 定されていないからです。 ステップ 3: 権限セットをユーザに割り当てる 営業マネージャおよび営業担当ユーザに必要な権限を付与するには、適切な権限セットを使用して各ユーザを 更新します。 1. 管理者としてログインしたブラウザに切り替えます。 2. [設定] から、[クイック検索] ボックスに「ユーザ」と入力し、[ユーザ] を選択します。 3. [Manager, Sales (マネージャ、営業)] をクリックして、このユーザの詳細ページに移動します。 4. [権限セットの割り当て] セクションで、[割り当ての編集] をクリックします。 5. [Warehouse Merchandise Manager (Warehouse 商品マネージャ)] および [Warehouse Sales Person (Warehouse 営業担当者)] の両方の権限セットをユーザの [有効化された権限セット] リストに追加し、[保存] をクリックします。 6. [Person, Sales (人、営業)] ユーザについても上記の手順を繰り返しますが、ユーザの権限セットリストには [Warehouse Sales Person (Warehouse 営業担当者)] 権限セットのみを追加します。 115 システムをセキュリティで保護する ステップ 4: レコードアクセスをテストする ステップ 4: レコードアクセスをテストする ここでは、権限セットを 2 人のユーザに追加した結果を確認します。 1. 営業マネージャとして DE 組織にログイン済みのブラウザに切り替え、ページを更新すると、[Merchandise (商品)] タブと [Invoices (請求書)] タブが使用可能になります。 2. [Merchandise (商品)] タブをクリックします。 3. [ビュー:] [すべて] の横にある [Go!] をクリックすると、すべてのレコードが表示されます。 4. [Invoices (請求書)] タブをクリックして、同様の確認を行います。 5. ログアウトし、メールに記載されたアクティベーションリンクを使用して、営業担当者としてログイン (パ スワードも変更) します。 6. 営業担当者の場合、[Invoice (請求書)] タブは表示されますが [Merchandise (商品)] タブは表示されません。これ は、ユーザの権限セットでそのように設定されているからです。 もうひとこと... ここでわかるように、プロファイルと権限セットを作成し、それを異なるユーザに割り当てるのは非常に簡単 です。 組織の共有設定を行う 所要時間: 5 ~ 10 分 プラットフォームのセキュリティモデルの設計には、レコード所有権という概念があり、下位レベルの権限が 最も低いデータセキュリティポリシーの実装を単純化するのに役立ちます。レコードの作成者は、作成後のレ コードを所有し、フルアクセスできます。つまり、所有者は、レコードの所有権を参照、更新、削除、移行で きます。 組織のユーザが所有しないレコードにアクセスできるかどうかは、さまざまなデータアクセス制御によって決 まります。この制御には、オブジェクトの共有モデル、ロール階層、グループ、共有ルールなどが含まれま す。 まず、各オブジェクトには組織の共有設定 (OWD) とも呼ばれる共有モデルがあります。OWD は、オブジェクト の互いのレコードに対してユーザが持つ組織全体のデフォルトのアクセスレベルを管理します。 116 システムをセキュリティで保護する ステップ 1: 請求書の OWD を変更する • 非公開共有モデルを使用するオブジェクトの場合、オブジェクトレベルのアクセス権がユーザのプロファ イルに指定されていれば、レコード所有者はレコードを参照および管理できます。他のユーザは、他のレ コード共有方法によってのみ、所有しないレコードを操作できます。 • 公開/参照のみ共有モデルを使用するオブジェクトの場合、オブジェクトの参照権限と項目レベルのアクセ ス権がユーザのプロファイルに指定されていれば、どのユーザでもオブジェクトのすべてのレコードを参 照できます。 • 公開/参照・更新可能共有モデルを使用するオブジェクトの場合、ユーザのプロファイルごとにオブジェク トレベルおよび項目レベルの権限によって許可されていれば、どのユーザでもオブジェクトのすべてのレ コードを参照および更新できます。 オブジェクトにはユーザコンテキストに基づいて異なる共有要件があるため、オブジェクトの OWD の設定時 にはこの点を考慮することが非常に重要です。一般に、最も厳密なユーザ要件に合わせて各オブジェクトの OWD をできるだけ厳密にし、必要に応じて共有ルールを使用してアクセス権を広げていきます。 では、営業担当者にはなぜすべての Invoice と Line Items が表示されるのでしょうか? この問いに答えるため、こ れらのオブジェクトの OWD を調べてみましょう。 ステップ 1: 請求書の OWD を変更する 次の手順を実行して、請求書の OWD を表示します。 1. スーパーユーザ管理者としてログインしたブラウザに切り替えます。 2. [設定] から、[クイック検索] ボックスに「共有設定」と入力し、[共有設定] を選択します。 次に進む前に、Invoice と Merchandise の OWD がどちらも [公開/参照・更新可能] に設定されていることを確認し ます。この設定により、レコード所有者に関係なく、すべてのログインユーザは、これらのオブジェクトのど のレコードでも参照、作成、更新、削除できます。では、両方のオブジェクトの OWD を変更してみましょう。 1. [組織の共有設定] セクションで、[編集] をクリックします。 2. [Invoice (請求書)] で、[非公開] を選択し、[階層を使用したアクセス許可] を選択します。 3. [Merchandise (商品)] で、[公開/参照のみ] を選択し、[階層を使用したアクセス許可] を選択します。 4. [保存] をクリックします。 117 システムをセキュリティで保護する ステップ 2: レコードアクセスをテストする もうひとこと... Line Item オブジェクトの場合はどうでしょうか? このページを終了する前に、Line Item オブジェクトの OWD が [親レコードに連動] になっていることを確認してください。この設定は、親 Invoice オブジェクトの OWD を継承 することを示します。2 つのオブジェクト間の主従関係により、このリレーションが自動的に作成されまし た。すばらしいですね。 ステップ 2: レコードアクセスをテストする 請求書の OWD の変更結果を確認するため、営業担当者として次の手順を実行します。 1. 営業担当者として DE 組織にログインしたブラウザに切り替え、[Invoices (請求書)] タブをクリックします。 2. [ビュー: すべて] の横にある [Go!] をクリックします。 3. 使用可能な請求書リストは空になっています。 なぜこのように変化したのでしょうか? 営業担当者には Invoice レコードと Line Item レコードを参照、作成、更 新、削除 (CRUD) できる権限セットがありますが、この権限では自分が所有するレコードしか CRUD できません。 これらのオブジェクトの OWD が [非公開] に設定されており、管理スーパーユーザのみがレコードを作成して いると、営業担当者はその所有者のレコードを表示できません。自分が所有するレコードにしか営業担当者が アクセスできないことを実証するため、次の手順を実行して営業担当者が所有する新しい請求書を作成してみ ます。 1. 請求書の詳細ページで、[新規] をクリックし、[保存] をクリックします。 118 システムをセキュリティで保護する ロール階層を使用してレコードを共有する 2. [New Line Item (新規品目)] をクリックし、Merchandise を選択して、いくつか品目を追加します。[保存] をク リックします。 3. [Invoices (請求書)] タブをクリックすると、請求書が表示されるようになります。 4. では、ログアウトし、営業マネージャユーザとして再度ログインしてください。 5. 上記の手順を繰り返すと、これらのオブジェクトの [非公開] 設定のため、システム内の営業マネージャユー ザが所有しない Invoice と Line Item にはアクセスできないことがわかります。 ロール階層を使用してレコードを共有する 所要時間: 5 ~ 10 分 最後のチュートリアルでは、非公開レコードアクセスによって、従業員の作業をマネージャが表示するうえで 妨げになっていることが分かりました。レコードアクセス権はマネージャに開放する必要がありますが、必ず しもすべてのマネージャに開放する必要はありません。マネージャが管理する営業担当者によって所有されて いるすべての請求書をそのマネージャが表示できるのが理想的です。このチュートリアルでは、ロール階層を 設定および使用して、非公開レコードを組織図で自動的に開く方法を学習します。 ステップ 1: ロール階層を作成する ロール階層を作成する手順は、次のとおりです。 1. 管理者としてログインしたブラウザに切り替えます。 2. [設定] から、[クイック検索] ボックスに「ロール」と入力し、[ロール] を選択します。 選択可能なサンプルロール階層のドロップダウンリストがあります。オプションを順にクリックして、違 いを確認してください。 3. [テリトリー別ロール階層サンプル] を選択し、[ロールの設定] をクリックします。 4. CEO で [ロールの追加] をクリックします。 5. [表示ラベル] に「Sales Manager」(営業マネージャ) と入力し、[保存 & 新規] をクリックします。 6. [表示ラベル] に「Salesperson」(営業担当者) と入力します。 7. [このロールの上位ロール] では、ルックアップを使用して [営業マネージャ] を選択します。 8. [保存] をクリックします。 119 システムをセキュリティで保護する ステップ 2: ユーザをロールに割り当てる 9. [ロール階層の作成] ページに戻ります。Sales Manager ノードを展開すると、下位の Salesperson ロールが表示 されます。 もうひとこと... 開始したサンプルテンプレートに基づいて定義されたロールが他にも数多くあります。必要に応じてそれらを 削除することもできますが、この一連のチュートリアルでは違いは生じません。DE 組織にはユーザが 2 人しか いないため、ユーザをさらに追加することはできません。 ステップ 2: ユーザをロールに割り当てる 1. [ロール階層の作成] ページが表示されていない場合は、[設定] から [クイック検索] ボックスに「ロール」 と入力し、[ロール] を選択して [ロールの設定] をクリックします。 2. [Sales Manager (営業マネージャ)] ロールの横にある [割り当て] をクリックします。 3. [Sales Manager (営業マネージャ)] を選択済みリストに追加し、[保存] をクリックします。 4. 操作を繰り返して、Sales Person ユーザを Salesperson ロールに割り当てます。 ステップ 3: レコードアクセスをテストする ここでも、セキュリティ設定に加えた最新の変更の結果をテストします。 1. 営業マネージャとしてログインしたブラウザに切り替え、[Invoices (請求書)] タブをクリックします。 2. [ビュー: すべて] の横にある [Go!] をクリックします。 3. 営業マネージャは、営業担当者が所有する請求書を操作できるようになりました。これは、ロール階層で、 そのロール階層までの非公開レコードが共有されるからです。 120 システムをセキュリティで保護する ステップ 3: レコードアクセスをテストする もうひとこと... ロール階層は、非公開レコードへのアクセス権を共有するための 1 つのオプションにすぎません。たとえば、 所有権または特定ユーザの他の条件によって関連付けられた一連の非公開レコードを組織で共有する必要があ る場合がよくあります。そのような要件には、グループを使用できます。この場合、さらに数回クリックし て、グループおよび共有ルールを作成するだけですみます。 121 カスタムアプリケーションロジックをコーディング する 簡単に管理できるアプリケーションをすばやく作成するには、可能な場合は必ず、ビジネスロジックに沿った プラットフォームの組み込みのポイント & クリックオプションを使用します。ただし、ワークフロールール、 数式項目、積み上げ集計項目、および承認などの機能でニーズのすべては満たせない場合があります。このよ うな場合、アプリケーションロジックをコーディングすることを検討する必要があります。 この一連のチュートリアルでは、Apexを使用して、特有の要件を満たすカスタムアプリケーションロジックを コーディングします。Apexはプラットフォームのプログラミング言語であり、これを使用して、従来のデータ ベース駆動型アプリケーション開発プラットフォームで一般的なストアドプロシージャやデータベーストリガ などを作成できます。ここでは、複数のツールを使用して Apex のクラス、メソッド、データベーストリガ、 および単体テストを開発する方法について学習します。 開発者コンソールと Apex を探索する このチュートリアルでは、開発者コンソールを使用して Apex を体験します。 ステップ 1: 開発者コンソールを起動する コーディングには複数のツールを使用できます。このチュートリアルではまず、そうしたツールの 1 つであ る、ブラウザべースの開発環境に含まれる開発者コンソールを使用して、Apex 言語の基本を学習します。 DE 組織にログインし、[あなたの名前] またはクイックアクセスメニュー ( す。 122 ) から開発者コンソールを開きま カスタムアプリケーションロジックをコーディングする ステップ 2: 基本的な Apex コードを実行する もうひとこと... コンソール上部に[ヘルプ]リンクがあります。このリンクをクリックすると、非常に役に立つ多くのリソース を利用できます。時間があるときに確認してください。 ステップ 2: 基本的な Apex コードを実行する さっそく Apex を体験しましょう。コンソールを使用して数行の Apex コードを実行します。 1. [Debug (デバッグ)] > [Open Execute Anonymous Window (実行匿名ウィンドウを開く)] をクリックします。 2. [Enter Apex Code (Apex コードを入力)] ウィンドウに次のコードを入力します。 for (Integer i=1; i<=10; i++) { System.debug('Hi ' + i); // output "Hi" to the debug log } 3. [Open Log (ログを開く)] チェックボックスをオンにして、[Execute (実行)] をクリックします。 もうひとこと... Apex は、すぐに習得できるプログラミング言語です。特に Java、C++、C# など類似の言語を理解している場合 は容易に習得できます。上記の例はきわめて単純ですが、詳しく見ていくと Apex について多くを学ぶことが できます。 • Apex は、変数の宣言、割り当て、ループなどのフロー制御構造、文字列の連結、コメントなど、一般的な 言語の基本をサポートする、強く型付けされた言語です。標準 System クラスの debug メソッドへのコール からもわかるように、オブジェクト指向言語でもあります。 • これが匿名コードと呼ばれるのは、コードを後で使用するために名前を付けて保存することなく、実行す るだけだからです。コンソールを終了して作業をクリアするとコードは失われます。それでは、出力はど こにあるのでしょうか。次のステップに進んでください。 123 カスタムアプリケーションロジックをコーディングする ステップ 3: 実行ログを確認する ステップ 3: 実行ログを確認する コンソールでコードを実行するたびに、コード実行中に何が発生したかを詳しく記録した一連のレコードが含 まれるログが生成されます。 1. コンソールの下部にある [Logs (ログ)] タブをクリックします。並び替え可能な最近の実行のログリストが表 示されています。 2. 特定のログのレコードを参照するには、該当するログをクリックします。このアクションによって、次の [Log (ログ)] タブが新しく作成され、対応する [Stack (スタック)]、[Execution Log (実行ログ)]、[Source (ソース)]、 [Variables (変数)] セクションが表示されます。 3. [Execution Log (実行ログ)] セクションで、[Filter (検索条件)] チェックボックスの横に「DEBUG」(すべて 大文字) と入力します。ログには、反復時の "Hi" の出力とループカウンタ変数の値を検証する System.debug コールに対応するレコードのみが表示されます。 124 カスタムアプリケーションロジックをコーディングする Apex クラスおよびメソッドを作成する もうひとこと... ログには多くの情報が含まれます。たとえば、[Stack (スタック)] セクションの [Execution Tree (実行ツリー)] タブ には、実行操作の階層ツリーが表示され、[Performance Tree (パフォーマンスツリー)] タブには、運用パフォーマ ンスの集計データが表示され、パフォーマンス問題の診断に使用できます。[Execution Log (実行ログ)] セクショ ンには、上記の [Logs (ログ)] タブで選択したログの個別の所要時間とログレコードが表示されます。実行ログ には、多くのレコードが含まれる場合があるため、[Filter (条件)] で不要なデータを除外して関心のあるデータ のみに絞り込むと便利です。 開発者コンソールを自由に探索し、試してみてください。Apex コードをすばやくテスト、調整、またはデバッ グする場合、いつでもすぐにコンソールを使用できます。開発者コンソールについての詳細は、[ヘルプ]をク リックしてヘルプやトレーニングを参照してください。 Apex クラスおよびメソッドを作成する レベル: 中級/所要時間: 20 ~ 30 分 このチュートリアルでは、名前付きメソッドを含む永続 Apex クラスを作成する方法について学習します。こ れはデータベースのストアドプロシージャと考えることもできます。 Warehouse アプリケーションでは現在、ユーザが手動で請求書の品目ごとに品目番号を入力する必要がありま す。これは、ユーザの不注意やレコードの削除によって番号が順不同になる可能性があるため、最適な方法で はありません。 ワークフロールールなどの宣言型ツールを使用して問題を解決できない場合もあるため、このチュートリアル では、特定の請求書のすべての品目の番号を自動的に採番し直す Apex クラスメソッドを作成する方法を説明 します。目標は、すべての請求書に含まれる一連の品目に 1 から 1 ずつ増加する連続番号 (1、2、3 ...) が付けら れるようにすることです。 ステップ 1: Apex クラスを作成する Apex クラスは、関連する変数、定数、およびメソッドをカプセル化したもので、プラットフォームに一元的に 保存されて、アプリケーションで処理に使用できます。 開発者コンソールを使用して Apex クラスを作成する手順は、次のとおりです。 1. DE 組織で、[あなたの名前] またはクイックアクセスメニュー ( ) から開発者コンソールを開きます。 2. [File (ファイル)] > [New (新規)] > [Apex Class (Apex クラス)] をクリックします。 3. 新しいクラスに「InvoiceUtilities」という名前を付け、[OK] をクリックします。 4. デフォルトの Apex クラステンプレートによって、次のテンプレートコードを含む新しいコードが作成され ます。 public class InvoiceUtilities { } 125 カスタムアプリケーションロジックをコーディングする ステップ 2: 基本となるクラスメソッドを作成する 5. このコードに次のようにコメントを追加し、[File (ファイル)] > [Save (保存)] をクリックします。 public class InvoiceUtilities { // Class method to renumber Line Items for a given Invoice number. // Returns a string that indicates success or failure. } ステップ 2: 基本となるクラスメソッドを作成する Warehouse アプリケーションでは現在、ユーザが手動で請求書の品目ごとに品目番号を入力する必要がありま す。これは、ユーザの不注意やレコードの削除によって番号が順不同になる可能性があるため、最適な方法で はありません。 ワークフロールールなどの宣言型ツールを使用してこの問題を解決する方法はないため、このチュートリアル では、特定の請求書のすべての品目番号を自動的に採番し直す Apex クラスメソッドを作成する方法について 説明します。目標は、すべての請求書に含まれる一連の品目に 1 から 1 ずつ増加する連続番号 (1、2、3 ...) が付 けられるようにすることです。 最初に、作成するクラスメソッドの基本として、名前、受け入れるパラメータ、コール元の環境に返す値、必 要に応じて疑似コードなどを決定して、大まかな実装計画を示します。 • 開発者コンソールで、Apex クラスを次のコードと同じになるように変更します。 • 保存はしません。リターンステートメントをまだ追加していないため、保存するとコンパイルエラーが発 生します。 ソースコードについては、https://gist.github.com/3605633を参照してください。 public class InvoiceUtilities { // Class method to renumber Line Items for a given Invoice number. // Returns a string that indicates success or failure. public static String renumberLineItems(String invoiceName) { // Create a copy of the target Invoice object and its Line Items. // Loop through each Line Item, re-numbering as you go // Update the Line Items in one transaction, rollback if any problems // and return error messages to the calling environment. // On success, return a message to the calling program. } } ステップ 3: 請求書とその品目を取得する 計画を作成したら、コメントの下にコードを入力していきましょう。まず、対象となる請求書とその品目の ローカルコピーを作成します。 1. メソッドで、メソッド宣言と最初のコメントの下に、次の行を入力します。 Invoice__c invoice = 126 カスタムアプリケーションロジックをコーディングする ステップ 4: クラスメソッドの最終バージョンを作成す る 2. 次に、既存の品目を順序どおりに並べる SOQL クエリを使用し、メソッドの入力パラメータによる指定に基 づいて、検索条件を使用し、対象の請求書を取得します。SOQL のオブジェクト表記は、他とは少し異なり ます。 Invoice__c invoice = [Select i.Name, (Select Name From Line_Items__r ORDER BY Name) From Invoice__c i Where i.Name = :invoiceName LIMIT 1]; 3. まだ保存はしません。リターンステートメントをまだ追加していないため、保存するとコンパイルエラー が発生します。 ステップ 4: クラスメソッドの最終バージョンを作成する 計画を作成できたら、疑似コードを補足して最終的なクラスメソッドのロジックを構築しましょう。まず、対 象の請求書とその品目の sObject のローカルコピーを作成します (下記の行 8 ~ 10)。メソッドのコードには、既 存の品目を順序どおりに並べる SOQL クエリが含まれ (行 8)、メソッドの入力パラメータの指定に基づいて (行 10)、検索条件を使用し、対象の請求書を取得します。SOQL のオブジェクト表記は、他とは少し異なります。 メモ: このステップは、適宜 [Save (保存)] をクリックしてクラスを保存しながら進めてください。保存操 作をするときには、[Problems (問題)] ペインでコンパイルエラーがないことを確認します。 ソースコードについては、https://gist.github.com/3605645を参照してください。 public class InvoiceUtilities { // Class method to renumber Line Items for a given Invoice number. // Returns a string that indicates success or failure. public static String renumberLineItems(String invoiceName) { // Create a copy of the target Invoice object and its Line Items. Invoice__c invoice = [SELECT i.Name, (Select Name FROM Line_Items__r ORDER BY Name) FROM Invoice__c i WHERE i.Name = :invoiceName LIMIT 1]; // Loop through each Line Item, renumbering as you go. // Update the Line Items in one transaction, rollback if any problems // and return error messages to the calling environment. // On success, return a message to the calling program. return 'Line items renumbered successfully.'; } } 更新された Apex クラスを保存します。保存操作をするときには、[Problems (問題)] ペインでコンパイルエラー がないことを確認します。エラーがある場合は、適切に修正して、修正後のコードを保存します。 次に、各品目を処理して採番し直すためのループを追加してクラスを更新します (行 13 ~ 18)。 ソースコードは、https://gist.github.com/3605650 にあります。 public class InvoiceUtilities { // Class method to renumber Line Items for a given Invoice number. 127 カスタムアプリケーションロジックをコーディングする ステップ 4: クラスメソッドの最終バージョンを作成す る // Returns a string that indicates success or failure. public static String renumberLineItems(String invoiceName) { // Create a copy of the target Invoice object and its Line Items. Invoice__c invoice = [SELECT i.Name, (SELECT Name FROM Line_Items__r ORDER BY Name) FROM Invoice__c i WHERE i.Name = :invoiceName LIMIT 1]; // Loop through each Line Item, renumbering as you go. Integer i = 1; for (Line_Item__c item : invoice.Line_Items__r) { item.Name = String.valueOf(i); System.debug(item.Name); i++; } // Update the Line Items in one transaction, rollback if any problems, // and return error messages to the calling environment. // On success, return a message to the calling program. return 'Line items renumbered successfully.'; } } 行 14 の FOR ループでは、Apex 固有のオブジェクト表記を使用して請求書の品目を参照しています。行 18 に は、デバッグログに役に立つ情報を出力するための System.debug ステートメントが含まれています。 次に、新しいバージョンの請求書の品目でデータベースを更新する、クラスメソッドの最終バージョンを作成 します (行 22 ~ 30)。 ソースコードについては、https://gist.github.com/3605654を参照してください。 public class InvoiceUtilities { // Class method to renumber Line Items for a given Invoice number. // Returns a string that indicates success or failure. public static String renumberLineItems(String invoiceName) { // Create a copy of the target Invoice object and its Line Items. Invoice__c invoice = [SELECT i.Name, (SELECT Name FROM Line_Items__r ORDER BY Name) FROM Invoice__c i WHERE i.Name = :invoiceName LIMIT 1]; // Loop through each Line Item, renumbering as you go. Integer i = 1; for (Line_Item__c item : invoice.Line_Items__r) { item.Name = String.valueOf(i); System.debug(item.Name); i++; } // Update the Line Items in one transaction, rollback if any problems // and return error messages to the calling environment. 128 カスタムアプリケーションロジックをコーディングする ステップ 5: Apex クラスメソッドを手動でテストする try { Database.update(invoice.Line_Items__r); } catch (DmlException e) { return e.getMessage(); } // On success, return a message to the calling program. return 'Line items re-numbered successfully.'; } } このメソッドは、try/catch ブロックを使用してデータベースを更新し、予期しないランタイム例外が発生した 場合はエラーを処理します。 • try ブロック (行 22 ~ 24) の Database.update メソッドは標準の Apex メソッドで、1 つ以上の sObject を更 新するために使用できます。ここでも、対象となる請求書の関連する品目を参照するオブジェクト表記に 注意してください (invoice.Line_Items__r)。 • catch ブロック (行 25 ~ 27) は、DmlException をキャッチします。例外エラーメッセージを呼び出し元に返 す return ステートメントが含まれています。 • メソッドは、try/catch ブロックを通過して処理を続行する (つまり、例外が発生せず、例外エラーメッセー ジを返さない) と、標準のメッセージを返して処理が成功したことを示します (行 30)。 ステップ 5: Apex クラスメソッドを手動でテストする エラーなしで Apex クラスを保存できることを確認したら、新しいクラスメソッドをテストします。 最初に、テストデータを作成します。 1. 新しいブラウザタブで、複数の品目がある既存の請求書を開きます。既存の請求書がない場合は作成しま す。請求書番号をメモします。 2. 1 つ以上の品目を更新または挿入して品目番号が望ましくない並びになるようにします (1、3、6 など)。こ のステップの開始時点でテストデータがない場合は、品目を追加する前に 1 組の商品レコードを作成する 必要があります。 3. これで、メソッドをコールして、上記の請求書を対象に品目の番号を採番し直すことができます。 4. 再び開発者コンソールに切り替えます。[デバッグ] > [Open Execute Anonymous Window (実行匿名ウィンドウ を開く)] を選択します。 5. 次の匿名 Apex を実行します。メソッドの入力パラメータには、上記でメモした請求書番号を代入します。 たとえば、請求書番号が INV-0000 である場合は、次のコードでこれを INV-0004 に置き換えます。 String s = InvoiceUtilities.renumberLineItems('INV-0004'); 6. ブラウザに切り替えて請求書の詳細ページを更新すると、品目が連続した並びになっています。 129 カスタムアプリケーションロジックをコーディングする ボタンを使用して Apex クラスメソッドをコールする 以上でこのステップは完了です。20 行に満たない Apex コードで、Apex クラスメソッドを作成し、実際のビジ ネス要件を解決しました。 もうひとこと... Apexコードの実行について知識を深める場合は、実行の出力を調べます。前のチュートリアルでは、コンソー ルでコード実行のログを表示できました。このチュートリアルでは、上記のクラスメソッド実行のログ出力を 詳しく説明することはありませんが、次の点を参考にログを確認してみてください。 • SOQL_EXECUTE で検索すると、組み込まれた SOQL クエリがデータベースから 1 行を取得したことがわかり ます。 • DEBUG で検索すると、メソッドの System.debug コールからの出力が表示されます。 ボタンを使用して Apex クラスメソッドをコールする レベル: 上級/所要時間: 20 ~ 30 分 ここまでのチュートリアルでは、Apexクラスメソッドを作成して、アプリケーションで請求書の順不同の品目 番号を採番し直すために使用できるようにしました。ただし、ユーザが匿名 Apex コードを実行してこのメソッ ドをコールすることはあり得ません。このチュートリアルでは、請求書の詳細ページ上に、現在の請求書に対 してメソッドをコールするカスタムボタンを作成する方法を学習します。 ステップ 1: カスタムボタンを作成する デフォルトでは、すべての詳細ページに [編集]、[削除]、[コピー] など複数の標準ボタンが含まれています。必 要に応じて、カスタムボタンを作成してページレイアウトに追加することもできます。請求書の詳細ページの カスタムボタンを作成するには、次の手順に従います。 1. Developer Edition 組織の [設定] から、[クイック検索] ボックスに「オブジェクト」と入力し、[オブジェクト] を選択して [請求書] をクリックします。 130 カスタムアプリケーションロジックをコーディングする ステップ 1: カスタムボタンを作成する 2. [ボタン、リンク、およびアクション] セクションまで下へスクロールし、[新規ボタンまたはリンク] をク リックします。 3. [表示ラベル] 項目に、「Renumber Line Item」(品目の再採番) と入力します。 4. [表示の種類] に、[詳細ページボタン] を選択します。 5. [動作] には [JavaScript を実行] を選択します。 6. [内容のソース] には [OnClick JavaScript] を選択します。 7. ここでは JavaScript を実行する [詳細ページ] ボタンを作成します。次の JavaScript コードをコピーしてフォー ムに貼り付けることができます。ソースコードについては、https://gist.github.com/3605659を参 照してください。 {!REQUIRESCRIPT("/soap/ajax/29.0/connection.js")} {!REQUIRESCRIPT("/soap/ajax/29.0/apex.js")} var result = sforce.apex.execute("InvoiceUtilities","renumberLineItems",{invoiceName:"{! Invoice__c.Name}"}); alert(result); window.location.reload(); 8. フォームが次の画面と同様であることを確認し、[保存] をクリックします。 9. 確認メッセージが表示されたら、[OK] をクリックします。このボタンは、次のステップでページレイアウ トに追加します。 もうひとこと... 貼り付けたコードを詳しく見てみましょう。 • 行 1 および行 2 は、Salesforce AJAX Toolkit から 2 つのライブラリ、Force.com SOAP API を囲む JavaScript ラッパー を読み込みます。 131 カスタムアプリケーションロジックをコーディングする ステップ 2: ボタンをページレイアウトに追加する • 行 3 は、AJAX Toolkit を使用してメソッドをコールし、現在の請求書の名前を渡します。 • 行 4 および行 5 は、アラートメッセージを表示して現在のページを更新する標準の JavaScript コールです。 ステップ 2: ボタンをページレイアウトに追加する 次に、新しいボタンを請求書の詳細ページレイアウトに追加します (このチュートリアルではページレイアウ トの変更について読者が理解していることを前提としているため、このステップは簡略化されています)。Invoice ページレイアウトにカスタムボタンを追加する手順は、次のとおりです。 1. Invoice カスタムオブジェクトの詳細ページで、[ページレイアウト] まで下へスクロールします。 2. 請求書レイアウトの横にある [編集] をクリックします。 3. 上部にあるパレットで、[ボタン] をクリックします。 4. [Renumber Line Items (品目を再度採番)] ボタンをページレイアウトの [カスタムボタン] セクションにドラッ グし、[保存] をクリックします。 ステップ 3: Apex クラスを変更する カスタムボタンの JavaScript は、AJAX Toolkit を利用して JavaScript から SOAP コールを行います。そのため、SOAP API コールをサポートするためには Apex クラスおよびメソッドに 2 つの軽微な変更を加える必要があります。 ブラウザ内で Apex クラスを変更する手順は、次のとおりです。 1. [設定] から、[クイック検索] ボックスに「Apex クラス」と入力し、[Apex クラス] を選択します。 2. InvoiceUtilities クラスの横に、[編集]、[削除] および [セキュリティ] の 3 つのリンクがあります。[編 集] をクリックします。 3. クラスとメソッドの両方の範囲を、それぞれ public から global (行 1) および webservice (行 4) に変更し、 [保存] をクリックします。 ソースコードについては、https://gist.github.com/3605663を参照してください。 132 カスタムアプリケーションロジックをコーディングする ステップ 4: 新しいボタンをテストする 最終的なコードは次のようになります。 global with sharing class InvoiceUtilities { // Class method to renumber Line Items for a given Invoice number. // Returns a string that indicates success or failure. webservice static String renumberLineItems(String invoiceName) { // Create a copy of the target Invoice object and its Line Items. Invoice__c invoice = [SELECT i.Name, (SELECT Name FROM Line_Items__r ORDER BY Name) FROM Invoice__c i WHERE i.Name = :invoiceName LIMIT 1]; // Loop through each Line Item, renumbering as you go. Integer i = 1; for (Line_Item__c item : invoice.Line_Items__r) { item.Name = String.valueOf(i); System.debug(item.Name); i++; } // Update the Line Items in one transaction, rollback if any problems // and return error messages to the calling environment. try { Database.update(invoice.Line_Items__r); } catch (DmlException e) { return e.getMessage(); } // On success, return a message to the calling program. return 'Line items renumbered successfully.'; } } Apexクラスのリストに戻ると、InvoiceUtilities クラスに WSDL という新しいリンクがあります。このリン クをクリックすると、アプリケーションがこのクラスへのインターフェースとして使用できる WSDL ファイル が表示されます。 ステップ 4: 新しいボタンをテストする ここでは、新しいボタンと変更した Apex クラスメソッドをテストします。 1. Warehouse アプリケーションの [Invoices (請求書)] タブをクリックします。 2. 品目のある任意の請求書を開きます。 3. 1 つ以上の品目を更新または挿入して、望ましくない連番の品目番号が含まれるようにします (「1、3、6」 など)。 4. [Renumber Line Items (品目の再採番)] をクリックします。成功したことを示すアラートがポップアップしま す。このアラートを承認すると、ページが再表示され、更新された品目が表示されます。 133 カスタムアプリケーションロジックをコーディングする データベーストリガを作成する もうひとこと... JavaScript から Apex クラスメソッドをコールするもう 1 つの方法は、プラットフォームの JavaScript Remoting 機能 を使用する方法です。詳細は、『Apex コード開発者ガイド』を参照してください。 データベーストリガを作成する レベル: 中級/所要時間: 20 ~ 30 分 Apex トリガは、ワークフロールールなどのビジネスロジックがクリック操作では実装できない場合に便利で す。このチュートリアルは、次のビジネスシナリオに基づいて行います。デフォルトでは、データに主従関係 がある場合、マスタ (主) レコードを削除すると、自動的にすべての関連する詳細 (従) レコードも削除されま す。Warehouse アプリケーションでは、このデフォルトの動作を変更して、品目を持つ請求書が削除されない ようにするトリガを追加する必要があります。 ステップ 1: データベーストリガを作成する Invoice オブジェクトにトリガを作成します。 1. [設定] から、[クイック検索] ボックスに「オブジェクト」と入力し、[オブジェクト] を選択して [請求書] を クリックします。 2. [トリガ] まで下へスクロールし、[新規] をクリックします。 3. エディタで、<name> を「DeleteRestrictInvoice」で置き換えます。 4. 同様に、<events> を「before delete」で置き換えます。 5. テンプレートのコードを次のコードで置き換えます。 ソースコードについては、https://gist.github.com/3605667を参照してください。 trigger DeleteRestrictInvoice on Invoice__c (before delete) { // create a list of Invoices in Trigger.oldMap along with their Line Items List<Invoice__c> invoices = [Select i.Name, (Select Name From Line_Items__r) From Invoice__c i Where i.Id IN :Trigger.oldMap.keySet()]; 134 カスタムアプリケーションロジックをコーディングする ステップ 2: トリガを手動でテストする // loop through the Invoices, attaching errors to those that have Line Items for (Invoice__c invoice : invoices) { if (!invoice.Line_Items__r.isEmpty()) { Trigger.oldMap.get(invoice.id).addError('Cannot delete Invoice with Line Items'); } } } 6. [保存] をクリックします。 もうひとこと... • トリガは、DML 操作の前または後に起動できます。このチュートリアルのトリガは、Invoice オブジェクト の 1 つ以上のレコードを対象とする削除操作を実行する前に起動されます。 • トリガは、コンテキスト変数という特殊な変数にアクセスできます。簡単に言うと、古いコンテキスト変 数と新しいコンテキスト変数によって、トリガを起動するコールによって更新される sObject の古いコピー と新しいコピーを取得できます。コードを見るとわかるように、コンテキスト変数は、トリガボディ内の 処理の範囲を設定するのに便利です。 • FOR ループでは、トリガは検証エラーを品目を持つ請求書に追加するだけですが、これによって Force.com プラットフォームがトリガを起動したトランザクション (この場合は delete) をロールバックします。 ステップ 2: トリガを手動でテストする トリガが意図したとおりに動作することをテストするには、品目を持つ請求書を開いて、[削除]をクリックし ます。クリックすると、エラーが表示されます。 次に、品目のない請求書の削除を試みて、トリガがその請求書の削除は阻止しないことを確認します。 単体テストを作成する レベル: 上級/所要時間: 20 ~ 30 分 Apex では、コードがどれくらいカバーされているかを示すテスト結果など、単体テストの作成と実行が標準で サポートされます。本番組織に Apex クラスとデータベーストリガを追加する前に、組織のコードの 75% 以上 をプログラムで検証する単体テストを作成する必要があります。このチュートリアルでは、単体テストの基本 的な作成および実行方法を学習します。 単体テストでコードをテストする理由は、テストによって、コードが期待どおりに動作し、不必要または過度 の量のシステムリソースを消費しないことを確認するためです。副次的な効果として、Force.com リリースの整 合性も確認できます。 135 カスタムアプリケーションロジックをコーディングする ステップ 1: 単体テストを作成する ステップ 1: 単体テストを作成する 単体テストのメソッドは引数を取らず、データベースにデータをコミットすることもありません。 DeleteRestrictInvoice トリガの単体テストを作成するには、次の手順を実行します。 1. [あなたの名前] の下にある開発者コンソールまたはクイックアクセスメニュー ( ) を開きます。 2. [File (ファイル)] > [New (新規)] > [Apex Class (Apex クラス)] をクリックします。 3. ポップアップに、クラス名として 「TestDeleteRestrictInvoice」と入力し、[OK] をクリックします。 4. 自動生成されたコードを新しい Apex クラスエディタで次のコードで置き換え、[CTRL+S] を押してクラスを 保存します。 ソースコードについては、https://gist.github.com/3605669を参照してください。 @isTest private class TestDeleteRestrictInvoice { // Invoice generator, with or without a Line Item static Invoice__c createNewInvoice(Boolean withLineItem) { // Create test Merchandise Merchandise__c merchandise = new Merchandise__c( Name = 'Test Laptop', Quantity__c = 1000, Price__c = 500 ); insert merchandise; // Create test Invoice Invoice__c invoice = new Invoice__c(); insert invoice; // Create test Line Item and insert it into the database, if withLineItem == true if (withLineItem) { Line_Item__c item = new Line_Item__c( name = '1', Quantity__c = 1, Merchandise__c = merchandise.Id, Invoice__c = invoice.Id ); insert item; } return invoice; } // Single row Invoice with no Line Items => delete static testMethod void verifyInvoiceNoLineItemsDelete(){ // Create test Invoice and insert it Invoice__c invoice = createNewInvoice(false); // Delete the Invoice, capture the result Database.DeleteResult result = Database.delete(invoice, false); // Assert success, because target Invoice doesn't have Line Items 136 カスタムアプリケーションロジックをコーディングする ステップ 2: 単体テストを実行する System.assert(result.isSuccess()); } // Single row Invoice with Line Items => delete restrict static testMethod void verifyInvoiceLineItemsRestrict(){ // Create test Invoice and Line Item and insert them Invoice__c invoice = createNewInvoice(true); // Delete the Invoice, capture the result Database.DeleteResult result = Database.delete(invoice, false); // Assert failure-not success, because target Invoice has tracks System.assert(!result.isSuccess()); } // Bulk delete of Invoice, one without Line Items, another with static testMethod void verifyBulkInvoiceDeleteRestrict(){ // Create two test Invoices, one with and without a Line Item Invoice__c[] invoices = new List<Invoice__c>(); invoices.add(createNewInvoice(false)); invoices.add(createNewInvoice(true)); // Delete the Invoices, opt_allOrNone = false, capture the results. Database.DeleteResult[] results = Database.delete(invoices, false); // Assert success for first Invoice System.assert(results[0].isSuccess()); // Assert not success for second Invoice System.assert(!results[1].isSuccess()); } } もうひとこと... コードのコメントでは、テストメソッドの要点を説明します。トリガを作成してテストする場合、トリガは、 単一行と一括のどちらのトリガステートメントからでも起動されることを覚えておくことが重要です。単体テ ストの構築に関しては、次のいくつかの重要事項を理解しておく必要があります。 • テストに使用するコードのみを含むクラスまたは個別のメソッドを定義するには、@isTest アノテーショ ンを使用します。 • テストクラスは最上位クラスである必要があります。 • 単体テストのメソッドは、@isTest アノテーションまたは testMethod キーワードを使用して定義された 静的メソッドです。 ステップ 2: 単体テストを実行する テストクラスを実行すると、プラットフォームによってクラス内のすべての単体テストメソッドが実行され、 テスト実行のレポートが返されます。 1. 開発者コンソールで、[Tests (テスト)] > [New Run (新規実行)] をクリックします。 137 カスタムアプリケーションロジックをコーディングする ステップ 2: 単体テストを実行する 2. テストクラスを追加するには、[TestDeleteRestrictInvoice] をクリックし、[>] をクリックします。 3. [Run (実行)] をクリックします。 [Tests (テスト)] タブにテスト結果が表示されます。[Test Run (テスト実行)] を展開して、実行されたメソッド を確認できます。次のような出力が表示されます。 トリガを変更したときは常に、対応する単体テストを実行してトリガが引き続き適切に動作することを確認す る必要があります。 138 Visualforce を使用してカスタムユーザインターフェー スを作成する 所要時間: 30 ~ 45 分 Visualforce は、Salesforce Platform 用のコンポーネントベースのユーザインターフェースフレームワークです。こ れまでのチュートリアルでは、自動的に生成されたユーザインターフェースを使用してアプリケーションを作 成および拡張しました。Visualforce を使用すると、HTML に似たタグベースのマークアップ言語、拡張と再利用 が可能なコンポーネントのライブラリ、Apex ベースのコントローラモデルを含むビューフレームワークによ り、ユーザインターフェースをより詳細に制御できます。Visualforce は、Model-View-Controller (MVC) スタイルの ユーザインターフェースをサポートするため、非常に柔軟性があります。 カスタムユーザインターフェースをコーディングする 所要時間: 30 ~ 45 分 このチュートリアルでは、Visualforce を使用して Warehouse アプリケーション用の新しいインターフェースを作 成します。このインターフェースでは、商品の在庫を一覧表示して各数量を更新できる在庫数量シートを表示 します。数量シートは、商品の実際の数量が異なる場合にコンピュータシステムを更新することを目的として います。 ステップ 1: Visualforce 開発モードを有効にする 開発モードでは、ブラウザにVisualforceページエディタが組み込まれます。Visualforce ページエディタでは、コー ドの表示とページのプレビューを同時に行うことができます。開発モードではまた、コントローラと拡張機能 を編集するための Apex エディタも追加されます。 1. [個人設定] から、[クイック検索] ボックスに「高度なユーザの詳細」と入力し、[高度なユーザの詳細] を選 択します。結果がない場合は、[クイック検索] ボックスに「個人情報」と入力し、[個人情報] を選択しま す。 2. [編集] をクリックします。 3. [開発モード] チェックボックスをオンにして、[保存] をクリックします。 139 Visualforce を使用してカスタムユーザインターフェース を作成する ステップ 2: Visualforce ページを作成する ステップ 2: Visualforce ページを作成する このステップでは、在庫数量シートとして機能する Visualforce ページを作成します。 1. ブラウザで、テキスト「/apex/CountSheet」を Salesforce インスタンスの URL に追加します。たとえば、 Salesforce インスタンスが https://na1.salesforce.com の場合、新しい URL は https://na1.salesforce.com/apex/CountSheet になります。エラーメッセージ「Apex ページ 「CountSheet」は存在しません。」が表示されます。 2. [Create Page CountSheet (ページ「CountSheet」を作成)] リンクをクリックして、新しいページを作成します。 3. ページの左下のページエディタリンク ([CountSheet]) をクリックします。[ページエディタ] タブに新しいペー ジのコードとプレビューが表示されます (デフォルトのテキストが入っています)。ページは次のようにな ります。 140 Visualforce を使用してカスタムユーザインターフェース を作成する ステップ 3: スタイルシートの静的リソースを追加する 4. ページの見出しに「Congratulations」と表示したくない場合は、<h1> タグの内容を「Inventory Count Sheet」(在庫数量シート) に変更し、コメントを削除します。ページのコードは次のようになります。 <apex:page> <h1>Inventory Count Sheet</h1> </apex:page> 5. ページエディタの上部にある[Save (保存)]アイコンをクリックします。変更が反映されたページが再読み込 みされます。 もうひとこと... • これでページのコードは標準 HTML のように見えます。Visualforce ページは、HTML タグ (<h1> など) に、通常 は <apex:> で始まる Visualforce 固有のタグを組み合わせているためです。 • ブラウザで開発モードが正常に表示されない場合、このモードをオンにするときと同じ操作でオフにする ことができます。新しい Visualforce ページを作成するには、[設定] から [クイック検索] ボックスに 「Visualforce ページ」と入力し、[Visualforce ページ] を選択します。 ステップ 3: スタイルシートの静的リソースを追加する Warehouse アプリケーションの外観を洗練させるために、カスタムスタイルシート (CSS ファイル) を使用して、 色、フォント、およびページのテキスト配置を指定します。大部分の Web ページおよび Web デザイナは、こ の目的のために標準の Web テクノロジである CSS を使用するため、これはすでに作成されています。ページで スタイルシートを参照するには、静的リソースとしてアップロードする必要があります。静的リソースは、 Salesforceに保存されるファイルまたはファイルの集合です。スタイルシートが静的リソースとして追加される と、Visualforce ページから参照できるようになります。 スタイルシートを静的リソースとして追加する手順は、次のとおりです。 1. ブラウザで developer.force.com/workbook/styles にアクセスします。ファイルをデスクトップにダウンロードし ます。ファイルが自動的にダウンロードされる場合、.zip ファイルとして保存してください。 2. アプリケーションに戻り、[設定] から [クイック検索] ボックスに「静的リソース」と入力し、[静的リソー ス] を選択して [新規] をクリックします。 3. [名前] 項目に「styles」(スタイル) と入力します。 141 Visualforce を使用してカスタムユーザインターフェース を作成する ステップ 3: スタイルシートの静的リソースを追加する 4. [ファイルを選択] または [参照...] をクリックし、ダウンロードした styles.zip ファイルを探します。 5. [キャッシュコントロール] ドロップダウンリストで、[公開] を選択します。 6. [保存] をクリックします。 次に、スタイルシートを参照するように Visualforce ページを変更する必要があります。 1. ページを作成したときのように、テキスト /apex/CountSheet を Salesforce インスタンスの URL に追加しま す。 2. <apex:page> タグの属性を変更し、次のコードを入力して標準のスタイルシート、ヘッダー、およびサイ ドバーを削除します。 <apex:page standardStylesheets="false" showHeader="false" sidebar="false"> 3. 次に、スタイルシートの検索場所をページに通知する必要があります。そのため、最初の <apex:page> タグの下に新しい行を追加し、「<apex:」と入力します。 4. エディタにはコード入力支援が搭載されており、このコンテキストで使用できる要素のドロップダウンリ ストが表示されます。「stylesheet」と入力し始めると、apex:stylesheet が表示されるので、それを 選択します。 5. 次に、次のようにスタイルシートの場所を指定します。 <apex:stylesheet value="{!URLFOR($Resource.styles, 'styles.css')}" /> 6. コードが、次のようになっていることを確認します。 <apex:page standardStylesheets="false" showHeader="false" sidebar="false"> <apex:stylesheet value="{!URLFOR($Resource.styles, 'styles.css')}" /> <h1>Inventory Count Sheet</h1> 142 Visualforce を使用してカスタムユーザインターフェース を作成する ステップ 4: ページにコントローラを追加する </apex:page> 7. ページエディタの上部にある [Save (保存)] アイコンをクリックします。 ページの外観が大きく変わりました。タイトルのフォントと場所が異なっており、標準のヘッダーとサイド バーが表示されなくなっています。 もうひとこと... このスタイルシートのコードをもう少し詳しく見ていきましょう。 • $Resource は、Visualforceページでアクセスできるグローバル変数です。$Resource.styles を使用して、 前に作成した「styles」(スタイル) と呼ばれるリソースを参照します。 • URLFOR() 関数は、静的リソースおよびそのリソース内のファイルを特定し、最終ページで生成される URL を計算します。構文に見覚えがある場合、その理由は、Visualforce ページの表示時に動的に値を評価するた めにこの構文をすでに見ているためです。 • 小さいスタイルシートが 1 つしかない .zip ファイルをダウンロードした理由は何でしょうか? 通常、スタイ ルシート (およびその他の静的リソース) は、複数のバンドルで形成されているため、.zip ファイルにアクセ スするコードを参照する方が便利です。単純に styles.css をアップロードした場合は、 <apex:stylesheet value="{$Resource.styles}" /> を使用してコードを参照できます。そのコード の方が単純ですが、アーカイブのファイルを参照する方法がありません。静的リソースの .zip ファイル としてスタイルシートをアップロードしたら、一重引用符の間にスタイルシートの名前を入力するだけで 済みます (<apex:stylesheet value="{!URLFOR($Resource.styles, 'enter_stylesheet_name.css')}" />)。 ステップ 4: ページにコントローラを追加する Visualforce の Model–View–Controller (モデル-ビュー-コントローラ) フレームワークでは、表示やスタイルを、基盤 となるデータベースとロジックから簡単に分離することができます。MVC では、ビュー (Visualforce ページ) はコ ントローラと連動します。Visualforce の場合、コントローラは通常 Apex クラスであり、このクラスがページに 機能を追加する役割を果たします。たとえば、コントローラにはボタンをクリックしたときに実行されるロ ジックが実装されています。コントローラは、一般に、モデル (データベース) とも連動し、ビューで表示する データを明らかにします。 すべてのSalesforceオブジェクトには、デフォルトで、オブジェクトに関連付けられたデータを操作するための 標準コントローラが用意されており、ほとんどの場合、コントローラのコードを自分で記述しなくても済むよ うになっています。必要に応じて、標準コントローラを拡張して新しい機能を追加したり、カスタムコント ローラをゼロから作成したりすることも可能です。このチュートリアルでは、デフォルトのコントローラを使 用します。 1. Visualforce ページでページエディタが開いていない場合、[Page Editor (ページエディタ)] をクリックしてペー ジを編集します。 143 Visualforce を使用してカスタムユーザインターフェース を作成する ステップ 5: Visualforce ページとして在庫数量シートを表 示する 2. Merchandise__c 標準コントローラを有効にし、最初の <apex:page> タグを編集して標準リストコント ローラ定義を追加します。エディタでは空白は無視されるため、新しい行にテキストを入力することもで きます。 <apex:page standardStylesheets="false" showHeader="false" sidebar="false" standardController="Merchandise__c" recordSetVar="products"> 3. ページエディタの上部にある [Save (保存)] アイコンをクリックします。ページに外観上の変化はありませ ん。ただし、コントローラを使用するようにページを設定し、変数 products を定義したので、変数が ページの本文で使用できるようになり、商品レコードのリストを表します。 もうひとこと... <apex:page> タグに追加した内容を確認してください。 • standardController 属性を設定し、ページを特定のオブジェクト (この場合は Merchandise__c オブ ジェクト) の標準コントローラに接続します。 • recordSetVar 属性を設定し、標準コントローラを「list」モードにして products 変数を設定します。こ の変数には商品レコードのリストが含まれます。 ステップ 5: Visualforce ページとして在庫数量シートを表示する Visualforceページの詳細部分を具体化するすべての機能は準備できました。ページにはすべての商品レコード、 および各在庫数量を更新できる入力項目を含むテーブルが表示されます。 1. </h1> タグの下で、新しい行に「<apex:f 」と入力を開始し、ドロップダウンリストに表示される <apex:form> を強調表示します。このフォームによってページを更新できます。 2. Enter キーを押し、開始タグと終了タグがシステムによって生成されたことを確認します。 3. これらのタグ間にカーソルを置き、データテーブルを作成します。「<apex:d」と入力を開始し、ドロッ プダウンリストから dataTable を選択して Enter キーを押します。 4. 次に、属性を dataTable タグに追加する必要があります。タグ内の 1 行または複数行で、次のコードを入 力します。 <apex:dataTable value="{!products}" var="pitem" rowClasses="odd,even"> value 属性は、dataTable コンポーネントによる反復処理の対象となる品目のリストを示します。var 属 性は、1 回の反復ごとにそのリストの各品目を pvitem 変数に割り当てます。rowClasses 属性は、CSS ス タイル名を代替行に割り当てます。 5. 次に、各列を定義し、pitem 変数の適切な項目を検索して列のデータを取得するようにします。次のコー ドを dataTable の開始タグと終了タグの間に追加します。 <apex:dataTable value="{!products}" var="pitem" rowClasses="odd,even"> <apex:column headerValue="Product"> <apex:outputText value="{!pitem.name}"/> </apex:column> </apex:dataTable> 6. [保存] をクリックするとテーブルが表示されます。 144 Visualforce を使用してカスタムユーザインターフェース を作成する ステップ 5: Visualforce ページとして在庫数量シートを表 示する headerValue 属性によって列のヘッダータイトルが設定され、その下に各商品レコードに対して 1 行ず つ、リストが表示されます。式 {!pitem.name} は、現在の行の名前項目を表示することを示します。 7. 最初の列の終了タグの後に、さらに次の 2 つの列を追加します。 <apex:column headerValue="Inventory"> <apex:outputField value="{!pitem.Quantity__c}"/> </apex:column> <apex:column headerValue="Physical Count"> <apex:inputField value="{!pitem.Quantity__c}"/> </apex:column> メモ: 第 2 列は、outputField ではなく inputField です。inputField には値が表示されますが、 その値を変更することもできます。 8. [保存] をクリックして在庫数量シートを保存します。すべての商品レコードの一覧に、現在の在庫および 実際の数量の入力項目が表示されます。 9. 最後の仕上げとして、任意の行で実際の数量を変更してページの値を更新するためのボタンを追加します。 これを行うには、</apex:form> 行の上に直接次のコードを入力します。 <br/> <apex:commandButton action="{!quicksave}" value="Update Counts" /> もうひとこと... • dataTable コンポーネントは、行を含むテーブルを作成し、各行はリストを反復処理して出力されます。 このページに使用した標準コントローラは Merchandise__c に設定され、recordSetVar は products に設定されました。その結果、コントローラはデータベースから取得された商品レコードを使用して商品 リスト変数に自動的にデータを入力します。このリストを dataTable コンポーネントが使用します。 • リストを反復処理するときに、現在の行を参照する方法が必要です。var="pitem" ステートメントは、現 在の行を保持する pitem という変数を割り当てます。 • すべての標準コントローラには、すべての Salesforce オブジェクト用のさまざまなメソッドがあります。 commandButton コンポーネントは、ボタンを表示し、レコードの値を更新する、標準コントローラの quicksave というメソッドを呼び出します。ここでは、商品の実際の数量を更新して適用を実行し、新し い数量で商品を更新します。 145 Visualforce を使用してカスタムユーザインターフェース を作成する ステップ 6: インライン編集サポートを追加する • ページネーションはこの例には示されていませんが、この機能も使用できます。複数ページにわたる量の レコードがある場合、commandButton の下にページフリップアクション用の次のコードを追加します。 <apex:commandLink action="{!next}" value="Next" rendered="{!hasNext}" /> ステップ 6: インライン編集サポートを追加する これで、すべての商品レコードを表示し、実際の数量の入力項目で在庫数量を編集できるテーブルが含まれた Visualforce ページが完成しました。このステップでは、テーブルを変更して在庫出力項目のインライン編集サ ポートを追加します。また、インライン編集によって実際の数量の入力項目は不要になるため、この項目が含 まれる最後の列を削除します。このステップの実行後、[Total Inventory (在庫数)] 列の項目をダブルクリックし て在庫数量を編集できるようになります。 前のステップの最後の列で実際の数量を編集する inputField を使用する代わりに、inlineEditSupport コンポーネントを outputField コンポーネントの子コンポーネントとして追加することで、在庫列を編集可 能にできます。これを行う手順を次に示します。 1. 実際の在庫列用の次のマークアップを削除します。 <apex:column headerValue="Physical Count"> <apex:inputField value="{!pitem.Quantity__c}"/> </apex:column> 2. 在庫列内で、outputField コンポーネントを分割して次のように終了タグを含めます。 <apex:outputField value="{!pitem.Quantity__c}"> </apex:outputField> 3. outputField の開始タグと終了タグの間に inlineEditSupport コンポーネントを挿入します。 <apex:inlineEditSupport event="ondblclick" showOnEdit="update"/> 4. これで inlineEditSupport コンポーネントが追加されたため、更新ボタンを変更して ID とスタイルクラ ス名を付けます。ID は、編集中にボタンを表示するために inlineEditSupport コンポーネントによって 参照されます。スタイルクラス名は、最初にページが表示されるときに更新ボタンを非表示にする styles.css で使用されます。commandButton を次のコードで置き換えます。 <apex:commandButton id="update" action="{!quicksave}" value="Update Counts" styleclass="updateButton"/> 5. Visualforce マークアップは次のようになります。 <apex:page standardStylesheets="false" showHeader="false" sidebar="false" standardController="Merchandise__c" recordsetVar="products"> <apex:stylesheet value="{!URLFOR($Resource.styles, 'styles.css')}"/> <h1>Inventory Count Sheet</h1> <apex:form> <apex:dataTable value="{!products}" var="pitem" rowClasses="odd,even"> <apex:column headerValue="Product"> <apex:outputText value="{!pitem.name}"/> </apex:column> 146 Visualforce を使用してカスタムユーザインターフェース を作成する まとめ <apex:column headerValue="Inventory"> <apex:outputField value="{!pitem.Quantity__c}"> <apex:inlineEditSupport event="ondblclick" showOnEdit="update"/> </apex:outputField> </apex:column> </apex:dataTable> <br/> <apex:commandButton id="update" action="{!quicksave}" value="Update Counts" styleclass="updateButton"/> </apex:form> </apex:page> 6. 保存します。ページに 2 列の在庫数量テーブルが表示されました。最初は [Update Counts (在庫数を更新)] ボ タンは非表示になっています。 7. 在庫列の任意のセルをダブルクリックします。その項目が動的に入力項目になり、[Update Counts (在庫数 を更新)] ボタンが表示されます。 8. 数量の値を変更し、[Update Counts (在庫数を更新)] をクリックしてこの更新を確定します。 もうひとこと... • inlineEditSupport コンポーネントの event 属性は「ondblclick」に設定されています。これは、ダブル クリックしたときに出力項目が編集可能になることを表す DOM イベントです。また、showOnEdit 属性に よって、インライン編集中にページに [Update Counts (数量の更新)] ボタンが表示されるようになります。こ の属性は、[Update Counts (数量の更新)] ボタンの ID に設定されています。 • [Update Counts (数量の更新)] ボタンは、静的リソースファイル styles.css のスタイル指定によって非表示 になります。commandButton の styleclass 属性によって、このボタンが styles.css のエントリにリ ンクしています。 まとめ 以上でこのステップは完了です。標準コントローラを使用する Visualforce ページを作成することで、Warehouse アプリケーション用の新しいインターフェースを作成しました。このページは高度に設定可能になっていま す。たとえば、列コンポーネントを変更して、各行に表示されるデータを簡単に変更できます。また、標準コ ントローラによる多数の機能もバックグラウンドで利用しています。たとえば、コントローラは自動的にデー タベースをクエリし、すべての商品レコードを見つけて products 変数に割り当てます。さらに、quicksave メ ソッドによるレコードの保存方法も使用できます。 147