Mark Hammer's blog

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

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を見るには、 開発者コンソールを使ったデバッグ が必要になります。

リストビューのKanbanに表示される項目を変更したい

はじめに

リストビューでのKanban表示。
商談のフェーズをグルーピングしたものがよく見られます。

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

今回は某所で質問を受けた、リストビューのKanbanに表示される項目を変更する方法を書いていきます。

ちなみに Salesforce ヘルプには、「Kanban カードには最大 4 つの項目が表示されます。」とあります。
しかし、どの項目が選ばれるのかについては記載されていません。

Kanban表示項目の変更方法

Kanban表示項目の設定変更方法は、従来のテーブル型と同様、以下の手順になります。

  1. リストビュー内の歯車マークをクリックし、「表示する項目を選択」をクリック f:id:mark-hammer:20200226013719p:plain
  2. 参照可能項目に設定した項目のうち、上位4項目がKanban表示項目になる。 f:id:mark-hammer:20200226013922p:plain

使用されるのは上位4項目だけなので、Kanbanビューではそれ以外の項目は使用されません。

おまけ

参照可能項目に4項目設定したのに、3項目以下しか表示されない

参照可能項目には4項目設定しているのに、Kanbanビューに表示されるのは3項目以下の場合があります。

f:id:mark-hammer:20200226015207p:plain
参照可能項目には4項目以上設定しているのに…
f:id:mark-hammer:20200226015249p:plain
Kanbanビューには3項目しか表示されない

これは、参照可能項目に設定している項目のうち、値が空白になっている項目が存在する場合に発生します。
上記例の場合は、「Current Generator(s)」項目が空白でした。
この場合でも、「上位4項目に空白がある場合は5項目目以降から値を持ってくる」動作にはなりません。

商談名と集計基準項目の表示順

Kanbanビューで表示される項目の表示順は基本的に参照可能項目に設定した順番に従いますが、例外が2つあります。

  • 商談名が参照可能項目上位4項目内にある場合は、参照可能項目の順番によらず必ず最上位に表示される。
    • 商談名を参照可能項目に設定しても、上位4項目にない場合はKanbanビューに商談名は表示されない。
  • 集計基準項目(商談の場合は「金額」か「期待収益」)が参照可能項目上位4項目内にある場合、参照可能項目の順番によらず商談名がある場合は2番目に、商談名がない場合は最上位に表示される。
    • 集計基準項目を参照可能項目に設定しても、上位4項目にない場合はKanbanビューに集計基準項目は表示されない。

以上、皆様のご参考になれば幸いです。

カスタム表示ラベルを使って各国の新年の挨拶を表示する数式項目を作ろう

2020年、あけましておめでとうございます。
本年もよろしくお願いいたします。

今年最初の投稿は、タイトルの通り「Salesforceのカスタム表示ラベルを使って、1/1に各国の新年の挨拶を表示する数式項目を作ろう」です。
きっかけはこのTweetです。

ということで、さっそく作ってみましょう。

準備

トランスレーションワークベンチの有効化

翻訳機能を初めて使う場合は、ユーザインターフェース|トランスレーションワークベンチ|翻訳 をクリックし、右画面の [有効化] をクリックします。

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

翻訳設定で使用する言語を追加する

ユーザインターフェース|トランスレーションワークベンチ|翻訳設定 をクリックし、翻訳対象の言語を追加します。
このとき、翻訳者の指定を忘れないようにしてください。

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

カスタム表示ラベルの設定

カスタム表示ラベルの作成

ユーザインターフェース|カスタム表示ラベル をクリックし、[新規カスタム表示ラベル] から日本語の新年の挨拶をカスタム表示ラベルとして作成します。

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

カスタム表示ラベルの翻訳

カスタム表示ラベルの [翻訳] 観連リストから、各国の新年の挨拶を登録します。
今回は以下のサイトを参考にしました。

joho.st

f:id:mark-hammer:20200101022459p:plain
例:ドイツ語

最終的には以下のようにします。

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

新年の挨拶を表示する数式を作成

カスタム表示ラベルを使用し、テキスト数式項目を作成します。
数式は以下のようになります。*1

なお、カスタム表示ラベルを使いたい場合は [高度な数式] タブの [項目の挿入] にて、 [$Label] を選択すると右側に使用できるカスタム表示ラベルが表示されますので、対象表示ラベルを選んで [挿入] をクリックすると使えます。

IF(MONTH(TODAY())=1 && DAY(TODAY())=1, $Label.NewYear_Greeting, '')

f:id:mark-hammer:20200101023144p:plain
数式設定画面

結果

ユーザの言語を切り替えるごとに、「新年の挨拶」項目の表示を切り替えることができました。

f:id:mark-hammer:20200101024112p:plain
各国の新年の挨拶

なお、翻訳がない言語は日本語の新年の挨拶が表示されます。

f:id:mark-hammer:20200101024216p:plain
翻訳がない場合(画像は中国語表示)

おわりに

普段は単一言語(日本語)環境しか使わないので翻訳機能は使わないのですが、今回カスタム表示ラベル&翻訳を使ってみて、複数言語を表示する必要がある環境では便利だな、と感じました。
この投稿が皆様の参考になれば幸いです。

また、2020年が皆様にとって良い年となりますよう祈念いたします。

*1: $Label.NewYear_Greeting は今回作成したカスタム表示ラベルです

Salesforce Tips: Chatterで招待したメールアドレスの一覧を知りたい

Chatterには、Salesforce ライセンスを持たないユーザでも使用できるようユーザを招待する機能があります。
わざわざ有償ライセンスを割り当てなくても、Chatterでやり取りができるようになる便利な機能ですが、招待したユーザの一覧を見る機能はありません。
そのため、「いつ、だれを招待したか」、「招待した人のうちだれが参加していないのか」がSalesforce画面を見るだけでは分からない、という問題があります。

Chatterで招待したメールアドレスの一覧を見るには

Chatterで招待したメールアドレス、及び誰が招待したかの情報は、Chatter 招待(CollaborationInvitation)オブジェクトに格納されています。
つまり、Chatter 招待(CollaborationInvitation)オブジェクトをデータローダでエクスポートすることで、「いつ、だれを招待したか」、「招待したユーザのうちだれが参加していないのか」が分かるようになります。*1

Chatter 招待(CollaborationInvitation)オブジェクトにある項目のうち、特に有用と思われる項目は以下です。

  • INVITEDUSEREMAIL:招待した人のメールアドレス
  • INVITERID:招待したユーザのID
  • CREATEDDATE:招待した日時(UTC表記)
  • SHAREDENTITYID
    • 「顧客を招待」の場合、招待したChatterグループのID
    • 「同僚を招待」の場合、招待したユーザのID
  • STATUS:招待後の状況
    • Sent:招待を送ったが、参加していない
    • Accepted:参加している
    • Canceled:招待を送った後にキャンセルした(後述)

おまけ:Chatterの招待をキャンセルする方法

先述の通り、Salesforceの画面からは「いつ、だれを招待したか」、「招待した人のうちだれが参加していないのか」を知ることができません。
招待した人の一覧が画面で確認できないため、招待を送った後に「メールアドレスを間違えて他人に送ってしまった」となっても、画面上からキャンセルをすることができません。
しかしながら、Chatter 招待(CollaborationInvitation)オブジェクトのSTATUS項目には、「Canceled」という値があります。

実は、Chatter 招待(CollaborationInvitation)オブジェクトはデータローダからDeleteをすることができます。
そして、Delete実行後に対象レコードのStatusは「Canceled」に変わります。
もちろん、Statusが「Canceled」に変わった招待のメールに書かれたURLからは、ユーザ登録ができないようになっています。

Chatter招待キャンセル後に招待用URLにアクセスした画面

おわりに

今回はChatterで招待したメールアドレスの一覧取得、及びChatter招待のキャンセル方法を記載しました。
試していませんが、Chatter 招待(CollaborationInvitation)オブジェクトからデータ取得し、選択したレコードに対しdelete()コールを発行できる画面を作成できれば、キャンセル機能付きのChatterで招待したメールアドレスの一覧画面をカスタムで作成することは可能だと思います。

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

*1:ウィークリーエクスポートではエクスポートできません。

Trailhead モジュール:Einstein Analytics のデスクトップ探索

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

データエクスプローラになるには

https://trailhead.salesforce.com/ja/content/learn/modules/wave_desktop_exploration/wave_becoming_a_data_explorer

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

【Challenge要約】

以下内容で、新規レンズを作成してください。

  • データセット:DTC Opportunity
  • グラフ:積み上げ横棒
  • 横棒:Industry
  • 棒区分:Product Name
  • 棒の長さ:Amount 合計:
  • ソート:降順に並び替え
  • 条件:
    • Product Family|次の文字列と一致する|Laptops
    • Won|次の文字列と一致する|true
  • タイトル:Top Laptop Industry
  • アプリケーション:My Exploration

※筆者注: 設定を正しく実施しても The 'Top Laptop Industry' lens does not appear to have the correct query. Please check the requirements and ensure everything is setup correctly. というエラーが発生する場合は、作成したレンズを削除し、再度 Trailheadに記載された順番の通り 設定を実施してください。
(参考URL: https://developer.salesforce.com/forums/?id=9060G000000BcUBQA0

データの時系列分析

https://trailhead.salesforce.com/ja/content/learn/modules/wave_desktop_exploration/wave_analysis_over_time

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

【Challenge要約】

以下内容で、新規レンズを作成してください。

  • グラフ:スケジュール
  • 時間軸:Close Date(年 - 月)
  • Y軸:# 合計:
  • 線:Forecast Category
  • 条件:
    • Closed|次の文字列と一致する|false
  • タイトル:Sales Pipeline Overview
  • アプリケーション:My Exploration

比較テーブルを使用した計算

https://trailhead.salesforce.com/ja/content/learn/modules/wave_desktop_exploration/wave_calculating_with_the_compare_table

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