Mark Hammer's Blog

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

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

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)の各項目値を取得するよう実装してください。

Trailhead モジュール:Apex エンタープライズパターン: サービスレイヤ

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

関心の分離について

https://trailhead.salesforce.com/ja/content/learn/modules/apex_patterns_sl/apex_patterns_sl_soc

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

サービスレイヤの原則について

https://trailhead.salesforce.com/ja/content/learn/modules/apex_patterns_sl/apex_patterns_sl_learn_sl_principles

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

Apex でのサービスレイヤの原則の適用

https://trailhead.salesforce.com/ja/content/learn/modules/apex_patterns_sl/apex_patterns_sl_apply_sl_principles

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

【Challenge要約】

  • Apexクラス「CaseService」を作成してください。
    • ケースIDが入るset型パラメータとクローズ理由が入るstring型パラメータを引数とする、void型のstaticメソッド「closeCases」を実装して下さい。
  • REST API用 Apexクラス「CaseCloseResource」を作成してください。
    • URLマッピングは「/case/*/close」(*にはIDが入る)としてください。
    • クローズ理由が入るstring型パラメータを受け入れ、Idとクローズ理由を「CaseService.closeCases」サービスメソッドに渡すPOST用メソッド「closeCase」を実装してください。

作業単位の原則について

https://trailhead.salesforce.com/ja/content/learn/modules/apex_patterns_sl/apex_patterns_sl_learn_uow_principles

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

Apex での作業単位の原則の適用

https://trailhead.salesforce.com/ja/content/learn/modules/apex_patterns_sl/apex_patterns_sl_apply_uow_principles

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

【Challenge要約】

  • テストクラス「UnitOfWorkTest」、及びテストメソッド「challengeComplete」を作成してください。
  • データベース更新のために「commitWork」メソッドを呼び出してください。
  • チャレンジを確認する前に最低1回テストを実行してください。以下のアサーションをパスする必要があります。
    • System.assertEquals(100, [Select Id from Account].size());
    • System.assertEquals(500, [Select Id from Contact].size());
    • System.assertEquals(500, [Select Id from Note].size());

Trailhead モジュール:Identity for Mobile-Centric Customers

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

Explore Mobile-First Identity

https://trailhead.salesforce.com/ja/content/learn/modules/identity-for-mobile-centric-customers/identity_mfi_basics

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

Set Up Mobile-First Login and Sign-Up

https://trailhead.salesforce.com/ja/content/learn/modules/identity-for-mobile-centric-customers/identity_mfi_clicks

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

【Challenge要約】

このChallengeには新しいTrailhead Playground組織が必要です。ページの一番下にスクロールし、「起動」の左にある下矢印をクリックしてメニューから「Trailhead Playground を作成」を選択してください。

  • 「External Identity User」プロファイルをコピーし、「NTO Customer」プロファイルを作成してください。
  • 「Custom User」プロファイルに、「Private Objects」オブジェクトの「すべて表示」権限を付与してください。
  • 新規取引先「NTO Customers」を作成してください。
  • コミュニティ管理者となるあなたのユーザに、ロール「NTO Customer Manager」を割り当ててください。
  • 新規コミュニティ「NTO Customers」を作成してください。
  • コミュニティ「NTO Customers」のメンバーに「NTO Customer」プロファイルを追加してください。
  • コミュニティのロゴを、あなたの自由に選んでください。
  • 背景画像を https://identitycms.herokuapp.com/promo-transparent.jpg に設定してください。
  • ログインページ設定で「ログイン検出ページ」、登録ページ設定で「設定可能なセルフ登録ページ」を設定してください。登録ページ設定での「ユーザの項目」は「名」、「メール」を設定してください。
  • 「NTO Customers」コミュニティにサインアップしてください。
    • 「名」は「Sarah」、「メール」はあなたのメールアドレスを使用してください。
  • サインアップしたアカウントでコミュニティ「NTO Customers」のホームページにアクセスした後、ログアウトし、再ログインを行ってください。

※筆者注:Challengeで記載されていない設定項目は、ユニット内の手順を参照してください。

Customize Mobile-First Login with Code

https://trailhead.salesforce.com/ja/content/learn/modules/identity-for-mobile-centric-customers/identity_mfi_code

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

Track Progress with Reports and Dashboards

https://trailhead.salesforce.com/ja/content/learn/modules/identity-for-mobile-centric-customers/identity_mfi_reports

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

Trailhead モジュール:Unit Testing on the Lightning Platform

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

Learn About Why We Test

https://trailhead.salesforce.com/ja/content/learn/modules/unit-testing-on-the-lightning-platform/why-we-test

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

【Challenge要約】

Generate Data for Tests

https://trailhead.salesforce.com/ja/content/learn/modules/unit-testing-on-the-lightning-platform/generate-data-for-tests

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

【Challenge要約】

  • このCSVファイルをダウンロードし、静的リソースとしてアップロードしてください。静的リソースの名前は「Mock_Data」としてください。
  • 新しいテストクラス「myDataGenerationTests」を作成してください。
  • テストクラスに、静的リソース「Mock_Data」のCSVデータを取引先オブジェクトに取り込む @testSetup メソッドを作成してください。
  • テストクラスに、取引先が15レコード存在することをチェックするテストメソッドを作成してください。

Write Positive Tests

https://trailhead.salesforce.com/ja/content/learn/modules/unit-testing-on-the-lightning-platform/positive-tests

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

【Challenge要約】

  • Apexクラス「AccountWrapper_Tests」に「isHighPrority()」メソッドの正常系テストを行うためのテストメソッドを追加してください。
  • テストデータを生成するために、@testSetup メソッドを使用してください。
  • 単体テストを実行し、Apexクラス「AccountWrapper」のコードカバレッジを85%以上にしてください。

Write Negative Tests

https://trailhead.salesforce.com/ja/content/learn/modules/unit-testing-on-the-lightning-platform/negative-tests

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

【Challenge要約】

  • 新しいApexクラス「Calculator_Tests」を作成してください。
  • Apexクラス「Calculator_Tests」に、Apexクラス「Calculator」の正常系テスト、異常系テストを実装してください。
  • テストデータを生成するために、@testSetupメソッドを使用してください。
  • 単体テストを実行し、Calculator.clsのコードカバレッジを100%にしてください。

Write Permission-Based Tests

https://trailhead.salesforce.com/ja/content/learn/modules/unit-testing-on-the-lightning-platform/permission-based-tests

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

【Challenge要約】

  • 「Custom: Support Profile」プロファイルをコピーし、「Custom User」プロファイルを作成してください。
  • 「Custom User」プロファイルに、「Private Objects」オブジェクトの「すべて表示」権限を付与してください。
  • 新しいApexクラス「PositivePermission_tests」を作成してください。
  • 「Custom User」プロファイルのユーザーが、自分が所有者でない「Private Objects」オブジェクトのレコードにアクセスできることを示す単体テストを作成してください。
  • 単体テストを実行し、すべて成功することを確認してください。

Write Tests for Your Lightning Components

https://trailhead.salesforce.com/ja/content/learn/modules/unit-testing-on-the-lightning-platform/lightning-component-tests

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

Use Mocks and Stub Objects

https://trailhead.salesforce.com/ja/content/learn/modules/unit-testing-on-the-lightning-platform/mock-stub-objects

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

【Challenge要約】

  • Apexクラス「ExternalSearch_Tests」に、HTTPステータスコード500を返す単体テスト用メソッドを追加してください。
  • 単体テストを実行し、Apexクラス「ExternalSearch」のコードカバレッジを100%にしてください。

Trailhead モジュール:App Development Without Limits

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

Learn About Daily Rate Limits

https://trailhead.salesforce.com/ja/content/learn/modules/app-development-without-limits/app-development-without-limits-rate

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

【Challenge要約】

  • 「標準ユーザ」プロファイルをコピーし、「Data Entry - No API Access」プロファイルを作成してください。
    • 「システム管理者権限」セクションにある「API の有効化」のチェックを外し、保存してください。
  • (まだ作成していない場合は)「Limits Trail Connected App」接続アプリケーションを作成してください。
    • 接続アプリケーション名:Limits Trail Connected App
    • API参照名:Limits_Trail_Connected_App
    • 取引先責任者 メール:あなたのメールアドレス
    • 「Web アプリケーション設定」セクションの「開始URL」:https://trailhead.salesforce.com
  • 「Limits Trail Connected App」接続アプリケーションへのアクセス許可を割り当てた権限セット「Connected App Access」を作成してください。

Avoid Concurrency

https://trailhead.salesforce.com/ja/content/learn/modules/app-development-without-limits/app-development-without-limits-concurrency

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

【Challenge要約】

  • この未管理パッケージをインストールしてください。インストールに失敗する場合はこの記事(英語)の手順に従ってください。
  • 設定画面より、Apexクラス「CalloutController」を探してください。
  • Apexクラス「CalloutController」を以下の通り編集してください。
    • 既存のコールアウト部分のコードを、新しくContinuationクラスの変数 con を使用してコールバックハンドラ「processResponse」を呼び出すよう変更してください。
    • サーバからのレスポンスを待つためのコールバックハンドラとして、「processResponse()」メソッドを追加してください。

Tune Transactions

https://trailhead.salesforce.com/ja/content/learn/modules/app-development-without-limits/app-development-without-limits-transactions

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

【Challenge要約】

  • まだインストールしていない場合は、この未管理パッケージをインストールしてください。インストールに失敗する場合はこの記事(英語)の手順に従ってください。
  • 設定画面より、Apexクラス「TrailLoop」を探してください。
  • AllBadThings()」メソッドを以下の通り編集し、保存してください。
    • if文をSOQLのWhere句で置き換えてください。
    • update文をfor文の外に出してください。
    • メソッド名を「AllGoodThings()」に変更してください。

※筆者注: 設定を正しく実施しても

System.QueryException: List has no rows for assignment to SObject

というエラーが発生する場合は、Challenge用組織のユーザ言語を[English]に変更し、再度Challengeの確認を実施してください。
これはChallengeチェック時に SELECT Id FROM Profile WHERE Name = 'System Administrator' LIMIT 1 というSOQLが実行されますが、ユーザ言語が日本語だとプロファイル名が「システム管理者」となるため、SOQL結果が0件になるのが原因と思われます。