入力規則のススメ~ユーザのライセンス種別で制限してみよう~

はじめに

こんにちは!株式会社オプトプランニングです。
Salesforce(Salesforce.com/セールスフォース・ドットコム、略してSFDC)であれこれやってみたことを書いていきます。

今回は入力規則について書いていこうと思います。
プロファイル・ユーザ・ロールの入力規則例は公式ヘルプに紹介されているので、ユーザのライセンス種別で制限する方法を紹介します。
こんなやり方もあるんだ~と参考になれば幸いです。

実際あった入力規則の盲点

入力規則を作成する際、プロファイルで制限する方法をよく見かけるため、最初はプロファイルで入力規則を作成していました。

その後、カスタムプロファイルを増やすために、影響調査を行う過程で「プロファイルを増やす=既存の入力規則の確認・修正・再テストが必要」なことに気づきました。

また、私が扱っている環境では複数のユーザライセンスが混在しおり、プロファイルではなくユーザのライセンス種別で入力規則を作成できるのではないかと気づきました。

今回紹介するユーザのライセンス種別で制限する入力規則は、単一のライセンスのみを使用している環境では利用機会がないかもしれないです。。。

ライセンス種別で入力規則を作るには

プロファイルで制限する場合、よく見かけるのがプロファイルの名前である「Profile.Name」を使用する例です。
ライセンス種別で制限する場合は、「UserType」を使用します。

ライセンス種別は、ユーザに割り当てられたライセンス種別を意味する「User.UserType」、ユーザに割り当てたプロファイルで指定しているライセンス種別を意味する「Profile.UserType」二つありますが、今回は「User.UserType」を使用する方法を紹介します。

「User.UserType」を「項目の挿入」を使用して入力する場合は、図1のように選択します。

図1 項目の挿入
図1 項目の挿入

SFDCでは様々なユーザライセンスがあるので、ライセンス種別に関して説明は割愛しますが、今回使用するライセンス種別と「UserType」名は以下です。

ライセンス種別 の名称UserType の名称
標準ユーザStandard

他の「UserType」について詳しく知りたい方はこちらを参考にしてください。

ライセンスで制限する入力規則を作ってみた

ライセンスで制限する入力規則を実際に作成してみようと思います。
環境はTrailhead、オブジェクトは「取引先」を使用し、入力規則の作成やレコードの新規登録は「標準ユーザ」ライセンスを持つユーザで行います!

まずは、以下のような2つの入力規則を作ってみます。

  • 項目「評価」を未選択で保存するとエラーが発生し、項目「評価」にエラーメッセージを表示
  • 項目「会社形態」を未選択で保存するとエラーが発生し、項目「会社形態」にエラーメッセージを表示

エラー条件数式は以下です。
「[数式 サンプル] 入力規則により項目の入力を必須とする数式」で紹介されているサンプル数式を活用しました)

ISPICKVAL(Rating , '')
ISPICKVAL(Ownership , '')

その他の設定については図2を参照してください。
エラー条件式とエラー表示場所以外は項目「会社形態」の設定も同様なので割愛します。

この入力規則を有効化して、取引先を新規登録しようとすると図3のようなエラーが表示されます。
(必須項目が未入力状態だと入力規則の判定はされないので、必須項目に適当な文字列を入力しています)

図2 項目「評価」の入力規則
図2 項目「評価」の入力規則
図3 入力規則で項目「評価」「会社形態」でエラー発生
図3 入力規則で項目「評価」「会社形態」でエラー発生

先ほど作成した入力規則の確認ができたところで、項目「評価」の入力規則を以下のように変更してみようと思います。

  • ライセンス種別が「標準ユーザ」以外のユーザが項目「評価」を未選択で保存するとエラーが発生し、項目「評価」にエラーメッセージを表示

変更後のエラー条件式は以下です。

AND(
ISPICKVAL(Rating , '') ,
NOT(ISPICKVAL( $User.UserType , 'Standard'))
)

「UserType」のデータ型は選択リスト型である点は注意が必要です。
「Profile.Name」のデータ型はテキスト型なので、演算子での比較が可能ですが、「UserType」のデータ型は選択リスト型なのでこのままでは比較ができず「ISPICKVAL()」関数を使用してデータを比較する必要があります。
「ISPICKVAL()」の詳細はこちらを参照してください。

図4が項目「評価」の入力規則変更後です。

入力規則を変更後、取引先を新規登録しようとすると図5のようなエラーが表示されます。

ライセンス種別が「標準ユーザ」のユーザは、項目「評価」を未入力でも入力規則にひっかからないことが分かります。

無事にライセンス種別で制限する入力規則ができました!!

図4 ライセンス種別で制限した入力規則例
図4 ライセンス種別で制限した入力規則例
図5 入力規則で「会社形態」のみエラー
図5 入力規則で「会社形態」のみエラー

あとがき

Salesforceではライセンス種別がたくさん用意されているので、お使いの環境下でどんなライセンス種別があるか知っておくといいかもしれません!

また、入力規則を作成する際はライセンスで制限をかける場合もプロファイルで制限をかける場合も、作りたい入力規則が誰に対して制限したいものなのかを明確にしておくといいと思います。

今回はユーザのライセンス種別での制限方法を紹介しましたが、ロールを使用する方法などを含め、プロファイル以外で制限をする方法も知っておくといいと思います。

それでは、またお会いしましょう!!

外部メール送信をフローでやってみた

はじめに

こんにちは!株式会社オプトプランニングです。
Salesforce(Salesforce.com/セールスフォース・ドットコム、略してSFDC)であれこれやってみたことを書いていきます。

Apexを使った簡単なメール送信方法は以前ご紹介しましたが、今回はフローを使ったメール送信方法について書いていきたいと思います!!

今回はTrailheadでフローを作成しています。

外部メール送信をフローの新規作成からやってみた

設定からフローの新規作成をしてみよう

早速、フローを作っていきたいと思います。

まず、設定のホーム左上にある検索に「フロー」または「flow」と入力し、「プロセスの自動化」の配下にある「フロー」をクリックします。
(検索は、実は英語名でヒットするものもあります。今回の「フロー」と「flow」の検索結果の違いなど、気になった方は試してみて下さい。画像は「flow」で検索しました)

フローの一覧が表示され、右上に「新規フロー」というボタンがあるので、クリックします。

図1 フロー新規作成
図1 フロー新規作成

フローの起動条件を選んでみよう

新規フロー画面が立ち上がるので、フローの起動条件を選び、右下の「作成」をクリックします。

今回は、「画面フロー」で作ってみようと思います!


図2 新規フローの起動条件選択
図2 新規フローの起動条件選択

フロー要素を追加してみよう

起動条件を選んだら、メール送信の要素を追加します。
要素の追加は「+」をクリックします。

「+」をクリックすると、どの要素にするか選択画面になるので、「アクション」をクリックします。

要素「アクション」のヘルプテキストに

フローの外部のアクション(メールの送信や承認申請など)を実行します。

と書いてあるのでわかりやすいですね!
(少し前までこのようなヘルプテキストはなかったように思います。最近のフロー移行の流れから、よりわかりやすいフロー作成のためかもしれないですね)

図3 要素の追加「+」部分
図3 要素の追加「+」部分
図4 要素の「アクション」
図4 要素の「アクション」

もし、フローを作成しようとしている環境でメールアラートを設定している場合は、要素の内容に「メールアラートを送信」というものがあるので、間違えて選択しないようにしましょう。

図5 メールアラート設定済みの場合
図5 メールアラート設定済みの場合

アクションを選んでみよう

要素で「アクション」を選んだら、次はアクション内容の選択を行います。

新規アクション選択画面が表示されるので、真ん中の検索に「メール」と入力します。

すると、「メールを送信(emailSimple-emailSimple)」という項目が検索窓の下に表示されるのでクリックします。

図6 アクション「メールを送信」
図6 アクション「メールを送信」

外部に送信するメールの設定をしよう

アクションで「メール送信」を選んだら、外部へ送信するメールの設定画面が表示されます。

この時、入力必須のものは

  • アクションの表示ラベル
  • アクションのAPI参照名
  • メールの件名
  • メールの本文

です。
それ以外は任意項目となっており、任意項目は項目横のトグルボタンをクリックすると入力欄が出現します。

図7 メール送信に必須項目
図7 メール送信に必須項目
図8 任意項目の入力欄
図8 任意項目の入力欄

必要事項の入力が出来たら「完了」をクリックします。

これで外部メール送信が完成しました!!

図9 外部メール送信フロー完成
図9 外部メール送信フロー完成

フローを保存しよう

このままブラウザを閉じてしまうとせっかく作成したフローがなくなってしまうので、右上の「保存」ボタンを押して、フローの保存を行います。

図10 フローの保存
図10 フローの保存

保存しようとすると、フローの表示ラベル、API参照名の入力画面が表示されるので、それぞれ入力して保存しましょう。

おわりに

ざっとではありますが、フローで外部メール送信を作ってみました。

今回は説明できなかったですが、フローの起動条件をレコードトリガフローにしてみたり、メールテンプレートを作成してみたりすると件名や本文を動的なテキストにすることができるので幅が広がります。

テンプレートについても近いうちにやってみたで紹介できればと思います。

それでは、またお会いしましょう!!

レポートの期間集計やってみた

はじめに

こんにちは!株式会社オプトプランニングです。
Salesforce(Salesforce.com/セールスフォース・ドットコム、略してSFDC)であれこれやってみたことを書いていきます。

レポートを作成していると「過去の月ごとの商談件数が知りたい」や「月ごと・週ごとの金額の合計がわかればいいな」など、データを期間ごとに集計したい場面は多いと思います。

そんな時に使うのが、「期間集計」です。

これは、データ型が「日付」「日付/時間」項目の場合、簡単な設定で任意の期間で集計をすることができるものです。

今回はLightning Experienceでの期間集計の方法や、やってみて分かったこと、他の方法などを書いていきたいと思います。

※2023/1/30 訂正・追記あり

日付項目を年月(YYYYMM月)で期間集計してみた

早速、期間集計をやってみようと思います!

今回使用するレポートは、以前のブログでも使用したTrailheadのモジュールをダウンロードした時に入っていた図1のレポートです。
(どのモジュールだったかは前回から思い出せておりませんのであしからず)

まずは、右上の「編集」をクリックしてレポートの編集画面を表示させます。

図1 使用レポートの編集
図1 使用レポートの編集

今回は、レポート内にある「完了予定日」を期間集計してみたいと思います。
日付項目を期間集計するには、対象の項目がグループ化された行または列に存在する必要があります。

列にある項目「完了予定日」を期間集計しようとしてみても、以下のように期間集計できる項目が出てきません。

図2 「完了予定日」グループ化前
図2 「完了予定日」グループ化前

そこで、「完了予定日」を行グループに移動して期間集計しようとすると…
「集計期間単位」という項目が出てきました!

期間集計は、この「集計期間単位」で任意の単位を選択することで設定します。

今回は「年月」で集計しようと思うので単位に「年月」を選択します。
(図3のようにデフォルトでは「日付」が選択されていますが「年月」をクリックすると選択できます)

図3 「完了予定日」グループ化後
図3 「完了予定日」グループ化後

すると、日にちまで表示されていた「完了予定日」が年月のみの表示に変わりました!

図4 「完了予定日」を「年月」単位で期間集計
図4 「完了予定日」を「年月」単位で期間集計

編集時は表示されるデータが少ないため、期間集計で何が変化するのかわかりにくいですが、期間集計する前後のレポートを見比べてみると以下のようになります。

左図が「完了予定日」を期間集計する前、右図が「完了予定日」を期間集計した後です。
(わかりやすくするため、基準とグラフ種類を変更しています。)

図5 期間集計前
図5 期間集計前
図6 期間集計後
図6 期間集計後

期間集計前は日ごとに集計されていたのが、「年月」で期間集計したことで月ごとに集計されるようになりました。

オブジェクトの項目を増やしたりすることなくこのような集計が行えるのはとても便利ですね!

実際にやってみてわかったことや気をつけたいこと

期間集計はあくまで集計するための機能

期間集計を行う場合、対象の項目がグループ化されていなければなりません。
期間集計が表示されない場合は、対象の項目をグループ化しているかどうか確認してみましょう。

あくまで「集計」機能なので、データの表示形式を変更するためのものではないということを念頭に入れておきましょう。

また、期間集計を行う項目はグループ化しなければならないため、表形式のレポートでは使用できません

期間集計を行った項目の表示内容

期間集計を行った項目は、期間集計で選択した単位でしか表示されなくなります。

今回やってみた期間集計を例にすると、「完了予定日」を「年月」で期間集計したレポートは、完了予定日の年月だけ表示され、完了予定日の日付は表示されません

集計は「年月」で行いたいけど、日付や時間などの表示もレポートに表示したいのに…という時は気をつけたい部分です。

データ内容は変わらないので、表示されていない情報(例で言えば「完了予定日」の日付)はレコードを参照すればいいのですが、いちいちレコードを参照するのも面倒に感じてしまいます。
期間集計を行う項目は、期間集計後の表示でいいかの判断が必要かもしれません。

エクスポートをやってみてわかったこと

エクスポートをしてみると期間集計を行った項目に関して影響が出る場合があります。

「フォーマット済みレポート」の場合、期間集計を行う前後でエクスポートされるデータ内容が変わります

先ほどの期間集計した前後のレポートをエクスポートして比較すると以下のようになります。

図7 期間集計前後のレポートのエクスポート結果(フォーマット済みレポートの場合)
図7 期間集計前後のレポートのエクスポート結果(フォーマット済みレポートの場合)

「フォーマット済みレポート」でエクスポートした時、期間集計した項目はレポートで表示された内容のままエクスポートされます。

期間集計を「年月」で行ったレポートをエクスポートすると、エクスポートしたファイルでは「完了予定日」の日付は分からなくなってしまいます。

「詳細のみ」でエクスポートした場合は、期間集計を行う前後でデータ内容は変わりません

期間集計する前後のレポートをエクスポートした比較は以下です。

図8 期間集計前後のレポートのエクスポート結果(詳細のみの場合)
図8 期間集計前後のレポートのエクスポート結果(詳細のみの場合)

「詳細のみ」でエクスポートした時、期間集計した項目はレコードデータに基づいた内容でエクスポートされます。

期間集計を「年月」で行ったレポートでも、エクスポートしたファイルから「完了予定日」の日付がわかります。

期間集計を行いたいけど、項目の表示形式は変更したくない!!

行レベルの数式を使ってみよう

年月などの期間集計はやりたいけど、対象項目の表示形式はそのままにしておきたいという場合もあると思います。

また、エクスポートの結果からレポートの期間集計は使いにくいということもあるでしょう。

そんな時に私が思いついたのは、期間集計を行いたい項目を利用して「行レベルの数式」を作成し、その数式を集計項目に利用する方法です。

行レベルの数式を作ってみた

行レベルの数式もレポート編集画面から簡単に作成できます。

レポート編集画面を開いたら「列」の右にある「▼」をクリックすると「行レベルの数式を追加」があるのでクリックします。

図9 行レベルの数式を追加
図9 行レベルの数式を追加

「行レベルの数式列を編集」画面が開くので、以下のように設定します。

「列の名前」はレポートに表示される項目名になるので、必要があれば「説明」に数式の内容を書いておくといいと思います。

列の名前完了予定年月
数式出力種別テキスト
数式MID(TEXT(CLOSE_DATE),1,4) & ‘年’ & MID(TEXT(CLOSE_DATE),6,2) & ‘月’

この数式は「完了予定日」の年月部分だけをテキスト形式で表示させるものになります。
※2023/1/30数式訂正。詳細は追記を参照

図10 行レベルの数式列の編集画面

適用をクリックすると行レベルの数式が作成されているので、作成した数式でグルーピングを行います。
同時に、期間集計に使用していた「完了予定日」は列の方に戻してみます。

図11 数式をグルーピング
図11 数式でグルーピング
図12 数式で集計したレポートの表示
図12 数式で集計したレポート

すると、「完了予定日」の「年月」で集計しつつ、「完了予定日」の内容をレポート上に表示できるようになりました!!

ついでにエクスポートもしてみた

行レベルの数式があるレポートを「詳細のみ」でエクスポートしてみるとどうなるか試してみました。

すると…

図13 数式で集計したレポートのエクスポート結果
図13 数式で集計したレポートのエクスポート結果

行レベルの数式も項目としてデータをエクスポートできることが分かりました!!!

これだと、エクスポート後のデータの活用に幅が広がるかもしれませんね~

おわりに

期間集計ですが、実務の方ではLightning Experienceでの期間集計方法がわからず、苦肉の策として編み出したのが行レベルの数式を作成して集計をしてみることでした。

行レベルの数式を作成した後に期間集計の方法が分かったのですが、期間集計した項目の表示だと私が作成したいレポートでは表示内容が不十分なことが多く、そのまま行レベルの数式で集計を行うレポートもありました。

今回書くにあたって、エクスポートについてもいろいろ試してみてより理解が深まったので、この気づきを生かして利用者が使いやすいレポート作成を心掛けていきたいと思います!

それでは、またお会いしましょう!!

追記

2023/1/30、完了月が正しく並び替えできないという問題があるため数式を訂正しました。(初歩的なミスですみません)

当初の数式【 TEXT(YEAR(CLOSE_DATE)) & ‘年’ & TEXT(MONTH(CLOSE_DATE)) & ‘月’) 】と訂正後の数式【 MID(TEXT(CLOSE_DATE),1,4) & ‘年’ & MID(TEXT(CLOSE_DATE),6,2) & ‘月’ 】の「完了予定年月」の表示を忘備録として載せておきます。

追記1 当初の数式
追記1 当初の数式
追記2 訂正後の数式
追記2 訂正後の数式

訂正後の「完了予定年月」は正しく並び替えできています。

今回、参考にした数式は公式ヘルプに紹介されていました。

[数式 サンプル] 日付型項目から年・月を抽出する数式

Apexを使った1日に複数回動作させるバッチ処理

セールスフォース

 Salesforceでバッチ処理を作成する方法としてはフロー処理の中の「スケジュールトリガーフロー」を使ってフロー処理として記述することが可能ですが、フローを動作させる頻度が「1回のみ、毎日、毎週」しかなく、1時間ごとに動作させるような設定ができません。

 今回は、10分ごとに処理を行うための実装をApexを使って行います。

1.バッチクラスとスケジュールクラス

 スケジュールの開始はスケジュールクラスを継承したクラスで実施し、この中からバッチクラスを呼び出し、バッチを実行します。

1.1 バッチクラスの作成

 バッチクラスを実装するためにはバッチクラスをインプリメントする必要があります。

 public class xxxxBatch implements Database.Batchable<sObject>,Database.Stateful { ....

 また以下のメソッドを実装する必要があります。

  
/* バッチ処理開始時に最初に呼び出される。バッチ処理対象となるレコードを返却するQueryLocatorを返す。*/ 
public Database.QueryLocator start(Database.BatchableContext bc) {
       処理
       return Database.getQueryLocator(xxxxx);
}
/* バッチサイズで指定されたレコード数の単位で、呼び出される。*/
public void execute(Database.BatchableContext bc,List<sObject> executeRecords) {                   
       処理
}
/* バッチ処理の終了時に呼び出される。終了処理があれば実装する */
public void finish(Database.BatchableContext bc) {
       処理
}

 それぞれのメソッドの記述内容は以下の様になります。

 startメソッドでは、DBの情報を取得するためのQueryを作成しそれを返却します。

public Database.QueryLocator start(Database.BachableContext bc) {
           string query = 'select XXXX from YYYY';           return Database.getQuery(query);
}

 startメソッドの終了後、executeメソッドが呼び出されます。その際startの返却値であるQueryが実行され、その結果がexecuteメソッドの第二引数に渡され、executeメソッドが呼び出されます。
 executeメソッドでは主たる処理を記述します。

public void execute(Database.BatchableContext bc,List(sObject> executeRecords) {
       ......
       for(hoge xx : executeRecords) {
          .........
       }
       .......
}

 executeメソッドに引き渡されたQeryの実行結果を順に取り出して処理を実施します。
 executeメソッドでExceptionが発生した場合、このトランザクションで実行されたものがロールバックされてしまいます。そのため、この処理の中でメール送信などを行っている場合にはメールを送信する処理もトランザクションの一部となるためメールが送信されないことになります。
 そのためtry~catch()を使用してExceptionを捕まえて処理することが必要となります。
 最後にfinishメソッドが実行されます。今回はこのfinishメソッド中で次のスケジュールを設定します。

public void finish(Database.BatchableContext bc) {
       DateTime nextSchedTime = DateTime.now().addMinutes(10);
       xxxxBatchSchedule cls = new xxxxBactchSchedule();
       String nextJobName = 'xxxBatchSchedule_'+nextSchedTime.format('yyyyNNddHHmm');
       String schd = nextSchedTime.format('0 m H d M ? yyyy');
       System.schedule(nextJobName,schd,cls);
}

 スケジュール設定について簡単な説明を以下に記載します。

DateTime nextSchedTime = DateTime.now().addMinutes(10);

 次にバッチを起動する時間を設定しています。10分毎にバッチ処理を実施するため、現在時間にaddMinutes()メソッドをつかって10分を加算し、次にバッチ処理を起動する時間を算出しています。

  xxxxBatchSchedule cls = new xxxxBactchSchedule();

 次節で説明するスケジューラクラスをインスタンス化しています。

  String nextJobName = 'xxxBatchSchedule_'+nextSchedTime.format('yyyyNNddHHmm');
  String schd = nextSchedTime.format('0 m H d M ? yyyy');

System.scheduleメソッドに渡すための、スケジュール名と、スケジュール設定する時間を作成しています。スケジュール名は一意でないといけないので、スケジュール時間を付加しています。

System.schedule(nextJobName,schd,cls);

スケジュール設定を行っています。

1.2 スケジュールクラスの作成

 スケジュールクラスでは、Schedulableをimprementします。またスケジュール済のパスが同時に処理できるレコードの数を指定します。デフォルトおよび最大値は200となっています。

 バッチサイズについては分単位、バッチ処理、および制限の強化によるスケジュール済みパスのパワーアップを参照してください。

public class xxxxBactchSchedule imprements Schedulable{
       private final Intefer BATCH_SIZE = 100;
       public xxxxBatchSchedule() {
 
       }
       public void execute(SchedulableContext sc) {
              xxxxBatch bt = new xxxxBatch();
              Database.executeBatch(bt,BATCH_SIZE);
       }
}

 Schedulableクラスのinprementsではexecuteメソッドを実装する必要があります。このexecuteメソッドはglobalまたはpublicで宣言する必要があります。
 executeメソッドの中でインスタンス化されているのは前節で定義したバッチクラスです。

2.Apexスケジューラの設定

 作成したスケジューラを起動するために、Apexスケジューラを設定します。

(1)Apexをスケジュール

 1.ホームタブをクリックし、検索窓からApexを検索します。
2.検索結果のカスタムコードのApexクラスをクリックします。
 3.「Apexをスケジュール」をクリックする

Apexをスケジュールを選択
図1 Apexをスケジュールを選択

(2)スケジュールを設定

スケジュール設定
図2 スケジュール設定

 1.ジョブ名:スケジュールジョブ名を設定
 2.Apexクラス:上記で作成したスケジュールクラス(xxxxBatchSchedule)を指定
 3.頻度、開始日時、終了日時、希望開始時刻を設定する

 注意事項
 1.頻度は、「毎週」または「毎月」しか選択できません。終了日までは指定した頻度でスケジュールが実行されます。上記のスケジュールクラスで設定した時刻とは異なるタイミングでバッチが起動される場合があります。そのため、スケジュールが重複設定されないように、頻度、終了日の設定を行う必要があります。
 2.ジョブキューの状況によっては、指定した日時時刻でのジョブ起動がされない場合があります。

3.スケジュール済のジョブの確認

 バッチクラス(xxxxBatch)で設定したスケジュールは、「設定」→「スケジュール済みジョブ」で確認することができます。

スケジュール済みジョブを確認する方法
図3. スケジュール済みジョブの確認

 アクションに「Manage」と表示されている場合、これをクリックすると起点となったスケジュールの詳細を見ることができます。

スケジュールの詳細表示
図4. スケジュールの詳細表示

 スケジュールを停止する場合には最新のスケジュールの削除アクションをクリックしてスケジュールを削除する必要があります。あわせて、起点となったスケジュールが定期的に実行されるように設定されているためこれも削除する必要があります。

 SFDCのスケジュールに関してはApex スケジューラを参照してください。

 

データローダの起動エラー~何をやっても起動しないあなたへ~

はじめに

こんにちは!株式会社オプトプランニングです。
Salesforce(Salesforce.com/セールスフォース・ドットコム、略してSFDC)での気づきを書いていきます。

今回はデータローダ(dataloader)について、インストール後にデータローダの起動ができず困った体験とその解決法をちょっとした気づきとして書いていきます。

私の場合、公式に従いインストール完了後、ホームに作成されたデータローダのアイコンをダブルクリックしても、コマンドプロンプトが一瞬立ち上がりすぐに強制終了するため、データローダは起動しない・エラー内容も見れない、という状態でした。。。

データローダのインストール方法

データローダはSalesforceからインストールできます。
方法は公式ヘルプに動画付きで詳しく説明されているので以下をご覧ください。

データローダのインストール手順

手順に従いインストールしたけど全然起動しない時

データローダの再インストール、OpenJDKのインストールのやり直し(Azul Zulu以外のインストール含む)、PATHの設定確認、JAVA_HOMEの設定変更etc…

何をやってもデータローダが起動しない時は、forcedotcom/dataloader: Salesforce Data Loader – GitHubインストールしたデータローダが最新かどうか確認してみてください。

上記リンク先では、図1のように最新のデータローダのバージョンが確認できます。

図1 dataloader-GitHub
図1 dataloader-GitHub

私の場合、何を試しても上手く行かず、途方に暮れていた時にこちらを発見しました。
(今回は割愛しますが、コマンドプロンプトが強制終了しないようにプログラムを書き換えて、エラー内容を確認しつつ冒頭の設定の見直しなど行いましたが解消できず…)

バージョンの確認をしたところ、Salesforceの設定からダウンロードしたものよりも新しいバージョンのものが配布されており、ダメ元で既にインストールした旧バージョンを全て削除・アンインストールの上、最新版をインストールしたところ普通に起動しました…

手順通りにやっているはずなのに上手く行かないとお困りの方の助けになれば幸いです。

おまけ

このブログを書いていて気づいたのですが、データローダのダウンロード画面が変わったようです。(2022年10月31日現在)
しかし、新しい画面でもデータローダをダウンロードする時に気づかずに旧バージョンを選択する可能性があるかもしれません。

図2 設定のデータローダにあるダウンロードリンク
図2 設定のデータローダにあるダウンロードリンク
図3 ダウンロードリンク先
図3 ダウンロードリンク先

Salesforceの設定からデータローダのダウンロードをしようとすると図2から図3のようなサイトに遷移します。(2022年10月31日現在)

ダウンロードの選択は2つあり(赤枠部分)、左が最新バージョンです。
Windows版、MacOS版の選択はダウンロードボタンの上部にあるそれぞれのアイコンで選択します。

図3をよく見ると、選択されていないMacOS版の方はグレーアウトしているのが分かると思います。
(私の場合、デフォルトではWindows版が選択されていました)

ここで赤枠右側のダウンロードボタンを選択すると旧バージョンのダウンロードが行われてしまいます。

内容を確認せずに、なんとなく左がMacOS版、右がWindows版と思いこんで右側をクリックしてたりするかもしれませんね…

あとがき

今回紹介したforcedotcom/dataloader: Salesforce Data Loader – GitHubは、既にデータローダを使用していて最新版を再インストールしたい方々の参考にもなるかと思います。

また、どうしても旧バージョンをインストールしたい場合はforcedotcom/dataloader: Salesforce Data Loader – GitHubからしかインストールすることができないようです。

Salesforceの設定から行うデータローダのダウンロードですが、2022年9月に行った際は公式の動画のようにリンクではなく直接ダウンロードだったと思います。
直近のリリースで変更されたのかもしれませんね!

今回は実際に困ったので起動エラーについて書きましたが、近いうちにデータローダの使い方も紹介していければと思います。

それでは、またお会いしましょう!!

このやり方知ってる?レポートのドリルダウン

はじめに

こんにちは!株式会社オプトプランニングです。
Salesforce(Salesforce.com/セールスフォース・ドットコム、略してSFDC)であれこれやってみたことを書いていきます。

今回はLightning Experienceでのレポートのドリルダウン(ドリルイン)機能についてあれこれやってみたことを書いていきます。

ドリルダウンのやり方~公式編~

レポートのドリルダウンについては公式ヘルプにやり方が載っていますので、そちらを確認してください。

レポートへのドリルダウンによる詳細の確認

ドリルダウンのやり方~非公式編~

こんなやり方もあります。
(2022年9月時点、公式ヘルプを探しても見つかりませんでしたので、非公式と名付けます。)

それは、グラフからドリルダウンする方法です。

ちなみに、SFDCのレポートでグラフを表示できるのは

  • サマリー形式
  • マトリックス形式

のレポートですので、表形式のレポートは公式の方法同様、対象外となるのでご了承ください。

グラフからのドリルダウンその1

グラフからドリルダウンする方法は2つあります。
1つ目は、表示されているグラフから直接行う方法です。

グラフの種類がドーナツの場合、下図のような赤枠で囲んだ部分を使用します。

図1 レポートグラフ
図1 レポートグラフ

グラフのうち、ドリルダウンしたい色の部分をクリックします。
今回は、フェーズの中から一番多い水色部分の「Closed Won」にあたる部分をクリックしてみます。

すると、以下のようになります。

図2 グラフからのドリルダウンした時のグラフ変化
図2 グラフからのドリルダウンした時のグラフ変化
図3 グラフからドリルダウンした時の表
図3 グラフからドリルダウンした時の表

Closed Wonでドリルインできたことが表からも確認できます。

編集しているわけではないので、もう一度水色部分をクリックしたり、レポートを表示し直すとドリルダウンは解除されます。

グラフからのドリルダウンその2

2つ目は、グラフの凡例から行う方法です。

赤枠部分に凡例が表示されていますが、こちらを使用します。
(凡例は表示させる位置を変更できるので、必ずこの位置にあるとは限りません)

図4 グラフの凡例
図4 グラフの凡例

凡例からドリルダウンする場合も、グラフからの時と同様にドリルダウンしたい凡例をクリックします。
今回は一番下にある「その他」をクリックしてみます。

すると、以下のようになります。

図5 凡例からドリルダウンした時のグラフ変化
図5 凡例からドリルダウンした時のグラフ変化
図6 凡例からドリルダウンした時の表
図6 凡例からドリルダウンした時の表

グラフから行った時と同様にドリルインできました。

エクスポートについて

公式のドリルダウン方法とグラフからのドリルダウン方法それぞれでエクスポートを行ってみるとどうなるかやってみましたが、どちらも同じ内容をエクスポートすることができました。
(エクスポートはどちらも「フォーマット済みレポート」を「Excel形式(.xlsx)」で行いました)

どちらも同じ内容ですが、参考までにエクスポート結果を載せておきます。

図7 左が公式、右がグラフからドリルダウンした時のエクスポート結果
図7 左が公式、右がグラフからドリルダウンした時のエクスポート結果

左が公式のドリルダウン方法でエクスポートを行った場合、右がグラフからのドリルダウン方法で行った場合です。

どちらも「グラフからのドリルダウン1」で行った「Closed Won」でドリルダウンを行い、エクスポートしています。
検索条件の内容を見てみると、どちらも同じ内容になっていることが確認できます。

これにより、グラフからのドリルダウンも全く同じ絞り込みが行えていることがわかりました。

あとがき

公式に載っていませんが、もしかするとレポートを頻繁に見る機会のある方は感覚的・直観的に使っている機能かもしれません。

グラフからドリルダウンを行う場合、メリットとしてはレポートの再表示を行わなくてもドリルダウン前のレポートに戻せる点です。

デメリットとしては、グラフからドリルダウンする場合は複数の項目値を選択することができない点です。
複数の値でドリルダウンを行いたい場合は公式のやり方で行ってください。

今回、説明のために使用したレポートは、Trailheadで勉強した時にインストールしたものに付属していた商談レポートです。
(どのハンズオンChallengeでインストールしたパッケージだったか忘れてしまいました…)
Trailheadを利用したことがある方は、同じレポートがあるかもしれないので、ご自身のハンズオン組織で確認することができると思います。
(もちろん、同じレポートでなくても確認できますよ!)

それでは、またお会いしましょう!!

意外と知らないかも?数式項目の復元について

はじめに

こんにちは!株式会社オプトプランニングです。
Salesforce(Salesforce.com/セールスフォース・ドットコム、略してSFDC)で気づいたことを書いていきます。

今回は、たまたまデータ型が数式のカスタム項目を削除した後に復元しなければいけないことがあり、初めて遭遇した画面だったので書いてみます。

実は、以前書いた削除後のデータについての気づきで数式項目を復元したことはあります。
その時は、「復元できるかどうか」しか着目していなかったため、今回の内容に気づけませんでした…

数式項目を復元したらどうなる…?

数式項目を削除した後に復元し、オブジェクトマネージャから対象の項目の詳細情報を確認してみると、数式オプション部分に以下のような文面が表示されます。

この数式は、項目が削除されたときに無効になりました。もう一度有効にするには、編集して保存してください。

図1 復元後の数式項目詳細画面
図1 復元後の数式項目詳細画面

復元後にひと手間

復元した数式項目を有効にするには、数式オプションに書かれているように「編集して保存」するひと手間が必要になります。

やり方はいたって簡単。

文面通り「編集」ボタンを押して「保存」するだけです。

編集画面を開いても特にエラーは出ず、何かする必要もありませんので「保存」をクリックします。
(もちろん、何か編集しても構いません)

図2 復元後の数式項目編集画面
図2 復元後の数式項目編集画面

保存後は項目詳細画面に戻ります。
数式オプションを見てみると先ほどの文面が消えているのが確認できます。

これで有効化の完了です!!

図3 復元後、有効化された数式項目詳細画面
図3 復元後、有効化された数式項目詳細画面

項目削除についての補足

削除時の表示について

項目を削除する時の表示内容について、削除後のデータについての気づきではどんな画面が表示されるか載せただけだったので、内容について見ておきたいと思います。

この表示は数式項目だけでなく、どのデータ型のカスタム項目を削除しても表示される内容です。

まずは、削除する際の内容です。

図4 項目削除時のポップアップ
図4 項目削除時のポップアップ

項目を削除しようとすると、このようなポップアップが出ます。

連動項目や制御項目、割り当てルールやエスカレーションルールに削除予定の項目が使用されていないか把握しておく必要があることが分かります。

復元時の表示について

次に、項目の復元時に表示される内容です。
削除時と同様、どのデータ型のカスタム項目を復元しても表示されます。

図5 項目復元時に表示される画面
図5 項目復元時に表示される画面

実は、ここに数式について言及があります!!
また、手動で変更を戻す必要があることも記載があります。

他にも、

  • ページレイアウトからは削除されたまま
  • API参照名は「×××_del」に変更される
  • すべてのレポート・レポートタイプから削除されたまま
  • AppExchangeパッケージに直接含まれている場合、削除されたまま

などがありますので、注意が必要です。

ページレイアウトに関しては復元後すぐに気づいて対応しそうですが、レポートに関しては作成しているものがない場合、削除されたままになっていることに気づかず、修正しないまま後から困りそうな部分です。

また、すでにレポートを作成している場合で、削除予定の項目をレポートで使用していてもエラーが出ることなく削除できてしまう点は注意が必要です。
しかも、列や行での使用だけでなく絞り込み条件として項目を使用している場合でもエラーが出ることなく削除できてしまいます。

対処法としては、削除前に項目の使用場所を確認しておくぐらいしかないと思います。

API参照名について

項目の復元時に表示される内容のうち、

  • API参照名が ×××_del に変更されました。

という部分について、少し言及したいと思います。

API参照名(項目名)は、削除した時に「×××_del」に自動で変更されます。
このことは、項目を削除した後に「削除済み項目」の一覧を見ると分かります。

図6 削除前のAPI参照名
図6 削除前のAPI参照名
図7 削除後のAPI参照名
図7 削除後のAPI参照名

復元したときにAPI参照名が変わるというよりは、削除したときに変更されたAPI参照名「×××_del」のまま復元される、といった方が正しいような気がしますが、復元前後でAPI参照名が変わってしまうことに注意してください。

もちろん、項目を削除してから復元するまでの間に同じAPI参照名の項目を作成していない場合は、復元後に編集する(「_del」部分を消す)ことで、削除前と同じAPI参照名に戻すことができます。

あとがき

フローやApexなどで使用している項目は、削除しようとしてもエラーが出て削除ができませんが、レポートの場合、エラーが出ることなく削除できてしまいます。

そのため、削除項目を復元後にレポートやダッシュボードの動作がおかしい場合は復元した項目を該当レポートで使用していないかの確認を行った方がいいと思います。

また、復元した項目をレポートで使用したいのに見つからない場合は、レポートタイプ設定から項目を再設定する必要があることにも注意が必要です。

やはり、復元が簡単にできるからといっても万能なわけではないので(削除時点でAPI参照名は変わってしまうし)安易に削除・復元しないことが一番よさそうだな、というのが個人的な感想です。

それでは、またお会いしましょう!!

関連記事
削除後のデータについての気づき

【実践&検証】Sandboxの更新

はじめに

こんにちは!株式会社オプトプランニングです。
Salesforce(Salesforce.com/セールスフォース・ドットコム、略してSFDC)であれこれやってみたことを書いていきます。

先日、Sandboxの更新を初めて行いました。
その際、テスト用に作成していたレコードがSandbox更新後になくなってしまいました…(泣)

そこで今回はSandboxの更新について、更新前後でどのような変化が起こるのか、検証を交えてやってみようと思います。

今回やってみること

「Sandboxの更新」って何??

Sandboxの更新については、公式ヘルプで以下のように記載があります。

Sandbox を更新すると、ソース組織のメタデータが更新されます。Sandbox がコピーであるか、Sandbox で Sandbox テンプレートが使用されている場合は、更新プロセスにより、そのメタデータと組織のデータが更新されます。

Sandboxの更新

本番組織を元に作成したSandboxの更新については情報があったのですが、Sandboxを元に作成したSandbox(SandboxのコピーSandbox)の更新についてはあまり情報がなかったため、今回は後者について書いていきます。

SandboxのコピーSandboxの更新をやってみる

今回更新をやってみる環境は、以前作成したSandbox「T2Sandbox」です。(詳しくはこちらをご覧ください)
この「T2Sandbox」は、「TSandbox」というSandboxを元に作成したSandbox(コピーSandbox)です。

コピーSandboxを更新するとコピー元と比べて中のデータがどうなるのか、更新前後でSandboxにどんな変化があるのかを検証を交えて確認していきたいと思います。

イメージは以下の図になります。

図1 内容概要(イメージ)
図1 内容概要(イメージ)

検証用のデータ作成をやってみた

その1:カスタムオブジェクトの作成

Sandboxの更新をやってみる前に、更新前後で比較するための検証用データをコピー元のSandbox(TSandbox)とコピーSandbox(T2Sandbox)にそれぞれ作成していきます。

まず、TSandboxとT2Sandboxにそれぞれの以下のようなカスタムオブジェクトを作成しました。

Sandbox名カスタムオブジェクトの表示ラベルAPI参照名
TSandbox顧客カスタム(Tsandbox作成)Tsandbox__c
T2Sandbox関係者の同意カスタム(T2sandbox作成)T2sandbox__c
図2 TSandboxで作成したオブジェクト
図2 TSandboxで作成したオブジェクト
図3 T2Sandboxkで作成したオブジェクト
図3 T2Sandboxkで作成したオブジェクト

その2:レコードの作成

次に、レコードを作成します。
違いを分かりやすくするため、以下の標準オブジェクトにそれぞれ1つのレコードを作成しました。

レコード名などは画像を参照してください。

Sandbox名レコードを作成したオブジェクト
TSandboxリード
T2Sandbox取引先
図4 TSandboxのリード(レコードあり)
図4 TSandboxのリード(レコードあり)
図5 T2Sandboxのリード(レコードなし)
図5 T2Sandboxのリード(レコードなし)
図6 TSandboxの取引先(レコードなし)
図6 TSandboxの取引先(レコードなし)
図7 T2Sandboxの取引先(レコードあり)
図7 T2Sandboxの取引先(レコードあり)

Sandboxの更新方法と手順

まずは本番環境へ

Sandbox作成の時もそうでしたが、Sandboxの更新も本番環境からでしか行うことはできません。

本番環境へログインし、設定のクイック検索で「Sandbox」と入力し「環境」の配下にある「Sandbox」をクリックします。

さっそく更新

Sandboxの一覧が表示されたら、対象のSandboxの左にある「更新」をクリックします。

図8 Sandboxの一覧画面
図8 Sandboxの一覧画面

「更新」をクリックすると「Sandboxの更新」が表示されます。
(なんだか見覚えのあるような画面ですね~)

「Sandboxの情報」には既に「T2Sandbox」の情報が入っていましたが、変更することもできるようです。

また、「作成元」は「TSandbox」になっていますが、こちらも変更することができるようです。

今回は、更新前後の違いが分かるように「説明」に更新年月を追加し、名前や作成元はそのままで「次へ」をクリックします。(検証を行ったのは2022年6月でした)

図9 Sandboxの更新画面
図9 Sandboxの更新画面

次に表示されるのは「Sandboxオプション」でした。
こちらは空白のまま「作成」をクリックします。

図10 Sandboxオプション
図10 Sandboxオプション

後は待つだけ

「作成」をクリック後、Sandboxの一覧に戻ってきました。

先ほど更新を行った「T2Sandbox」の「状況」は「待機中」になっており、「説明」が変わっていることが確認できます。
また、「アクション」、「場所」、「完了日」は空白になりました。

更新元である「TSandbox」の方は「アクション」のうち「削除」と「更新」が消えました。

図11 Sandboxの一覧画面
図11 Sandboxの一覧画面

ここまできたらSandboxの作成の時と同じように更新が完了するのを待つだけのはずです!!

いつまで経っても更新が完了しない…

有効化待機中について

Sandboxの一覧画面を時々リロードして見ていたものの、いつまで経っても更新が完了しませんでした。(Sandbox作成の時はすんなりできた記憶があるので、おかしいなと思いつつ他の作業を行っていました。)

半日ほど経過し、流石に時間がかかりすぎでは?と思い、Sandbox一覧画面をよくよく確認してみると…

図12 有効化待機中で表示されるアクション「有効化」と「破棄」
図12 有効化待機中で表示されるアクション「有効化」と「破棄」

更新を行ったT2Sandboxの「状況」が「有効化待機中」になっており、「アクション」に「有効化」と「破棄」が追加されていました…!

そうです、Sandboxの更新では有効化ができるようになったら(状況が有効化待機中に変わった段階で)手動で「有効化」しなければならないのです!!
待つだけではダメでした…(泣)

このことはしっかり公式ヘルプにも載っていましたので気になる方は公式ヘルプも参考にしてください…

Sandbox の更新
更新された Sandbox の有効化

通常だと、有効化する準備ができるとSFDCからメールが送られてくるようです。(私の場合、システムメールを送信しない設定にしていたために気づくのが遅くなりました)

Sandboxの作成と更新は手順や画面が似ているので、気を付けましょう!

有効化する前に破棄を試してみた

気を取り直して、有効化を行おうと思ったのですが、その前に「破棄」をクリックするとどうなるかやってみました。

図13 ポップアップ「更新を破棄」
図13 ポップアップ「更新を破棄」

このようなポップアップが出現しました。

この後、「キャンセル」ボタンを押し、破棄は行いませんでしたが、「破棄」クリック後は確認のポップアップが出るのですぐに破棄されるわけではない、ということが分かりました。

更新の有効化をやってみた

いつも通り脱線してしまいましたが、更新の有効化をやってみます!
「有効化」をクリックすると…

図14 ポップアップ「有効化」
図14 ポップアップ「有効化」
図15 有効化ボタンがアクティブ状態
図15 有効化ボタンがアクティブ状態

破棄の時と同じようにポップアップが出現しました。

このままではポップアップ内の「有効化」ボタンがグレーアウトして押せないので、チェックボックスにチェックをつけます。

すると、「有効化」ボタンがアクティブになるのでクリックします。

図16 有効化中に変化
図16 有効化中に変化

「有効化待機中」から「有効化中」に状況が変化し、「アクション」は空白になりました。

あとは「完了」になるのを待つだけです!!

更新前後のSandboxの比較をやってみた

Sandbox自体の比較をしてみた

まず、更新前後で組織IDが変化し、インスタンス(場所)も変わります。

図17 更新前後のSandbox情報比較
図17 更新前後のSandbox情報比較

そして…先日必須となったMFA認証についてですが、設定は初期化されていました。
そのため、再度設定が必要です。

Sandboxの中身(データ)を比較してみた

冒頭で作成した検証用のデータについて、更新したSandbox(T2Sandbox)は更新前と比較してどうなったか見てみます。

まずは、カスタムオブジェクトを見てみます。

更新後のT2Sandboxを見てみると、更新前に作成したカスタムオブジェクトはなくなり、更新元のTSandboxで作成したカスタムオブジェクトだけありました。

図18 更新後のT2Sandboxのオブジェクトマネージャ
図18 更新後のT2Sandboxのオブジェクトマネージャ

次にレコードを見てみます。

こちらもカスタムオブジェクトと同様で、T2Sandboxで作成したレコードはなくなり、更新元のTSandboxで作成したレコードだけとなっていました。

図19 更新後の取引先
図19 更新後の取引先
図20 更新後のリード
図20 更新後のリード

比較からわかったこと

組織IDやインスタンスの場所、MFA認証も初期化されることから、Sandboxの更新は更新元のSandboxから新規でコピーSandboxを作成するのと変わりがないように思います。

更新時に「作成元」が変更できるのも、新規でSandboxを作成するのと変わらないからこそできるように思います。

データを見ても、Sandboxを作成した後に作ったカスタムオブジェクトやレコードは更新をすることで消滅してしまいます。

ここで注意したいのは、Sandbox上でなんらかの開発を行った後にSandboxの更新を計画する場合です。
更新を行うと更新元のSandboxと全く同じデータになるので、更新を行うSandbox上で新規作成したデータはすべて消えてしまいます。
Sandboxの更新について、更新元データを付け足してくれるイメージを持たないようにしましょう。

ではどんな時にSanedboxの更新を行うのがいいのか考えてみました。

  • Sandboxの作成上限に達しているが、不要なSandboxがあるため、新規でSandboxを作成したい
  • 複数のSandboxで同時に開発を行い、1つのSandboxに開発内容を集約した後、他のSandbox同士でも開発内容を共有したい

などが挙げられると思います。

一つ目の場合は、不要なSandboxを削除して作成を行うよりも、不要なSandboxを更新する方が手間が省けそうです。

二つ目の場合は、リリースを特定のSandboxのみに行うことで、相互にリリースしなくていいので変更セット作成とリリースの手間が減りそうです。
言葉だと分かりにくいかもしれませんが、イメージとしては以下です。

図21 複数のSandboxで同時に開発する場合
図21 複数のSandboxで同時に開発する場合

この場合、Sandbox①を本番環境へのリリース用とすれば、本番環境リリース後に開発用Sandboxを更新するとでそれぞれの開発用Sandboxは本番環境と同等の環境に揃えることができそうです。

開発用のSandboxはそれぞれ違った環境を元に作成していても、更新時に同じ環境を更新元(作成元)とすればいいだけです。

もちろん、それぞれの開発環境に独自にテストデータを用意していて、今後も継続して使用したい場合は、レコードの場合はデータローダなどでデータを保存しておいたり、オブジェクトの場合は更新元に作成しておいたりしなければなりません。

あとがき

ここまでやってみて、あまりSandboxの更新は需要がないような気がしてきましたが…
更新を行うとどうなるんだろう?と疑問に思われている方の参考になれば幸いです。

今後も、気になったことがあれば検証してみたいと思います。

それでは、またお会いしましょう!!

関連記事
SalesforceでSandboxを作ってみた(1)
SalesforceでSandboxを作ってみた(2)

Salesforce 認定アドミニストレーター受験記

はじめに

こんにちは!株式会社オプトプランニングです。

先日、Salesforceの認定アドミニストレーターをオンラインで受験し、無事に合格できました!!
Salesforceでは登竜門的な位置づけとなる認定アドミニストレーター資格ですが、合格までに様々な先輩方の受験体験記を読ませてもらいました。

そこで私も、どんな勉強を行ったか、オンライン受験のあれこれ、受験日までの準備や受験当日のことなどを書いていきたいと思います。

今から資格取得を目指すどなたかの参考になれば幸いです。

試験対策

勉強したこと

まずは、みなさんお馴染みのTrailheadを行いました。
私は実務でSalesforceを扱う機会があるので、今まで関わってこなかった分野や理解が曖昧な部分をTrailheadで勉強しました。

また、Salesforce主催の無料ウェビナーも参加しました。
半日かけて試験の出題範囲に沿って主要ポイントをなぞっていくので、とても勉強になりましたよ。
また、参加者に試験の割引クーポンの案内もあり、至れり尽くせりでした。(もちろん、今回の受験でありがたく使わせていただきました!!)

割引クーポンは有効期限が設定されており(私の時は3か月弱でした)、いつまでに受けよう!!と気持ちを奮い立たせてくれるので、試験を受けようか悩んでいる方こそ受講してほしいです。

あとは、ひたすら練習・模擬問題を解きました。
問題については有志の方々が作成し、ブログなどで公開して下さっているものを使わせていただきました。(有志の先輩方、本当にありがとうございます!!!)

個人的な感想ですが、問題文が独特なのでとにかく問題の出題形式に慣れておく必要があると思います。(これはどんな資格試験にも共通することかもしれませんが…)

勉強の流れ

具体的な流れとしては

問題を解く → わからない用語はメモ → 答え合わせ → わからない用語や正答率が低かった分野についてTrailheadがあればやってみるor見返してみる → Trailheadがなければ自力で調べる → 問題を解く・・・

を繰り返しました。
何度か上記の流れを行うと苦手分野が分かってくるので、苦手分野の問題を繰り返し解いて復習も行いました。

Salesforceは一度も触ったことがない…という方は、まずはTrailheadから始めてみて、大体わかってきたな、というタイミングで問題を解き始めるといいかもしれません。

試験予約と環境

試験予約のための準備

Trailheadをやってみた事がある方はTrailheadのアカウントをお持ちだと思いますが、それとは別に試験を受けるためWebassessor (ウェブアセッサー)へ登録する必要があり、Webassessorのアカウント取得後、試験の予約ができます。

オンライン試験について

オンライン試験は基本的に24時間受けることができます!!
(システムメンテナンスなどで受験不可日もあるので、詳細はSalesforce 認定資格をご覧ください。)
とてもありがたいですが、予約の時はうっかり受験時間を間違えないように気を付けて下さい…

時間は24時間とAM・PMの12時間の両方で表記されています。(2022年5月時点)
受験可能な時間が早い順で表示されるため、一番早い時間だと0:00(12:00AM)から選択できます。
例えばお昼の1時(13:00PM)に試験を受けるつもりが1:00(1:00AM)に試験予約をしてしまった…ということのないようにしましょう。(私はうっかり予約しかけました…)

試験日時選択画面
試験日時選択画面

オンライン試験の環境について

私はノートパソコンで受験しましたが、PC内蔵のカメラとマイクのみで問題なく受験できました。

オンライン受験ができる環境かチェックもできるので、そちらで調べるのが一番だと思います。
インターネット接続についても診断できるので、あらかじめ当日受験予定の回線(部屋)で診断しておくといいと思いますよ。

試験前日までの流れ

前日までにやっておくこと

まずは、オンライン受験ガイドをしっかり読んでおきましょう。

必ず行っておくこととして「Sentinel(センチネル)」のインストールと「Biometric(バイオメトリック)」の登録の2点があります。(受験ガイドにも記載があります)

方法は受験ガイドに詳細が記載されていますので割愛します。

試験当日の流れ

本人確認について(オンライン試験の場合)

試験会場では本人確認のため身分証明書が必要のようですが、オンライン受験ではバイオメトリックの認証システムで本人確認を行っているので身分証明書は必要ありませんでした。(2022年5月時点)

また、受験ガイド記載の「セキュリティに対する推奨」設定は、試験開始直前だと慌てそうだったので、当日に受験ガイドを確認しながら行いました。

試験開始直前

試験時間の10分前に試験開始ボタンが出現します。
私はオンライン受験ガイドをしっかり読んだつもりでしたが、どこに記載されているかわからず…

30分前からスタンバって、15分前になっても試験開始のボタンが現れなかったので、オンライン試験ガイドや動画を見返して10分前に試験開始ボタンが出現することに気が付きました…(笑)

試験準備などに気を取られて見落としがちかもしれませんので、今から受験する方は10分前に試験開始のボタンが現れると覚えておいて下さい!!

試験開始ボタンを押すと、試験の注意事項などの最終確認の画面に遷移します。

動画の案内もあるので、それを見つつ準備ができたらセンチネルの起動ボタン(だったかな?この辺りはうろ覚えです…)を押します。

センチネルが起動しない・・・

はい、試験開始ボタンを押した後、センチネルが起動しないエラーが発生しました…(泣)
エラー後、再度試験開始ボタンとセンチネル起動ボタンを押しますが、エラー連発で刻々と予約時間に近づき、メチャメチャ焦りました…(号泣)

5回ほど試してダメだったので、チャット経由でサポートに連絡しました!!!

カスタマーサポートセンターへ連絡してみる

私が行った連絡方法としては、まずWebassessorログイン画面にあるオンライン受験のチャット問い合わせの「こちら」をクリックします。

Webassessorログイン画面にあるチャットへのリンク
Webassessorログイン画面にあるチャットへのリンク

すると、KryterionのHPが開くので、右下のポップアップをクリックします。

リンク先のKryterionホームページ
リンク先のKryterionホームページ

氏名やメールアドレスの記入フォームが立ち上がるのでそれぞれ記入し、問い合わせ内容として正しそうなものを選び、下にある「チャットを開始」をクリックします。
(全て英語の選択肢でしたが、私の場合「Online Exam Technical Help」が妥当そうだったのでこれを選んだと思います…焦っていたのでここもうろ覚え。)

チャットの記入フォーム
チャットの記入フォーム

チャットが起動して少し経つと、オペレーターの方が英語で連絡をくれました。(日本語に訳すと「何にお困りですか?」みたいな感じだったと思います)
しかし、私はすでにチャット入力欄に「センチネルが起動せず試験ができない」と日本語で入力していました。
焦りすぎていたので、一旦そのまま日本語で送り、翻訳サイトで英語に直してチャットに入力し直そうとしていたところ…

なんと、返答が日本語で返ってきました!!!

翻訳したような日本語だったので、オペレーターの方が英語を日本語に翻訳して対応してくれたみたいです。
念のため、日本語でもいいですか?と聞いたら、大丈夫との返信がありました。
私と同じように何かトラブルに遭遇した方は、チャットで英語が送られてきても日本語で送ってみてもいいかもしれません。
焦りすぎていたので、この対応は本当に感謝しかありません。
対応してくれたオペレーターの方、あの時はありがとうございました…!

そんなこんなでエラー状況を詳しく説明すると、一度センチネルをアンインストールし、指定のファイルをインストール後、センチネルを再インストールするよう指示があり、、、

無事にセンチネルを起動することができました!!!!

サポートでのやり取りでおそらく20分ほど経過していたと思いますが、無事に受験することができました。

試験開始~終了まで(眼鏡の人の場合)

センチネル起動後、事前に登録したバイオメトリックの顔認証も済ませ、いよいよ試験開始です!

しかし、私は眼鏡をかけています。
眼鏡の場合は、チェックを行うと受験ガイドにありましたが、いつやるんだろうなぁ~なんて思いながら問題を解いていると・・・

急に眼鏡を確認する旨の画面に変わりました!!!

3~4問目の問題文に目を通しているところだったと思うので、時間にすると開始から5分少々経過したころでしょうか?
音声での案内はなく、切り替わった画面に「Glasses」の文字とカメラに眼鏡を近づけて見せるようなアニメーション(?)があったと思います。
(ここもうろ覚えですが、英語が得意ではない私にもすぐ眼鏡の確認だ!とわかりました。)

確認ができたら自動で試験再開すると思っていましたが、「試験に戻る」ボタン(うろ覚えです)があったので、確認ができたかの有無は無いと判断し、眼鏡を外してPCのカメラに近づけた後、前後左右に眼鏡を動かして止める、というのを5秒間隔で念のため2回繰り返し、「試験に戻る」を押して試験を再開させました。

試験時間は比較的余裕があったので、後から見直すためにチェックをしておいた問題の見直しをしてから全体を再度見直し、時間ギリギリまで粘りました。

試験終了!!

なんとか合格…!!

ギリギリまで問題を解き、試験終了のボタンをクリックすると、正答率と合否が記載された画面に切り替わりました。

初めての試験だったのですぐに結果が出てビックリしました!と言いたいところなのですが、試験に集中し疲れていたためすぐには状況を呑み込めなかったです(笑)

少したってから合格メールなどが送られてきてやっと実感することができました~

センチネルの起動エラーなどがあり試験の開始が予定より大幅に遅れたものの、試験時間が短くなったりはありませんでした。(試験中は時計は見れませんが残り時間が表示されており、開始した時に105分だったのを確認しています。)

また、私の場合試験中に眼鏡の確認がありましたが、その間は試験時間が表示されていなかったため試験時間に影響はなかったと思います。(当たり前ではありますが…)

あとがき

なんとか一度目の試験で合格することができてほっとしています。

振り返ってみると、トラブルに遭遇した方の受験記などを事前に読んでいたため、チャットでサポートに連絡する行動へ移れたと思います。
トラブルが起こっても一旦落ち着いて冷静に、と思っていてもなかなかそうはいかないものですね~

年内にもう一つSFDCに関する資格を取りたいな~と思っているので、受験の合否に関わらず勉強方法などを書いていけたらと思います。

それでは、またお会いしましょう!!

変更セットの上手な使いまわし術

気づき

はじめに

こんにちは!株式会社オプトプランニングです。

先日リリースについて書きましたが、その際書けなかったクローズ後の変更セットの私なりの使い方を忘備録も兼ねて書いていきたいと思います。

クローズした変更セットの利用方法その1

同じ変更セットを使いまわす

まずは、変更セットの再利用です。

  • 同じ変更セットを複数の組織にリリースする必要がある
  • 本番組織をベースに作成したSandbox環境でリリースの評価・テストを行い、問題なかったので同じ内容の変更セットを本番環境にリリースしたい

など、同一内容の変更セットを別組織にリリースしたい場面はあると思います。

クローズした変更セットは編集はできなくなりますが「アップロード」ボタンは残っています。
これを利用し、クローズした変更セットを別環境にアップロード・リリースすること(再利用)ができます。
(※クローズした変更セットに含まれるコンポーネントは、変更セット作成後に削除や修正をしていない場合に限ります。詳しくは後ほど説明します。)

アップロードする際、対象組織に対してリリース接続の設定を行うことが必要ですので、そこは忘れずに行いましょう。

1つの変更セットを再利用する良い点は、「変更セットアップロード履歴」が残ることです。
アップロードする度に残るので、後からどの組織にアップロードしたかの確認ができます。

図1 2つの組織にアップロードした後の変更セットアップロード履歴
図1 2つの組織にアップロードした後の変更セットアップロード履歴

Trailheadでは

送信変更セットを別の組織にアップロードした後で、異なる組織にアップロードすることはできません。

インテグレーション環境でのテストと変更のリリースhttps://trailhead.salesforce.com/ja/content/learn/modules/declarative-change-set-development/test-in-the-integration-environment-and-deploy-changes

とありますが、Developer SandboxからDeveloper Sandboxまたは本番組織に向けてのアップロードはできることを確認しています。

Sandboxの種類が違う場合などは検証しておりませんので、うまくいかない場合はTrailheadにあるように変更セットのコピーを行ってください。

クローズ後の変更セットのアップロード方法

変更セットのアップロードボタンは、送信変更セットの一覧や変更セットの詳細にあります。

図2 送信変更セット一覧画面
図3 送信変更セットの詳細画面
図3 送信変更セットの詳細画面

クローズ後の変更セットをアップロードしようとすると図5のような画面になります。
変更セットをどの環境にもアップロードしていない図4の時と比べてみると、

この変更セットをアップロードすると、編集できなくなり、対象組織から取り消すこともできません。

というメッセージがクローズした変更セットに表示されていないことがわかります。

既にクローズしている変更セットはそもそも編集することができないため、注意書きが現れないようです。

図4 オープンの変更セットアップロード時のアップロード詳細
図4 オープンの変更セットアップロード時のアップロード詳細
図5 クローズの変更セットアップロード時のアップロード詳細

使いまわす時の注意点その1

1つ目に注意したいのは、すでにアップロードした組織も選択できる点です。

同じ変更セットを複数回にわたって同一環境にアップロードしても特に問題は起きません。
逆を言えば、エラーも出ないということです。

アップロードは成功したのにアップロードしたはずの環境(対象組織)に受信変更セットがみつからない…?という時はアップロード先に間違いがないか確認しましょう。

アップロード先は、変更セットアップロード履歴やアップロード完了の通知メールで確認できます。
アップロード完了の通知メールには、送信変更セットのソース組織と対象組織が明記されています。

参考までに、「リリースしてみた<アップロード編>」で載せなかったアップロード完了の通知メールはこんな感じです。
システムメールとしてSalesforceから送られてきます。

図6 アップロード完了のシステムメール
図6 アップロード完了のシステムメール

使いまわす時の注意点その2

2つ目の注意点としては、1度にアップロードできる対象組織は1つだけという点です。
アップロード先を選択する画面はラジオボタンで構成されており、複数の組織を選択することは不可能となっています。

図7 アップロード時の対象組織の選択画面
図7 アップロード時の対象組織の選択画面

複数の組織に同じ変更セットをアップロードしたい場合はそれぞれアップロード手順を行う必要があります。

使いまわす時の注意点その3

3つ目の注意点としては、クローズした変更セットに含まれるコンポーネントは更新されないという点です。

例えば、前回のリリースしてみた<変更セット作成編>で追加した権限セット「MFA」について、変更セットアップロード後に修正を加えたとします。
アップロード後の変更セット(クローズした変更セット)はコンポーネントの更新が行われないので、権限セット「MFA」に行ったは反映されません。

変更セットに変更はないが、変更セットのコンポーネントの内容に変更がある場合は、「変更セットのコピー」を作成しないと修正内容を反映することはできません。

コンポーネントの更新という考え方が少し難しく感じますね…

図8 送信変更セット詳細に書かれている内容
図8 送信変更セット詳細に書かれている内容

クローズした変更セットの利用方法その2

変更セットのコピーを作成し編集する

クローズした変更セットは編集することはできませんが、コピーを作成することは可能です。
また、作成したコピーに対しては変更セットの編集ができます!!

このことを利用し、クローズした変更セットを編集したい時はコピーを作成するといいと思います。

  • リリースでコンポーネント不備によるエラーが出た
  • リリースでエラーも無く一安心した後に、リリース環境の確認を行っていて入れそびれたコンポーネントがあることに気づいてしまった

などなど、変更セットの作り直しが発生してしまうのはよくあることだと思います。(きっと私だけじゃない…はず 笑)

リリースしそびれたコンポーネントだけの変更セットを新しく作成してもいいのですが、

  • エラーやコンポーネント不足の度に変更セットを作成すると、沢山の変更セットが作られてしまう
    →どんな内容の変更セットをアップロード(リリース)したか履歴を確認する可能性があるため、リリース内容をなるべく1つの変更セットにまとめておきたかった
  • 「連動関係を参照/追加」を使用することで、変更セットに含めたい関連するコンポーネントが探し出しやすい

といった理由から、変更セットのコピーを作成しコンポーネントを追加(削除)する、ということを行いました。

変更セットのコピーの作り方

変更セットのコピーはとても簡単に作成できます。
対象の変更セットの「コピー」をクリックするだけです。

アップロードと同様、「コピー」は、送信変更セットの一覧や変更セットの詳細にあります。

図9 送信変更セット一覧画面
図10 送信変更セットの詳細画面
図10 送信変更セットの詳細画面

コピーをクリックすると、「変更セットのコピー」に遷移し、ここで変更セットの名前や説明を変えることができます。

ベースの変更セットと混同しないためにも、名前や説明はコピーであることが分かりやすいものに変更しておいた方がいいと思います。

図11ではすでに名前や説明を変更してありますが、「変更セットのコピー」の名前と説明にはデフォルトでベースの変更セットと同じ内容がそれぞれ入力されています。

図11 変更セットのコピー作成時の入力画面
図11 変更セットのコピー作成時の入力画面

変更セットのコピーを保存すると、ベースの変更セットのコンポーネントを引き継いだ「状況」がオープンの変更セットが出来上がります。

あとは、新規作成の時と同様にコンポーネントの追加を行ったり、不要なコンポーネントの削除を行いましょう。

あとがき

変更セットのコンポーネントの種類は、作成したことがある方ならわかると思いますがとても沢山あります。
以前どのぐらいあるか調べた時は約120種類ありました。(2021年12月ぐらいに調べました)

中には見たことのないコンポーネント種類名もあったりしたので、変更セットの作成は本当に大変な作業だと思います。

今回は、クローズ後の変更セットに焦点を当てて使い道について書いてみました。
クローズ後に限らず、良い使い道を思いついたら第二弾としてまとめられればと思います。

それでは、またお会いしましょう!!

関連記事
リリースしてみた<変更セット作成編>
リリースしてみた<アップロード編>