Lighntingアプリケーションビルダーのアプリケーションページと標準コンポーネントについてです。
Lightningコンポーネントを配置して使用できるページを作成する機能です。標準コンポーネントの利用も可能ですが、タブやアコーディオンメニューなど一部の標準コンポーネントの配置はできないようです。
Lighntingアプリケーションビルダーのアプリケーションページと標準コンポーネントについてです。
Lightningコンポーネントを配置して使用できるページを作成する機能です。標準コンポーネントの利用も可能ですが、タブやアコーディオンメニューなど一部の標準コンポーネントの配置はできないようです。
"この記事は Salesforce 開発者向けブログキャンペーンへのエントリー記事です。"
Spring'20の新機能 - Apexの新規および変更された項目を試してみました。
Auth 名前空間とReports 名前空間のやつはよくわからないのでスキップ。
新しく追加されたのは下記の機能です。
項目の sObject 結果の記述を取得し、子リレーションを読み込むか、またはパラメータ値に基づかないかを決定する
Schema.SObjectType クラスの新しい getDescribe(options) メソッドを使用します。
詳細はApex開発者ガイドに記載がありました。
パラメータ値は、組織スキーマの重要な更新の改善されたキャッシュを有効化すると共に、記述操作の要素の読み込み方法を決定します。
SObjectDescribeOptions.FULL を使用して、用途メソッドの呼び出し前に、子リレーションを含む記述のすべての要素を一括で読み込みます。この記述は、必ず完全に一貫した結果になります。これは、記述オブジェクトが別の名前空間、API バージョン、その他の Apex コンテキストに渡されて、記述属性の生成時に異なる結果になる可能性がある場合でも同様です。
子リレーションの遅延読み込みを行うには、SObjectDescribeOptions.DEFERRED を使用します。これは、メソッドの最初の呼び出し時に一部の子リレーションが読み込まれないことを意味します。
SObjectDescribeOptions.DEFAULT を使用して、API バージョンに応じて、デフォルトが一括読み込みと遅延読み込みのいずれかになるようにします。
処理の書き方はこんな感じ。
// FULL Schema.DescribeSObjectResult result1 = Schema.Opportunity.SObjectType.getDescribe(SObjectDescribeOptions.FULL); System.debug(result1); // DEFERRED Schema.DescribeSObjectResult result2 = Schema.Opportunity.SObjectType.getDescribe(SObjectDescribeOptions.DEFERRED); System.debug(result2); // DEFAULT Schema.DescribeSObjectResult result3 = Schema.Opportunity.SObjectType.getDescribe(SObjectDescribeOptions.DEFAULT ); System.debug(result3);
実行した結果はこんな感じ。情報量が多すぎてよくわからず。
戻り値のDescribeSObjectResult クラスでできることを確認してみました。
例えばfieldsの場合はgetMapと組み合わせて使うと記載があるのでこんな感じ。
// FULL Schema.DescribeSObjectResult result1 = Schema.Opportunity.SObjectType.getDescribe(SObjectDescribeOptions.FULL); System.debug(result1.fields.getMap()); // DEFERRED Schema.DescribeSObjectResult result2 = Schema.Opportunity.SObjectType.getDescribe(SObjectDescribeOptions.DEFERRED); System.debug(result2.fields.getMap()); // DEFAULT Schema.DescribeSObjectResult result3 = Schema.Opportunity.SObjectType.getDescribe(SObjectDescribeOptions.DEFAULT ); System.debug(result3.fields.getMap());
fieldsで使い方のイメージがついたところで子リレーションが関係していそうな処理を探してみると..ありました。
取引先オブジェクトを対象に実行してみると
// FULL Schema.DescribeSObjectResult result1 = Schema.Account.SObjectType.getDescribe(SObjectDescribeOptions.FULL); System.debug(result1.getChildRelationships()); // DEFERRED Schema.DescribeSObjectResult result2 = Schema.Account.SObjectType.getDescribe(SObjectDescribeOptions.DEFERRED); System.debug(result2.getChildRelationships()); // DEFAULT Schema.DescribeSObjectResult result3 = Schema.Account.SObjectType.getDescribe(SObjectDescribeOptions.DEFAULT ); System.debug(result3.getChildRelationships());
オプションは指定できていますが、実行結果の違いはよくわからず。
使い道はわかりませんでしたが、getDescribeで新しく追加されたオプションの指定方法はこんな感じで宣言できるみたいです。
System名前空間で追加されたのは下記の機能です。
ページ URL リダイレクトを制御するリダイレクトコードの指定
PageReference クラスの新しい setRedirectCode(redirectCode) メソッドを使用して、301、302、303、307、308 の redirectCode を指定します。新しい getRedirectCode() メソッドは、PageReference redirectCode を返します。List コレクション型の文字列表現の取得
System.List クラスの新しい toString() メソッドを使用します。Map コレクション型の文字列表現の取得
System.Map クラスの新しい toString() メソッドを使用します。Set 型の文字列表現の取得
System.Set クラスの新しい toString() メソッドを使用します。
setRedirectCode(redirectCode) メソッドが追加されたそうです。これでリダイレクトコードというのを取得できるようになったみたいです。
処理の書き方はこんな感じ。
PageReference pageRef = new PageReference('http://www.google.com'); pageRef.setRedirectCode(301); System.debug(pageRef.getRedirectCode());
詳細はこちら。
ListとMapとSetで使えるようになった新機能です。使い方のイメージが付きやすかったので開発者ガイドはノーチェックですが、こんな感じ。
// List Class List<String> sample1 = new List<String>{'サンプル1', 'サンプル2', 'サンプル3'}; String result1 = sample1.toString(); System.debug(result1); // Map Class Map<String, String> sample2 = new Map<String, String>(); sample2.put('key1', 'value1'); sample2.put('key2', 'value2'); sample2.put('key3', 'value3'); String result2 = sample2.toString(); System.debug(result2); // Set Class Set<String> sample3 = new Set<String>{'サンプル4', 'サンプル5', 'サンプル6'}; String result3 = sample3.toString(); System.debug(result3);
Mapとかどうなるのかなと思いましたが、KeyとValueと両方がそのままString型になりました。リスト型やセット型はString型以外の場合にどう変換されるかはまたの機会に確認しようかなと思います。
Spring'20の新機能 - Apexの新規および変更された項目はだいたいこんな感じでした。知らなくても特に困らないですが、知っておくと役立つ機会があるかもしれない感じの機能という印象でした。
フォローアップToDoボタンの機能を試してみました。
SalesforceのToDo機能は自分のやることリストを管理する上で便利な機能です。
ToDoによっては作業実施後に次のタスクが発生する場合があります。発生時に既存のToDoの期間を延ばしてコメント欄に作業を追加していくと、タスクが終わらなくて延期されている場合と混ざってしまい、実施した作業の集計がしずらくなってしまいます。
ToDoタブなどから新規作成しても良いのですが、フォローアップToDoボタンをクリックするとページ遷移をせずに次のToDoの登録が可能です。
こんな感じの入力欄となります。
登録結果はこちら。
新規ToDo作成時にページ遷移の手間を無くして作成するための機能となります。元のToDoとのリレーションは特になさそうでした。またこのボタン自体はグローバルアクションの設定で定義済み項目を指定するなどのカスタマイズもできないようです。
聞いた話でWinter'20のリリースから。セキュリティアラートページでも通知されていたというサイトゲストユーザの更新権限除外の話のその後です。
経緯とか概要はこちら。
サイトゲストユーザの役割ですが、Force.comサイトやCommunity Cloudで構築された外部向けのWebサイトを未ログイン状態で利用する際に裏側の仕組みとして用意されているユーザとなります。
このサイトゲストユーザは今まで更新権限を付与することが可能でしたが、今回その権限の付与が不可になることになったみたいです。タイミングとしては当初3月1日の予定でしたがVisualforceメールテンプレートの機能に予期せぬ影響が見つかったため、3月末までに延期されることとなっています。また、サポートに申請することでSummer'20のリリース日まで延期することが可能です。(申請しなくてもSummer'20リリースまでは手動でオフに戻すこともできるとのこと。)
サイトゲストユーザの更新権限の用途ですが、Webフォームに用意する処理で下記のようなケースがあるかなと思っています。
・新規顧客の問い合わせの場合は取引先と取引先責任者をSalesforceに登録処理(INSERT)を行い、既存顧客の問い合わせは更新処理(UPDATE)を行う。(メールアドレスなどで判別)。重複データの作成を防止したりデータを適切な形で自動で最新化する。
Webフォーム受付時に新規顧客の場合は担当営業を特定の条件で自動割り当てして所有者として登録する。処理後にユーザオブジェクトのカスタム項目に保持した項目更新して連続でアサインされることを防止する。
↑例えばのサンプルですがざっくりこんな用途で更新権限が必要になると思います。
今回の変更により、共有ルールの設定は引き続き可能ですが、更新権限の付与はできなくなるため、UPDATE処理は実行できなくなります。
この仕様変更ですが、影響を受ける組織が多いのではと勝手に思っていて、直前になって無くなるのでは...とすら考えました。とはいえそれで本当に有効化された場合、有効化直後からWebフォームがクラッシュする状況になるという最悪な事態となるため、サポートに問い合わせをしました。
簡潔にまとめると下記のような質問。(実際はいろいろ聞いた。)
更新権限付与の代わりの方法が無いので場合によってですが既存の機能は破棄する必要がでてきます。それによって業務フローの変更が必要になる場合も発生します。影響範囲が大きい箇所で既存機能を破棄するなどの改修後にやっぱり中止となったら困るということもあり本当に無くなるんですかという確認をしました。
結論としては、サイトゲストユーザの更新処理は完全にできなくなる認識で問題ないことと、影響を受ける組織があるのは認識した上でセキュリティ向上のため必要な変更で、現時点で中止になる可能性は無いとのことでした。
サポートの方からの正式な回答を頂き、Summer'20から適用されることを確認することができました。元々既存の機能への影響の有無などは考慮済みの決定だったとも思います。ということでサイトゲストによる更新処理を行っている場合は、更新処理を使わない形に改修しておくと良いと思います。(もしかすると、そもそもサイトゲストユーザでUPDATE処理してるところって無いかもしれませんが)
Sandboxのマスキング機能 - Salesforce Data Maskについてです。Dreamforce2019で公開された新機能だったのですが、Spring'20で利用可能になりました。
Dreamforce2019時点では利用方法などの詳細な情報は特になったと思いますが先日TwitterでSpring'20から利用可能になる通知を見かけました。
#Sandbox を作成する際に、 #SalesforceDataMask を利用する事でデータの項目値を予め指定したルールで自動的にマスクできるようになりました。機密情報を含む組織での Sandobox 作成時に利用しましょう。
— Salesforce Developers Japan (@SalesforceDevJP) 2020年3月4日
▼リリースノートで確認https://t.co/O6m5ivQ5in#salesforce #Spring20新機能紹介 pic.twitter.com/gLNz2anhXD
リリースノートを見たところ、パッケージをインストールすれば使えそうな雰囲気だったのですが、Twitterで教えてもらった情報で、こちらの機能はアドオン形式で提供される製品とのことです。
ちなみにパッケージのインストールについてはこちらのヘルプで紹介されています。インストール後に権限セットで利用権限を付与するタイプのおうです。
Help | Training | Salesforce
Lightningページのモバイル設定を試してみました。
Lightningページはデバイスごとに設定を切り替えることができます。共通のページを利用する場合でもある程度最適化されますが、切り替えたほうが便利です。
例えばPC版でタブによる管理をしていた場合です。
モバイルアプリでアクセスするとデフォルトではタブのみが表示された状態となります。(コンパクトレイアウトで数項目は表示されますが)
詳細ページにアクセスするにはタブメニューから対象のタブを選択して初めてアクセス可能になります。
この問題はモバイル専用のページを用意することで解決できます。
まずは新規Lightningページの作成を行います。既存のページをコピーすると作業が楽になるかもしれません。はじめにテンプレートを選択します。スマートフォン用に用意する場合は1つの範囲を選択すると良いと思います。
あとは表示したい情報を配置していくためです。モバイルの場合はアコーディオンメニューをつかって配置すると便利ではないかなと思っています。
基本は詳細の情報を見ることが多いと思いますが、関連リストやChatterを表示したいときに他の情報を非表示にすることができます。タブと違いページ遷移ではないので待ち時間が発生している感覚にはなりづらい気がしました。
ページの作成ができたらモバイルの利用として割り当てを行います。
これでPC版とモバイル版の2つのLightningページの設定ができました。
この設定後にモバイルアプリからアクセスするとこのように表示されます。
アコーディオンメニューで気持ち残念だったのは最低一つはオープンにしておく必要があります。そのため、他のメニューの情報を表示したいときに今見ているメニューを閉じてスクロールするといった使い方はできないみたいです。(開いたままスクロールする必要がある。)
アプリケーションマネージャのアプリケーション設定ページでタブの並び順などの設定変更が可能ですが、ページ切り替え機能があったことを知ったので試してみました。
最新参照したページ?が選択候補として表示されていますが、基本的には新規ページをクリックして対象ページを探します。
対象ページを選択して開くをクリックすると選択したページの設定画面に移動できます。
この機能は組織に割当している既存のLightningページの設定ページではなくアプリケーションごとに割り当てを行うLightningページを用意するための機能のようです。