テンプレート処理中にエラーが発生しました。
Java method "com.liferay.portal.json.JSONFactoryImpl.createJSONObject(String)" threw an exception when invoked on com.liferay.portal.json.JSONFactoryImpl object "com.liferay.portal.json.JSONFactoryImpl@2ad66ae2"; see cause exception in the Java stack trace.

----
FTL stack trace ("~" means nesting-related):
	- Failed at: navigationJSONObject = jsonFactoryUti...  [in template "17855804202317#32484267#LEARN-ARTICLE-NAV" at line 4, column 9]
----
1<#assign 
2	groupFriendlyURL = themeDisplay.getScopeGroup().getFriendlyURL() 
3	groupPathFriendlyURLPublic = themeDisplay.getPathFriendlyURLPublic() + groupFriendlyURL 
4	navigationJSONObject = jsonFactoryUtil.createJSONObject(navigation.getData()) 
5	navigationMenuItems = 
6
7			"Analytics Cloud": { 
8				"image": "/documents/d${groupFriendlyURL}/analytics_c-svg", 
9				"title": "Analytics Cloud", 
10				"url": "analytics-cloud" 
11			}, 
12			"Commerce": { 
13				"image": "/documents/d${groupFriendlyURL}/commerce_product-svg", 
14				"title": "Commerce", 
15				"url": "commerce" 
16			}, 
17			"DXP": { 
18				"image": "/documents/d${groupFriendlyURL}/dxp_p-svg", 
19				"title": "DXP / Portal", 
20				"url": "dxp" 
21			}, 
22			"Liferay Cloud": { 
23				"image": "/documents/d${groupFriendlyURL}/dxp_c-svg", 
24				"title": "Liferay Cloud", 
25				"url": "liferay-cloud" 
26			}, 
27			"Reference": { 
28				"image": "/documents/d${groupFriendlyURL}/reference-svg", 
29				"title": "Reference", 
30				"url": "reference" 
31
32
33 
34	breadcrumbJSONArray = navigationJSONObject.getJSONArray("breadcrumb") 
35	childrenJSONArray = navigationJSONObject.getJSONArray("children") 
36	parentJSONObject = navigationJSONObject.getJSONObject("parent") 
37	productJSONObject = breadcrumbJSONArray.getJSONObject(breadcrumbJSONArray.length()-1)!navigationJSONObject.getJSONObject("self") 
38	siblingsJSONArray = navigationJSONObject.getJSONArray("siblings") 
39/> 
40 
41<div class="learn-article-nav"> 
42	<#if productJSONObject?has_content && productJSONObject.getString("title")?has_content && navigationMenuItems[productJSONObject.getString("title")]?has_content && navigationMenuItems[productJSONObject.getString("title")].title?has_content> 
43		<div 
44			class="dropdown learn-article-nav-root learn-dropdown" 
45
46			<div class="learn-article-nav-item"> 
47				<div class="d-flex"> 
48					<div class="learn-article-nav-image"> 
49						<img 
50							class="lexicon-icon lexicon-icon-caret-bottom product-icon" 
51							role="presentation" 
52							src='${navigationMenuItems[productJSONObject.getString("title")].image}' 
53							viewBox="0 0 512 512" 
54						/> 
55					</div> 
56 
57					<span class="learn-article-nav-text">${navigationMenuItems[productJSONObject.getString("title")].title}</span> 
58				</div> 
59 
60				<div id="dropdown-icon"> 
61					<svg 
62						class="lexicon-icon lexicon-icon-caret-bottom" 
63						role="presentation" 
64						viewBox="0 0 512 512" 
65
66						<use xlink:href="/o/admin-theme/images/clay/icons.svg#caret-bottom"></use> 
67					</svg> 
68				</div> 
69			</div> 
70 
71			<ul class="dropdown-menu learn-dropdown-menu"> 
72				<#list navigationMenuItems as key, value> 
73					<li> 
74						<a 
75							class="dropdown-item learn-article-nav-item" 
76							href="/w/${navigationMenuItems[key].url}/index" 
77							tabindex="4" 
78
79							<span class="d-flex"> 
80								<span class="learn-article-nav-image"> 
81									<img 
82										class="lexicon-icon lexicon-icon-caret-bottom product-icon mt-0 mr-2" 
83										role="presentation" 
84										src="${value.image}"height: 25px; margin-left: 5px; max-width: none; width: 25px; 
85										viewBox="0 0 512 512" 
86									/> 
87								</span> 
88								<span class="learn-article-nav-text">${value.title}</span> 
89							</span> 
90 
91							<#if navigationMenuItems[productJSONObject.getString("title")].url == value.url> 
92								<span> 
93									<@clay["icon"] symbol="check" /> 
94								</span> 
95							</#if> 
96						</a> 
97					</li> 
98				</#list> 
99			</ul> 
100		</div> 
101	</#if> 
102 
103	<div class="learn-article-nav-content"> 
104		<#if parentJSONObject?has_content && parentJSONObject.getString("url")?has_content> 
105			<div class="learn-article-nav-item learn-article-nav-parent liferay-nav-item p-2"> 
106				<div class="mr-2"> 
107					<a 
108						href='${parentJSONObject.getString("url")}' 
109
110						<svg 
111							class="lexicon-icon lexicon-icon-angle-left" 
112							role="presentation" 
113							viewBox="0 0 512 512" 
114
115							<use xlink:href="/o/admin-theme/images/clay/icons.svg#angle-left"></use> 
116						</svg> 
117					</a> 
118				</div> 
119 
120				<span>${parentJSONObject.getString("title")}</span> 
121			</div> 
122		</#if> 
123 
124		<#if childrenJSONArray.length() gt 0> 
125			<ul class="m-0 p-2"> 
126				<#list 0..childrenJSONArray.length()-1 as i> 
127					<li class="learn-article-nav-item"> 
128						<a 
129							class='liferay-nav-item ${(navigationJSONObject.getJSONObject("self").url == childrenJSONArray.getJSONObject(i).url)?then("selected", "")}' 
130							href="${childrenJSONArray.getJSONObject(i).url}" 
131
132							<span>${childrenJSONArray.getJSONObject(i).getString("title")}</span> 
133						</a> 
134					</li> 
135				</#list> 
136			</ul> 
137		<#elseif siblingsJSONArray.length() gt 0> 
138			<ul class="m-0 p-2"> 
139				<#list 0..siblingsJSONArray.length()-1 as i> 
140					<li class="learn-article-nav-item"> 
141						<a 
142							class='liferay-nav-item ${(navigationJSONObject.getJSONObject("self").url == siblingsJSONArray.getJSONObject(i).url)?then("selected", "")}' 
143							href="${siblingsJSONArray.getJSONObject(i).url}" 
144
145							<span>${siblingsJSONArray.getJSONObject(i).getString("title")}</span> 
146						</a> 
147					</li> 
148				</#list> 
149			</ul> 
150		</#if> 
151	</div> 
152</div> 

Liferay DXP 7.4 新機能一覧

Liferay DXP 7.4は、強化された機能と大幅な改良が施されおり、技術者と非技術者の両方にとって、デジタルエクスペリエンスの提供および最適化がさらに容易になります。

データに基づくインサイトによるデジタルエクスペリエンスの最適化

A/Bテストで任意の要素をクリックターゲットに設定する

これで、 ページ上の任意の要素でA/Bテストを実行できるようになりました 。 Liferay DXP 7.4以前は、[Click Goal]としてボタンやリンクしか選択できませんでした。 Liferay DXP 7.4では、任意のページ要素をその[Element ID]を含めることで選択できるようになりました。

You can now run AB tests on any element on the page.

よりインサイトのあるコンテンツ監査ツール

コンテンツダッシュボードの コンテンツ監査ツール では、バーをクリックして結果を拡大できるようになり、1つのボキャブラリカテゴリにのみ割り当てられたコンテンツがグラフに表示されるようになりました。 今回の機能強化により、マーケティング担当者は誤って分類されたコンテンツを簡単に発見できるようになりました。

Zoom in on Content Audit results.

コンテンツ監査ツールのUXの改善

また、コンテンツダッシュボードの コンテンツ監査ツール の使い勝手もいくつか改善されています。 例えば、監査の対象とするボキャブラリの選択がより簡単になり、棒グラフの軸をワンクリックで反転させることができるようになりました。

Select vocabularies and flip the bar chart axes.

コンテンツパフォーマンスツールでのトラフィック獲得チャネル

Content Performance Tool のトラフィック獲得チャネルは、 Analytics Cloud のデータを使用しており、オーガニック検索、有料検索、ソーシャル・トラフィック、およびリファラルの測定値が含まれています。 チャンネルの詳細表示では、すべての参照元URLとドメインが表示されます。

Traffic acquisition channels include search, social and referral data.

あらゆるタイプのページのコンテンツパフォーマンス解析

コンテンツパフォーマンスパネルは、すべてのページで利用できるようになりました。すべてのアセット、コンテンツ、およびウィジェットページのページテンプレートを表示します。 Liferay DXP 7.4以前では、コンテンツパフォーマンスツールは、ディスプレイページテンプレートを介してレンダリングされたWebコンテンツでのみ利用可能でした。

The Content Performance Panel can be used for all page types.

優れたDXの構築

ページ監査

Liferay DXP 7.4からは、ページのSEOやアクセシビリティを監査するために、 ページ監査ツール を使用することができます。 ページ監査ツールは Google PageSpeed Insights サービスを使用して、Liferay DXPに特定の推奨事項を提供します。 新しいページ監査ツールでは、ページが最高のパフォーマンス、アクセシビリティ、検索エンジンのメタデータ、およびSEOのプラクティスに準拠しているかどうかをチェックできます。

Google PageSpeed Insights integration provides recommendations.

エクスペリエンスの複製や下書きがより柔軟に

Liferay DXP Experiences を下書きや複製して、デフォルトのエクスペリエンスを別のものに置き換えることができます。 これらの機能強化により、エクスペリエンスの作成と管理がより柔軟に行えるようになりました。

Replicate and Draft Experiences easily.

コンテンツダッシュボードで新たにドキュメントの表示

ドキュメントは コンテンツダッシュボード に表示されるようになり、アセットタイプやMIMEタイプに基づいた新しいフィルタが追加されました。 これらのフィルターは、コンテンツダッシュボードのフィルターと並び替えドロップダウンメニューからアクセスできます。

There are new filters in the Content Dashboard.

アカウント管理ウィジェット

アカウントユーザーは、自社のWebサイトにいながら、自社の詳細情報、住所、割り当てられたユーザー、関連する組織、グループ、ロールを閲覧・管理することができ、また、ポータル管理者によるアカウント管理のサポートを最小限に抑えることができます。

シームレスなB2B購買体験を実現。Commerce 4.0による安定性の向上と改善

特定のデバイスに最適化された製品画像

ページの読み込み速度は、レンダリングされるデバイスに応じて画像の品質を変更することで最適化されます。

注文タイプに応じて異なる価格と割引

売り手は、緊急の注文と在庫のある注文など、注文状況に応じて価格や割引を変更することができます。

改善された組織管理ウィジェット

組織図ウィジェットが組織管理ウィジェットになり、購入者にサービスを提供するのと同じプラットフォーム内で、販売ネットワークを簡単に管理できるようになりました。

ビジネスユーザーはコードを書かずにアプリケーションを構築できる

Liferay Objects を使用すると、コードを記述したりモジュールをデプロイしたりすることなくアプリケーションを構築および配信できますが、これらのアプリケーションはLiferayのコアフレームワーク上に構築され、統合されています。 シームレスなユーザーエクスペリエンスを維持しながら、Liferay DXPをビジネスニーズに適応させる柔軟なソリューションを迅速に開発および管理します。

UIによるカスタムオブジェクトの管理

オブジェクトを定義し、フィールドやオブジェクトのレイアウトを追加したり、UIを介してエントリーの表示方法を選択したりできます。 また、各カスタムオブジェクトの範囲を定義することもできます。

エクスペリエンス管理でオブジェクト統合

オブジェクトは、Infoフレームワークを通じて表示ページと統合されます。 オブジェクトを作成すると、コレクションプロバイダーが自動的に生成され、コレクション表示フラグメントを介してオブジェクトエントリーのエクスペリエンスを作成できます。

フォームとオブジェクトの統合

フォームの保存タイプをオブジェクトに変更することで、フォームのすべての機能を利用して、特定のオブジェクトにデータを挿入できます。

オブジェクトリレーション

複雑なユースケースを オブジェクトリレーション で解決することができます。カスタムオブジェクトだけでなく、ブログエントリーやWebコンテンツのようなLiferayに同梱されているネイティブオブジェクトとオブジェクトを関連付ける簡単な方法です。

DXPフレームワークとのオブジェクト統合

Liferay Objectsは、アセット、ワークフロー、権限など、既存のLiferay DXPフレームワークと完全に統合されています。 オブジェクトが作成されると、そのオブジェクト固有のHeadless APIが自動的に作成され、Liferay APIエクスプローラーからアクセスすることができます。

検索ウィジェットのオブジェクトのサポート

タイプファセットウィジェットは、検索可能なLiferay Objectタイプをサポートしており、検索結果ウィジェットはオブジェクトエントリを表示することができます。

コレクション表示フラグメントでのぺージネーションのサポート

コレクション表示フラグメントでコレクションアイテムをページ分割できるようになりました。 この新機能は、多数のアイテムを含むコレクションに特に有効です。 大規模なコレクションがより読みやすくなり、ユーザビリティと全体的なエクスペリエンスが向上します。

You can now paginate collections in Collection Display Fragments.

コレクション表示のフラグメントの検索とフィルタリング

Liferay DXP 7.4には2つの新しいフラグメントが含まれています。[Collection Filter]と[Applied Filter]です。

これらのフィルターをコレクション表示フラグメントとともにページで使用すると、さまざまな基準に基づいてコレクションをフィルタリングし、コレクションにどのようなフィルターが適用されたかを表示することができます。

New filters help users find data in collections.

関連アイテムコレクションで、ある特定のアイテムに関連するアイテムを表示

コレクション表示フラグメントを使用する際に、新しい[Related Items Collection Providers ]タブを使用して、関連するコレクションからアイテムを選択して表示できるようになりました。

Now it's easy to choose related items.

コレクションプロバイダのプレフィルタリングオプションの定義

開発者は、特定の構成フィールドを使用してコレクションプロバイダーをカスタマイズできるようになりました。 これにより、ユーザーはコレクションプロバイダーを事前にフィルタリングし、コレクション表示フラグメントのアイテムをより柔軟に選択できます。 ユーザーは、コレクション表示フラグメントの[Actions]メニューからフィルターにアクセスできます。

Now you can pre-filter Collection providers.

マッピング要素としてコレクションプロバイダーのサブタイプフィールドの指定

Infoフレームワークでコレクションプロバイダーを構築する際に、開発者はサブタイプフィールドを含めることができます。 これにより、エンドユーザーは、コレクション表示フラグメントでコレクションプロバイダーを使用する際に、ページ上のフィールドをサブタイプにマッピングできます。

ビューポートに基づいたフラグメントの表示/非表示

あるビューポートではフラグメントを非表示にし、別のビューポートでは表示したままにすることができます。 この新機能により、特定のユーザープラットフォーム向けにコンテンツの応答性をさらにカスタマイズすることができます。

You can hide a Fragment on one Viewport while keeping it visible on another.

コンテンツページおよび表示ページテンプレートのアダプティブメディアのネイティブサポート

コンテントページの画像にアダプティブメディア を使用し、ターゲットの画面サイズに基づいて画像の解像度を動的に調整することが可能になりました。 アダプティブメディアに画像解像度を追加 した後、コンテントページの画像の[Resolution]のドロップダウンメニューに解像度が表示されます。

Adaptive Media can now adjust image resolutions dynamically based on screen size.

デジタルエクスペリエンスの立ち上げと維持のためのコストと労力の削減

Webコンテンツの自動翻訳

この機能は、 Webコンテンツの記事を翻訳する プロセスを加速するのに役立ちます。 これは、7.3で行われたコンテンツの翻訳プロセスを効率化するための取り組みを引き継いだものです。 この機能があれば、翻訳者は最初から翻訳を始めるのではなく、翻訳の質の向上に集中できます。

ドキュメントの有効期限

この機能は、コンテンツ管理者が 古いドキュメントをコントロール し、一時的なライセンスなどが原因でドキュメントが公開されるのを防ぐのに役立ちます。

改良されたWYSIWYGエディター

ネイティブCKEditorの機能を活用した新しいバルーンエディターが誕生しました。 これは、前身であるAlloy Editorに比べて軽量化されており、複雑さとメンテナンスが軽減されています。 また、ユーザー向けの機能を維持しつつ、いくつかのUXの改善も行っています。

アセットライブラリとステージング可能なサイトとの連携が可能に

この機能により、データの分離が重要となる規制の厳しい分野のお客様のコンテンツの整理と再利用が向上します。

アセットライブラリにステージングサポートを導入することで、データの分離をしたまま、複数のサイトで同じコンテンツを使用する際に、コンテンツを整理するための労力とコストを削減することができます。 これは、7.3にもバックポートされています。

ドキュメントやメディアをアップロードする際の高度ファイルアップローダーオプション

顧客は、後にコンテンツ作成に使用される要素を格納するためにドキュメントとメディアをメディアリポジトリとして利用します。 しかし、ブログ記事などの非公式なもので、コンテンツ作成時に使用したアセットをコンテンツ作成のプロセス中にアップロードされる場合があります。

このプロセスを加速するために、コンテンツ制作者はフォルダを作成したり、アイテムセレクターから必要なメタデータをすべて含んだファイルをアップロードしたりすることができるようになり、コンテンツ作成のプロセスの時間と労力を削減することができます。

公開でのコラボレーション

公開には、多くの場合、1つのプロジェクトに複数のコンテンツ編集者が関与します。 チームメンバーを公開に招待し、閲覧、編集、公開を行えるようにできます。 また、新しいコメントシステムで変更点を議論することもできます。 ワークフローを通過中のアイテムは、公開前に承認が必要です。

ステージング性能の向上

ステージングでのページの公開は、ページの親や子を参照せずに必要なページだけを公開することで、効率化できるようになりました。 また、アセットリンクをページと一緒に公開するかどうかも選択できます。

Elasticsearch 7.15.xとの互換性を即座に実現

Liferay DXP 7.4はElasticsearch 7.15.xをサポートしています。 Elasticsearch Sidecar (開発およびテスト用で、サポートされていません)サーバーは、オープンソースのElasticserchディストリビューションのバージョン7.10.2です。

Liferay Enterprise Search(LES)アプリケーションのバンドル

Liferay DXP 7.4より、 Liferay Enterprise Search (LES)アプリケーション は、すべてのLiferay DXPバンドルとDockerコンテナに含まれています。 LESはデフォルトで有効になっており、追加のインストール手順は必要ありません。 ただし、Liferayの公式サポートや追加特典を受けるためには、LESのアドオンサブスクリプションを購入する必要があります。 LESアプリケーションのメンテナンスとアップデートは、フィックスパックとサービスパックのリリースを通じて行われます。

相互接続された社内システムとしてのLiferay DXPの活用

DXPアカウント

DXPアカウントでは、それぞれのエンティティ(企業、従業員、その職務に関する責任)をモデル化し、これらのエンティティ間の連携(商品やサービスの購入など)を促し、連携をサポートするための関連情報(Tax ID、請求先住所、発送先住所、人員構成など)を文書化することができます。

どこにでもAPIを

Liferay DXPには、ユーザー管理、サイトページとエクスペリエンス、言語、権限、構造化コンテンツなどのためのRESTおよびGraphQL APIが含まれています。

OAuth2の機能強化

登録したOAuth 2アプリケーションを信頼できるアプリケーションとして設定することで、トークン取得時の手動認証を回避することができます。

また、OAuth 2アプリケーションを登録することで、ユーザーが手動で行った認証をデバイスに記憶させることができます(例:「remember me」)。

登録したOAuth 2アプリケーションの既存の認証を、OAuth 2アプリケーションの一覧画面でワンクリックで取り消すことができます。

多要素認証におけるFIDO2ベースのハードウェアキーファクターサポート

ユーザーは、内蔵された多要素認証を利用して、 一般的なデバイス(指紋リーダー、USBキー)を活用し 、モバイル環境とデスクトップ環境の両方でオンラインサービスの認証を行うことができます。

SAMLのデータ管理とメンテナンスの向上

属性マッピングのユーザーエクスペリエンスが向上したことで、SPユーザーの照合に利用される識別子の範囲や追跡のモデル化のコントロールができるようになりました。 IDP側でユーザーのemailAddressを変更することはもう問題ではない。 また、カスタムフィールドマッピングもオプションになりました。

また、完全な後方互換性もあります。SAMLインテグレーションを再設定するまでは、既存の動作が維持され、SPユーザーのUUIDフィールドをユーザーの目的以外に使用することはありません。

チャット機能との統合

すぐに使える 数多くのチャットプラットフォーム との統合が可能です。 インスタンスの設定で統合を有効にすると、ユーザーは自分の都合に合わせて担当者とチャットできるようになります。 別途、チャットプロバイダーの契約が必要となりますのでご注意ください。 OOTB統合できるチャットプロバイダーは以下の通りです。

  • Chatwoot
  • Crisp
  • Hubspot
  • JivoChat
  • LiveChat
  • Liveperson
  • Smartsupp
  • Tawk.to
  • Tidio
  • Zendesk

DocuSignの統合

すぐに使える DocuSignとの統合 が利用可能です。 インスタンス設定で統合を有効にすると、コントロールパネルのドキュメントとメディアと電子署名モジュールから、ユーザーはドキュメントを添付した電子署名用エンベロープをDocuSignに送信できるようになります。 ユーザーは、過去に送信した電子署名エンベロープのステータスを確認したり、署名済みのドキュメントをダウンロードしたりできます。 本機能のご利用には、別途DocuSigntとの契約が必要となります。