Loading
Salesforce から送信されるメールは、承認済ドメインからのみとなります続きを読む

LWR サイトの拡張 CMS ワークスペースから CMS コンテンツを一括削除する

公開日: Oct 19, 2024
説明

一般的に、CMS コンテンツ (ManagedContent) レコードは、UI から 1 件ずつ削除することができます。しかし、不要になった大量の CMS レコードがある場合や、組織のメモリを整理したい場合、UI から 1 件ずつ削除する方法では非常に時間がかかります。 

管理コンテンツレコードを拡張ワークスペースから一括削除しようする場合は、Apex コードを使用してプログラムで実行する方法があります。

削除には CMS Connect API のメソッド、つまり、Apex コード内 でConnectApi.ManagedContent.deleteManagedContentVariant(variantid) を使用できます。

注意: 現在、ManagedContent や MangedContentVaraint オブジェクトからレコードを .csv ファイルにエクスポートし、レコード ID に基づいて削除する方法で CMS レコードを一括削除することはできません。これを行うと、権限不足エラーが発生します。

解決策

すべての ManagedContent レコードを削除するには、ManagedContentVariant オブジェクトを使用する必要があります。このオブジェクトは、API バージョン 61 以降で使用できます。

管理コンテンツバリアントは、ManagedContent オブジェクトに関連付けられています。管理コンテンツとバリアントは、Salesforce 組織内で 1 つのコンテンツレコードとしてカウントされます。

たとえば、コンテンツタイプがニュースでデフォルト言語が英語の管理コンテンツアイテムがあるとします。このニュースコンテンツをスペイン語、日本語、フランス語などの他の言語に翻訳すると、各言語の管理コンテンツバリアントが作成されます。

一括削除を行う場合、まずすべての CMS コンテンツ (バリアント) が未公開 (ドラフト) ステータスであることを確認する必要があります。また、CMS ワークスペースから言語コンテンツを削除することはできないため、一括削除中に例外やエラーが発生しないよう、SOQL クエリで使用するすべての CMS レコードに言語コンテンツが含まれないようにする必要があります。 

以下は、Apex コードで使用される、LanguageContent のないすべてのドラフトコンテンツのリストを取得するためのSOQL クエリです。

SELECT Id,Name,ManagedContentId,ManagedContentKey,ManagedContentVariantStatus  from ManagedContentVariant where ManagedContentVariantStatus='Draft' AND Name NOT IN('LanguageContent')

注意: LanguageContent は、バックエンドで作成されるすぐに使用できる CMS レコードです。CMS ワークスペースの言語スキーマを制御し、読み取り専用です。

以下の一括削除の手順に従ってください。

  1. Developer Console を開き、[デバッグ] -> [Execute Anonymous Window] (匿名実行ウィンドウ) の順にクリックします。
  2. 以下のコードを使用します。

    List<ManagedContentVariant> accList = [SELECT Id,Name,ManagedContentId,ManagedContentKey,ManagedContentVariantStatus  from ManagedContentVariant where ManagedContentVariantStatus='Draft' AND Name NOT IN('LanguageContent')];

    System.debug(accList);// リストを反復処理し、ConnectApi を使用して各 ManagedContentVariant を削除する
    for (ManagedContentVariant variant : accList) {
        try {
            // ConnectApi を呼び出して各バリアントを削除する
            ConnectApi.ManagedContent.deleteManagedContentVariant(variant.Id);
            System.debug('Deleted ManagedContentVariant with Id: ' + variant.Id);
        } catch (Exception e) {
            // 削除操作の間に発生する例外を処理する
            System.debug('Failed to delete ManagedContentVariant with Id: ' + variant.Id + ' - ' + e.getMessage());
        }
    }

  3. [実行] をクリックします。

    注意: 上記のクエリは、Apex 実行をサポートし、Apex から CMS Connect API を呼び出すことができる、Workbench などの任意の API ツールで実行できます。  
その他のリソース

ManagedContentClass Connnect API Developer Guide (ManagedContentClass コネクト API 開発者ガイド)

ナレッジ記事番号

002954873

 
読み込み中
Salesforce Help | Article