読者です 読者をやめる 読者になる 読者になる

tyoshikawa1106のブログ

- Force.com Developer Blog -

SFDC:Lightning Design Systemで過去バージョンのサンプルコードを確認する方法

Lightning Design Systemは日々アップデートが行われ新しいコンポーネントが追加されたり、サイト内の検索機能が便利になったりしています。
f:id:tyoshikawa1106:20170525222345p:plain


とても便利なのですがアップデート後にサイトのレイアウトが変更されたりすると、あのときのコードはどこから確認すればいいんだろう..という感じになることがあります。
f:id:tyoshikawa1106:20170525222421p:plain



無理言ってるのはわかっているのですが正直過去のサイトにアクセスしたい・・・と思った所、こちらアクセスする方法が用意されていました。Archivesのリンクからサイトのバージョンを切り替えることが出来ます。
f:id:tyoshikawa1106:20170525222653p:plain


たとえばv2.2.2のサイトです。
f:id:tyoshikawa1106:20170525222807p:plain


過去のサイトデザインで過去バージョンのサンプルコードにもアクセスできます。
f:id:tyoshikawa1106:20170525222855p:plain


すべてのバージョンをサポートしているわけではありませんが、0.12.2というすごく前のバージョンのサイトにもアクセスできました。
f:id:tyoshikawa1106:20170525222954p:plain


ここまでサポートされているとは考えても見なかったのですが、本当にすごいと思います。

SFDC:Lightning Experienceのルックアップ機能をより便利にする方法

Lightning Experienceのルックアップ機能は入力した内容に応じて候補をパッと表示してくれる便利な機能です。
f:id:tyoshikawa1106:20170525210947p:plain


その候補の一覧ではName項目の値とは別にもう一つの項目の値を表示してくれています。同じName値のときにどちらを選べばいいかの判断に利用したいので表示内容をカスタマイズできないかなと思っていました。


先日Lightning Experienceウェブセミナーで質問できる機会があったので聞いてみた所、こちらオブジェクトの検索結果設定の二つ目の項目の値が表示されるそうです。
f:id:tyoshikawa1106:20170525211129p:plain


試しにメール項目を二つ目に持ってきた所・・・
f:id:tyoshikawa1106:20170525211645p:plain


なぜか表示に反映されませんでした。。ただ他の組織と比較しても間違いなく検索結果の2つ目項目が表示されていました。そこで別の項目を試してみたところ・・・
f:id:tyoshikawa1106:20170525220021p:plain


今度は無事に反映されました。
f:id:tyoshikawa1106:20170525220115p:plain


取引先名や電話項目は表示できてメール項目は表示できなかったので、もしかしてテキスト項目のみのサポートかなと思ったりしたのですが日付項目も問題なく表示されました。
f:id:tyoshikawa1106:20170525220320p:plain


所有者などのルックアップ項目も問題ありません。
f:id:tyoshikawa1106:20170525220431p:plain


すべてのデータ型を試してはいないのですがひとまずメール項目は2つ目に指定しても私の環境では表示されませんでした。(表示されない原因は別の理由の可能性もありますが...)


最後に一番気になっていた数式項目の表示は可能か試してみましたのですが、こちら問題なく表示することができました。
f:id:tyoshikawa1106:20170525221034p:plain

f:id:tyoshikawa1106:20170525221817p:plain


数式項目の表示が可能ということで表現の幅が大きく広がりそうです。例えば法人/個人で取引先責任者情報を管理している場合、レコードタイプ名+他項目みたいな形で出したりすると誤って別のレコードタイプのデータを指定するミスを回避できると思います。ルックアップの候補一覧の横幅に上限はあるようですのであまり長くならないように配慮は必要そうです。

SFDC:LEXダッシュボードでグラフの高さが動的に変わるときの対応方法

Classicで作成したダッシュボードをLEXで利用するときに考慮しておくことの1つで、グラフの高さが動的に変わるときの対応方法についてです。
f:id:tyoshikawa1106:20170525202110p:plain


Classicで作成したダッシュボードをLEXで表示したところ、グラフの内容に応じて高さが動的に変更されました。
f:id:tyoshikawa1106:20170525202555p:plain


大きな問題ではないのですが、できるだけ多くのグラフを表示したいときに少し困るかも・・と思っていたところ、こちら一度編集して保存することで解決するみたいです。


まずLEX専用としてダッシュボードをコピーします。
f:id:tyoshikawa1106:20170525202830p:plain


コピーした時点ではまだ高さは自動で変更されます。
f:id:tyoshikawa1106:20170525202926p:plain


ここで編集ボタンをクリックして編集モードに切り替えます。
f:id:tyoshikawa1106:20170525203031p:plain


それを保存すると高さが固定の状態で表示されるようになりました。
f:id:tyoshikawa1106:20170525203209p:plain


ちなみにグラフの高さに対して表示領域が少ない場合はスクロール機能で見えない部分の内容も確認できるようになっています。
f:id:tyoshikawa1106:20170525203416p:plain


コピーしただけではダメで一度編集モードにして保存することで高さが固定化されるようです。今回の対応方法ですがLightning Experienceウェブセミナーで質問しみたところ対応方法を教えてもらい解決しました。

SFDC:ハイパーリンク数式項目の JavaScript の確認の対処方法について

ハイパーリンク数式項目での JavaScript 使用の段階的な廃止されるそうです。

f:id:tyoshikawa1106:20170523005717p:plain

変更の背景

Salesforce は信頼を最大の価値としており、中でも製品のセキュリティは信頼の鍵となる部分です。Salesforce では、ハイパーリンク数式項目における JavaScript の利用によって悪意のあるコードの実装が可能であることを発見し、セキュリティの潜在的脆弱性に繋がると判断したため、今回の変更を決定しました。

Salesforce は、段階的なアプローチによって、ハイパーリンク数式項目での JavaScript の実行をブロックします。なお、対象となる項目は、先頭に「javascript:」の文字列があるカスタムハイパーリンク数式項目と定義されています。

Spring '17 リリースの時点で、システム管理者は、JavaScript を含むハイパーリンク数式項目を作成できなくなっています。JavaScript を削除する場合を除き、JavaScript を含む既存の項目の編集・保存が行えなくなりました。

Summer '17 リリースでは、重要な更新コンソール (CRUC) 設定が導入され、システム管理者はこの設定を有効にすることによってハイパーリンク数式項目での JavaScript の実行ブロックを選択できます。

Winter '18 リリース** では、段階的なアプローチの最終フェーズとして、ハイパーリンク数式項目で JavaScript を実行できなくなります。

現時点では 2017 年 10 月を予定していますが、変更される可能性もあります。

管理者側で対応が必要な作業

重要な更新を有効にする前に、Salesforce 組織の HYPERLINK 関数での JavaScript の使用状況を確認し、代替ソリューションへの移行をご検討ください。代替ソリューションの詳細は、記事「ハイパーリンク数式項目での JavaScript の無効化」を参照してください。


既存の機能でできたことができなくなるので対応が必要ですね。。って思ったりしたのですが、そもそも数式項目のハイパーリンク項目でJavaScriptを書いたりすることは無かった気がします。(やるとすればカスタムボタンかカスタムリンクで対応した方が早そう)


とはいえ実は使っていましたというケースもあるので確認が必要と思いますが、確認方法についてSuccess Communityで情報が共有されていました。
f:id:tyoshikawa1106:20170523010245p:plain

https://success.salesforce.com/0D53A000037FFjS


こんな感じとのことです。
f:id:tyoshikawa1106:20170523010439p:plain

f:id:tyoshikawa1106:20170523010539p:plain


開発者コンソールから処理を実行してSystem.debugに引っかからなければ問題ないみたいです。この検証は本番組織ではなく最新の状態を反映したSandbox環境で実行するのが推奨されているようです。

追記

詳細はヘルプページができていました。

SFDC:プロセスビルダーでメールアラートを実行するときの注意点

プロセスビルダーではメールアラート機能をつかってレコードの登録や更新時にメールを送信することができます。
f:id:tyoshikawa1106:20170522000208p:plain


ワークフロールールと同じことができるイメージですがプロセスビルダーの場合はフローの流れをわかりやすく確認でき、またバージョン管理機能も利用することができます。便利な機能ですがプロセスビルダーからメールアラートを実行する場合には注意点が1つあります。送信先のメールアドレスの有無チェックです。


例えばリードオブジェクトの新規作成時にメールを送信する機能を実装します。リードのメール項目は通常必須項目ではないので次のように未入力で保存を実行できます。
f:id:tyoshikawa1106:20170522000604p:plain


プロセスビルダーからメール送信を実行しますがメールアドレスが無い状態です。その結果つぎのようにエラーとなります。
f:id:tyoshikawa1106:20170522000726p:plain

フローのトリガに失敗したため、レコードを保存できません。フロートリガで、ID 30110000000g8lH のフローバージョンの実行に失敗しました。フローエラーメッセージ: このフローで未対応の障害が発生しました フローを処理中に未対応の障害が発生しました。詳細は、組織のシステム管理者にお問い合わせください。 システム管理者にお問い合わせください。


フローのエラー詳細は通知メールで確認できますが原因特定は少ししづらい感じです。
f:id:tyoshikawa1106:20170522000936p:plain


このエラーの場合は下記内容となります。

Probably Limit Exceeded or 0 recipients


この問題はアクショングループの条件を定義で解決できます。次のようにメール項目がNULLで無いときのみ実行と指定してください。
f:id:tyoshikawa1106:20170522001206p:plain



するとメール項目の値が存在しない場合はメール送信処理が実行されなくなり、エラーが発生することなく保存することができます。
f:id:tyoshikawa1106:20170522001347p:plain


メール項目に値が存在している場合は正しくメール送信が実行されます。
f:id:tyoshikawa1106:20170522001545p:plain


このようにプロセスビルダーのメールアラート機能を利用するときはメール項目の値チェックが重要になります。ページレイアウト上で必須項目にしていてもApexなどから空白で保存するような可能性もありますので必ず値チェックをしておくのがオススメです。

おまけ

ワークフロールールで利用されているメールアラートはどこで使われているか確認できますが、プロセスビルダーの場合、メールアラートの利用箇所に表示されません。さすがに削除はできませんがどこにも利用されていないと勘違いしないように注意する必要があります。
f:id:tyoshikawa1106:20170522001931p:plain

f:id:tyoshikawa1106:20170522002048p:plain

SFDC:Trailheadもくもく会 #2 に参加しました

Trailheadもくもく会 #2 に参加しました。
f:id:tyoshikawa1106:20170509194031j:plain

Trailhead もくもく会 #2(Trailhead Super Badge 取得に向けて) | Salesforce Developers


19時から始まり21時30分頃まで、今回はLightning Experience Specialistの方を進めてみました。
f:id:tyoshikawa1106:20170510004825p:plain


途中ですが内容は下記のような感じです。

  • 環境作成 (Trailhead Playground)
  • 専用の未管理パッケージをインストール
  • オブジェクトのラベルを変更
  • 商談フェーズのリスト値カスタマイズ
  • パスの設定
  • 承認プロセス作成 (項目自動更新含む)
  • プロセスビルダー作成


Lightning Experienceのカスタマイズならすぐに終わるかと思ったのですがそんなことはありませんでした。英語の要件を解読しつつパスや承認プロセス、プロセスビルダーの設定を進めるのはなかなか大変みたいです。


パスの設定はこんな感じです。
f:id:tyoshikawa1106:20170510005144p:plain


LockerServiceは重要な更新ページで無効化する必要があります。
f:id:tyoshikawa1106:20170510005205p:plain

f:id:tyoshikawa1106:20170510005245p:plain


パスのガイドライン設定はリッチテキスト形式で登録でき、コピーペーストで対応できました。
f:id:tyoshikawa1106:20170510005350p:plain


プロセスビルダーも英語の解読さえ済めば作業自体は難しくないと思います。
f:id:tyoshikawa1106:20170510010617p:plain


今回の進捗は9問中3問まで。
f:id:tyoshikawa1106:20170510005441p:plain


4問目は何処かで間違えていてエラーとなりました。
f:id:tyoshikawa1106:20170510005546p:plain


2時間ではこんなところかなと思いますがエラーの原因を見つけて残りもクリアしたいと思います。けっこう集中して進めることができたので参加して良かったと思います。
f:id:tyoshikawa1106:20170509190107j:plain:w300

f:id:tyoshikawa1106:20170509190103j:plain:w300

SFDC:Lightning Design SystemのDataTableとrowspan表示

Lightning Design SystemでテーブルCSSを適用したい場合はDataTableのCSSを利用します。また「slds-table--col-bordered」縦線の表示も可能です。ですがrowspan表示を行うと次のように正しく表示してくれません。

f:id:tyoshikawa1106:20170509084749p:plain


この問題は「style="border-collapse: collapse;"」を宣言することで解決します。
f:id:tyoshikawa1106:20170509084932p:plain

f:id:tyoshikawa1106:20170509084955p:plain


ちなみにrowspanを宣言した場合、マウスを当てたときは次のように表示されます。
f:id:tyoshikawa1106:20170509085021p:plain


これが気になる人は「slds-no-row-hover」を宣言することでマウスオーバー時のハイライトを無効にできます。
f:id:tyoshikawa1106:20170509085316p:plain


rowspanとslds-table--col-borderedを組み合わせたときに縦線が正しく表示されず困ったときは「style="border-collapse: collapse;"」で解決できました。

サンプルコード

<apex:page showHeader="true" sidebar="false">
    <apex:slds />
    <div class="slds">
        <table class="slds-table slds-table--bordered slds-table--col-bordered slds-no-row-hover" style="border-collapse: collapse;">
            <tr>
                <th rowspan="3"></th>
                <th>
                    <apex:outputText value="{!$ObjectType.Account.Fields.Name.Label}" />
                </th>
                <th>
                    <apex:outputText value="{!$ObjectType.Account.Fields.AccountNumber.Label}" />
                </th>
                <th>
                    <apex:outputText value="{!$ObjectType.Account.Fields.Website.Label}" />
                </th>
            </tr>
            <tr>
                <td>XXX</td>
                <td>XXX</td>
                <td>XXX</td>
            </tr>
            <tr>
                <td>XXX</td>
                <td>XXX</td>
                <td>XXX</td>
            </tr>
        </table>
    </div>
</apex:page>