Mark Hammer's Blog

SalesforceやTrailheadに関する情報を投稿しているブログです。

Trailhead モジュール:認定 Platform アプリケーションビルダー資格の更新 (Summer '19)

※この内容は2019/9時点のものです。

Summer '19 のアプリケーションビルダー向けの新機能の学習

https://trailhead.salesforce.com/ja/content/learn/modules/platform-app-builder-maintenance-summer19/learn-whats-new-for-app-builders-in-summer19

  • 説明:日本語
  • Challenge:日本語選択問題

セールスマイルストンの紙吹雪のハンズオン

https://trailhead.salesforce.com/ja/content/learn/modules/platform-app-builder-maintenance-summer19/get-hands-on-with-sales-milestones-confetti

  • 説明:日本語
  • Challenge:英語ハンズオン

【Challenge要約】

※本Challengeには公式が作成した解説があります。

  • 以下内容でパス設定を行ってください。
    • パス名:Milestones
    • API参照名:Milestones
    • オブジェクト:商談
    • レコードタイプ: -- マスタ --
    • 選択リスト:フェーズ
    • 「ステップ 2: 項目を選択してパスの各ステップのガイダンスを入力」では「次へ」をクリックしてください。「成功へのガイダンス」を設定する必要はありません。
  • 「ステップ 3: 状況を設定して保存」を以下の通り設定してください。
    • 「A. ユーザがパスの特定のステップに到達したら、画面に紙吹雪を表示して成功をお祝いします。」を有効にしてください。
    • 選択リスト値:「Closed Won」を「Selected for Celebration」に設定してください。
    • お祝いの頻度:常に
    • 「B. パスを有効化してください。現時点でこのパスを使用する準備が整っていない場合、保存して後で有効化できます。」を有効にし、「完了」をクリックしてください。
  • 以下の通り商談を作成してください。
    • 商談名:Big Deal
    • 完了予定日:今日の日付(Challengeチェック対象外)
    • フェーズ:Prospecting
  • パスを使用し、作成した商談のフェーズを「Closed Won」に設定してください。

Trailhead モジュール:認定アドミニストレーター資格の更新 (Summer '19)

※この内容は2019/9時点のものです。

Summer '19 の新機能の学習

https://trailhead.salesforce.com/ja/content/learn/modules/administrator-certification-maintenance-summer19/learn-whats-new-in-summer-19

  • 説明:日本語
  • Challenge:日本語選択問題

メールテンプレートへの画像の挿入のハンズオン

https://trailhead.salesforce.com/ja/content/learn/modules/administrator-certification-maintenance-summer19/get-hands-on-with-inserting-images-into-your-email-templates

  • 説明:日本語
  • Challenge:英語ハンズオン

【Challenge要約】

※本Challengeには公式が作成した解説があります。

  • Lightning メールテンプレートの「フォルダおよび拡張共有」をオンにしてください。
  • 以下内容でメールテンプレートフォルダを作成してください。
    • フォルダの表示ラベル:Sales
    • フォルダの一意の名前:Sales
  • 以下内容でメールテンプレートを作成してください。
    • メールテンプレート名:General
    • フォルダ:Sales
    • 件名:General
    • メールテンプレートに画像を追加してください。

Trailhead モジュール:Salesforce モバイルアプリケーションのカスタマイズ

※この内容は2019/9時点のものです。

Salesforce モバイルアプリケーションの使用開始

https://trailhead.salesforce.com/ja/content/learn/modules/salesforce1_mobile_app/salesforce1_mobile_app_intro

  • 説明:日本語
  • Challenge:日本語選択問題

グローバルクイックアクションの作成

https://trailhead.salesforce.com/ja/content/learn/modules/salesforce1_mobile_app/salesforce1_mobile_app_actions_global

  • 説明:日本語
  • Challenge:英語ハンズオン

Challenge要約

  • 以下内容で新規グローバルアクションを作成してください。
    • アクション種別:レコードを作成
    • 対象オブジェクト:商談
    • 表示ラベル:New Offer
    • 名前:New_Offer
  • 作成したグローバルアクションのページレイアウトに、以下項目のみ設定してください。
    • 商談名
    • 完了予定日
    • フェーズ
    • 金額
  • 定義済み項目値にて、「フェーズ」項目の値を「Qualification」にするよう設定してください。

※筆者注:
設定を正しく実施しても The 'Opportunity Name', 'Close Date', 'Stage' and 'Amount' fields do not appear to be on the new action page layout. というエラーが発生する場合は、Challenge用組織のユーザ言語を[English]に変更し、再度Challengeの確認を実施してください。

オブジェクト固有のクイックアクションの作成

https://trailhead.salesforce.com/ja/content/learn/modules/salesforce1_mobile_app/salesforce1_mobile_app_actions_objectspecific

  • 説明:日本語
  • Challenge:英語ハンズオン

Challenge要約

  • 取引先オブジェクトの「Account Layout」ページレイアウトに対し、「Salesforce モバイルおよび Lightning Experience のアクション」の先頭に「モバイルスマートアクション」を配置してください。

※筆者注:
設定を正しく実施してもFound Quick Actionというエラーが発生する場合は、Challenge用組織のユーザ言語を[English]に変更し、再度Challengeの確認を実施してください。

コンパクトレイアウトのカスタマイズ

https://trailhead.salesforce.com/ja/content/learn/modules/salesforce1_mobile_app/salesforce1_mobile_app_compact_layouts

  • 説明:日本語
  • Challenge:英語ハンズオン

Challenge要約

  • 以下内容で取引先オブジェクトにコンパクトレイアウトを作成してください。
    • 表示ラベル:Mobile Account Layout
    • 名前:Mobile_Account_Layout
    • コンパクトレイアウト項目:取引先名、年間売上、電話、種別を選択
  • 主コンパクトレイアウトをMobile Account Layoutに変更してください。

※筆者注:
設定を正しく実施しても The 'Mobile Account Layout' compact layout does not appear to have the following fields in this order: Account Name, Annual Revenue, Phone, Type. というエラーが発生する場合は、Challenge用組織のユーザ言語を[English]に変更し、再度Challengeの確認を実施してください。

ナビゲーションのカスタマイズ

https://trailhead.salesforce.com/ja/content/learn/modules/salesforce1_mobile_app/salesforce1_mobile_app_navigation

  • 説明:日本語
  • Challenge:日本語選択問題

Lightningメールテンプレートでリード、取引先責任者両方の会社名を同じ差し込み項目で差し込みたい

お題

最近、こんな質問をいただきました。

  • キャンペーンから、キャンペーンメンバーであるリード、取引先責任者それぞれに対しメールテンプレートを使ってメールを送りたい。
  • Lightning Experience から一括メールを送信する場合、Salesforce Classicと違ってリード、取引先責任者両方に送信できるメールテンプレートが使える、と聞いた。
  • なので試してみたが、差し込み項目に {{{Recipient.Company}}} を使っても取引先責任者側の会社名を入れることができない。
  • Salesforceサポートに聞いたら、「 {{{Recipient.Company}}} では取引先責任者側の会社名を入れることができないので、取引先責任者はカスタム数式項目を差し込み項目にしてほしい。なおリードとの共用はできない。」と言われた。

この質問を聞いた私は、最初「確かにSalesforceサポートの言っていることは正しい」と伝えましたが、「リード、取引先責任者両方に送信できないならClassicメールテンプレートのままでいい。」と言われてしまいました。

なぜできないの?

デフォルトの場合、通常会社名はリードでは「会社名」(API参照名では"Company")、取引先責任者では「取引先名」(API参照名では"Account.Name")項目に入ります。
一方、Lightningメールテンプレートでの受信者側差し込み項目は、 {{{Recipient.[API参照名]}}} の形で設定する必要があります。

つまり、リードの「会社名」、取引先責任者の「取引先名」は項目のAPI参照名が異なるため、1つの差し込み項目で両方対応することができないのです。*1

解決策を考える

一旦上記を伝えた後、何か解決策はないかな・・・と思いながら差し込み項目一覧を見ていると、リード、取引先責任者両方のマークを持つ項目もあることに気づきました。

f:id:mark-hammer:20190715135009p:plain
リード、取引先責任者両方のマークを持つ項目もある

そしてしばらく眺めた後、「同じ項目名、API参照名にすれば解決できるんじゃない」と思いました。

項目を作る

試しに、以下のような項目を作成しました。

  • リード
    • 項目名:メールテンプレート用取引先名
    • API参照名:accountname
    • 数式:Company
  • 取引先責任者
    • 項目名:メールテンプレート用取引先名
    • API参照名:accountname
    • 数式:Account.Name

Lightningメールテンプレートを作成する

上記項目を作成した後、再度Lightningテンプレートで差し込み項目選択画面を開くと、「メールテンプレート用取引先名」がリード、取引先責任者両方で使用できる形で選べるようになります。

f:id:mark-hammer:20190715133727p:plain
差し込み項目で選べるようになる

これを選択し、 {{{Recipient.accountname__c}}} をメールテンプレートに追加することで、リード、取引先責任者両方の会社名を同じ差し込み項目で差し込むことが可能になります。

注意事項

上記の通り、差し込み項目は {{{Recipient.[API参照名]}}} の形となるため、リード、取引先責任者に同じAPI参照名の項目がある場合、意図しない値が入る場合があります。

例えば、

  • リード
    • 項目名:高校名
    • API参照名:Field1
  • 取引先責任者
    • 項目名:社内評価
    • API参照名:Field1

のような項目がある状態で、リードの「高校名」をメールテンプレートに使用する場合、{{{Recipient.Field1__c}}} が差し込み項目となります。
このメールテンプレートを取引先責任者にも使用する場合、送信メールには入れたくない「社内評価」項目が入ってしまうこととなります。

おわりに

今回は、リード、取引先責任者両方の会社名を、カスタム数式項目を使って同じ差し込み項目で差し込む方法を考えました。
個人的にはこういった形でカスタム項目を使用するのは好みではないので、「このオブジェクトのレコードの場合はこの項目、…」みたいな設定が差し込み項目に対してもできればいいなと思いました。

この投稿が何かの役に立つことができれば幸いです。

*1:合わせて、Lightningメールテンプレートではオブジェクトをまたぐ項目は差し込み項目に指定できない(参考ヘルプ)という要件もあります。この要件のため取引先責任者の「取引先名」はLightningメールテンプレートでは差し込みができません。

データインポートウィザード: 取引先の一致条件にある「名前と場所」とは?

2021/11/9追記

本投稿で話題に出した取引先の一致条件「名前と場所」が「名前と部門」に変わりました。

f:id:mark-hammer:20211109120021p:plain

以下は一致条件が「名前と場所」だった頃の話です。(記録のために残します。)

はじめに

Salesforceに一括でデータ追加、更新を行うためのツールの1つである、データインポートウィザード。
APIが使えない(=データローダが使えない)Professional Editionでも利用可能な、システム管理者の味方となるツールの1つですが、インポート用CSVにあるレコードとSalesforceに登録済みのレコードが一致しているかどうかをチェックするために、「一致条件」を指定する必要があります。

通常、一致条件にはSalesforce ID、または外部IDに指定した項目を指定しますが、データインポートウィザードで指定可能な取引先の一致条件には、「名前と場所」というものがあります。

f:id:mark-hammer:20190703222406p:plain
[取引先の一致条件]選択画面

この「名前と場所」とは、具体的にどの取引先項目を指すのでしょうか。
一見すると名前は「取引先名」だと思いますが、場所、と言われてもどの項目を指すのか今一つピンときません。

英語画面で内容を確認してみる

分からない時はとりあえず英語画面を確認してみる、ということで、ユーザ言語を英語に変更し、再度データインポートウィザード画面を開きます。

f:id:mark-hammer:20190703222828p:plain
[取引先の一致条件]選択画面(英語)

すると、「名前と場所」は、英語版だと「Name & Site」になることが分かりました。
「Name」は「取引先名」で間違いないと思います。
さて、「Site」とはどの項目なのでしょうか。

「場所」=「Site」=「取引先部門」!?

設定画面より取引先の項目一覧画面を確認し、API参照名が「Site」になっている標準項目を探してみます。

f:id:mark-hammer:20190703223112p:plain
取引先の項目一覧

すると、API参照名が「Site」の項目は…「取引先部門」項目であることが分かります。

つまり、取引先の一致条件「名前と場所」は、「取引先名」と「取引先部門」の2項目の組み合わせで一致の有無を確認しています。

実際に動作を確認してみる

実際に、取引先名、取引先部門を分けた以下の表に沿ったデータをCSVで作成し、データインポートウィザードで取り込んでみます。

取引先名 取引先部門 郵便番号(請求先)
テスト取引先1 (空白) 1300000
テスト取引先1 (空白) 1400000
テスト取引先2 10000 2300000
テスト取引先2 (空白) 2400000

結果はこうなりました。

取引先名 取引先部門 郵便番号(請求先) レコード作成結果
テスト取引先1 (空白) 1300000
テスト取引先1 (空白) 1400000 ×(上のレコードと重複判定)
テスト取引先2 10000 2300000
テスト取引先2 (空白) 2400000

取引先部門を指定なしとして、2レコード作成した「テスト取引先1」は、1レコードだけ作成されました。
一方、取引先部門を指定なし、値指定の2パターン用意した「テスト取引先2」は、2レコードとも作成されました。

最後に

取引先の一致条件にある「名前と場所」、実際に指す項目は「取引先名」と「取引先部門」と日本人にとってはあまり想定しない結果となりました。
この投稿がいつか参考になれば幸いです。

無料で個人取引先が有効な組織を作りたい

はじめに

Salesforceには様々な機能がありますが、その機能有効化の方法もいくつかのパターンがあります。

  • ユーザが有効/無効を変更できるもの
    • 例:商品スケジュール(数量スケジュール・収益スケジュール)の有効化、無効化
  • ユーザが有効化できるが、無効化できないもの
  • Salesforce サポートに問い合わせて有効化するもの

このうち、Salesforce サポートに問い合わせて有効化するものは、Developer Edition 組織では有効化できません。
これは、Developer Edition 組織ではSalesforce サポートに問い合わせる手段がないためです。

参考:Salesforce エディション (help.salesforce.com)

メモ Developer Edition では、テクニカルサポートは提供されません。ただし、Lightning プラットフォーム開発者 Web サイト (developer.salesforce.com) に登録すると、開発者コミュニティメッセージボードで助言を求めることができます。 Developer Edition のドキュメントも提供されています。

余談

個人取引先を有効化する(日本語版) のヘルプでは、

個人取引先のリクエスト (Salesforce サポートへの問い合わせの起票)
個人取引先が利用できない場合は、ヘルプ&トレーニングから Salesforce サポートへの問い合わせを起票します。 Developer Edition を使用している場合は、Salesforce Success へ問い合わせることができます。

f:id:mark-hammer:20190623225135p:plain
日本語版ヘルプ

と記載されていますが、以前はDeveloper Edition組織からでもSalesforce サポートに問い合わせができた時期があると思わせる投稿 があるため、「Salesforce Success へ問い合わせる」とはこの頃の記述が更新されず残っているのでは、というのが個人的見解です。

ちなみに英語版の同じヘルプ では

Request Person Accounts (open a case with Salesforce Support)
If Person Accounts aren't available, open a case with Salesforce Support from Help & Training.

と、記載がない状況です。なので、日本語版からもそのうち消えるのではないでしょうか。

無料で個人取引先が有効な組織を作るには

前述の通り、Developer Edition 組織ではSalesforce サポートに問い合わせて有効化する類の機能が使用できません。
本来ライセンス費用が必要なEinstein Analytics、Salesforce CPQが(期限付きとはいえ)Developer Edition 組織でも利用可能なのに、個人取引先が利用できない状況について以下のTweetをしました。

すると、Shun Kosaka氏より以下リプライをいただきました。

Scratch組織…、その発想はなかった。

ということで、試しに作ってみることにしました。

Scratch組織作成手順

Scratch組織作成方法については、以下Trailhead Projectを参考にしました。

trailhead.salesforce.com

以下、DevHubが有効な組織及びSalesforce DXコマンドが利用可能な環境がある前提の手順となります。

  1. sfdx force:auth:web:login -d -a DevHub でDevHubが有効な組織にログインします。
  2. 以下、個人取引先が有効なScratch組織用設定ファイルを用意します。ここでは、 person-account-def.json と名前をつけて保存しました。

     {  
         "orgName": "Sample",  
         "edition": "Enterprise",  
         "features": ["PersonAccounts"]  
     }  
    
  3. sfdx force:org:create -f person-account-def.json で、上記設定ファイルを使ったScratch組織を作成します。

    $ sfdx force:org:create -f person-account-def.json
    Successfully created scratch org: 00Dxxxxxxxxxxxxxxx, username: test-xxxxxxxxxxxx@example.com
    
  4. sfdx force:org:open -u test-xxxxxxxxxxxx@example.com でScratch組織にログインします。
  5. 取引先作成画面で、個人取引先が作成可能であることを確認します。

f:id:mark-hammer:20190623231357p:plain
取引先レコードタイプ選択画面

f:id:mark-hammer:20190623231354p:plain
個人取引先作成画面

おわりに

Scratch組織を使えば個人取引先が有効な組織を作れることは分かりましたが、そうはいっても簡単に作れるDeveloper Edition 組織でもSalesforce サポートに問い合わせて有効化する機能を使いたいという要望は多いと思います。

現在、Developer Edition からもサポートケースを起票したいというIdeaもIdeaExchangeに上がっていますので、機能有効化ケースだけでもよいので実現いただきたいところです。

success.salesforce.com

Appendix

salesforce.stackexchange.com

developer.salesforce.com

developer.salesforce.com

developer.salesforce.com

最後に、Scratch組織で個人取引先の有効化組織が作成可能なことをご教示いただいたShun Kosaka氏に感謝いたします。

Trailhead モジュール:Object-Oriented Programming for Admins

※この内容は2019/6時点のものです。

Create Classes and Objects

https://trailhead.salesforce.com/ja/content/learn/modules/object-oriented-programming-for-admins/create-classes-and-objects

  • 説明:英語
  • Challenge:英語選択問題

Use sObjects and DML

https://trailhead.salesforce.com/ja/content/learn/modules/object-oriented-programming-for-admins/use-sobjects-and-dml

  • 説明:英語
  • Challenge:英語ハンズオン

【Challenge要約】

  • 新しい public Apexクラス「AccountHandler」を作成してください。
  • Apexクラス「AccountHandler」に、 public static メソッド「insertAccount」を追加してください。
  • メソッド「insertAccount」に新規取引先作成数を与えるため、Integerタイプの引数を設定してください。
  • 取引先(Account)レコードのリスト型変数「addAccounts」を作成してください。
  • while文のループにより3つの取引先レコードをリスト型変数「addAccounts」に追加してください。追加する取引先レコードの内容は以下の通りです。(n はwhile文のループ処理ごとに1ずつ増加するようにしてください。)
    • 取引先名(Name):「Acme Inc n
    • 取引先番号(AccountNumber):「A000n
    • ヒント:このユニットであなたが3つの新しい Tea Factory storeを作ったときに実装した内容を参考にしてください。
  • 一度に3つの取引先レコードをデータベースに挿入(insert)するためのDML文を1つ記述してください。
  • メソッド「insertAccount」の処理を実行してください。

Define Sets and Maps

https://trailhead.salesforce.com/ja/content/learn/modules/object-oriented-programming-for-admins/define-sets-and-maps

  • 説明:英語
  • Challenge:英語選択問題

Use a For Loop to Iterate Through a List

https://trailhead.salesforce.com/ja/content/learn/modules/object-oriented-programming-for-admins/use-a-for-loop-to-iterate-through-a-list

  • 説明:英語
  • Challenge:英語選択問題

商品スケジュールについて調べた細かいコト

某所にて商品スケジュールについて質問があり、そこで商品スケジュールについていろいろ調べたのでブログに投稿しようと思ったら、約6年前に詳しく他の方のブログに書かれてました。

tyoshikawa1106.hatenablog.com

そこで、ここでは上述のブログに記載されてない細かいコトを書こうと思います。

「全商品に対して有効化」ってナニ?

f:id:mark-hammer:20190616225623p:plain
商品スケジュール設定画面(保存前)

商品スケジュール設定画面には、「数量スケジュール」、「収益スケジュール」それぞれに対し「有効化」と「全商品に対して有効化」2つのチェックボックスがあります。
このうち、「有効化」と「全商品に対して有効化」両方のチェックボックスを入れて「保存」をクリックすると、

f:id:mark-hammer:20190616225639p:plain
商品スケジュール設定画面(保存後)

「有効化」のチェックボックスはチェックが残りますが、「全商品に対して有効化」のチェックは消えます。
いくら「全商品に対して有効化」にチェックを入れて保存しても、保存後には消えます。

このチェックボックス項目は何をしているのかというと、このヘルプ(英語) によれば、

  • 「全商品に対して有効化」は、チェックを入れて保存をクリックした時点の全ての商品に対し、該当スケジュール(数量、収益)を有効化する設定である。
  • 「全商品に対して有効化」にチェックを入れて保存した後に追加された商品は商品スケジュールが有効化されていないので、個別に有効化するか再度「全商品に対して有効化」にチェックを入れて保存する必要がある。

とのことでした。

商品画面で見ると、以下のようになります。

f:id:mark-hammer:20190616225809p:plain
「全商品に対して有効化」前
f:id:mark-hammer:20190616225843p:plain
「全商品に対して有効化」後

ということで、「全商品に対して有効化」のチェックボックスが消えるのは、「そういうものです」というのが答えになります。

商品スケジュールを編集可能なユーザ

商品スケジュールは、商談と商品を結びつける「商談商品」オブジェクトのレコード画面で設定します。
この「商談商品」は、プロファイルの「標準オブジェクト権限」セクションにはありません。

では、どこで編集権限が設定されるのかというと、このドキュメント に書いてありました。

商談の商談品目を作成または更新するには、Opportunity レコードの「編集」権限が必要です。

ということで、ユーザに対し商談の編集権限を与えてみると、商品スケジュールを設定可能になりました。

f:id:mark-hammer:20190616231137p:plain
商談の編集権限がない場合

f:id:mark-hammer:20190616231201p:plain
商談の編集権限がある場合

Salesforceに不正ログインしたらどうなるの?

はじめに

以前、Twitterを見ていたら「電車でSalesforceを見てる人がいて、ユーザIDとパスワードが丸見えだった」というTweetを見かけました。
それを見た私は、こんなTweetをしました。

さて、仮にユーザIDとパスワードが分かったとして、Salesforceにログインすることはできるのでしょうか。
そして、不正ログインされた場合、そのアクセス内容は分かるのでしょうか。

ふつうはユーザIDとパスワードだけではログインできない

Salesforceで特にセキュリティ設定を行っていない場合、Salesforceに初めてアクセスするPCからログインすると、以下のような確認コード入力画面が表示されます。

確認コード入力画面

これは、過去Salesforceにログインしたことがない端末からログインが試みられた場合の二段階認証の意味があります。
この確認コード入力が必要になっているため、通常はユーザIDとパスワードが分かっただけではログインはできません。

でも確認コード入れたくない

しかし、セキュリティ対策の常ですが多くの人はこう思っているでしょう。

「確認コード入力面倒くさい。」と。

そして、「この確認コード入力をなしにする方法はないか」と探します。

この確認コード入力を無効にするには、このヘルプにも記載されている通り、以下の方法があります。

このうち、組織の信頼済み IP 範囲の設定では全IPアドレス範囲を一度に指定することはできませんが、プロファイルのログインIPアドレスの制限では0.0.0.0~255.255.255.255のように、IPアドレス指定範囲の制限はありません。
そのため、多くの人は下記サイトのように、プロファイルのログインIPアドレスの制限にて0.0.0.0~255.255.255.255を指定して確認コード入力を回避します。

salesforce-blog.com

ただ、確認コードをなしとすれば、当然ユーザIDとパスワードが分かっただけでログイン可能となります。
このように、「デフォルトのセキュリティ対策を利便性のために弱める」ことで、不正ログインは可能となるのです。

ログイン履歴と操作ログはどうやって見るの?

先のTweetで、私は「どんな環境でもログイン履歴と操作ログは取っていて、消せない」と書きました。
では、どうやってそれらのログを見るのでしょうか。

ログイン履歴

ログイン履歴 では、過去6か月間のユーザのログイン履歴が参照できます。
具体的には、

  • ログイン時刻
  • アクセス元IPアドレス
  • 状況(ログイン成功、失敗)

の情報が取得できます。

もし、アクセス元IPアドレスに会社で使用可能としているもの以外のIPアドレスがあり、かつ状況が「成功」となっていたら、そのログインは不正ログインの可能性大です。

操作ログ

Salesforceの操作履歴を取得する方法について、イベントモニタリング があります。

これはSalesforce内で発生したイベントごとに、ログが取得できるものとなります。 具体的には、

  • ログイン
  • ログアウト
  • 各画面へのアクセス内容
  • レポートのエクスポート

など、「どのユーザがいつどのようなページを見たか」、また「どのユーザが、いつどのレポートをエクスポートしたか」、といった情報が取得できます。

しかし、このイベントモニタリング、Developer Edition 以外では有料のオプションを購入しないとアクセスできないものになります。
では、イベントモニタリング用オプションを購入していない組織では操作履歴は取得できないのでしょうか。。

実は、イベントモニタリング用オプションを購入していない組織でも、同様のログを取得できる方法はあります。
こちらのヘルプ によると、イベントモニタリング用オプションを購入していない場合でも過去 90 日間のログ情報を取得できます。
なお、こちらの方法でも費用は発生します。
「費用が発生してもいいので、どうしても操作ログを見たい!」という方向けですね。

おわりに

Salesforceにログインして何らかの操作をした場合、(期間制限はありますが)ログは取得可能であることをお伝えしました。

しかし、そもそも不正なログインをさせない方法を取った方が良いのは言うまでもありません。
例えば、

  • 確認コード入力が面倒なのであれば、組織の信頼済み IP 範囲の設定で会社のIPアドレスを細かく指定して、「会社からのアクセスは確認コード入力不要」とする。
  • そもそも社外でSalesforceにログインさせない。

といった方法があります。

万が一があった場合に、この投稿が何かのお役に立てば幸いです。

Trailhead モジュール:Apex エンタープライズパターン: ドメインおよびセレクタレイヤ

※この内容は2019/6時点のものです。

ドメインレイヤの原則について

https://trailhead.salesforce.com/ja/content/learn/modules/apex_patterns_dsl/apex_patterns_dsl_learn_dl_principles

  • 説明:日本語
  • Challenge:日本語選択問題

Apex でのドメインレイヤの原則の適用

https://trailhead.salesforce.com/ja/content/learn/modules/apex_patterns_dsl/apex_patterns_dsl_apply_dl_principles

  • 説明:日本語
  • Challenge:英語ハンズオン

【Challenge要約】

  • 「fflib_SObjectDomain」クラスを継承した基本ドメインクラス「Accounts」を作成してください。
  • 全てのトリガーメソッドに対して「fflib_SObjectDomain」クラス内の「triggerHandler」メソッドを呼び出すように実装した、取引先(Account)オブジェクト用のApexトリガ「AccountsTrigger」を作成してください。
  • レコードが作成されたときに、初期値として説明(Description)項目に「Domain classes rock!」という値を設定するロジックを実装してください。
  • レコードが更新されたときに、「Domain classes rock!」と説明(Description)項目値の間のレーベンシュタイン距離を計算する更新ロジックを実装してください。
    • レーベンシュタイン距離の計算にはApex Stringメソッド「getLevenshteinDistance(stringToCompare)」を使用してください。
    • 計算結果は年間売上(Annual Revenue)項目に保存してください。

セレクタレイヤの原則について

https://trailhead.salesforce.com/ja/content/learn/modules/apex_patterns_dsl/apex_patterns_dsl_learn_selector_l_principles

  • 説明:日本語
  • Challenge:日本語選択問題

Apex でのセレクタレイヤの原則の適用

https://trailhead.salesforce.com/ja/content/learn/modules/apex_patterns_dsl/apex_patterns_dsl_apply_selector_l_principles

  • 説明:日本語
  • Challenge:英語ハンズオン

【Challenge要約】

  • 取引先(Account)オブジェクトのセレクタクラス「AccountsSelector」を作成してください。
    • IDが入るset型パラメータを引数とし、取引先レコードのリストを返り値とする「selectById」メソッドを実装してください。
    • セレクタ基本クラスを、取引先名(Name)、説明(Description)、および年間売上(AnnualRevenue)の各項目値を取得するよう実装してください。