2024.02.26

フォロー中のレコードを一覧で確認したい!?確認方法を松竹梅でご紹介

Just a moment... (31130)

はじめに

担当しているケースや顧客の情報が更新されたら通知を受け取りたい。特定のユーザーの投稿を把握したい...。
そんなときは「フォロー」機能を使用してみましょう!​​
この機能を使うと、フォローしたレコードの動向をChatterで知らせてくれます!とても便利ですね!!
参考:Salesforce Help:レコードのフォロー

便利な機能ですが、フォロー数は最大500件なので注意が必要です。
(Salesforceに依頼すると最大2000件まで引き上げることが可能なようです。
参考:Salesforce Help:Chatter でフォローすることができるレコードまたはユーザ数の上限を拡張する

不要なフォローは解除する等、フォロー中のレコードを適度に整理する運用が望ましいでしょう。

望ましいのですが....
実はLightning Experienceにはフォローしているレコードの一覧を表示する方法がありません
そのため、Chatterに届いた通知からフォローを外したいレコードを探すしかありません。

そこで、今回はフォロー中のレコードを表示する方法を開発コストの松竹梅で3つご紹介します
フォロー中のレコードを整理したい皆様のお役に立てれば光栄です。

本記事の要点

さっそくですが、本記事でご紹介する方法は以下の通りです。

※記事の展開上、梅から紹介させていただきます

梅:Classic画面で確認

まずは標準機能を使用してフォロー中のレコードを確認する方法です。
Lightning Experienceを使用しているユーザーは、以下の手順でSalesforce Classicに切り替えてください。
 ①画面右上の自身のアイコンをクリック。
 ②オプションにある「Salesforce Classicに切り替え」をクリック。

次に確認方法です。
 ①画面右上の自身のユーザー名をクリック。
 ②「私のプロファイル」をクリック。
 ③「概要」をクリック。
 ④右側の「フォローしている」コンポーネントにフォロー中のレコードが表示される。

よりレコードを表示したい場合は、「すべて表示」をクリックしてください
クリックすると、モーダルが表示されオブジェクトを絞ってレコードを表示する画面が表示されます。

Classicには標準機能でオブジェクトの絞り込み機能まで付いたフォロー中のレコード一覧があるなんて驚きですね。

素晴らしい機能ですが、Lightning Experienceから一覧を確認したいといった要望もあるかもしれません。
そういった場合はフローや個別開発で作成する必要があります。

そこで続いては、画面フローでフォローレコード一覧を作成する方法をご紹介します。

エンティティ登録オブジェクトとは?

.フローや個別開発のご説明の前に、レコードをフォローしたときのSalesforceの挙動をご説明いたします。

Salesforceでは、フォローの情報はエンティティ登録というオブジェクトで管理されています。
1つのフォローにつき、エンティティ登録レコードが1つ作成され、フォローを解除するとレコードが削除されます。

エンティティ登録オブジェクトの基本的な項目は以下の通りです。
オブジェクトマネージャーからアクセスできず、カスタム項目は作成できません。

エンティティ登録オブジェクトの主な項目

ParentIdには複数種類のオブジェクトのIDが入る点が他の標準オブジェクトと異なり、特徴的です。
参考:Salesforce Developers:EntitySubscription

フォローしたレコードの表示やフォロー解除は、エンティティ登録レコードを表示・操作することで実現できることを把握したうえで、フローを作成していきましょう。

竹:画面フローを作成

今回は、最初の画面でどのオブジェクトのフォロー中のレコードを表示するか選択し、次の画面でフォロー中のレコードを表示、フォロー解除が可能な下のキャプチャのようなフローを作成していきます。

①オブジェクトを選択

②一覧からレコードを選択し、フォロー解除できる
データテーブルにはエンティティ登録レコードではなく、ParentIdで紐づいている親オブジェクトのレコードを表示しているため、そのブジェクト固有の項目も表示可能です。

そのため、特定の項目の値によってフォロー解除を検討するような運用をする組織にはピッタリな実装になります。

実装方法

以下のようにフローを作成してください。

フローの全体像

各要素の説明
①:SubscriberIdが実行ユーザーのIdと完全一致するエンティティ登録レコードを全件取得する。
②:①で取得したレコードリスト分、ループする。
③:ループのなかで、エンティティ登録レコードのParentIdをリストに格納する。
④:フィルター条件を選択する画面
⑤:Idが③のリストに含まれる、④で選択したオブジェクトのレコードを全件取得する。
⑥:フォローレコード一覧画面
⑦:⑥で選択したレコード分、ループする。
⑧:ループのなかで、①で取得したエンティティ登録レコードリストから、ParentIdとループ中のレコードのIdが一致するレコードを絞り込む。
⑨:変数として定義したエンティティ登録レコードリストに⑧のレコードを追加する。
⑩:⑨のリストにあるエンティティ登録レコードを削除する。

ポイントとしては、⑤~⑨は表示したいオブジェクト分、用意する必要があります
(今回は取引先とケースのフォローレコード一覧を表示する画面のため、2セット分用意しました)
そのため、フローで表示する方法はフォロー可能なオブジェクトが決まっており、数がそこまで多くない組織に向いています

松:個別開発(Visualforce)

最後に個別開発でレコード一覧を実装する方法をご紹介いたします。

フローと異なり、オブジェクトを問わず、フォロー中のレコードを全て表示する一覧を作成していきます
フォロー可能なオブジェクトを制限していない、または数がかなり多い組織向けの実装になります

今回は一例として、VisualforceとApexを使用して開発していきます

Visualforceで作成したフォローリスト

レコード名がリンク項目になっているため、クリックすると該当のレコードに遷移することができます
また、オブジェクト名を表示しているため遷移せずともどのオブジェクトのレコードか確認できます。

実装方法

<apex:page controller="EntitySubscriptionListController">
    <apex:form>
        <apex:pageBlock title="フォローリスト">
            <apex:pageBlockButtons>
                <apex:commandButton value="フォロー解除" action="{!deleteSelectedEntitySubscriptions}" rerender="entitySubscriptionList"/>
            </apex:pageBlockButtons>
            <apex:pageBlockTable value="{!entitySubscriptions}" var="es" id="entitySubscriptionList">
                <apex:column headerValue="選択">
                    <apex:inputCheckbox value="{!es.selected}"/>
                </apex:column>
                <apex:column value="{!es.EntitySubscription.ParentId}" headerValue="レコード名"/>
                <apex:column value="{!es.objLabel2}" headerValue="オブジェクト名"/>     
                <apex:column value="{!es.EntitySubscription.CreatedDate}" headerValue="フォローした日"/>     
            </apex:pageBlockTable>
        </apex:pageBlock>
    </apex:form>
</apex:page>
EntitySubscriptionList.page
public without sharing class EntitySubscriptionListController {
    public List<EntitySubscriptionWrapper> entitySubscriptions { get; set; }

    String userid = UserInfo.getUserId();

    public EntitySubscriptionListController() {

        // エンティティ登録レコードを取得
        entitySubscriptions = new List<EntitySubscriptionWrapper>();
        for (EntitySubscription es : [SELECT Id, SubscriberId, ParentId,CreatedDate FROM EntitySubscription WHERE SubscriberId= :userId ORDER BY CreatedDate DESC LIMIT 500]) {

            //フォローしているレコードのオブジェクトのラベル名を取得
            String objLabel = es.ParentId.getSObjectType().getDescribe().getLabel();

            entitySubscriptions.add(new EntitySubscriptionWrapper(es,objLabel));
        }
    }

    public void deleteSelectedEntitySubscriptions() {
        List<Id> selectedEntitySubscriptionIds = new List<Id>();

        for (EntitySubscriptionWrapper esWrapper : EntitySubscriptions) {
            if (esWrapper.selected) {
                selectedEntitySubscriptionIds.add(esWrapper.EntitySubscription.Id);
            }
        }

        // 選択されたエンティティ登録レコードを削除
        if (!selectedEntitySubscriptionIds.isEmpty()) {
            delete [SELECT Id FROM EntitySubscription WHERE Id IN :selectedEntitySubscriptionIds];
        }

        // 削除後にページをリロード
        EntitySubscriptions = new List<EntitySubscriptionWrapper>();
        for (EntitySubscription es : [SELECT Id, SubscriberId, ParentId,CreatedDate FROM EntitySubscription WHERE SubscriberId= :userId ORDER BY CreatedDate DESC LIMIT 500]) {

            //フォローしているレコードのオブジェクトのラベル名を取得
            String objLabel = es.ParentId.getSObjectType().getDescribe().getLabel();

            entitySubscriptions.add(new EntitySubscriptionWrapper(es,objLabel));
            
        }
    }

    public class EntitySubscriptionWrapper {
        public EntitySubscription EntitySubscription { get; set; }
        public Boolean selected { get; set; }
        public String objLabel2 { get; set; }

        public EntitySubscriptionWrapper(EntitySubscription es,String objLabel) {
            EntitySubscription = es;
            selected = false;
            objLabel2 = objLabel;
        }
    }
}
EntitySubscriptionListController.cls
チェックボックスとオブジェクト名を表示するためWrapperクラスを定義していることがポイントです。

また、オブジェクト名はエンティティ登録オブジェクトの項目として存在しないため、下記のコードで取得しています。
String objLabel = es.ParentId.getSObjectType().getDescribe().getLabel();

さいごに

いかがでしたでしょうか。

今回はLightning Experienceでフォロー一覧を作成・確認する方法を開発コストの別に3種類ご紹介いたしました。

フォロー機能は大変便利な機能であるため、使用している方も多いかと思います。
フォローしたレコードを整理したい方々のお役に立てれば光栄です。

最後までお読みいただき、ありがとうございました。
よいSalesforceライフを!!
36 件
     
  • banner
  • banner

関連する記事