Mark Hammer's blog

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

コミュニティとSalesforceサポートの使い分け方

はじめに

もう半年以上前になりますが、2019年10月に行われましたてきめし #07『Salesforceビアバッシュ with ライトニングトーク』に「コミュニティとSalesforceサポートの使い分け方」という内容で発表してきました。

発表時間は5分のため、発表資料はかなり内容を省いていますが、ブログで補完していきたいと思います。

※この内容はSalesforceサポートにケースが起票できる(有償アカウントを持っている)人を対象としています。
Developer Edition しかもっていない人はSalesforceサポートは使えないため、コミュニティへの質問となります。

Salesforceに関する分からないことがあった場合の質問先

  • Salesforceの設定してもうまく動かない
  • この機能どう使うのか分からない
  • 社内で聞いても分かる人がいない

こういった場合にどこに質問するのが良いでしょうか。
通常、考えられる質問先は「Salesforceサポートに質問用ケースを作る」か「コミュニティに質問する」だと思います。

なお、コミュニティの場合は日本語と英語で分かれており、主だったものは以下になるでしょう。

では、それぞれプラス点、マイナス点としてどのようなものがあるでしょうか。

コミュニティへの質問のプラス点、マイナス点

プラス点

  • 24時間365日、いつでも回答がつく可能性がある
  • Salesforce MVP からコメントがつくこともある
    • Salesforce MVPとは、コミュニティに大きく貢献し、Salesforce の製品とエコシステムについて深く理解しているとSFDCから認定された方に贈られるものですが、そのような方からコメントがつくこともあります。
  • 他の会社の事例を見ることができる
    • 例えば「商談オブジェクトというのはどのように使えばいいのか」「ToDoと行動をどのように使い分ければいいのか」について、「うちの会社ではこのように使っている/使い分けているよ」という活用例を教えてもらえる場合があります。
  • Apex、Visualforce、Lightning Component などの開発に関する質問も答えてもらえる。
    • Salesforceサポートの場合、開発に関する質問はプレミアサポートが必要ですが、コミュニティの場合はそのような制限はありません。
      またTrailbrazer Community の質問広場 グループを見ると、結構開発者から回答がつくことが多い印象を受けます。

マイナス点

  • 回答が全くつかない可能性がある
    • 一番のマイナス点はこれになるでしょう。数十分で回答がつく質問がある一方で、1週間以上たっても回答がつかない質問も珍しくはありません。
    • 印象としては、AppExchangeの特定パッケージに関する質問、他システムとの連携に関する質問は回答がつきにくいと思います。
  • 設定の詳細が分からないので、的外れの回答になる場合がある
    • 例えば「プロセスビルダーが思った通り動かない」という質問があった場合、原因として「『有効化』を忘れた」「プロセスビルダーの開始条件を満たしていない」など単純なものもあれば、「他Apexトリガ、プロセスと干渉している」といった複雑なケースもあります。
      このような場合に、自分の全ての設定を質問文の中に書くのは難しいので、結果として的外れの回答が返ってくる可能性があります。

Salesforceサポートへの質問のプラス点、マイナス点

プラス点

  • 必ず何らかの回答が返ってくる
    • ただし、前述のAppExchangeの特定パッケージに関する質問、他システムとの連携に関する質問は「サポート範囲外です」となってしまうかもしれません。
  • 組織設定や実際の動作を見て回答してもらえる
    • Salesforceサポートは、ログインアクセスを付与することで組織設定や実際の動作を確認することができます。
      これにより、前述の「プロセスビルダーが思った通り動かない」という質問も、実際にプロセスビルダーやその他設定、また問題が発生している編集を実際に行っての動作確認を行うことができます。
  • 機能の問題が原因の場合、改善してもらえる(かも)
    • サポート問い合わせの結果、機能の修正が必要となった場合は修正対応が行われます。
      また、既知の問題としてKnown Issuesに掲載されることがあります。
    • なお、後日「修正なし」と判定されることもあります。

マイナス点

  • 平日営業時間以外は回答をもらえない
    • 例えば、土日にサポートから連絡が来ることはプレミアサポートの緊急ケース以外ありません。
      土日に確認したいことがある場合は、コミュニティへの質問も選択肢に入るでしょう。(運が良ければ答えてくれるかもしれません。)
  • ユーザ事例については回答しない
    • Salesforceサポートは他のユーザがSalesforceをどのように使っているかは回答しません。
      ユーザ事例を確認したい場合はコミュニティの他、イベントへの参加を検討した方がよいでしょう。

具体的な質問例

コミュニティへの質問例としては、以下がよいと思います。

  • 簡単な機能に関する質問
  • 他の会社がオブジェクトや機能をどう使っているか?という質問

一方、以下のような不具合系の質問はSalesforceサポートの方がいいでしょう。

  • バージョンアップ後から動作がおかしい
  • リンクをクリックすると、白い画面に”〇〇Error”(例: Internal Server Error)が表示されます

おわりに

コミュニティとSalesforceサポート、どちらもプラス点、マイナス点があります。
それぞれが得意とする質問内容を知ることで、より早い問題解決につなげることができれば幸いです。

ちなみに、Salesforceサポートは、アンケートの高評価とコメントが大好きです。
「いい対応をしてもらえた」と思ったら、アンケートに高評価をつけてあげてください。

Community Cloud でのURLパラメータを用いたレポート絞り込み

はじめに

Lightning Experienceでは、URLパラメータを用いたレポート絞り込みは以下の流れで設定します。(公式ヘルプ)

  • レポートに対し、事前に絞り込み対象項目を設定する。
  • URLパラメータ fvX (Xには数字が入る) を設定したURLを用いて、レポートにアクセスする。

しかし、Community Cloudのレポート画面にてURLパラメータ fvX を設定しても、パラメータの内容は無視されます。

レポートで、商談のフェーズが"Closed Won"である商談を絞り込み表示する場合、URLパラメータ fvXを使うと

https://apXX.lightning.force.com/lightning/r/Report/00Oxxxxxxxxxxxx/view?fv0=Closed%20Won

となります。

一方、Community Cloudでのレポート表示URL末尾に?fv0=Closed%20Wonを追加しても、「商談のフェーズが"Closed Won"」の絞り込み条件は追加されません。

Community Cloud でのレポート絞り込み

Community Cloud でURLパラメータを用いたレポート絞り込みをする場合は、reportFiltersパラメータを使用します。
reportFiltersは以下3項目で構成されています。

  • column: 絞り込み項目名
  • operator: 演算子
  • value: 値

例えば、「フェーズが"Closed Won"と一致する商談」が条件の場合は以下のように指定します。

?reportFilters=[{"column":"STAGE_NAME","operator":"equals","value":"Closed Won"}]

また、「完了予定日が2020/8/1以降、かつ確度が50%未満の商談」が条件の場合は以下のように指定します。

?reportFilters=[{"column":"CLOSE_DATE","operator":"greaterOrEqual","value":"2020-08-01"},{"column":"PROBABILITY","operator":"lessThan","value":"10"}]

column の指定方法

先述した例の通り、columnで指定する項目名はAPI参照名とは微妙に異なっています。なので設定画面を見ても分かりません。
これを開発者コンソールで調べる方法は以下の通りです。

  • まず、columnで指定したい項目をレポート検索条件、またはレポート表示項目に指定したレポートを作成して、保存します。その時、URLからレポートIDを取得します。
    • レポート検索条件の値は何でもよいですが、後で確認しやすいよう、特定しやすい値にすることをお勧めします。
  • 開発者コンソールを開き、Debug->Open Execute Anonymous Window (または Ctrl+Eキー) でApexコード実行画面を開きます。
  • 以下Apexコードを入力し、[Execute]をクリックします。
String reportId = '<レポートID>'; 

Http http = new Http();
       HttpRequest httpReq = new HttpRequest();
       HttpResponse httpRes = new HttpResponse();      
       httpReq.setMethod('GET');
       httpReq.setHeader('Authorization', 'Bearer ' + UserInfo.getSessionId());
       httpReq.setEndpoint(
           URL.getSalesforceBaseUrl().toExternalForm()+
           '/services/data/v47.0/analytics/reports/' + reportId +
           '?includeDetails=true'
       );
       httpRes = http.send(httpReq);
       System.debug(httpRes.getBody());
  • 画面下のLogsタブに実行ログが表示されるので、右クリックし[Open Raw Log]をクリックします。
  • DEBUGログの中から「reportFilters(対象項目をレポート検索条件に指定した場合)」、または「detailColumns(対象項目をレポート表示項目に指定した場合)」を探し、対象項目のcolumn指定値を確認します。
    • reportFiltersの場合は、先述の通り"value"に検索条件の値が記録されるため、この値で対象項目を含む条件を判別できます。
    • detailColumnsの場合は、レポート項目表示順に項目が並びます。

operator の指定方法

レポートで使用可能な演算子と、reportFiltersで指定するoperaterの関係は以下表の通りです。

レポートの演算子 対応するoperater
次の文字列と一致する equals
次の文字列と一致しない notEqual
< lessThan
> greaterThan
<= lessOrEqual
>= greaterOrEqual
次の文字列を含む contains
次の文字列を含まない notContain
次の文字列で始まる startsWith

カスタムリンクを用いたCommunity Cloud でのレポート絞り込み

これまでは検索条件の値が固定の場合を考えてきましたが、実際はレコードの値に沿って検索条件を指定したい場合が多いと思います。
この場合はカスタムリンクを使って指定しますが、fvXパラメータとは違い必要な書式に記号を含むため、事前に記号をURLエンコードする必要があります。
手順は以下のようになります。

  • reportFiltersで指定する条件を書式に合わせて書き出します。この時、value部分は適当な文字列で埋めます。
    • 「フェーズが表示している商談と一致する」が条件の場合は、[{"column":"STAGE_NAME","operator":"equals","value":"AAAAAAA"}] とします。
  • 書きだした文字列をURLエンコードします。方法は外部サイトを用いる、コマンドプロンプトでコマンド実行するなどありますが、必ずUTF-8形式でエンコードしてください。
    • 先の例の場合は %5B%7B%22column%22%3A%22STAGE_NAME%22%2C%22operator%22%3A%22equals%22%2C%22value%22%3A%22AAAAAAA%22%7D%5D となります。
  • value部分の文字列を消し、カスタムリンクの差し込み項目に差し替えます。
    • 先の例の場合は「AAAAAAA」を「{!Opportunity.StageName}」に差し替え、%5B%7B%22column%22%3A%22STAGE_NAME%22%2C%22operator%22%3A%22equals%22%2C%22value%22%3A%22{!Opportunity.StageName}%22%7D%5D となります。
    • URLエンコード後に差し込み項目に差し替える理由は、カスタムリンクURLの差し込み項目は「{!Opportunity.StageName}」の形を保つ必要があり、差し込み項目設定後にURLエンコードをしてしまうと項目値が差し込まれない(「{!Opportunity.StageName}」の文字列がそのまま検索条件として使用される)ためです。
  • 対象コミュニティのURL、対象レポートID、先に作成した検索条件から、カスタムリンクURLを /<コミュニティURL>/s/report/<レポートID>?reportFilters=<先に作成した検索条件> のように指定します。
    • 対象コミュニティURLが /sampleCommunity の場合は /sampleCommunity/s/report/00Oxxxxxxxxxxxx/?reportFilters=%5B%7B%22column%22%3A%22STAGE_NAME%22%2C%22operator%22%3A%22equals%22%2C%22value%22%3A%22{!Opportunity.StageName}%22%7D%5D のようになります。
  • 作成したカスタムリンクをページレイアウトに配置します。

Appendix

Salesforce Report Parameters in a Community URL

Data connector for Salesforce でカスタムロングテキストエリア項目の内容が切れる

はじめに

Salesforceのデータを Google スプレッドシートに表示、及び編集することが可能なData connector for Salesforce。 具体的な使用方法はこちらを参考にしていただければと思いますが、今回は某所で質問を受けた、Data connector for Salesforce でロングテキストエリア項目を出すための方法を書いていきます。

Salesforce レポートでのロングテキストエリア項目の制約

まず、今回の前提となる「Salesforce レポートでロングテキストエリア項目はどう表示されるか」書いていきます。

レポートにおけるロングテキストエリア項目の制限は、ヘルプには以下のように書かれています。

レポートには、リッチテキストエリアまたはロングテキストエリアの最初の 999 文字が表示されます。レポートをダウンロードしたら、すべての項目を使用できるようになります。

一方、カスタムロングテキストエリア項目の場合、レポートに表示される文字数は255文字まで*1となります。
この動作については、改善要望がIdeaExchangeに上がっていますが、Not Plannedとなっており、改善の見込みがありません。*2

Data connector for Salesforce でのロングテキストエリア項目の動作

Data connector for Salesforce では、レポートのデータをGoogle スプレッドシートに出力することができます。
しかし、Data connector for Salesforce による出力は、データローダのような「項目の値をそのまま出力する」ではなく「レポートの表示のまま出力する」動作のため、255文字以上は表示されません。

下の画像は、同じ文字列を「説明」項目とカスタムロングテキストエリア項目に設定し、レポートとData connector for Salesforce経由で出力した画面です。

f:id:mark-hammer:20200611142827p:plain
「説明」項目とカスタムロングテキストエリア項目のレポート表示

f:id:mark-hammer:20200611145845p:plain
「説明」項目とカスタムロングテキストエリア項目のスプレッドシート表示

今回出した改善案

相談内容は、「取引先にロングテキストエリア項目を作成しており、その内容をData connector for Salesforce でGoogle スプレッドシートに出力したいが、スプレッドシート上では途中で切れる」というものでした。

確認したところ、上記のカスタムロングテキストエリア項目の動作は変更の余地がないため、「取引先の標準ロングテキストエリア項目である『説明』項目を代用できないか」とお伝えしました。
先ほどのキャプチャの通り、「説明」項目は標準ロングテキストエリア項目のため、255文字制限ではなく999文字制限が適用され、表示数が増えます。

おわりに

今回は Data connector for Salesforce の動作に関する質問から、標準項目とカスタム項目でのロングテキストエリア項目の差を知ることができました。
この内容はヘルプに書いておいてもいいなと思ったのですが、探した範囲では先述したIdeaExchangeしか見つけることができませんでした。
この内容が皆様の参考になれば幸いです。

*1:253文字以上の場合は「...」を含めて255文字とする動作のため、全文字が表示されるのは項目値が252文字以下の場合となります。

*2:Salesforce公式ヘルプでは、Not Plannedは「短期または長期の実装計画に含まれず、将来の実装計画が変更されない限り、そのアイデアに対するそれ以上の更新はない」ものとなります。

Trailhead モジュール:Einstein Analytics and Discovery 認定資格の更新 (Spring '20)

※この内容は2020/5時点のものです。

Spring '20 の Einstein Analytics の新機能の学習

https://trailhead.salesforce.com/ja/content/learn/modules/einstein-analytics-and-discovery-certification-maintenance-spring-20/learn-whats-new-for-einstein-analytics-in-spring-20

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

フォーマッティングと通知のハンズオン

https://trailhead.salesforce.com/ja/content/learn/modules/einstein-analytics-and-discovery-certification-maintenance-spring-20/get-handson-with-formatting-and-notifications

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

【Challenge要約】

※このChallengeには、Salesforce公式解説があります。

  • 事前に、Einstein Analytics 開発組織にサインアップしてください。
  • Analytics Studio で以下の通り空白のダッシュボードを作成してください。
    • タイトル:Opportunities Analysis
    • アプリケーション:Shared App
  • DTC Opportunity Dataset を使い、以下の通り新しいクエリを作成してください。
    • クエリ表示ラベル:OppQuery
    • グラフ:横棒
    • 横棒:Industry
    • 棒の長さ:Amount 合計
      • 数値を書式設定:「カスタム」を選び、以下の通り設定してください。
        • 形式:£#,###.00
        • 1000:.
        • 小数点:,
  • 以下の通り、新規通知を作成してください。
    • 条件
      • 項目:Amount合計:
      • 条件:次の値より大きい
      • 値:30000000
    • 受信者:自分と他の任意のユーザ

注意:Challenge成功後、不要なメールを受け取らないために作成した通知は削除してください。

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

※この内容は2020/5時点のものです。

Spring '20 の新機能の学習

https://trailhead.salesforce.com/ja/content/learn/modules/administrator-certification-maintenance-spring-20/learn-whats-new-in-spring20

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

権限セットグループのハンズオン

https://trailhead.salesforce.com/ja/content/learn/modules/administrator-certification-maintenance-spring-20/get-handson-with-permission-set-groups

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

【Challenge要約】

※このChallengeには、Salesforce公式解説があります。

  • 以下の通り、ケース用の権限セットを作成してください。
    • 表示ラベル:Case Read Only
    • API参照名:Case_Read_Only
    • ケースオブジェクト権限:「参照」のみチェックを入れる
    • 項目:以下項目に対し、「参照アクセス権」のみチェックを入れる
      • 取引先名
      • 原因
      • 説明
  • 以下の通り、リード用の権限セットを作成してください。
    • 表示ラベル:Manage Leads
    • API参照名:Manage_Leads
    • リードオブジェクト権限:「編集」にチェックを入れる
    • アプリケーション権限:「リードの取引の開始」、「リード所有者の移行」にチェックを入れる
  • 以下の通り、権限セットグループを作成してください。
    • 表示ラベル:Sales Ops
    • API参照名:Sales_Ops
    • 「グループ内の権限セット」から、権限セット「Case Read Only」、「Manage Leads」をグループに追加してください。

Salesforce Tips: 認定デベロッパー試験受験記(Admin向け)

TL; DR

  • Admin側の知識に自信があるがDev側は自信がない人は、Admin向けの問題は全問正解するつもりでいきましょう。
  • コードを書く試験ではないですが、Trailheadの認定デベロッパー試験向けTrailmixは一通り進めることをおすすめします。
  • Apex、Visualforce、Lightning Web Componentのコード記述、デプロイに自信がない人は、ある程度できるようになってから受験したほうがいいかも。

はじめに

Salesforce認定デベロッパー試験。
Salesforce開発者向けの試験であることはもちろんですが、認定テクニカルアーキテクトの前提資格となる認定システムアーキテクト、認定アプリケーションアーキテクト両方の取得必須資格でもあります。

認定テクニカルアーキテクトは、最近は #JourneyToCTA というハッシュタグとともに Salesforce Architect Group が活動を行っている他、Dreamforce2019では "Become a Salesforce Architect without a Developer Background" の発表も行われており、開発者だけでなくシステム管理者(Admin)も目指せる目標となっています。
認定テクニカルアーキテクトを取得したいシステム管理者(Admin)にとって認定デベロッパー試験は、開発者向け知識を問われる最初の関門でもあります。

2019年8月、私は力試しとして受験したSalesforce認定デベロッパー試験に合格しました。

ちなみに私は以前の仕事で扱っていた関係上Salesforce管理者側(標準機能)の知識はありますが、開発者側の知識は主にTrailheadでの自習で身につけていました。
今回は仕事でSalesforce開発(Apex、Visualforce、Lightning [Aura/Web] Component)をしない人向けに、認定デベロッパー試験について書いていきます。

受験記

受験前の準備

当時は Trailhead で 600 バッジ程度取得しており、さらに Apex SpecialistData Integration Specialist を取得しました。

ただ、その後は特にコードを書くことはなく、英語の練習問題が掲載されているサイトで英語問題を見ていました。

試験結果

受験結果で確認できる各分野の正答率、及び正答率から予想できる問題数、正答数が以下の表になります。
ちなみに受験ガイド(PDF)では問題数60問、合格点は65%(=39問正解)と記載されています。

分野 割合 正答率 問題数(予想) 正答数(予想)
Salesforceの基本 10% 100% 6 6
データモデリング及び管理 12% 71% 7 5
ロジックとプロセスの自動化 46% 44% 29 13
ユーザインターフェース 10% 83% 6 5
テスト 12% 85% 7 6
デバッグツールとリリースツール 10% 80% 5 4
合計 100% 60 39

結果は、予想正答数=合格点という、本当にギリギリの合格でした。
受験時は本当に不合格を確信しており、分からなかった問題をメモして、次回の受験に備えていましたので、終了ボタンを押して「合格」が表示されたときは本当に驚きました。

各分野の内容

以下、認定デベロッパー受験ガイドを参考に記載しております。

認定デベロッパー出題分野と、私が考える傾向は以下の通りです。

分野 傾向
Salesforceの基本 システム管理者 / 開発者向け
データモデリング及び管理 システム管理者向け
ロジックとプロセスの自動化 システム管理者 / 開発者向け
ユーザインターフェース 開発者向け
テスト 開発者向け
デバッグツールとリリースツール 開発者向け

以上の傾向、及び実際に受験した感想から、Adminが認定デベロッパーを取ろうとするのであれば以下がアドバイスとなります。

  • Admin向けの問題は絶対落とさないようにしましょう。
    • 具体的には「各種リレーション(主従関係、参照関係)の違い」「数式項目で扱う関数」「積み上げ集計項目」「ワークフロー/プロセスビルダー」などがあげられます。
  • Dev向けの問題はTrailheadのモジュール、プロジェクトをやりながら手順、関数を覚えていきましょう。
    • 実際にコーディングをする必要はないですが、開発者コンソールのメニュー名や各種関数名など、丸暗記では非常に厳しいです。

資格維持に向けて

Salesforce認定アドミニストレータ、認定Platformアプリケーションビルダー同様、認定デベロッパーもリリースごとに資格更新を行う必要があります。
以前はWebAssessorでの選択式試験でしたが、現在はTrailheadにて対象モジュールをクリアし、バッジを取得することで資格更新となります。 なお、Winter'19より認定デベロッパーにはコード記述を含むハンズオンが含まれるため、現在の認定デベロッパーは「コードを書けなくても合格はできるが、コードを書けないと維持ができない」資格になっています。

そして、現在最新(Winter'20)となる認定デベロッパー資格更新モジュールのハンズオンは、Lightning Web Componentを使ったカスタムタブの実装がテーマとなっています。
「現在システム管理者側だけど、テクニカルアーキテクトになるために認定デベロッパーを受験しようかな」とお考えの方には、ぜひ一度認定デベロッパー資格更新モジュールのハンズオンをやってみて、資格更新できそうか試していただくことをお勧めします。

ちなみに私は認定デベロッパー試験前に資格更新モジュールのハンズオンをやっており、「資格更新できそうだ」と思ったので受験した背景もあります。
ただそれまで Apex や Lightning Aura Component、つまり開発者コンソールで対応できたものから Lightning Web Component (現在開発者コンソールで開発不可) にテーマが変わったことは衝撃を受けました。
新しい言語、開発手法についていくことも、認定デベロッパー資格維持には必要となります。

おわりに

認定デベロッパー試験を受験してみて思ったのは、「かなり難しかった」という感想です。
これまでコード実装をそれほど行っていないAdminが認定デベロッパー試験に合格するには、「今まで知らなかった範囲をどれだけ勉強することができるか」これに尽きます。
ただ、「今まで知らなかった範囲をどれだけ勉強することができるか」はどの分野でもあるため、CTAを目指すAdminの方にはぜひ頑張っていただきたいです。

MetadataComponentDependency クエリを使ってみた

※この記事は Salesforce 開発者向けブログキャンペーンへのエントリー記事です。

はじめに

2020/2にリリースされた Spring'20。
今回はSpring'20にリリースされた開発者向け機能のうち、MetadataComponentDependency クエリを触ってみました。

内容

以下、リリースノートより抜粋。

多くの組織には、使用しなくなったさまざまなメタデータコンポーネント (カスタムオブジェクトや項目など) が散乱しています。Tooling API の MetadataComponentDependency オブジェクトを使用する Dependency API 機能を使用して、組織内のメタデータコンポーネント間の連動関係を表示できます。この情報を基に、コンポーネントを削除しても問題ないかどうかを判断することができます。コンポーネント間で連動関係を見つければ、メタデータをパッケージに分割する場合にも役立ちます。単一の組織を操作する代わりにパッケージのセットを操作することで、変更の管理やバージョン管理の使用、継続的インテグレーションシステムの使用が容易になります。

簡単にいうと、Winter'20で正式リリースとなった項目の参照の確認をAPI経由でも利用可能になった、と理解しています。

実際に利用してみる

それでは、実際にSOQLを実行してみましょう。
MetadataComponentDependency クエリを管理者コンソールから実行する際は、「Use Tooling API」を有効にする必要があります。
今回はキャンペーンメンバーオブジェクトのカスタム項目を対象にしています。

SELECT MetadataComponentId, MetadataComponentName, MetadataComponentType, RefMetadataComponentName, RefMetadataComponentType, RefMetadataComponentId
FROM MetadataComponentDependency
WHERE RefMetadataComponentId = '00N2800000FHCbbEAH'

f:id:mark-hammer:20200330012352p:plain
SOQL実行結果

ちなみに、この時指定した項目のページで「使用場所」ボタンをクリックすると以下の通り、SOQLと同様の結果が表示されます。

f:id:mark-hammer:20200330012554p:plain
「使用場所」ボタンクリック時

使い道を考えてみる

上記のように、 RefMetadataComponentId にカスタム項目を指定した場合は「使用場所」ボタンを押したときと同じ結果が得られる(リンクがある「使用場所」ボタンの方が使い勝手がよい)のですが、反対に MetadataComponentId を指定してみます。
以下例では、先ほどの結果で得られた使用場所のうち「キャンペーンメンバー複数選択」プロセスビルダーのIDを RefMetadataComponentId に指定しています。

SELECT MetadataComponentId, MetadataComponentName, MetadataComponentType, RefMetadataComponentName, RefMetadataComponentType, RefMetadataComponentId
FROM MetadataComponentDependency
WHERE MetadataComponentId = '301280000006oNVAAY'

f:id:mark-hammer:20200330014408p:plain
特定のプロセスビルダーで使用されているカスタム項目をチェック

こうすると、特定のプロセスビルダーで使用されているカスタム項目一覧を取得できました。
今回は2項目だけですが、例えば複雑になったプロセスビルダーやフローで、どの項目が使用されているか知りたくなった時に、要素1つずつチェックせずとも使用項目一覧が確認できる、とは言えると思います。

ちなみに、「ID確認は難しいのでプロセスビルダー名を指定すればもっと使いやすくなるのではないか」ということで以下のようなSOQLを指定してみます。

SELECT MetadataComponentId, MetadataComponentName, MetadataComponentType, RefMetadataComponentName, RefMetadataComponentType, RefMetadataComponentId
FROM MetadataComponentDependency
WHERE MetadataComponentType = 'Flow' AND MetadataComponentName = 'キャンペーンメンバー複数選択'

すると、以下のようにエラーが返ってきます。

f:id:mark-hammer:20200330015007p:plain
MetadataComponentName 指定時エラー

これは、リリースノートにも書いてあるように、MetadataComponentName はWHERE句指定のサポートをしていないことが原因です。

次のクエリはサポートされていません。
(中略)
- SOQL WHERE 句 — MetadataComponentName を使用した任意の検索条件の種別

おわりに

今回は、Spring'20にリリースされた開発者向け機能のうち、MetadataComponentDependency クエリについていろいろSOQLを実行して試してみました。
現時点では、MetadataComponentDependency クエリによる SOQL の結果を得るには対象コンポーネントのIDが必要となるため、使いどころは限られる機能といった印象を受けました。
今後、MetadataComponentName や RefMetadataComponentName 、また利用可能な演算子の拡張があれば、WHERE句による幅広い検索が可能となるため、今後のアップデートに期待したいところです。

Lightning ExperienceでレポートエクスポートをURL指定で実現する(Summer'19版)

※この記事は2019/8にQiitaに投稿した記事を転記したものです。

SalesforceのレポートエクスポートをURL指定で実現する方法については、 レポートのエクスポート機能を実行するURLSalesforceのレポートをエクスポートする にも記載されていますが、Summer'19のLightning環境でこのURLを指定すると、エクスポートできずLightningレポート画面に遷移する動作となっています。1

ここでは、Summer'19 Lightning環境でのURLアクセスによるレポートエクスポート方法を記述します。

Lightning環境でのレポートエクスポート

Lightning環境でレポートエクスポートを行う場合、「フォーマット済みレポート」と「詳細のみ」の2パターンが存在します。

f:id:mark-hammer:20200326014545p:plain
フォーマット済みレポート

f:id:mark-hammer:20200326014548p:plain
詳細のみ

  • フォーマット済みレポート
    • Lightningレポート画面に表示される画面のフォーマットに沿って表示される。(列グルーピング、ソート順、検索条件も表示される。グラフは表示されない。)
    • 出力形式は.xlsx固定。文字コード指定不可。
  • 詳細のみ
    • 従来のレポートエクスポート同様、レポートの詳細行を出力する。
    • 出力形式は.xls、.csv。文字コードも指定可。

レポートエクスポート用URL

フォーマット済みレポート

https://[your_instance_name].lightning.force.com/servlet/PrintableViewDownloadServlet?isdtp=p1&reportId=[your_report_Id]

「Lightning環境でのレポートエクスポート」節の通り、出力形式は.xlsx固定です。

Appendix

Custom Link to Download/Export Detail Report in Lightning - Salesforce Stack Exchange

詳細のみ

https://[your_instance_name].salesforce.com/[your_report_Id]?isdtp=p1&export=Export&enc=MS932&xf=localecsv&skipFooter=true

パラメータ
  • export
    • おそらくエクスポートを実行することを表すパラメータと思われます。
      SalesforceのGUIから実行した場合の値は export=Export ですが、 export= のみとした場合でもエクスポートは実行できるようです。
      ただし、このパラメータを外した場合はエクスポートできないため、必須パラメータとなります。
  • enc
    • エンコード指定となります。
      指定しない場合でもエクスポートは可能です。
  • xf
    • エクスポートファイル形式の指定となります。
    • SalesforceのGUIにて.xls形式を選んだ場合は xf=xls、.csv形式を選んだ場合は xf=localecsvが指定されます。
    • xf=csvでもcsvファイルがエクスポート可能です。
    • xfパラメータを指定しない場合はcsvファイルがエクスポートできます。
  • skipFooter
    • エクスポートファイルの行末にフッタを付与するか否かを指定する項目となります。(skipFooter=trueの場合はフッタなし)
    • SalesforceのGUIからエクスポートを実行した場合はskipFooter=true(フッタなし)となります。
    • skipFooterパラメータを指定しない場合はフッタありとなります。

  1. Classic環境では引き続きレポートエクスポートが可能です。

TrailheadでSuperbadgeを取得するために知っておくといいこと

※この記事は2018/1にQiitaに投稿した記事を転記したものです。

はじめに

TrailheadのSuperbadgeは、特定のモジュール、プロジェクトを成功することで取得可能になる、上位のバッジとなります。
モジュールのChallengeが設定内容を比較的細かく記載したのに対し、Superbadgeでは要件が記載され、「この要件を満たす設定を実施してください」という形になります。
この投稿では、Superbadge取得の際に知っておくとよいことを書いていきます。

※本投稿の内容は、特記しているものを除いて2018年1月時点のTrailheadを前提にしています。
※Apex、Lightningコンポーネント等、開発系のSuperbadgeは考慮していません。

新しいTrailhead Playground組織を用意する

Superbadgeの冒頭にも書いてある内容です。
Superbadgeは通常のモジュール、プロジェクト以上に多岐にわたる設定を求められ、Challenge失敗時のエラー表現も通常より抽象的になります。
他のChallengeハンズオンの設定が原因でChallenge失敗した場合、そのエラー原因の特定、リカバリには相当の時間がかかることが予想されます。
わざわざ組織を使いまわすことで、不要なリスクを負う必要はありません。

ユーザのパスワードリセットを行う

SuperbadgeのChallengeは、例外なく事前に組織へのパッケージインストールを求められます。
以前の投稿に記載した通り、パッケージインストールには通常のSalesforceログインURLからログインする必要がありますので、組織作成後にユーザのパスワードリセットを済ませておきましょう。

地域を「英語(アメリカ合衆国)」、言語を「English」にする

これも以前の投稿に記載しましたが、通常のモジュールでも地域、言語が日本語の場合、正しく設定したにも関わらずエラーになることがあります。
「地域、言語の設定が理由でエラーになった」というリスクを避けるために、地域、言語を英語に合わせることを強くおすすめします。
また、現状Superbadgeの説明は和訳されていないため、英語の設定画面で実施したほうが分かりやすい場合もあるかもしれません。

Salesforce Developer Community の Developer Forums を活用する

地域、言語を英語に合わせ、説明の通り設定したと思ってもエラーが出ることは多々あります。
その場合は、 Developer Forums にアクセスし、Trailheadに表示されたエラーメッセージで検索することで、ヒントが得られるかもしれません。
なお、Forumには「この設定で成功した」という内容も書かれている場合がありますので、回答を見たくない人はご注意ください。

詰まったら時間をおく

Trailheadに記載されているSuperbadgeの所要時間は、短いもので4時間~6時間、長いものだと10時間以上あります。
どう設定を変更してもChallengeに失敗する場合は、むやみに取り組むより時間をおいて改めて実施した方が良いです。
Superbadgeに時間制限はなく、組織がある限りそれまでの過程は残るので、しばらく時間をおくことも大事です。

おわりに

Superbadge取得は通常のモジュール、プロジェクトと比べ、長期戦になります。
要件を読み、様々な設定を試し、必要に応じて Developer Forums を使用して、ぜひSuperbadgeを取得してください。
この投稿が、皆様のSuperbadge取得に役立つことができれば幸いです。

Salesforce Trailhead の(バッド)ノウハウ

※この記事は過去にQiitaに投稿した記事を転記したものです。

はじめに

Salesforceをご利用の方で、操作方法を学ぶためにTrailheadを使用している方も多いと思います。
この投稿では、TrailheadのChallengeやプロジェクトを進めていく中で学んだ(バッド)ノウハウを書いていきます。

まとめ

TrailheadのChallengeハンズオンを実施される方は、以下の設定をすることをおすすめします。

  • ハンズオン組織のユーザ設定で、地域:英語(アメリカ合衆国)、言語:Englishに設定する。
  • 組織情報の「言語のデフォルト値」を英語にする。
  • 項目名、値などに日本語を使用しない。
  • Trailhead Playground組織はできればバッジごとに作成する。
  • 残しておきたいTrailhead Playground組織では、ユーザのパスワードリセットを実施する。

パッケージがインストールできない

このユニットのように、Challengeを進めるうえでパッケージインストールを求められるユニットがありますが、パッケージインストール時にはSalesforceログイン画面が表示され、ユーザ名とパスワードが必要になります。

このとき、Trailheadで取得できるTrailhead Playground組織を使用している場合、自分でパスワードを設定していないため、パッケージがインストールできない状況になってしまいます。
※DeveloperEdition(DE)組織を使用している場合は、ユーザ名とパスワードはお分かりになると思いますので、ログインして対応してください。

現在は以下手順で、ユーザのパスワードリセットを行わなくてもパッケージをインストールすることが可能です。

  1. インストールしたいパッケージのURLを確認する
  2. Trailhead Playground組織へログインする。
  3. Trailhead Playground組織のURLから"~.lightning.force.com/"以降を削除する。
  4. インストールしたいパッケージのURLの"packaging/…"以降を"~.lightning.force.com/"に貼り付け、アクセスする。

具体例

の場合、
https://xxxxxxx.lightning.force.com/packaging/installPackage.apexp?p0=04txxxxxxxxxxxx
にアクセスすることで、パスワード入力せずにパッケージインストール画面になります。

なお、英語ナレッジに記載の通り、管理者権限でパスワードリセットを実施することでも対応可能です。

手順:

  1. Trailhead Playground組織へログイン
  2. 画面右上の 設定 をクリック
  3. Lightning Experienceの場合は ユーザ|ユーザ を、Salesforce Classicの場合は ユーザの管理|ユーザ をクリック
  4. 自分の名前が設定されているユーザにチェックを入れ、「パスワードのリセット」をクリック
  5. 自分のメールアドレスにパスワードリセット用メールが届くため、リンクをクリックし、新規パスワードを設定

※上記の手順でパスワードを設定した後も、「ハンズオン組織を起動」でTrailhead Playground組織へはログインできるのでご安心ください。

ちゃんと設定してもChallengeがクリアできない

Challengeに書いてある通りに設定したはずなのに、「正しいレコードが作成されていません」、「正しく設定されていません」と表示されてしまう場合があります。
そんな場合、ユーザ設定で以下を試すとうまくいくかもしれません。

Trailhead Playground の言語を English (英語) に設定する。

  • 2018/12現在、Challenge説明文には「英語以外の言語で Trailhead を利用するには、この challenge を試行する前に、Trailhead Playground の言語を English (英語) に設定してください。」 の一文が追加されました。

現在日本語環境のTrailhead Playground組織を持つ、または日本語環境のDeveloper Edition組織を英語環境とするには最低限以下対応を行う必要があります。1

  • ユーザ地域を「英語(アメリカ合衆国)」に設定する
  • ユーザ言語を「English」に設定する
  • 組織情報の「言語のデフォルト値」を英語にする
ユーザ地域を「英語(アメリカ合衆国)」に設定する

ユーザ地域での「日本語(日本)」と「英語(アメリカ合衆国)」の違いの1つは、ユーザの名前やリードなどの名前の表記です。
「日本語(日本)」では「姓 名」と表記されますが、「英語(アメリカ合衆国)」では「名 姓」または「姓, 名」です。
Challengeが「ユーザを作成してください」、「リードを作成してください」の場合、日本の「姓 名」の表記だとエラーになる場合があります。
これは、TrailheadのChallenge判定ロジックが「名 姓」で固定されているためだと思われます。

Challengeの問題上、ユーザ地域を「日本語(日本)」に固定するメリットはないため、Challengeでハマらないために、最初から「英語(アメリカ合衆国)」に設定してしまってもいいかもしれません。

例:営業担当がワークスペースで効率的に作業できるようにするのChallengeでの以下エラー

Challenge Not yet complete... here's what's wrong: Could not find a Lead with the name 'Shelley Major' and the Company 'Major Components, Inc.'. (ユーザ地域が「日本語(日本)」だと、Salesforce上では'Major Shelley'と表示されてしまうためのエラー)

ユーザ言語を「English」に設定する

ユーザ言語を変更すると、Salesforce標準設定の名前が変わるものがあります。

例:

  • 標準プロファイル名(例:「システム管理者」と「System Administrator」)
  • オブジェクトの標準項目名(例:商談の「フェーズ」と「Stage」)

TrailheadのChallenge判定ロジックが英語名でチェックしている場合は、正しく設定していてもChallenge失敗となってしまいます。

エラー例:

  • 「指定した項目が設定されていません」エラー
    例:グローバルクイックアクションの作成のChallengeでの以下エラー

    Challenge Not yet complete... here's what's wrong: You do not have the correct account fields in the 'New Detailed Account' publisher action layout

  • 「指定したプロファイルが設定されていません」エラー
    例:組織へのアクセスの制御のChallengeでの以下エラー

    Challenge Not yet complete... here's what's wrong: The user's profile was not set to System Administrator

回避するにはユーザ言語を「English」にすればよいのですが、その場合設定メニューもすべて英語となってしまいます。
英語が不安な方は「日本語」のままでよいですが、上記のようなエラーが発生した場合は、その時だけユーザ言語を「English」にするとChallenge成功するかもしれません。

組織情報の「言語のデフォルト値」を英語にする

ユニットのChallenge、プロジェクトには「表示ラベル(複数形)」、「母音で始まる場合はチェック」を設定するよう指示しているものがあります。
例:プラットフォームイベントの定義および公開のChallenge、猫の品種を認識する Cat Rescue アプリケーションの構築プロジェクトの手順

この設定は組織情報の「言語のデフォルト値」が英語であれば表示されますが、日本で作成した組織では「言語のデフォルト値」は日本語のため、画面に出てきません。そのため、手順通りの設定を行うには「言語のデフォルト値」を変更する必要があります。
「言語のデフォルト値」の設定変更は以下手順にて行えます。なお、この変更を行っても利用中のユーザの言語は日本語のままですのでご安心ください。

  • Salesforce Classic の場合
    1. 設定|組織プロファイル|組織情報 をクリック
    2. [編集]をクリック
    3. 「言語のデフォルト値」を[英語]に変更し、[保存]をクリック
  • Lightning Experience の場合
    1. 画面右上のギアアイコンをクリックし、[設定]をクリック
    2. 会社の設定|組織情報 をクリック
    3. [編集]をクリック
    4. 「言語のデフォルト値」を[英語]に変更し、[保存]をクリック

バッジごとにTrailhead Playground組織を作成する

Challengeには、入力規則、ワークフロー、プロセスビルダーなど、レコード保存の際にエラーにする、またはレコード内容を変更する設定が必要なものがあります。
そのため、Challenge用組織を使いまわすと、前に行ったバッジのChallengeが原因でエラーになる(レコード保存ができない、レコードが書き換えられて期待した項目値にならない)可能性があります。
また、Challengeのためにユーザを作成する必要がある場合、組織のユーザライセンス数には限りがあるため、他のユーザを作成する必要があるChallengeができない可能性もあります。

Trailhead Playground組織は無償で上限なく作成できるため、バッジごとに組織を作成しても問題はありません。
どうしても複数のバッジにまたがってハンズオン用組織を使いまわしたい場合は、以下の対応を行うことをおすすめします。

  • 必須
    • 設定した 入力規則、ワークフロー、プロセスビルダー は全て無効化する。
    • 作成したユーザは無効化する。
  • 推奨
    • 作成したカスタムオブジェクト、カスタム項目は削除する。

注意:1つのTrailheadアカウントに紐づけられるTrailhead Playground組織の上限は10個のため、11個以上作成する場合は以下の手順で組織をアカウントから切断する必要があります。

  1. Trailhead にログインする
  2. 画面右上のアカウント名|Hands-on Orgs をクリックする
  3. Salesforce ハンズオン組織 から切断したい組織の行にある「×」アイコンをクリックし、[切断]をクリック

なお、切断した組織はユーザ名とパスワードが分かっていればログイン画面からログインできますが、パスワードリセットしていない場合は(パスワードリセットに必要な秘密の質問、回答を設定していないため)ログインすることができませんのでご注意ください。

選択リスト項目に、英語の選択リスト値を新しく作成する

日本でTrailhead Playground組織を作成すると、選択リスト値に日本語が設定されているものがあります。(例:見積オブジェクトの「状況」項目)
これは日本語環境で操作したいユーザにはメリットがありますが、『英語環境を前提としたChallenge判定』に対しては「正しく設定したのにエラーになる」原因となります。

例えば 見積テンプレートの設定および契約の追跡 のChallengeでは、選択リスト値として「In Review」を選択する必要がありますが、日本語環境では選択リスト値が「レビュー中」と日本語になっています。「レビュー中」を選択すると以下エラーになります。

Challenge Not yet complete... here's what's wrong: Could not find a Quote for the 'Edge Installation' opportunity with the name 'Diesel Generator and Installation for Edge', a status of 'In Review' and an expiration date of '3/31/2017'.

回避策として新しく選択リスト値を作成(上記の場合は「In Review」を作成)する方法がありますが、その手順は該当ユニットに記載されていませんのでご注意ください。

Lightning アプリケーションビルダーでのページ作成時にAPI参照名を確認する

Challengeには、Lightning アプリケーションビルダーを用いてレコードページを編集、保存するものがあります。
例:Salesforce 組織のページでのフローの表示 では取引先責任者のレコードページをLightning アプリケーションビルダーを用いて設定します。

このときに、Trailhead Playground環境のユーザ言語設定が英語と日本語の場合、Lightning アプリケーションビルダー設定画面で初期に設定される表示ラベルとAPI参照名は、以下の違いがあります。

  • 英語
    • 表示ラベル(Label):Contact Record Page
    • API参照名(Developer Name):Contact_Record_Page
  • 日本語
    • 表示ラベル:取引先責任者 レコードページ
    • API参照名:FlexiPage

Trailheadは英語での設定を想定しているため、日本語環境で正しくページを設定したとしてもAPI参照名がFlexiPageのままだと、以下のように「Contact Record Page」がない、というエラーになります。

Challenge Not yet complete... here's what's wrong: We couldn't find a Record page called "Contact Record Page".

この回避策は、「英語環境で設定する」か「API参照名を変更する」しかありませんが、「API参照名を変更する」場合、具体的に設定すべきAPI参照名はChallenge本文には記載されていません。(英語環境では自動で設定されるからでしょう。)
英語環境で自動設定されるAPI参照名は「表示ラベルのスペースをアンダーバーに置換したもの」であるため、日本語環境で設定する場合はAPI参照名の変更を忘れないように行いましょう。

プロジェクト:書いてある手順の通りに設定してもクリアできない

Trailheadのプロジェクトでは、手順も含め日本語化されているものがあります。
ただ、手順に書かれている設定値も日本語化されているものについて、その手順、設定値通りにするとTrailheadの判定が英語前提のためエラーとなる場合があります。

具体例

  • 日本語版では選択リスト値に日本語を設定するよう記載されているが、その後の手順にて英語の選択リスト値を設定しないとエラー判定になるユニットが存在する。
    • 詳細はこちらを参照してください。
    • ※2017年9月時点で、上記リンクに記載した内容は「設定値を英語で記載する」形で修正されています。
  • 英語版の手順ではSalesforceに設定するテキストのカンマ区切り(,)が、日本語版の手順では読点(、)に置換されている。判定は英語版前提なので、日本語版の手順通りにすると失敗する。
    • 具体例のProject(英語版と日本語版の設定値を見比べてみてください)

基本的にTrailheadの判定は英語前提と思われるため、手順は日本語版でもよいですが、項目名、設定値などは英語版のものを使用することを強くおすすめします。

しかし、イレギュラーとして設定値が英語だとエラーとなってしまう場合も存在したりします。

メジャーバージョンアップによる機能追加、変更に合わせた対応

Salesforceでは、年3回(Winter, Spring, Summer)メジャーバージョンアップが適用されますが、これはTrailhead Playground組織も例外なく適用されます。
通常、メジャーバージョンアップは機能が追加されるため喜ばれるものですが、Trailhead Challengeにおいては「Challenge設定時には想定されていなかった機能が追加、または変更される」ため、対応が必要になるケースがあります。

具体例:

  • Challengeリリース時点では存在しなかった「値セットで定義された値に選択リストを制限します」2 機能がデフォルトで有効となったためにChallengeが成功せず、Challenge成功のため「値セットで定義された値に選択リストを制限します」機能を無効にする作業が追加となった。
  • Web チャットの基礎 > Snap-in チャットへのブランド設定の追加にて、Challenge及びユニット本文に記載されていない"CORS"設定を追加しなければChallengeクリアできない。

Apex、Visualforce等の開発系Challengeについて

TrailheadのChallengeは、Apex、Visualforce等の機能を用いた開発者向けChallengeもあります。
これらのChallengeについては、「メジャーバージョンアップによる機能追加、変更に合わせた対応」を除き、特に(バッド)ノウハウはありません。
これは、開発者向けChallengeの回答には各オブジェクト、項目のAPI参照名を直接指定することが多く、日本語環境であっても英語環境と差異がないためと思われます。
Salesforce開発者にとっては、TrailheadのChallengeはハマりどころの少ない、やりがいのある課題になるでしょう。

追記

上記記載後、以下のコメントをtwiiterでいただきました。

上記は「コードが同じであってもユーザ言語/地域設定等によってChallenge結果が左右されることがない」という意図で記載しましたが、私が確認していないだけで、実際には存在するのかもしれません。
また、「コードの書き方がTrailhead担当者の想定と違う」という理由で失敗になる可能性もあります。
自分は正しいと思うコードなのにChallengeが失敗する場合は、Salesforce Developers Communityサイトの Discussion forum で検索、投稿してみるといいと思います。

追記2

「開発者用Challengeには(バッド)ノウハウはない」と書きましたが、2019/6時点で、【ユーザ言語を「English」に設定する】節の「指定したプロファイルが設定されていません」エラーがApp Development Without Limits > Tune Transactions でも発生することを確認しました。

このChallenge自体にはプロファイルに関する設定はないのですが、Challenge判定時に SELECT Id FROM Profile WHERE Name = 'System Administrator' LIMIT 1 というSOQLが発行されます。
そのときに、日本語環境では'System Administrator'という名前のプロファイルがない、という理由で System.QueryException: List has no rows for assignment to SObject エラーが表示されます。3

Einstein Analytics: 書いてある通りの設定を行ってもクリアできない

Einstein Analytics のデスクトップ探索 モジュールの データエクスプローラになるには で確認した事象です。 このChallengeでは記載された条件に従ってレンズを作成するのですが、単純に条件通り作成するのではダメで、Challengeに記載された通りの順番で設定を行う必要があります。
(このChallengeではグラフ形式指定→横棒に用いる項目指定→棒区分の項目指定→棒の長さに用いる項目指定→ソート順指定→条件指定の順番でなければならない)

コミュニティフォーラムでは、Challenge確認の際にレンズのjsonがSFDC側の期待した回答と一致する必要があるが、設定順によりjson内容が変わるため、結果的に設定が同じであってもSFDC側の期待した回答と一致しなければ不合格となる、という見解が示されておりました。

おわりに

Trailheadの説明は日本語化されているものも多くなりましたが、Challenge判定はまだまだ英語前提のようです。 この投稿が、皆様のTrailheadのChallenge成功に役立つことができれば幸いです。


  1. この対応を行わなくてもクリアできるChallengeももちろんありますが、対応を行わなければクリアできないChallengeが存在する以上、対応することを強く推奨します。なお、ここに記載していないタイムゾーン、メールの文字コードがChallenge判定に影響するケースは現時点では確認できていません。

  2. 選択リスト項目に定義した値以外を設定することを禁止する機能。

  3. Trailhead上にはSystem.QueryException: List has no rows for assignment to SObject エラーしか表示されません。具体的なSOQLを見るには、 開発者コンソールを使ったデバッグ が必要になります。