KanaLog~かなさんのSalesforce関連ログ~

自称「Salesforceキャンペーン芸人」のKanaさんの活動記録です。Salesforce Developer Group TokyoとService Cloud Trailblazersに運営として参加しています。

Dreamforce to You 2020 Global Gathering, Tokyoで登壇しました

2021年1月22日(金)に開催された「Dreamforce to You 2020 Global Gathering, Tokyo」で久々に登壇しました。

trailblazercommunitygroups.com

 

内容は「Dreamforce to You 2020 試聴したセッションの概要紹介」で、資料は以下のリンクで公開中です。

drive.google.com

普段は有料で現地に行かないと見られないDreamforceのセッションが、今回はネットで見放題。皆さんもぜひご視聴下さい。

 

●直近のイベント紹介

次の土曜日、2021 年 1 月 30 日にはSalesforceのコミュニティが主催する「Japan Dreamin'」が開催されます。

セッションは日中(14:00 - 18:00 )で、懇親会もあります(18:00 - 20:00)ので、ぜひご参加ください。

www.japandreamin.com

Safe Navigation Operatorを試してみた

SalesforceのWinter'21でリリースされた「Safe Navigation Operator」が気になったので

試してみました。

 

●Safe Navigation Operatorとは

・Apexの新機能

  C#,Swiftなどの他言語では同等の機能が既に存在する

・nullチェックのネストが深くなるのを防ぐもの 

 要素のnull判定を行い、nullの場合はnullを、nullでない場合は指定した値(ただし判定した要素に含まれるもの)を返す

 

● 試してみた

開発者ガイドを基に以下のApexクラス・メソッドを作成し、開発者コンソールの匿名Windowから実行させました。

f:id:endoukanako:20201208001944p:plain

 

実行結果は以下の通り。

・subMethod1の1回目と2回目の実行結果の戻り値はnull

・subMethod1の3回目の戻り値は取引先の取引先名(Name)になった

・subMethod2の戻り値はnull

・subMethod3の戻り値は取引先責任者の名字(LastName)

f:id:endoukanako:20201208002036p:plain

 

なお、subMethod2のようなSOQL文において、戻されるレコードが複数件あると実行エラーが発生しました。戻されるレコードが1件以下になるよう、注意が必要です。

f:id:endoukanako:20201208003249p:plain

 

●想定される使い方

開発者ガイドでは以下の4ケースが挙げられています

1.メソッド・変数・パラメータのチェーン

 オブジェクトやクラスなどのトップレベル要素のnull判定を行い、nullでない場合にメソッド・変数・パラメータを返す

2.キャストなどの括弧

 内括弧においてキャスト結果をnull判定してnullでない場合にキャスト後要素の子要素を返す

3.SObjectのチェーン

 SObjectの参照項目null判定を行い、nullでない場合に参照項目の項目を返す

 (例)取引先責任者の取引先が設定されている場合、取引先の請求先住所を返す

4.SOQLクエリ

SOQLクエリにおいて、返されるオブジェクトがない場合にはnullを返し、返されるオブジェクトが存在する場合にはオブジェクトの特定の項目の値を返す

 (例)指定した取引先責任者が存在する場合、取引先責任者の名字を返す

 

●注意事項

・「Trigger.new」や「静的な変数・メソッド」など使えない場合がある

 開発者ガイドの下部に説明がありますので、利用前に必読です

 

 

●結論

・Safe Navigation Operatorを使えば文字数やステップ数を削減できる!

 特に、オブジェクトのnullチェックしてから「項目を参照」の処理を簡略化できそうなので、早速使ってみたいと思います。

 

【参考資料】

Salesforce Winter ’21 Release Notes

Apex Developer Guide

 

この記事は「Salesforce Platform Advent Calendar 2020」のエントリー記事です。

qiita.com

 

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

developer.salesforce.com

 

【解決済み】Trailheadで新しいPlaygroundが作成出来なかった件

Trailheadで新しいPlaygroundが作れなかったので、その時の状況・解決策・問題点・経過などをメモとして残します。
 
●状況
・勉強のため、久々に新しいPlaygroundを作ろうとしたら、作れなかった(「Playgroundを作成」リンクが無効になっていた)
Playgroundの作成数は10未満であり、作成上限に至っていない
 
●解決策
・接続済み組織の数を10未満にする
上記の条件を満たすことで「Playgroundを作成」リンクが有効化され、リンクより新しいPlaygroundが作成されることを確認
 
●問題点
・接続済み組織の数が10を超えると再び新しいPlaygroundが作れなくなる(「Playgroundを作成」リンクが無効になる)
接続済み組織の数が10を超えていても、別の組織を接続することは可能。
 
●経過
1.Trailheadのhelpに該当の記事「Can’t Create a New Trailhead Playground」があったのですべて試す。効果なし。
2.Trailheadのhelpからケースを作成。
3.Trailheadのサポートから回答のあった「接続済み組織を減らす」を実行。
 いくつまで減らすのか指定がなかったため、接続済み組織を1つずつ減らして確認。
 GS0やDeveloperを含め21組織ほど接続していたが、接続してる組織数が10未満になった時にようやく「Playgroundを作成」リンクが有効化された。
4.有効化された「Playgroundを作成」リンクをクリック。
 新しいPlayground作れることを確認。

【ブログ投稿キャンペーンエントリー記事】Lightning Web コンポーネントの学習方法について

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

developer.salesforce.com

 

家にいると勉強がはかどらないタイプ。かなさんです。

ブログ投稿キャンペーンの第2弾が発表され、「よし、3つぐらい投稿しちゃうぞ~」と思ってたはずなのに気が付いたら月末でしたorz

 

自身のおさらいも兼ねて、「Lightning Web コンポーネント開発のオススメの学習方法」を書こうと思います。

 

1.開発ツールを入れよう

残念なことに、開発者コンソールではLightning Web コンポーネントの作成・編集ができません。学習のために、開発に必要なSalesforce CLIVisual Studio Code拡張機能を入れましょう。

Trailheadのプロジェクト「クイックスタート: Lightning Web コンポーネント」にインストール・設定手順が記載されていますので、手順に従って設定しましょう。

なお、先日発表された「Salesforce Code Builder」が使えるようになればこの作業は不要になります。早期のリリースを期待したいところです。

※簡単な機能の確認だけであれば「Lightning Web Components Playground」で可能です

 

2.作り方を知ろう

Trailheadのプロジェクト「Lightning Web コンポーネントの基本」で、Lightning Web コンポーネントの概要や作り方を知りましょう。

必要となるHTML、JavaScriptCSS の解説はないため、別途学習が必要です。

 

3.SAMPLE GALLERYを活用しよう

Lightning Web コンポーネントのサンプルを集めた「SAMPLE GALLERY」を活用しましょう。

プロジェクトをクリックするとGithubに飛び、ソースを確認することができます。

また、Salesforceにその資材をコピーしてどのように動いているのか見ることができます。

かなさんの一押しはなんといっても「LWC Recipes」!

同じような資材にちょっとずつコードが加わっていき、だんだん機能が増えていくのでとても勉強になります。

最近フォーカスされたプロジェクト「Quick Start: Explore the LWC Recipes Sample App」も増えたので、ぜひチャレンジしてみてください。

trailhead.salesforce.com

 

4.ガイドやレファレンスを読もう

「Lightning Web Components Dev Guide」にはLightning Web コンポーネントの概要からテスト、関連のレファレンスまで幅広い情報が記載されています。

量が多いので、気になる箇所から読んで徐々に読み進めていくのもありです。

「Component Reference」にはLightning Web Componentsのコンポーネントはもちろん、Auraのコンポーネントの情報も記載されています。

自作する前に使えるコンポーネントがないか、必ず確認しましょう!

developer.salesforce.com

 

5.オリジナルのコンポーネントを作ろう

ぜひ、オリジナルのコンポーネントを作ってみましょう。

難しく考えず、サンプルを修正したものでOKです。

自分の考えたものを実装し、動かしてみるのが一番勉強になります。

 

 

●最後に

Lightning Web コンポーネントが気になっているのなら、まずはやってみましょう!

最初はちょっと戸惑うかもしれませんが、慣れれば意外と大丈夫だったり、困ったら相談に乗ってくれるベテラン勢がいたりします。

さあ、あなたも今日からLet'sチャレンジ!

Trailheadスキルアップキャンペーンが開催されます

外出もままならない中、皆さまいかがお過ごしでしょうか。

ずっと家にいるけど、Trailheadで勉強するにもなかなかやる気が出ない。。。

 

そんなあなたに朗報です!

「Trailheadスキルアップキャンペーン」が開催されることになりました。

 

●キャンペーンの概要

チャレンジを達成した対象者が応募を行い、抽選でアストロの傘などの素敵な景品がもらえるものです。

 

●期間

2020 年 5 月 1 日午前 0 時から 2020 年5 月 31 日午後 11時59分

 

●対象者

対象者は「日本在住」で「20歳以上」の「Salesforceユーザ」で、スポンサーとその関係者、および、政府関係者でない人となります。

※応募対象者の詳細は以下のTrailblazer Communityの投稿にある「公式ルール」を参照ください(リンク先はログインが必要です)

https://success.salesforce.com/_ui/core/userprofile/UserProfilePage?u=0053A00000DbrkI&tab=sfdc.ProfilePlatformFeed&fId=0D53A00004fboT5

 

●チャレンジを開始する前に

達成日時などを映したキャプチャーが要求されます。

泣きを見る前に「キャンペーン詳細資料」を確認しましょう。

※以下のTrailblazer Communityの投稿にある「キャンペーン詳細資料」を参照ください(リンク先はログインが必要です)

https://success.salesforce.com/_ui/core/userprofile/UserProfilePage?u=0053A00000DbrkI&tab=sfdc.ProfilePlatformFeed&fId=0D53A00004fboT5

 

●チャレンジについて

チャレンジは1~4まであり、1つ達成するごとに応募できます。

また、チャレンジクリアをTrailblazer Communityで投稿することでチャレンジ毎にもう1つ。

なんと、1人につき8回まで応募できます(公式ルール参照)

 

●チャレンジの内容

以下の1~4です。いずれも期間中に達成する必要があります。

また、4はユーザに条件があるため注意が必要です。

1.「EXPLORER」ランクになる

2.「RANGER」ランクになる

3."テレワーク・リモートワークに役立つTrailmix”をクリアする

 https://trailhead.salesforce.com/ja/users/kotsuka/trailmixes/remotework-trailmix

4.目的別Trailmixクリアする(以下いずれか)

 4-1.営業・マネージャー向けSalesforce活用促進支援 <<営業職の方限定>>

  https://trailhead.salesforce.com/users/dnakagawa1/trailmixes/trailmix-salesmanager

 4-2.初級管理者&推進者向け <<管理者・推進者の方限定>>

  https://trailhead.salesforce.com/ja/users/keikoniimi/trailmixes/adminlex

 4-3.はじめよう、Service Cloud <<Service Cloudユーザーの方限定)

  https://trailhead.salesforce.com/ja/users/hiroki-omori/trailmixes/lets-start-service-cloud

 4-4.Pardot管理者向け <<Pardot管理者の方限定>>

  https://trailhead.salesforce.com/ja/users/ykawagoe/trailmixes/learnpardotinjapanese

 

●応募方法

フォームから応募になります。

1項目達成用と複数項目達成用の2種類が用意されています。

 ・チャレンジ1項目クリア用 応募フォーム https://sfdc.co/StayHomeTrailheadSingle

 ・チャレンジ複数項目クリア用 応募フォーム https://sfdc.co/StayHomeTrailheadMulti

また、チャレンジを達成したら、Trailblazer communityに投稿しましょう。ハッシュタグ(#ステイホームTrailhead #sweepstakes)も忘れずに!

 

●最後に

スキルアップして、運が良ければ景品もGet!

皆さんもぜひチャレンジしてみてください。

Salesforce Spring'20の新機能を試してみました!

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

 

久々に日本限定のキャンペーンが開催され、自称Salesforceキャンペーン芸人としては参加せざるを得ない、かなさんです。

 

この機会に、気になっていたけどまだ試せていなかった「Salesforce Spring ’20 の新機能」に挑戦してみました!

 

 ●注目の新機能「SOQLクエリの権限チェック」

「SOQL クエリの WITH SECURITY_ENFORCED を使用した項目およびオブジェクトレベル権限チェックの有効化 (正式リリース)」

Salesforce開発者のみなさまはご存知と思いますが、Apex はシステムコンテキストで実行されるため、すべてのオブジェクトと項目にアクセスできます。

そのため処理の前に実行ユーザが対象のオブジェクト、および、項目に必要な権限があるのかチェックする必要があるのですが、それが結構手間だったりします。

そのため、「 WITH SECURITY_ENFORCED」でチェックを省力化できるならと大分期待を寄せていました。

 

●検証のために行ったこと

確認用の項目を作成し、取得するSOQL(Apex)と表示用のVFを作成しました。詳細は1.~5.を参照ください。(結果だけ見たい人は次の●へ進んでください)

1.オブジェクトにカスタム項目「権限確認用項目」(C_Item_T_TestItem__c) を作成し、標準プロファイルは参照不可とした

2.Apexを作成

f:id:endoukanako:20200323000450p:plain

3.VFを作成

f:id:endoukanako:20200323000514p:plain

4.VFのカスタムタブを作成

5.アクセス権限のない、標準プロファイルユーザで動作確認

 

●結果

1.SOQLで取得する項目にアクセス権限がない項目が含まれる場合(VFの「データ取得」ボタンを押下し、ApexのgetAccountListを実行した結果)

⇒想定通り、エラーになりました。アクセス権のない項目は取得できません!

f:id:endoukanako:20200323002551p:plain

 

2.SOQLのWHERE句にアクセス権限がない項目が含まれていてる場合(VFの「データ取得2」ボタンを押下し、ApexのgetAccountList2を実行した結果)

⇒想定に反し、アクセス権のない項目で絞り込まれたデータが取得できてしまいました・・・。

f:id:endoukanako:20200323002708p:plain

 

開発ガイドに「WITH SECURITY_ENFORCED を使用できるのは、SELECT および WHERE SOQL 句に限られます」と記載があり、WHERE句では使えると思ったのですが、

英語版に切り替えてみたところWHERE句で使えるかどうか非常に怪しい感じでした(英語力のある方誰かお願いします)。

 

●まとめ

SOQLで項目およびオブジェクトのセキュリティをチェックする「WITH SECURITY_ENFORCED」は、現時点では使いどころが限られる機能であることが分かりました。

今後改良されて、将来的にはSOQLでのセキュリティチェックは「 WITH SECURITY_ENFORCED」を付けるだけでOKになってくれると良いなと思います。

Japan Dreamin'に参加してきました

2020年1月25日(日)にAbema Towersで開催された「Japan Dreamin'」に参加してきました。

www.japandreamin.com

  

イベントは朝の10時から開催されていたのですが、家の都合で朝から行くことは難しく、ランチセッションから参加しました。

5つのトラックがあり、同時に気になるセッションが行われていて、どのセッションを聞こうかかなり迷いました。

最終的に、以下のセッションと懇親会に参加しました。

 

●各セッションと懇親会の感想

・パートナーとのビジネスを広げるmy Trailhead for Partner Community

 ご飯を食べながら聞く形式のセッション。my Trailheadのコンテンツは簡単に作れるものの、クイズは選択式のみ、社員とパートナーの両方には公開できない、コンテンツは個人ごとの管理で共有が大変(Zipで固めて送る)などの弱点が判明。これからの改良が待たれるところです。

 

・【アドミン/デベロッパー向け】ハンズオンで学ぶ!テクニカルアーキテクト体験ワークショップ

 デモシナリオを基にオブジェクト構成図をまずは個人で作成し、次にペアで話し合い、最後に4人で話し合ってまとめて最終版を作成し、投稿するというワークでした。
 標準オブジェクトを使うのかカスタムオブジェトにするのか、オブジェクトの関連を主従にするのか参照にするのか、アクセス権をどうするのか、どの情報をまとめてどの情報を分けるのかなど、迷うポイントがいっぱいありました。

 この悩むポイントは実務で悩むポイントとほぼ同じなので、もっと早く決定できるようになりたいと思います。

 また、人によって同じシナリオでも出来上がる構成図が違い、その考えを聞くことで違う視点に気づくことができました。

 

・LEX Mobileから紐解くSalesforceモバイル史

 途中から聴講。昔はimodeでSalesforceモバイルを動かすAppExchangeがあったものの、画面が狭いという問題点が。
 最新のLEXモバイルではLightning ページの種類に電話ができて、より簡単にカスタマイズできるようになり、使い勝手も向上しました。

 

・これで差がつく!プレゼン資料の作り方

 あえて全くSalesforceの話をしないというセッション。昨年からプレゼン資料の作り方で悩んでいたので迷わず参加しました。

 「読むことは書かない」「スライドは説明を補足するもの」という、知ってはいるものの出来てはいない資料作りのポイントをよい資料と悪い資料の対比でとても分かりやすく説明。

 また、「フォント」「カラー」「スパン」「アニメーション」の4つのキーワードをもとにやった方が良いポイントを端的に紹介。

 更に、参加者限定の上記の内容を満たすテンプレート配布まであり、最高でした!

 これからは「あれもこれも目立たせることはなにも目立っていない事と同じである。」という名言を胸に刻んで資料作成を行おうと思います。

 

・【誰でも参加可能】Trailhead バッジソン大会!

 参加する予定はなかったのですが、気が付いたら現場に連行されていました←

 とはいえ、最近Trailheadをあまりやれておらず、バッチを取得する良い機会になりました。時間内で何とか4バッチを取得し、景品までいただきました。

 

・チームSCTBのService Cloud王は俺だ!!

 アシスタントとしての参加し、クイズを盛り上げました。

 クイズには「Enterprise Editionのライセンス料は?」といった初級問題から、「Field Service Lightningのパッケージの提供元で最近買収された会社の名前は?」というマニアックな問題まで出題されました。

 9名の熱き戦いの結果、初代クイズ王はTeamspiritの畑本さんに決定しました!

f:id:endoukanako:20200126005630j:plain

 

・Closing Keynote

「コミュニティはとても大事ですごく力がある」ということが語られました。また、参加者にも「自分にとってのコミュニティ」についてコメントが求められ、短いながらコメントさせていただきました。

コメントしたお礼として「Hootie」(Salesforce Academyのフクロウキャラクター)のぬいぐるみをいただきました!これは、そろそろアストロからHootieになるっきゃないですね。

f:id:endoukanako:20200126010004j:plain

 

・懇親会

スポンサーによるLTを聞きつつ、飲んだり食べたり話したりしながら新旧の知人と交流を深めました。

また、豪華景品をかけたクイズもあり、「サンフランシスコのohanaフロアの階数」や「ベニオフの年齢」という頻出問題もあったのですが、全く分からず。 次回に備えて調べておこうと思います。

 

●まとめ

今回も大いに楽しみ、様々な人と交流することができました。

次回はそろそろ賑やかしからスピーカーやボランティアにシフトしていきたいと思っていたり。

では、またどこかのイベントか来年のJapan Dreamin'で会いましょう!