Multi Site Manager の拡張

ここでは、Multi Site Manager の機能を拡張する方法について説明します。

  • MSM Java API の主な構成要素について学習します。
  • ロールアウト設定で使用できる、新しい同期アクションを作成します。
  • デフォルトの言語コードと国コードを変更します。
メモ

このページは、次と共にお読みください。

注意

Multi Site Manager とその API は Web サイトのオーサリング時に使用するものなので、オーサー環境での使用のみを目的としています。

Java API の概要

Multi Site Management は、以下のパッケージで構成されています。

主要な MSM API オブジェクトは、次のような関係にあります(使用される用語も参照してください)。

chlimage_1-35

  • BlueprintBlueprintブループリント設定)は、ライブコピーのコンテンツ継承元となるページを指定します。

    chlimage_1-36

    • ブループリント設定(Blueprint)の使用は任意ですが、これを使用すると、

      • 作成者がソースに対して「ロールアウト」オプションを使用できます(これにより、このソースから継承するライブコピーに変更を(明示的に)プッシュできます)。
      • 作成者が「サイトを作成」を使用できます(これにより、ユーザーが簡単に言語を選択し、ライブコピーの構造を設定できます)。
      • 作成されるすべてのライブコピーに対するデフォルトのロールアウト設定を定義できます。
  • LiveRelationshipLiveRelationship は、ライブコピーブランチのリソースと、同等のソースまたはブループリントのリソースとの関連付け(関係)を指定します。

    • この関係は、継承およびロールアウトの実現時に使用されます。
    • LiveRelationship オブジェクトは、ロールアウト設定(RolloutConfig)、LiveCopy 、および関係に関連付けた LiveStatus オブジェクトへのアクセス(参照)を可能にします。
    • 例えば、/content/we-retail/language-masters にあるソースまたはブループリントから、/content/copy/us にライブコピーが作成されるとします。リソース /content/we.retail/language-masters/en/jcr:content および /content/copy/us/en/jcr:content は関係を築きます。
  • LiveCopy は、ライブコピーのリソースとそのソースまたはブループリントのリソースとの関係(LiveRelationship)の詳細な設定を保持します。

    • LiveCopy クラスを使用すると、ページのパスや、ソースまたはブループリントページのパス、ロールアウト設定にアクセスでき、さらに子ページも LiveCopy に含まれるかどうかを決めます。
    • LiveCopy ノードは、「サイトを作成」または「ライブコピーを作成」を使用するたびに作成されます。
  • LiveStatus オブジェクトは、LiveRelationship の実行時ステータスへのアクセスを可能にします。このオブジェクトを使用して、ライブコピーの同期ステータスを問い合わせます。

  • LiveAction は、ロールアウトに関係する各リソースで実行されるアクションです。

    • LiveAction は、RolloutConfig によってのみ生成されます。
  • LiveActionFactory 作成 LiveAction 与えられたオブジェクト LiveAction 設定。 設定は、リポジトリ内にリソースとして保存されます。

  • RolloutConfig 次のリストを保持: LiveActions:トリガー時に使用します。 LiveCopyRolloutConfig を継承し、その結果が LiveRelationship に含まれます。

    • 初めてライブコピーを設定するときは、(LiveAction を呼び出す)RolloutConfig も使用します。

新しい同期アクションの作成

カスタム同期アクションを作成して、ロールアウト設定と併用します。インストール済みのアクションが特定のアプリケーション要件を満たさない場合に同期アクションを作成します。同期アクションを作成するには、次の 2 つのクラスを作成します。

LiveActionFactory は、指定された設定の LiveAction クラスのインスタンスを作成します。

  • LiveAction クラスには次のメソッドが含まれます。

    • getName:アクション名を返します。この名前は、ロールアウト設定などで、アクションを参照するために使用します。
      • execute:アクションのタスクを実行します。
  • LiveActionFactory クラスには次のメンバーが含まれます。

    • LIVE_ACTION_NAME:関連付けた LiveAction の名前を格納するフィールド。この名前は、getName クラスの LiveAction メソッドが返す値と一致する必要があります。
    • createActionLiveAction のインスタンスを作成します。オプションの Resource パラメーターを使用して、設定情報を提供できます。
    • createsAction:関連付けられた LiveAction の名前を返します。

LiveAction 設定ノードへのアクセス

リポジトリ内の LiveAction 設定ノードを使用して、LiveAction インスタンスの実行時動作に影響を与える情報を保存します。LiveAction 設定を保存するリポジトリ内のノードは、実行時に LiveActionFactory オブジェクトに使用できます。そのため、設定ノードにプロパティを追加し、必要に応じて LiveActionFactory 実装内で使用することができます。

例えば、LiveAction にはブループリント作成者の名前を保存する必要があります。設定ノードのプロパティには、情報を保存するブループリントページのプロパティ名が含まれます。実行時、LiveAction は設定からプロパティ名を取得して、そのプロパティ値を取得します。

LiveActionFactory メソッドのパラメーターは .createAction オブジェクトです。Resource Resource オブジェクトは、ロールアウト設定内のこのライブアクションの cq:LiveSyncAction ノードを表します。詳しくはロールアウト設定の作成を参照してください。通常どおり、設定ノードを使用する場合は、ValueMap オブジェクトに適応させる必要があります。

public LiveAction createAction(Resource resource) throws WCMException {
        ValueMap config;
        if (resource == null || resource.adaptTo(ValueMap.class) == null) {
            config = new ValueMapDecorator(Collections.<String, Object>emptyMap());
        } else {
            config = resource.adaptTo(ValueMap.class);
        }
        return new MyLiveAction(config, this);
}

ターゲットノード、ソースノード、LiveRelationship へのアクセス

execute オブジェクトの LiveAction メソッドのパラメーターとして、以下のオブジェクトを指定します。

  • ライブコピーのソースを表す Resource オブジェクト。

  • ライブコピーのターゲットを表す Resource オブジェクト。

  • ライブコピーの LiveRelationship オブジェクト。

  • autoSave は、LiveAction がリポジトリに対しておこなわれた変更を保存する必要があることを示します。

  • リセット値は、ロールアウトのリセットモードを示します。

これらのオブジェクトから、LiveCopy に関するすべての情報を取得できます。Resource オブジェクトを使用して、ResourceResolverSessionNode の各オブジェクトも取得できます。これらのオブジェクトは、リポジトリコンテンツの操作に役立ちます。

以下のコードの先頭行で、source はソースページの Resource オブジェクトです。

ResourceResolver resolver = source.getResourceResolver();
Session session = resolver.adaptTo(javax.jcr.Session.class);
Node sourcenode = source.adaptTo(javax.jcr.Node.class);
メモ

Resource 引数には、null Resources オブジェクトなどの Node オブジェクトに適応しない NonExistingResource または オブジェクトを指定できます。

新しいロールアウト設定の作成

インストールされるロールアウト設定がアプリケーションの要件を満たさない場合は、ロールアウト設定を作成します。

ブループリントまたはライブコピーページでロールアウト設定を指定すると、新しいロールアウト設定が使用可能になります。

ロールアウト設定の作成

新しいロールアウト設定を作成するには:

  1. CRXDE Lite を開きます。例:
    http://localhost:4502/crx/de

  2. 次に移動します。
    /apps/msm/<your-project>/rolloutconfigs

    メモ

    これは、次のプロジェクトのカスタマイズバージョンです。
    /libs/msm/wcm/rolloutconfigs
    これが最初の設定の場合は、作成する必要があります。

    メモ

    /libs パス内の設定は一切変更しないでください。
    /libs のコンテンツは、インスタンスを次回アップグレードするとき(場合によってはホットフィックスまたは機能パックを適用したとき)に上書きされるからです。
    設定およびその他の変更に推奨される方法は次のとおりです。

    • 必要な項目(例:/libs 内に存在する項目)を、/apps の下で再作成します。
    • /apps 内で変更作業を行います。
  3. この下に、次のプロパティを持つノードを​作成​します。

    • 名前:ロールアウト設定のノード名です。md#installed-synchronization-actions)、例えば、 contentCopy または workflow です。
    • タイプcq:RolloutConfig
  4. このノードに次のプロパティを追加します。

    • 名前jcr:title

      String
      :UI に表示される識別タイトルです。

    • 名前jcr:description

      String
      :オプションの説明です。

    • 名前cq:trigger

      String
      ロールアウトトリガーを使用します。 次から選択します。

      • rollout
      • modification
      • publish
      • deactivate
  5. すべて保存」をクリックします。

ロールアウト設定への同期アクションの追加

ロールアウト設定は、 /apps/msm/<your-project>/rolloutconfigs ノードの下に作成したロールアウト設定ノードの下に保存されています。

タイプ cq:LiveSyncAction の子ノードを追加して、同期アクションをロールアウト設定に追加します。同期アクションノードの順序によって、アクションが実行される順序が決まります。

  1. CRXDE Lite のまま、ロールアウト設定ノードを選択します。

    次に例を示します。
    /apps/msm/myproject/rolloutconfigs/myrolloutconfig

  2. 次のノードプロパティを持つノードを​作成

    • 名前:同期アクションのノード名。
      名前は、同期アクションの下の表の「アクション名」と同じである必要があります。例えば、contentCopy または workflow です。
    • タイプcq:LiveSyncAction
  3. 必要に応じてさらに同期アクションノードを追加して設定します。アクションノードを実行する順序に並べ替えます。一番上のアクションノードが最初に実行されます。

  4. すべて保存」をクリックします。

シンプルな LiveActionFactory クラスの作成と使用

この節の手順を実行して LiveActionFactory を作成し、ロールアウト設定で使用します。この手順では、Maven と Eclipse を使用して、LiveActionFactory を作成およびデプロイします。

  1. Maven プロジェクトを作成し、Eclipse に読み込みます。
  2. POM ファイルに依存関係を追加します。
  3. LiveActionFactory インターフェイスを実装し、OSGi バンドルをデプロイします。
  4. ロールアウト設定を作成します。
  5. ライブコピーを作成します。

Maven プロジェクトと Java クラスのソースコードは、公開されている Git リポジトリで入手できます。

GitHub のコード

このページのコードは GitHub にあります

Maven プロジェクトの作成

以下の手順では、adobe-public プロファイルを Maven 設定ファイルに追加している必要があります。

  1. 端末またはコマンドラインセッションを開き、ディレクトリがプロジェクトを作成する場所を指すように変更します。

  2. 以下のコマンドを入力します。

    mvn archetype:generate -DarchetypeGroupId=com.day.jcr.vault -DarchetypeArtifactId=multimodule-content-package-archetype -DarchetypeVersion=1.0.0 -DarchetypeRepository=adobe-public-releases
    
  3. インタラクティブなプロンプトで、次の値を指定します。

    • groupIdcom.adobe.example.msm
    • artifactIdMyLiveActionFactory
    • version1.0-SNAPSHOT
    • packageMyPackage
    • appsFolderNamemyapp
    • artifactNameMyLiveActionFactory package
    • packageGroupmyPackages
  4. Eclipse を起動して、Maven プロジェクトを読み込みます

POM ファイルへの依存関係の追加

LiveActionFactory コード内で使用されるクラスを Eclipse コンパイラーが参照できるようにするために、依存関係を追加します。

  1. Eclipse Project Explorer から次のファイルを開きます。

    MyLiveActionFactory/pom.xml

  2. エディターで、「pom.xml」タブをクリックし、project/dependencyManagement/dependencies セクションを探します。

  3. 次の XML を dependencyManagement 要素内に追加して、ファイルを保存します。

     <dependency>
      <groupId>com.day.cq.wcm</groupId>
      <artifactId>cq-msm-api</artifactId>
      <version>5.6.2</version>
      <scope>provided</scope>
     </dependency>
     <dependency>
      <groupId>org.apache.sling</groupId>
      <artifactId>org.apache.sling.api</artifactId>
      <version>2.4.3-R1488084</version>
      <scope>provided</scope>
     </dependency>
     <dependency>
      <groupId>com.day.cq.wcm</groupId>
      <artifactId>cq-wcm-api</artifactId>
      <version>5.6.6</version>
      <scope>provided</scope>
     </dependency>
     <dependency>
      <groupId>org.apache.sling</groupId>
      <artifactId>org.apache.sling.commons.json</artifactId>
      <version>2.0.6</version>
      <scope>provided</scope>
     </dependency>
     <dependency>
      <groupId>com.day.cq</groupId>
      <artifactId>cq-commons</artifactId>
      <version>5.6.4</version>
      <scope>provided</scope>
     </dependency>
     <dependency>
      <groupId>org.apache.sling</groupId>
      <artifactId>org.apache.sling.jcr.jcr-wrapper</artifactId>
      <version>2.0.0</version>
      <scope>provided</scope>
     </dependency>
     <dependency>
      <groupId>com.day.cq</groupId>
      <artifactId>cq-commons</artifactId>
      <version>5.6.4</version>
      <scope>provided</scope>
     </dependency>
    
  4. Project Explorer から、バンドルの POM ファイルを MyLiveActionFactory-bundle/pom.xml で開きます。

  5. エディターで、「pom.xml」タブをクリックし、project/dependencies セクションを探します。次の XML を dependencies 要素内に追加して、ファイルを保存します。

     <dependency>
      <groupId>com.day.cq.wcm</groupId>
      <artifactId>cq-msm-api</artifactId>
     </dependency>
     <dependency>
      <groupId>org.apache.sling</groupId>
      <artifactId>org.apache.sling.api</artifactId>
     </dependency>
     <dependency>
      <groupId>com.day.cq.wcm</groupId>
      <artifactId>cq-wcm-api</artifactId>
     </dependency>
     <dependency>
      <groupId>org.apache.sling</groupId>
      <artifactId>org.apache.sling.commons.json</artifactId>
     </dependency>
     <dependency>
      <groupId>com.day.cq</groupId>
      <artifactId>cq-commons</artifactId>
     </dependency>
     <dependency>
      <groupId>org.apache.sling</groupId>
      <artifactId>org.apache.sling.jcr.jcr-wrapper</artifactId>
     </dependency>
     <dependency>
      <groupId>com.day.cq</groupId>
      <artifactId>cq-commons</artifactId>
     </dependency>
    

LiveActionFactory の実装

次の LiveActionFactory クラスは、ソースページおよびターゲットページに関するメッセージをログに記録し、ソースノードからターゲットノードに cq:lastModifiedBy プロパティをコピーする LiveAction を実装します。ライブアクションの名前は exampleLiveAction です。

  1. Eclipse Project Explorer で、MyLiveActionFactory-bundle/src/main/java/com.adobe.example.msm パッケージを右クリックし、新規クラス​をクリックします。「名前」に「ExampleLiveActionFactory」と入力し、「完了」をクリックします。

  2. ExampleLiveActionFactory.java ファイルを開き、内容を次のコードで置き変えて、ファイルを保存します。

    package com.adobe.example.msm;
    
    import java.util.Collections;
    
    import org.apache.felix.scr.annotations.Component;
    import org.apache.felix.scr.annotations.Property;
    import org.apache.felix.scr.annotations.Service;
    import org.apache.sling.api.resource.Resource;
    import org.apache.sling.api.resource.ResourceResolver;
    import org.apache.sling.api.resource.ValueMap;
    import org.apache.sling.api.wrappers.ValueMapDecorator;
    import org.apache.sling.commons.json.io.JSONWriter;
    import org.apache.sling.commons.json.JSONException;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import javax.jcr.Node;
    import javax.jcr.RepositoryException;
    import javax.jcr.Session;
    
    import com.day.cq.wcm.msm.api.ActionConfig;
    import com.day.cq.wcm.msm.api.LiveAction;
    import com.day.cq.wcm.msm.api.LiveActionFactory;
    import com.day.cq.wcm.msm.api.LiveRelationship;
    import com.day.cq.wcm.api.WCMException;
    
    @Component(metatype = false)
    @Service
    public class ExampleLiveActionFactory implements LiveActionFactory<LiveAction> {
     @Property(value="exampleLiveAction")
     static final String actionname = LiveActionFactory.LIVE_ACTION_NAME;
    
     public LiveAction createAction(Resource config) {
      ValueMap configs;
      /* Adapt the config resource to a ValueMap */
            if (config == null || config.adaptTo(ValueMap.class) == null) {
                configs = new ValueMapDecorator(Collections.<String, Object>emptyMap());
            } else {
                configs = config.adaptTo(ValueMap.class);
            }
    
      return new ExampleLiveAction(actionname, configs);
     }
     public String createsAction() {
      return actionname;
     }
     /************* LiveAction ****************/
     private static class ExampleLiveAction implements LiveAction {
      private String name;
      private ValueMap configs;
      private static final Logger log = LoggerFactory.getLogger(ExampleLiveAction.class);
    
      public ExampleLiveAction(String nm, ValueMap config){
       name = nm;
       configs = config;
      }
    
      public void execute(Resource source, Resource target,
        LiveRelationship liverel, boolean autoSave, boolean isResetRollout)
          throws WCMException {
    
       String lastMod = null;
    
       log.info(" *** Executing ExampleLiveAction *** ");
    
       /* Determine if the LiveAction is configured to copy the cq:lastModifiedBy property */
       if ((Boolean) configs.get("repLastModBy")){
    
        /* get the source's cq:lastModifiedBy property */
        if (source != null && source.adaptTo(Node.class) !=  null){
         ValueMap sourcevm = source.adaptTo(ValueMap.class);
         lastMod = sourcevm.get(com.day.cq.wcm.msm.api.MSMNameConstants.PN_PAGE_LAST_MOD_BY, String.class);
        }
    
        /* set the target node's la-lastModifiedBy property */
        Session session = null;
        if (target != null && target.adaptTo(Node.class) !=  null){
         ResourceResolver resolver = target.getResourceResolver();
         session = resolver.adaptTo(javax.jcr.Session.class);
         Node targetNode;
         try{
          targetNode=target.adaptTo(javax.jcr.Node.class);
          targetNode.setProperty("la-lastModifiedBy", lastMod);
          log.info(" *** Target node lastModifiedBy property updated: {} ***",lastMod);
         }catch(Exception e){
          log.error(e.getMessage());
         }
        }
        if(autoSave){
         try {
          session.save();
         } catch (Exception e) {
          try {
           session.refresh(true);
          } catch (RepositoryException e1) {
           e1.printStackTrace();
          }
          e.printStackTrace();
         }
        }
       }
      }
      public String getName() {
       return name;
      }
    
      /************* Deprecated *************/
      @Deprecated
      public void execute(ResourceResolver arg0, LiveRelationship arg1,
        ActionConfig arg2, boolean arg3) throws WCMException {
      }
      @Deprecated
      public void execute(ResourceResolver arg0, LiveRelationship arg1,
        ActionConfig arg2, boolean arg3, boolean arg4)
          throws WCMException {
      }
      @Deprecated
      public String getParameterName() {
       return null;
      }
      @Deprecated
      public String[] getPropertiesNames() {
       return null;
      }
      @Deprecated
      public int getRank() {
       return 0;
      }
      @Deprecated
      public String getTitle() {
       return null;
      }
      @Deprecated
      public void write(JSONWriter arg0) throws JSONException {
      }
     }
    }
    
  3. ターミナルまたはコマンドセッションを使用して、ディレクトリを MyLiveActionFactory ディレクトリ(Maven プロジェクトディレクトリ)に変更します。次のコマンドを入力します。

    mvn -PautoInstallPackage clean install
    

    AEM の error.log ファイルに、バンドルが開始されたことが記録されます。

    例えば、http://localhost:4502/system/console/status-slinglogs は次のようになります。

    13.08.2013 14:34:55.450 *INFO* [OsgiInstallerImpl] com.adobe.example.msm.MyLiveActionFactory-bundle BundleEvent RESOLVED
    13.08.2013 14:34:55.451 *INFO* [OsgiInstallerImpl] com.adobe.example.msm.MyLiveActionFactory-bundle BundleEvent STARTING
    13.08.2013 14:34:55.451 *INFO* [OsgiInstallerImpl] com.adobe.example.msm.MyLiveActionFactory-bundle BundleEvent STARTED
    13.08.2013 14:34:55.453 *INFO* [OsgiInstallerImpl] com.adobe.example.msm.MyLiveActionFactory-bundle Service [com.adobe.example.msm.ExampleLiveActionFactory,2188] ServiceEvent REGISTERED
    13.08.2013 14:34:55.454 *INFO* [OsgiInstallerImpl] org.apache.sling.audit.osgi.installer Started bundle com.adobe.example.msm.MyLiveActionFactory-bundle [316]
    

ロールアウト設定例の作成

作成した LiveActionFactory を使用する MSM ロールアウト設定を作成します。

  1. 次のプロパティと標準の手順を使用して、ロールアウト設定を作成および設定します。

    • タイトル:ロールアウト設定例
    • 名前: examplerolloutconfig
    • cq:triggerpublish

ロールアウト設定例へのライブアクションの追加

前の手順で作成したロールアウト設定で ExampleLiveActionFactory クラスを使用するように設定します。

  1. CRXDE Lite を開きます。例:http://localhost:4502/crx/de

  2. /apps/msm/rolloutconfigs/examplerolloutconfig/jcr:content 以下に、次のノードを作成します。

    • 名前exampleLiveAction
    • cq:LiveSyncAction
  3. すべて保存」をクリックします。

  4. exampleLiveAction ノードを選択して、次のプロパティを追加します。

    • 名前repLastModBy
    • Boolean
    • true

    このプロパティは、cq:LastModifiedBy プロパティをソースノードからターゲットノードにレプリケートする必要がある ExampleLiveAction クラスを示します。

  5. すべて保存」をクリックします。

ライブコピーの作成

ロールアウト設定を使用して、We.Retail 参照サイトの English/Products ブランチのライブコピーを作成します。

  • ソース/content/we-retail/language-masters/en/products

  • ロールアウト設定:ロールアウト設定例

ソースブランチの Products(英語)ページをアクティベートし、LiveAction クラスが生成するログメッセージを監視します。

16.08.2013 10:53:33.055 *INFO* [Thread-444535] com.adobe.example.msm.ExampleLiveActionFactory$ExampleLiveAction  *** ExampleLiveAction has been executed.***
16.08.2013 10:53:33.055 *INFO* [Thread-444535] com.adobe.example.msm.ExampleLiveActionFactory$ExampleLiveAction  *** Target node lastModifiedBy property updated: admin ***

言語名とデフォルトの国の変更

AEM では、言語コードと国コードのデフォルトセットを使用します。

  • デフォルトの言語コードは、ISO-639-1 で定義されている小文字 2 文字のコードです。
  • デフォルトの国コードは、ISO 3166 で定義されている小文字または大文字 2 文字のコードです。

MSM は、保存されている言語コードと国コードのリストを使用して、ページの言語バージョン名に関連付けられている国名を判断します。必要に応じて、リストの次の要素を変更できます。

  • 言語タイトル
  • 国名
  • ende などのコードの)言語に対するデフォルトの国

言語のリストは、/libs/wcm/core/resources/languages ノードの下に格納されます。各子ノードは、言語または言語-国を表します。

  • ノード名は、言語コード(en または de など)や言語_国コード(en_us または de_ch など)です。

  • ノードの language プロパティには、そのコードが表す言語の正式名称が格納されます。

  • ノードの country プロパティには、そのコードが表す国の正式名称が格納されます。

  • ノード名が言語コードのみ(en など)で構成されている場合、country プロパティは * で、追加の defaultCountry プロパティには、使用する国を示す言語-国のコードが格納されます。

chlimage_1-38

言語の変更手順

  1. Web ブラウザーで CRXDE Lite を開きます。例:http://localhost:4502/crx/de

  2. /apps フォルダーを選択し、「作成」をクリックして、「フォルダーを作成」をクリックします。

    新しいフォルダーに「wcm」という名前を付けます。

  3. 前のステップを繰り返して、/apps/wcm/core フォルダーツリーを作成します。タイプのノードの作成 sling:Folder ~と呼ばれるコアで resources.

  4. /libs/wcm/core/resources/languages ノードを右クリックして、「コピー」をクリックします。

  5. /apps/wcm/core/resources フォルダーを右クリックして、「貼り付け」をクリックします。必要に応じて子ノードを変更します。

  6. すべて保存」をクリックします。

  7. ツール操作Web コンソール​の順にクリックします。このコンソールから「OSGi」をクリックし、次に「設定」をクリックします。

  8. Day CQ WCM Language Manager を探してクリックし、「言語リスト」の値を /apps/wcm/core/resources/languages に変更して、「保存」をクリックします。

    chlimage_1-40

ページプロパティに対する MSM ロックの設定(タッチ操作対応 UI)

カスタムページプロパティの作成時に、新しいプロパティをすべてのライブコピーへのロールアウトの対象にするかどうかを検討しなければならない場合があります。

例えば、次の 2 つのページプロパティを追加する場合は、

  • 連絡先電子メール:

    • このプロパティは国(またはブランドなど)によって異なるので、ロールアウトする必要はありません。
  • キービジュアルのスタイル:

    • プロジェクトの要件としては、このプロパティは(通常は)すべての国(またはブランドなど)に共通なので、ロールアウトする必要があります。

次のことを保証する必要があります。

  • 連絡先電子メール:

  • キービジュアルのスタイル:

    • 継承がキャンセルされている場合以外はタッチ操作対応 UI でこのプロパティを編集できないようにし、さらに継承を回復できるようにします。継承を制御するには、関連付けの状態をトグル切り替えするチェーンリンクまたはチェーン解除リンクをクリックします。

ページプロパティをロールアウトの対象にするかどうか(したがって編集時に継承をキャンセルまたは復元するかどうか)は、次のダイアログプロパティで制御されます。

  • cq-msm-lockable

    • タッチ操作対応 UI ダイアログの項目に適用されます。

    • ダイアログ内にチェーンリンクシンボルを作成します。

    • 継承がキャンセルされている(チェーンリンクが解除されている)場合は、編集のみ可能です。

    • リソースの最初の子レベルにのみ適用されます。

    • タイプString

    • :対象のプロパティ名を保持します(また、name プロパティの値と比較できます)。例として、次を参照してください。

      /libs/foundation/components/page/cq:dialog/content/items/tabs/items/basic/items/column/items/title/items/title

cq-msm-lockable が定義されている場合は、次の方法でチェーンの解除またはクローズを MSM と連携できます。

  • cq-msm-lockable の値が次のような場合:

    • 相対指定​の場合(例:myProperty または ./myProperty

      • プロパティを cq:propertyInheritanceCancelled から追加および削除します。
    • 絶対指定​の場合(例:/image/)

      • チェーンを解除すると、cq:LiveSyncCancelled mixin を ./image に追加し、cq:isCancelledForChildrentrue に設定することで、継承がキャンセルされます。
      • チェーンを閉じると、継承が元に戻ります。
メモ

cq-msm-lockable は、編集するリソースの最初の子レベルに適用され、値が絶対値または相対値として定義されているかどうかに関係なく、より深いレベルの親レベルでは機能しません。

メモ

継承を再度有効にしても、ライブコピーページのプロパティはソースのプロパティとは自動的には同期されません。必要な場合は、手動で同期をリクエストできます。

このページ