現在表示中:

JSON 形式のページメタデータを取得するための要求を PageInfo サーブレットに送信します。

PageInfo サーブレットは、リポジトリ内のリソースに関する情報を返します。 このサーブレットは、http://server:port/libs/wcm/core/content/pageinfo.json URL にバインドされており、path パラメーターを使用してリソースを識別します。 例えば、次の URL は、/content/geometrixx-outdoors/en ノードに関する情報を返します。

http://localhost:4502/libs/wcm/core/content/pageinfo.json?path=/content/geometrixx-outdoors/en

ページ情報プロバイダー

ページコンポーネントは、ページメタデータを生成する 1 つ以上の com.day.cq.wcm.api.PageInfoProvider サービスに関連付けることができます。 PageInfo サーブレットは、各 PageInfoProvider サービスを呼び出して、メタデータを集約します。

  1. HTTP クライアントは、ページの URL を含む要求を PageInfo サーブレットに送信します。
  2. PageInfo サーブレットは、ページをレンダリングするコンポーネントを検出します。
  3. PageInfo サーブレットは、そのコンポーネントに関連付けられている各 PageInfoProvider を呼び出します。
  4. サーブレットは、各 PageInfoProvider が返したメタデータを集約し、それらのメタデータを JSON オブジェクトとして HTTP 応答に追加します。 

注意:

JSON 形式の情報のリストを更新するには、PageInfoProvider と同様に ListInfoProvider を使用してください。 (Web サイト管理コンソールのカスタマイズを参照。)

デフォルトのページ情報プロバイダー

次の PageInfoProvider サービスには、/libs/foundation/components/page コンポーネントが関連付けられています。

  • デフォルトのページステータスプロバイダー: ページステータスに関する情報。例えば、ページのロックの有無、ページがアクティブワークフローのペイロードであるかどうか、ページで使用できるワークフローなど。
  • ライブ関係情報プロバイダー: マルチサイト管理(MSM)に関する情報。例えば、ページがブループリントの一部であるかどうか、ページがライブコピーであるかどうかなど。
  • コンテンツ言語サーブレット: 現在のページの言語と、ページが表示される際の各言語に関する情報。
  • ワークフローステータスプロバイダー: ペイロードとしてのページを持つ実行中のワークフローに関するステータス情報。
  • ワークフローパッケージ情報プロバイダー: リポジトリに保存される各ワークフローパッケージに関する情報と、各パッケージに現在のリソースが含まれているかどうか。
  • エミュレーター情報プロバイダー: このリソースで使用可能なモバイルデバイスエミュレーターに関する情報。 ページコンポーネントがモバイルページをレンダリングしない場合、エミュレーターは使用できません。
  • 注釈情報プロバイダー: ページ上の注釈に関する情報。

例えば、PageInfo サーブレットは、 /content/geometrixx-outdoors/en ノードに関して、次の JSON 応答を返します。

{

    "status": {
        "path": "/content/geometrixx-outdoors/en",
        "isLocked": false,
        "lockOwner": "",
        "canUnlock": false,
        "isDesignable": true
    },
    "workflow": {
        "isRunning": false
    },
    "workflows": {
        "wcm": {
            "models": [
                {
                    "wid": "/etc/workflow/models/publish_example/jcr:content/model",
                    "label": "Publish Example",
                    "label_xss": "Publish Example"
                },
                {
                    "wid": "/etc/workflow/models/request_for_activation/jcr:content/model",
                    "label": "Request for Activation",
                    "label_xss": "Request for Activation"
                },
                {
                    "wid": "/etc/workflow/models/request_for_deactivation/jcr:content/model",
                    "label": "Request for Deactivation",
                    "label_xss": "Request for Deactivation"
                }
            ]
        },
        "translation": {
            "models": [
                {
                    "wid": "/etc/workflow/models/translation/jcr:content/model",
                    "label": "Translation",
                    "label_xss": "Translation"
                }
            ]
        }
    },
    "translation": { },
    "design": {
        "path": "/etc/designs/geometrixx-outdoors",
        "lastModified": 1328083366095
    },
    "componentsRef": "/libs/wcm/core/content/components.1346781932984.json",
    "msm": {
        "msm:isLiveCopy": false,
        "msm:isInBlueprint": true,
        "msm:isSource": true
    },
    "language": "en",
    "languages": {
        "rows": [
            {
                "path": "/content/geometrixx-outdoors/en",
                "exists": true,
                "hasContent": true,
                "lastModified": 0,
                "iso": "en",
                "country": "gb",
                "language": "English"
            }
        ]
    },
    "workflowInfo": {
        "isRunning": false
    },
    "workflowPackageInfo": {
        "workflowPackages": [
            {
                "path": "/etc/workflow/packages/MyWorkflowPackage",
                "title": "MyWorkflowPackage",
                "isInWorkflowPackage": false,
                "isRunning": false
            } 
        ],
        "selectedWorkflowPackages": [ ],
        "runningSelectedWorkflowPackages": [ ]
    },
    "emulators": { },
    "annotations": [ ]

}

ワークフローパッケージ情報のフィルター処理

関心のあるワークフローパッケージに関する情報のみを返すように Day CQ WCM ワークフローパッケージ情報プロバイダーサービスを設定します。 デフォルトでは、ワークフローパッケージ情報プロバイダーサービスは、リポジトリ内のすべてのワークフローパッケージに関する情報を返します。 ワークフローパッケージのサブセットを反復すると、使用されるサーバーリソースが減少します。

注意:

サイドキックの「ワークフロー」タブでは、PageInfo サーブレットを使用して、ワークフローパッケージのリストが取得されます。 このリストから、現在のページを追加するパッケージを選択できます。 このリストは、ユーザーが作成したフィルターの影響を受けます。

サービスの ID は、com.day.cq.wcm.workflow.impl.WorkflowPackageInfoProvider です。 フィルターを作成するには、workflowpackageinfoprovider.filter プロパティの値を指定します。

プロパティの値の前には、+ または - の文字があり、その後にパッケージのパスが続きます。

  • このパスは、ワークフローパッケージのルートノードのパスです。 パスでは、FileVault 構文が使用されます。
  • パッケージを組み込むには、+ プレフィックスを使用します。
  • パッケージを除外するには、- プレフィックスを使用します。 

サービスにより、すべてのフィルターを累積した結果が適用されます。 例えば、次のフィルター値を指定すると、Editions フォルダー内にあるものを除き、すべてのワークフローパッケージが除外されます。

-/etc/workflow/packages(/.*)?
+/etc/workflow/packages/Editions(/.*)?

注意:

AEM と連携する場合は、いくつかの方法でこのようなサービスの設定を管理できます。詳しくは、「OSGi の設定」を参照してください。

例えば、CRXDE Lite を使用してサービスを設定するには、次のようにします。

  1. CRXDE Lite(http://localhost:4502/crx/de)を開きます。
  2. アプリケーションの config フォルダーでノードを作成します。
    • 名前: com.day.cq.wcm.workflow.impl.WorkflowPackageInfoProvider
    • タイプ: sling:OsgiConfig
  3. ノードを選択してプロパティを追加します。
    • 名前: workflowpackageinfoprovider.filter
    • タイプ: String[]
    • 値: 正しい形式を使用したワークフローパッケージのパス。
  4. 「すべて保存」をクリックします。

プロジェクトソースでサービスを設定するには:

  1. プロジェクトソースで CQ アプリケーションの config フォルダーを探すか、作成します。 

    例えば、マルチモジュールアーキタイプのコンテンツパッケージ Maven プラグインを使用してプロジェクトを作成した場合、フォルダーのパスは、projectroot/content/src/ for example content/src/main/content/jcr_root/apps/appname/config になります。

  2. config フォルダー内に com.day.cq.wcm.workflow.impl.WorkflowPackageInfoProvider.xml という名前のテキストファイルを作成します
  3. このファイルに次のテキストをコピーします。

    <?xml version="1.0" encoding="UTF-8"?>
    <jcr:root xmlns:sling="http://sling.apache.org/jcr/sling/1.0"
            xmlns:jcr="http://www.jcp.org/jcr/1.0"
            jcr:primaryType="sling:OsgiConfig"
            workflowpackageinfoprovider.filter="[]"/>

  4. workflowpackageinfoprovider.filter のプロパティを囲む大括弧(「[]」)内に、次の例と同様に、フィルター値をコンマで区切ったリストを入力します。

    workflowpackageinfoprovider.filter="[-/etc/workflow/packages(/.*)?,+/etc/workflow/packages/Editions(/.*)?]"/>

  5. ファイルを保存します

ページ情報プロバイダーの作成

アプリケーションが簡単に取得可能なページメタデータを追加するためにカスタムページ情報プロバイダーサービスを作成します。

  1. com.day.cq.wcm.api.PageInfoProvider インターフェイスを実装します。
  2. クラスをバンドルし、OSGi サービスとしてデプロイします。
  3. アプリケーションのページコンポーネントを作成します。 sling:resourceSuperType プロパティの値として foundation/components/page を使用します。
  4. cq:infoProviders という名前のコンポーネントノードの下にノードを追加します。
  5. cq:infoProviders ノードの下に、PageInfoProvider サービスのノードを追加します。 ノードには、任意の名前を指定できます。
  6. PageInfoProvider ノードに次のプロパティを追加します。
    • 名前:className
    • タイプ: String
    • 値: PageInfoProvider サービスの PID。

アプリケーションページコンポーネントを sling:resourceType として使用するリソースの場合、PageInfo サーブレットは、デフォルトの PageInfoProvider メタデータに加えて、カスタム PageInfoProvider メタデータも返します。

PageInfoProvider の実装例

次の Java クラスは、PageInfoProvider を実装しており、現在のページリソースの公開済み URL を返します。

package com.adobe.example;

import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Properties;
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.ReferenceCardinality;
import org.apache.felix.scr.annotations.Service;
import org.apache.felix.scr.annotations.Reference;

import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;

import org.apache.sling.commons.json.JSONException;
import org.apache.sling.commons.json.JSONObject;

import com.day.cq.wcm.api.Page;
import com.day.cq.wcm.api.PageInfoProvider;

@Component(metatype = false)
@Properties({
	@Property(name="service.description", value="Returns the public URL of a resource.")
})
@Service
public class PageUrlInfoProvider implements PageInfoProvider {


	@Reference(cardinality = ReferenceCardinality.OPTIONAL_UNARY)
	private com.day.cq.commons.Externalizer externalizer;

	private String fetchExternalUrl(ResourceResolver rr, String path) {
		return externalizer.publishLink(rr, path);
	}

	public void updatePageInfo(SlingHttpServletRequest request, JSONObject info, Resource resource)
			throws JSONException {

		Page page = resource.adaptTo(Page.class);
		JSONObject urlinfo = new JSONObject();
		urlinfo.put("publishURL", fetchExternalUrl(null,page.getPath()));
		info.put("URLs",urlinfo);
	}
}

次の CRXDE Lite における例は、PageUrlInfoProvider サービスを使用するように設定された geometrixx-outdoors アプリケーションのページコンポーネントを示しています。

 

PageUrlInfoProvider サービスは、/content/geometrixx-outdoors/en ノードの次のデータを返します。

"URLs": {
    "publishURL": "http://localhost:4503/content/geometrixx-outdoors/en"
}

本作品は Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License によってライセンス許可を受けています。  Twitter™ および Facebook の投稿には、Creative Commons の規約内容は適用されません。

法律上の注意   |   プライバシーポリシー