ヘルスケア通信簿 速報版

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

先日、きょうかいけんぽ広島支部様より、
令和4年度のヘルスケア通信簿 速報版が届きました!

まだ、速報値の段階ではありますが、当社が取り組んでいる
健康経営の結果が現れています。

例えば、
○従業員1人あたりの年間平均医療費が下がっている
○従業員の受診率は現段階で90.0%を超えている
○特定保健指導実施率は、なんと100%!

この調子で、年度末まで行きますよ!
「健康づくりの好循環」をさらに拡大させていきたいと思います。

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

はじめに

こんにちは!株式会社オプトプランニングです。
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参照名は変わってしまうし)安易に削除・復元しないことが一番よさそうだな、というのが個人的な感想です。

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

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

ひろしま企業健康宣言 2022

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

2022年8月12日付で、当社は協会けんぽ広島支部様より、
「ひろしま企業健康宣言 健康づくり優良事業所」に認定されました!
昨年に続き、2年連続 5つ星です!!

当社の令和3年度(令和3年4月~令和4年3月)の取組みですが、
基本はもちろん、身近に出来ることから力をいれてきました!

まずは、特定保健指導を社員全員に実施しました。
全員の健康診断後、直接対面で行ったり、WEB面談でお願いもしました。

昨年度好評で、既に定着しつつある社内運動大会も継続して開催、
新しい取り組みとしては、朝のストレッチもやってみました。
広く認識を深めるために、認知症サポーターの講座も受講しています。


当社の健康経営に関する取り組みは、
コーポレートサイトの「健康経営のページ」をご覧ください!
https://www.opt-p.co.jp/initiatives/#link_sec_02


これからも、従業員のみなさんの健康づくりを支えてきたいと思います!

社内 野の花画伯から その4

向日葵(ひまわり)

花言葉は、「憧れ」、「情熱」、「あたなだけ見つめる」、など、
太陽に向かって花が咲く、花の向きが変わる、日廻り(ひまわり)と呼ばれています。
元気/明るいイメージでポジティブな花言葉が多く、友人にエールを送りたい時や
プロポーズの際にもピッタリな花です。

種も栄養価が高くて、種からとれるひまわり油も効果効能も非常に高く、
ビタミン、ミネラルがたくさん含まれる優れものです。

今回は、岡山の吉備路を「ダーマトグラフ」という色鉛筆で
暑さに負けないよう、太目に描きました。

AWS CLIで情報を出力しようVPC編(Linux版-その3)

VPCにはどの様な情報があるのだろうか?。一番気になるのは,CIDR,サブネット,どのようにしたら見れるのだろうか?

             図A VPCの一覧を図で書いてみる

1.利用中のリージョンのVPC情報を出力しよう

利用中のVPC一覧を出力する場合は、以下のコマンドを実行します。

aws aws ec2 describe-vpcs

              図B VPC一覧出力

json形式で出力されます。

2.必要な情報のみ出力するようにしましょう

オプションのqueryを使用することで絞り込みができます。
以下の例は、CIDRとVPC名に絞った例です。トップレベルがVpcs,で(画像B 階層と項目)
CidrBlockとtags[0]をdict{}に配置させます。

aws ec2 describe-vpcs \
--query "Vpcs[].[{CIDR:CidrBlock,Name:Tags[0].Value}]" \
--out table

オプションのqueryを使用することで絞り込みができます。
–query オプションの順番を変えても出力順序は変わりません。CIDRが先に出力されます

aws ec2 describe-vpcs \
--query "Vpcs[].[{Name:Tags[0].Value,CIDR:CidrBlock}]" \
--out table

           図C 項目を絞って出力

VPCのCIDRとVPC名を出力できました。

3.必要な情報(追加)出力するようにしましょう

オプションのqueryを使用することで絞り込みができます。
以下の例は、CIDRとVPCIdにVPCの名前を追加した例です。トップレベルがSubnets,で
(画像D 階層と項目)CidrBlockとVpcIdをdict{}に配置させます。

aws ec2 describe-vpcs \
--query "Vpcs[].[{CIDR:CidrBlock,Name:Tags[0].Value,VpcId:VpcId}]" \
--out table

            図D CIDRとVPC名とVPCID

VPCのCIDRとVPC名とVPCIDを出力できました。

4.サブネット情報を出力してみましょう

VPCの情報出力では、サブネットの情報は出力されないので、サブネット情報
を出力するコマンドでサブネット情報を出力しましょう。

aws ec2 describe-subnets

             図E サブネット情報

サブネットの情報がjson形式で出力されます。

5.必要な情報のみ出力するようにしましょう

オプションのqueryを使用することで絞り込みができます。
以下の例は、CIDRとVPCIdに絞った例です。トップレベルがSubnets,で(画像E サブネット情報)
VPCid,CidrBlock,Nameを出力させます。

aws ec2 describe-subnets --query "Subnets[].[VpcId,CidrBlock,Tags[0].Value]" \
--out table

              図F サブネットのCIDRとVPCID

サブネットのCIDRとVPCIDが出力されます。

6.VPCとサブネットの情報を出力しよう

VPCの情報出力では、サブネットの情報は出力されないので、サブネット情報
を出力するコマンドとVPC-Idをfilterに指定してサブネット情報を出力しましょう。

aws ec2 describe-subnets \
--filters "Name=vpc-id,Values=vpc-0e628XXXXXXXXYYYY" \
--query "Subnets[].{CIDR:CidrBlock,VpcId:VpcId,Name:Tags[?Key=='Name'].Value}" \
--out table

         図G サブネットとVPCID

VPCIDをフィルターして、このVPCにどんなサブネットがあるのかがわかります。

7.VPC CIDRとサブネット CIDRを出力しよう

サブネットの情報(CIDR)とVPCのCIDRを出力したい。これにはちょっと工夫が必要です。
コマンド一発というわけにはいかないのです。他に方法があるかもしれません。

aws ec2 describe-subnets --query "sort_by(Subnets[].{VpcId:VpcId,SubnetCIDR:Cidr
Block,AZ:AvailabilityZone},&VpcId)" \
--out table > subnet.txt
aws ec2 describe-vpcs \
--query "Vpcs[].[{CIDR:CidrBlock,VpcId:VpcId}]" \
--out text > vpc.txt
./replace.py

more replace.py
#!/usr/bin/env python3
import textfile
list_from_vpcs = []
with open('vpc.txt') as f:
	reader = csv.reader(f, delimiter='\t')
	list_from_vpcs = [rows for rows in reader]
for vpc in list_from_vpcs:
	textfile.replace('subnet.txt',vpc[1],vpc[0])
textfile.replace('subnet.txt','VpcId','VpcCIDR')
            図H サブネットCIDRとVPCCIDR

先ず,サブネットの情報をサブネットのCIDRでソートしてsubnet.txtに出力させます。次に,vpc.txtにvpc情報を出力させます。そして、subnet.txtのファイルの中身を、vpc.txtのvpcIDと一致する項目をCIDRに置き換えています。また、表示名をVpcIdからVpcCIDRに変更しています。これで、サブネットとVPCの関係がわかります。

8.InternetGWの情報を出力しよう

InternetGWの情報を必要な項目のみ出力してみましょう

aws ec2 describe-internet-gateways \
--query "InternetGateways[].[{VPC_id:Attachments[0].VpcId,Name:Tags[0].Value}]" --out table

オプションのqueryを使用することで絞り込みができます。
上記の例は、InternetGatewaysがトップレベル次にVpcIdとTagsのValue情報を出力させています


            図J InternetGateway情報

次回はInternetGWとVPC,サブネットCIDRを一緒に出力させる方法を書きます


Linux版その1 EC2の情報出力 https://opt-p.co.jp/blog/aws/post-1633/

Linux版その2 RDSの情報出力 https://opt-p.co.jp/blog/aws/post-1718/

Linux版その4 色々な情報出力 https://opt-p.co.jp/blog/aws/post-2421/

【実践&検証】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)

社内 野の花画伯から その3

 ハイビスカスは、南国の花のイメージです。

花言葉は、「上品な美」、「新しい恋」、「繊細な美」、「恒久の美」等です。

沖縄などでは、生垣や庭木として親しまれています。花は、一日花で摘んでも暫くは枯れない生命力を持っているのでパワーがあります。花の鮮やかな色や情熱的な姿から「陽の木」が溢れていると言われ、人気運・愛情運・恋愛運を高めてくれるパワーがあるそうです。赤い花は、赤を象徴する火の気があり、火の気の方向としては、「南」を指します。この方向に飾っておくことで運気がアップするそうです。

ハワイ州では、州花にハイビスカスを指定しています。現地では、「神様に捧げる花」として多くの人々に愛されています。ハワイでフラダンスの踊り子達がハイビスカスを髪に挿して踊る姿が目に浮かびます。ハイビスカスを右に挿しているのは未婚者、左に挿しているのは既婚者という意味があるそうです。

Apexを使った簡単なメール送信方法

セールスフォース

 SFDCからメールを送信する方法は色々とありますが、今回はApexを使った簡単なメール送信方法を紹介します。

 Apexコードを使用するとApexトリガーやApexスケジューラからメールを送信することができます。
 Apexからメール送信する方法には「単一メール送信」と「一括メール送信」があります。今回は「単一メール送信」を使った方法を説明します。
 さらにメール本体についてはApexの中でメール本体を作成する方法と「メールテンプレート」を使う方法がありますが、ここではメール本体をApexの中で作成します。

1.メールアドレス保存用カスタムオブジェクトの作成

 メール送信先を登録するための以下のようなカスタムオブジェクト(MailMember)を作成します。

カスタムオブジェクト(メールメンバー)
図1 カスタムオブジェクト(MailMember)

2.Apexでのメール作成と送信

 Apexでメールを作成し、送信する部分のコードは以下となります。

List<String>mailAdderList = new List<String>();

String mailMsg = '連絡事項';

List<MailMember__c>mailMember = [select id,Name,mailAddress__c from MailMember__c];
for(MailMember__c mM:mailMember){
  mailAdderList.add(mM.mailAddress__c);
  mailMsg += '\n';
  mailMsg += nM.name;
}
mailMsg += '\n';
mailMsg += 'メッセージを入力';

Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();

mail.setToAddresses(mailAdderList);
mail.setSubject('Test Mail Subject');
mail.setPlainTextBody(mailMessage);
mail.setUseSignature(false);
mail.setBccSender(false);
mail.setSenderDisplayName('メール送信者名入力');

List<Messaging.SendEmailResult> results = 
  Messaging.sendEmail(new List<Messaging.SingleEmailMessage>{mail},false);
for (Messaging.SendEmailResult result : results) {
    if (!result.isSuccess()) {
        System.debug(LoggingLevel.ERROR, result.getErrors()[0]);
    }
}

 コードの簡単な説明です。

 List<mailMember__c>mailMemberで送信先メールアドレスを保存します。

 new Messaging.SingleEmailMessage()により「単一メール送信」のインスタンスを作成します。

 mail.setToAddresses()にて送信先アドレスを設定します。設定できるアドレスは100件までです。

 mail.setSubject()にてメールサブジェクトを設定します。

 メール本体(メールのBody部)はmail.setPlainTextBody()にて作成します。

 メールの署名とBccは不要なので、setUseSignature()/setBccSender()にfalseを設定します。

 mail.setSenderDisplayName()でFrom行に表示される送信者表示名を設定します。   setOrgWideEmailAddressId()で組織の送信元のアドレスIDを設定した場合には設定できません。

 また、setOrgWideEmailAddressId()で添付ファイルをsetOrgWideEmailAddressId()で返信先メールアドレスを設定することができます。

 最後に、Messaging.sendEmail()でメールを送信します。2つ目の引数の指定は省略可能でデフォルトはtrueです。trueの場合、任意のsendEmailで失敗した場合、その他すべてのメッセージを送信しない、falseの場合は、メッセージを送信します。
 このメソッドはApex トランザクションごとに 10 回コールすることができます。

 Messaging.sendEmail()の結果はList<Messaging.SendEmailResult> resultsで受け取ることができます。配列で返却された結果に対してisSuccess()メソッドを実施することで結果を取得することができます。isSuccess()の結果がfalseの場合、getError()を使い、sendEmailErrorオブジェクトを取得することができます。エラーとなるのは送信時のエラーで、送信先に到達したか否かは関係ありません。

3.NO_MASS_MAIL_PERMISSIONエラー

 メール送信を実行した場合に「NO_MASS_MAIL_PERMISSION」というエラーが出る場合があります。これは「メールを送信するためのアクセス権」がない場合に発生します。設定により、権限を「すべてのメール」に変更します。

1.検索窓で「送信」を入力
2.メールメニューの「送信」を選択

図2 メールのアクセス権の設定(1)
【図2 メールのアクセス権の設定(1)】

3.アクセス権で「すべてのメール」を選択

図3 メールのアクセス権の設定(2)
【図3 メールのアクセス権の設定(2)】
【図4】メールのアクセス権の設定(3)
【図4】メールのアクセス権の設定(3)

社内 野の花画伯から その2

紫陽花。6月の梅雨にピッタリの花です。

万葉集にも詠まれている歴史の古い花。原産地は日本。
江戸~明治時代にヨーロッパに渡り、西洋アジサイとして
逆輸入されました。

従来は青系とピンク系が主流でしたが、現在は白のアジサイや
ピラミッド形のカシワバアジサイなどがあります。
ガクアジサイは額に囲まれているように見えるので、
ガクアジサイと呼ばれています。

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に関する資格を取りたいな~と思っているので、受験の合否に関わらず勉強方法などを書いていけたらと思います。

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