Mark Hammer's Blog

SalesforceやTrailheadに関する情報を投稿しているブログです。

Community Cloud でのURLパラメータを用いたレポート絞り込み

はじめに

Lightning Experienceでは、URLパラメータを用いたレポート絞り込みは以下の流れで設定します。(公式ヘルプ)

  • レポートに対し、事前に絞り込み対象項目を設定する。
  • URLパラメータ fvX (Xには数字が入る) を設定したURLを用いて、レポートにアクセスする。

しかし、Community Cloudのレポート画面にてURLパラメータ fvX を設定しても、パラメータの内容は無視されます。

レポートで、商談のフェーズが"Closed Won"である商談を絞り込み表示する場合、URLパラメータ fvXを使うと

https://apXX.lightning.force.com/lightning/r/Report/00Oxxxxxxxxxxxx/view?fv0=Closed%20Won

となります。

一方、Community Cloudでのレポート表示URL末尾に?fv0=Closed%20Wonを追加しても、「商談のフェーズが"Closed Won"」の絞り込み条件は追加されません。

Community Cloud でのレポート絞り込み

Community Cloud でURLパラメータを用いたレポート絞り込みをする場合は、reportFiltersパラメータを使用します。
reportFiltersは以下3項目で構成されています。

  • column: 絞り込み項目名
  • operator: 演算子
  • value: 値

例えば、「フェーズが"Closed Won"と一致する商談」が条件の場合は以下のように指定します。

?reportFilters=[{"column":"STAGE_NAME","operator":"equals","value":"Closed Won"}]

また、「完了予定日が2020/8/1以降、かつ確度が50%未満の商談」が条件の場合は以下のように指定します。

?reportFilters=[{"column":"CLOSE_DATE","operator":"greaterOrEqual","value":"2020-08-01"},{"column":"PROBABILITY","operator":"lessThan","value":"10"}]

column の指定方法

先述した例の通り、columnで指定する項目名はAPI参照名とは微妙に異なっています。なので設定画面を見ても分かりません。
これを開発者コンソールで調べる方法は以下の通りです。

  • まず、columnで指定したい項目をレポート検索条件、またはレポート表示項目に指定したレポートを作成して、保存します。その時、URLからレポートIDを取得します。
    • レポート検索条件の値は何でもよいですが、後で確認しやすいよう、特定しやすい値にすることをお勧めします。
  • 開発者コンソールを開き、Debug->Open Execute Anonymous Window (または Ctrl+Eキー) でApexコード実行画面を開きます。
  • 以下Apexコードを入力し、[Execute]をクリックします。
String reportId = '<レポートID>'; 

Http http = new Http();
       HttpRequest httpReq = new HttpRequest();
       HttpResponse httpRes = new HttpResponse();      
       httpReq.setMethod('GET');
       httpReq.setHeader('Authorization', 'Bearer ' + UserInfo.getSessionId());
       httpReq.setEndpoint(
           URL.getSalesforceBaseUrl().toExternalForm()+
           '/services/data/v47.0/analytics/reports/' + reportId +
           '?includeDetails=true'
       );
       httpRes = http.send(httpReq);
       System.debug(httpRes.getBody());
  • 画面下のLogsタブに実行ログが表示されるので、右クリックし[Open Raw Log]をクリックします。
  • DEBUGログの中から「reportFilters(対象項目をレポート検索条件に指定した場合)」、または「detailColumns(対象項目をレポート表示項目に指定した場合)」を探し、対象項目のcolumn指定値を確認します。
    • reportFiltersの場合は、先述の通り"value"に検索条件の値が記録されるため、この値で対象項目を含む条件を判別できます。
    • detailColumnsの場合は、レポート項目表示順に項目が並びます。

operator の指定方法

レポートで使用可能な演算子と、reportFiltersで指定するoperatorの関係は以下表の通りです。

レポートの演算子 対応するoperator
次の文字列と一致する equals
次の文字列と一致しない notEqual
< lessThan
> greaterThan
<= lessOrEqual
>= greaterOrEqual
次の文字列を含む contains
次の文字列を含まない notContain
次の文字列で始まる startsWith

カスタムリンクを用いた Community Cloud でのレポート絞り込み

これまでは検索条件の値が固定の場合を考えてきましたが、実際はレコードの値に沿って検索条件を指定したい場合が多いと思います。
この場合はカスタムリンクを使って指定しますが、fvXパラメータとは違い必要な書式に記号を含むため、事前に記号をURLエンコードする必要があります。
手順は以下のようになります。

  • reportFiltersで指定する条件を書式に合わせて書き出します。この時、value部分は適当な文字列で埋めます。
    • 「フェーズが表示している商談と一致する」が条件の場合は、[{"column":"STAGE_NAME","operator":"equals","value":"AAAAAAA"}] とします。
  • 書きだした文字列をURLエンコードします。方法は外部サイトを用いる、コマンドプロンプトでコマンド実行するなどありますが、必ずUTF-8形式でエンコードしてください。
    • 先の例の場合は %5B%7B%22column%22%3A%22STAGE_NAME%22%2C%22operator%22%3A%22equals%22%2C%22value%22%3A%22AAAAAAA%22%7D%5D となります。
  • value部分の文字列を消し、カスタムリンクの差し込み項目に差し替えます。
    • 先の例の場合は「AAAAAAA」を「{!Opportunity.StageName}」に差し替え、%5B%7B%22column%22%3A%22STAGE_NAME%22%2C%22operator%22%3A%22equals%22%2C%22value%22%3A%22{!Opportunity.StageName}%22%7D%5D となります。
    • URLエンコード後に差し込み項目に差し替える理由は、カスタムリンクURLの差し込み項目は「{!Opportunity.StageName}」の形を保つ必要があり、差し込み項目設定後にURLエンコードをしてしまうと項目値が差し込まれない(「{!Opportunity.StageName}」の文字列がそのまま検索条件として使用される)ためです。
  • 対象コミュニティのURL、対象レポートID、先に作成した検索条件から、カスタムリンクURLを /<コミュニティURL>/s/report/<レポートID>?reportFilters=<先に作成した検索条件> のように指定します。
    • 対象コミュニティURLが /sampleCommunity の場合は /sampleCommunity/s/report/00Oxxxxxxxxxxxx/?reportFilters=%5B%7B%22column%22%3A%22STAGE_NAME%22%2C%22operator%22%3A%22equals%22%2C%22value%22%3A%22{!Opportunity.StageName}%22%7D%5D のようになります。
  • 作成したカスタムリンクをページレイアウトに配置します。

追記

reportFiltersを用いた検索条件の指定は、Lightning Experience でも可能です。
Lightning Experience の場合、 カスタムリンクのURLに /lightning/r/Report/00Oxxxxxxxxxxxx/view?reportFilters=%5B%7B%22operator%22%3A%22equals%22%2C%22value%22%3A%22{!Opportunity.StageName}%22%2C%22column%22%3A%22STAGE_NAME%22%7D%5D と指定すれば、事前にレポートへ検索項目を設定しなくても、好きな項目で検索条件を指定できます。

Appendix

Salesforce Report Parameters in a Community URL | Salesforce Chris