LWCで動的フィルターを適用したレポートに遷移する方法

LWCで動的フィルター付きレポートに遷移する方法

はじめに

SalesforceのLightning Web Component(LWC)では、NavigationMixin を使用してユーザーを特定のレポートページへリダイレクトできます。
特に、動的なフィルター(Dynamic Filters) を設定して、ユーザーごとに異なるデータを表示させる方法は非常に便利です。

本記事では、LWCで動的フィルターを適用したレポートに遷移する方法を詳しく解説します。


ナビゲーションの基本構造

Salesforceでは、NavigationMixin.Navigate を使用してレポートに遷移できます。
通常のレポート遷移コードは以下のようになります。

import { LightningElement } from 'lwc';
import { NavigationMixin } from 'lightning/navigation';

export default class RedirectToReport extends NavigationMixin(LightningElement) {

    handleNavigate() {
        this[NavigationMixin.Navigate]({
            type: 'standard__recordPage',
            attributes: {
                recordId: 'a0GJ2000004NAlMMAW', // レポートのID
                objectApiName: 'Report',
                actionName: 'view'
            }
        });
    }
}

このコードを実行すると、指定した recordId(レポートID)のレポートページへ遷移できます。
ただし、このままではフィルターの値を動的に変更できません


動的フィルターを適用する

Salesforceでは、レポートのフィルターをURLパラメータstate)で渡すことが可能です。
フィルターの適用には fv0fv1 などのパラメータを使用します。

例えば、1つ目のフィルター(fv0)に動的な値を設定するには、以下のように記述します。

import { LightningElement, track } from 'lwc';
import { NavigationMixin } from 'lightning/navigation';

export default class RedirectToReport extends NavigationMixin(LightningElement) {
    @track dynamicFilterValue = '2024-01-01'; // 動的なフィルター値

    handleNavigate() {
        this[NavigationMixin.Navigate]({
            type: 'standard__recordPage',
            attributes: {
                recordId: 'a0GJ2000004NAlMMAW', // レポートのID
                objectApiName: 'Report',
                actionName: 'view'
            },
            state: {
                fv0: this.dynamicFilterValue // 1つ目のフィルターに適用
            }
        });
    }
}

このコードでは、dynamicFilterValue の値(例: 2024-01-01)を fv0 に適用し、レポートを開く際にフィルター済みのデータのみを表示できます。


複数のフィルターを適用する

複数のフィルターを設定する場合、fv1fv2 などを追加していきます。

例:日付フィルター(fv0)とステータスフィルター(fv1)を適用

import { LightningElement, track } from 'lwc';
import { NavigationMixin } from 'lightning/navigation';

export default class RedirectToReport extends NavigationMixin(LightningElement) {
    @track dynamicFilterDate = '2024-01-01';
    @track dynamicFilterStatus = 'Open';

    handleNavigate() {
        this[NavigationMixin.Navigate]({
            type: 'standard__recordPage',
            attributes: {
                recordId: 'a0GJ2000004NAlMMAW',
                objectApiName: 'Report',
                actionName: 'view'
            },
            state: {
                fv0: this.dynamicFilterDate,  // 1つ目のフィルター(例:日付)
                fv1: this.dynamicFilterStatus // 2つ目のフィルター(例:ステータス)
            }
        });
    }
}

このコードでは、fv0 に日付、fv1 にステータスを動的に設定し、レポートを開くと適用されるようになっています。


注意点

  1. レポートIDは事前に取得する必要がある

    • recordId: 'a0GJ2000004NAlMMAW' の部分は、Salesforce内の実際のレポートIDに置き換えてください
  2. フィルター項目の順番を確認する

    • fv0レポート内の最初のフィルター項目fv12番目のフィルター項目に対応します。
    • レポートのカスタムフィルター順序を変更した場合、適用フィルターの番号も変わるため注意してください。
  3. URLパラメータの制限

    • NavigationMixin.Navigatestate には、一部のSalesforceオブジェクトのみ使用可能です。
    • フィルター対象の項目が fvX に対応していない場合、正しく動作しないことがあります。

まとめ

  • NavigationMixin.Navigate を使えば、LWCからレポートページに遷移できる
  • state パラメータを活用すると、動的なフィルターを適用可能
  • 複数のフィルターを組み合わせることで、より柔軟なレポートナビゲーションが実現可能

この手法を活用すれば、ユーザーが適切な条件でレポートを開くことができ、操作性が向上します!

コメント