As ofertas comerciais da Liferay foram renomeadas de LXC para Liferay SaaS, de LXC - SM para Liferay PaaS e de DXP para Liferay Self-Hosted. Para mais informações, por favor clique aqui.

Release Notes

Um erro ocorreu enquanto processava o modelo.
The following has evaluated to null or missing:
==> restArticle.taxonomyCategoryBriefs  [in template "2010607#2010649#24589768" at line 232, column 72]

----
Tip: It's the step after the last dot that caused this error, not those before it.
----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #list restArticle.taxonomyCategoryBri...  [in template "2010607#2010649#24589768" at line 232, column 65]
----
1<style> 
2	.container-release-feature-search { 
3		a.link-container:hover, a.link-container.hover { 
4			background-color: var(--color-action-primary-hover-10, #EDF3FE); 
5			border: 0.0625rem solid var(--link-hover-color, #0053F0); 
6			color: var(--link-hover-color, #0053F0); 
7			text-decoration: none; 
8
9 
10		.btn-tooltip-availability { 
11			border-color: var(--btn-default-border-color, transparent); 
12			border-width: var(--btn-border-width, 0.0625rem); 
13			color: var(--btn-default-color); 
14			cursor: pointer; 
15			line-height: normal; 
16			padding: 0.063rem; 
17
18 
19		.collapse-container { 
20			position: relative; 
21
22 
23		.collapse-container .tooltip { 
24			margin-top: -6.25rem; 
25			transform: translateX(-40%); 
26			width: 8.75rem; 
27
28 
29		.empty-container { 
30			background-color: var(--color-neutral-0); 
31			border-color: var(--color-neutral-3); 
32			border-radius: var(--border-radius); 
33			border-style: solid; 
34			border-width: 0.0625rem; 
35			margin-top: 0.8rem; 
36			padding: 1.5rem 1.5rem 0.0625rem 1.5rem; 
37
38 
39		.empty-message-title { 
40			color: var(--color-neutral-10, #282934); 
41			font-size: 1.125rem; 
42			font-weight: 600; 
43			line-height: 1.25rem; 
44
45 
46		.empty-result-message { 
47			align-items: center; 
48			margin: 5rem auto; 
49
50 
51		.icon-container { 
52			background-color: var(--color-brand-primary-lighten-5, #E7EFFF); 
53			border-radius: 0.5rem; 
54			margin-bottom: 2rem; 
55			max-width: 9rem; 
56
57 
58		.label-previous-status{ 
59			background-color: var(--color-neutral-2, #E1E1E4); 
60			color: var(--color-neutral-7, #6C6C76); 
61			text-decoration: line-through; 
62
63 
64		.link-container { 
65			background-color: var(--color-brand-primary-lighten-6, #FBFCFE); 
66			border: 0.0625rem solid var(--color-brand-primary-lighten-5, #E7EFFF); 
67			border-radius: 0.625rem; 
68			color: var(--color-action-neutral-default, #2B3A4B); 
69			font-size: 0.875rem; 
70			padding: 0.75rem; 
71			word-break: break-word; 
72
73 
74		.link-container > svg { 
75			fill: var(--link-color, #0B5FFF); 
76			height: 0.75rem; 
77			width: 0.75rem; 
78
79 
80		.link-container span { 
81			padding-left: 0.5rem; 
82
83 
84		.pagination-bar { 
85			align-items: flex-start; 
86			display: flex; 
87			gap: 1rem; 
88
89 
90		.pagination-bar .dropdown.pagination-items-per-page { 
91			align-items: flex-start; 
92			display: flex; 
93
94 
95		.pagination-bar .dropdown.pagination-items-per-page .dropdown-toggle.page-link { 
96			align-items: center; 
97			border-width: 0rem; 
98			color: var(--color-action-neutral-default, #2B3A4B); 
99			display: flex; 
100			font-size: 0.875rem; 
101			font-style: normal; 
102			font-weight: 600; 
103			gap: 0.25rem; 
104			justify-content: center; 
105			line-height: 1rem; 
106			text-align: center; 
107
108 
109		.pagination-bar .dropdown.pagination-items-per-page .dropdown-toggle.page-link .c-inner { 
110			align-items: center; 
111			display: flex; 
112			height: 1rem; 
113			justify-content: center; 
114
115 
116		.pagination-bar .dropdown.pagination-items-per-page .dropdown-toggle.page-link .c-inner .lexicon-icon.lexicon-icon-caret-double-l { 
117			align-items: center; 
118			display: flex; 
119			flex-shrink: 0; 
120			height: 1rem; 
121			justify-content: center; 
122			width: 1rem; 
123
124 
125		.pagination-bar .pagination { 
126			align-items: flex-start; 
127			display: flex; 
128			gap: 0.5rem; 
129			justify-content: center; 
130
131 
132		.pagination-bar .pagination .page-item .page-link { 
133			align-items: center; 
134			border-radius: 0.375rem; 
135			border-width: 0rem; 
136			color: var(--color-action-neutral-default, #2B3A4B); 
137			display: flex; 
138			font-size: 0.875rem; 
139			font-style: normal; 
140			font-weight: 600; 
141			gap: 0.25rem; 
142			justify-content: center; 
143			line-height: 1rem; 
144			min-width: 2rem; 
145			padding: 0.5rem; 
146			text-align: center; 
147
148 
149		.pagination-bar .pagination .page-item.active .page-link { 
150			background: var(--color-action-neutral-active-20, #D5D8DB); 
151
152 
153		.pagination-bar .pagination-results { 
154			align-items: flex-start; 
155			color: var(--color-neutral-10, #282934); 
156			display: flex; 
157			font-size: 0.8125rem; 
158			font-style: normal; 
159			font-weight: 400; 
160			gap: 0.25rem; 
161			line-height: 1rem; 
162			margin-top: 0.5rem; 
163
164 
165		.search-icon>svg { 
166			fill: var(--link-color, #0B5FFF); 
167			height: 2rem; 
168			margin: 1.5rem 3.5rem; 
169			width: 2rem; 
170
171 
172		.search-results .search-results-entry { 
173			align-items: flex-start; 
174			display: flex; 
175			flex-direction: column; 
176			gap: 0.25rem; 
177
178 
179		.search-results .search-results-entry .search-results-entry-title { 
180			color: var(--color-neutral-10, #282934); 
181			border-radius: 0.625rem; 
182			font-size: 1.125rem; 
183			font-style: normal; 
184			font-weight: 600 !important; 
185			line-height: 1.25rem; 
186			padding: 1rem 1rem 1rem 0.625rem; 
187
188 
189		.search-results .search-results-entry .search-results-entry-title .search-results-entry-content { 
190			color: var(--color-neutral-10, #282934); 
191			font-size: 1rem; 
192			font-style: normal; 
193			font-weight: 400; 
194			line-height: 1.5rem; 
195			margin-top: 1rem; 
196
197 
198		.search-results .search-results-entry .search-results-entry-title:hover { 
199			background: var(--color-action-primary-hover-10, #EDF3FE); 
200
201 
202		.search-results .solid { 
203			border-top: 0.0625rem solid var(--color-neutral-2, #E2E2E4); 
204
205 
206		.tooltip-inner a:hover, a.hover { 
207			color: var(--color-neutral-0, #FFFFFF); 
208			font-weight: var(--font-weight-bold, 700) !important; 
209
210
211</style> 
212 
213<div class="container-release-feature-search"> 
214	<div class="pt-3 search-results" id="searchResults"> 
215		<#if entries?has_content> 
216			<#list entries as searchEntry> 
217				<#assign restArticle = restClient.get("/headless-delivery/v1.0/structured-contents/${searchEntry.getClassPK()}?fields=contentFields,relatedContents,taxonomyCategoryBriefs,title&nestedFields=embeddedTaxonomyCategory") /> 
218 
219				<#if restArticle?has_content> 
220					<div class="align-items-stretch search-results-entry"> 
221						<div 
222							aria-controls="collapsePanelId-${searchEntry.getClassPK()}" 
223							aria-expanded="false" 
224							class="align-items-center btn btn-unstyled collapse-icon collapse-icon-middle collapsed d-flex font-weight-bold p-3 panel-header panel-header-link search-results-entry-title text-decoration-none unstyled" 
225							data-target="#collapsePanelId-${searchEntry.getClassPK()}" 
226							data-toggle="liferay-collapse" 
227
228							<span class="mr-5"> 
229								${restArticle.title} 
230							</span> 
231							<span class="ml-auto mr-5"> 
232								<#list restArticle.taxonomyCategoryBriefs as taxonomyCategoryBrief> 
233									<#assign taxonomyVocabularyName = taxonomyCategoryBrief.embeddedTaxonomyCategory.parentTaxonomyVocabulary.name /> 
234 
235									<#if taxonomyVocabularyName == "Product Capabilities"> 
236										<span class="font-weight-normal label label-secondary label-tonal-info m-0 px-2 text-paragraph-sm"> 
237											${taxonomyCategoryBrief.taxonomyCategoryName} 
238										</span> 
239									</#if> 
240								</#list> 
241							</span> 
242							<span class="collapse-icon-closed"> 
243								<@clay.icon symbol="angle-right" /> 
244							</span> 
245							<span class="collapse-icon-open"> 
246								<@clay.icon symbol="angle-down" /> 
247							</span> 
248						</div> 
249 
250						<div class="collapse collapse-container panel-collapse pl-3 pr-3" id="collapsePanelId-${searchEntry.getClassPK()}"> 
251							<div class="description search-results-entry-content"> 
252								<#assign 
253									url = "" 
254									urlTitle = "" 
255								/> 
256 
257								<#list restArticle.contentFields as fieldData> 
258									<#if fieldData.contentFieldValue.data?has_content && validator.isNotNull(fieldData.contentFieldValue.data)> 
259										<#assign webContentData = fieldData.contentFieldValue.data /> 
260 
261										<div> 
262											${webContentData} 
263										</div> 
264									</#if> 
265 
266									<#list fieldData.nestedContentFields as nestedFieldData> 
267										<#if nestedFieldData.contentFieldValue.data?has_content> 
268											<#assign webContentNestedData = nestedFieldData.contentFieldValue.data /> 
269 
270											<#if nestedFieldData.label?contains("Title")> 
271												<#assign urlTitle = nestedFieldData.contentFieldValue.data /> 
272											<#else> 
273												<#assign url = nestedFieldData.contentFieldValue.data /> 
274											</#if> 
275										<#else> 
276											<#assign urlTitle = "" /> 
277										</#if> 
278									</#list> 
279 
280									<#if urlTitle?has_content && validator.isNotNull(urlTitle)> 
281										<div class="d-flex mb-2"> 
282											<a class="link-container" href="${url}" target="_blank"> 
283												<@clay["icon"] symbol="link" /> 
284 
285												<span> 
286													${urlTitle} 
287												</span> 
288											</a> 
289										</div> 
290									</#if> 
291								</#list> 
292							</div> 
293 
294							<div class="ml-auto mr-5 mt-3"> 
295								<#list restArticle.taxonomyCategoryBriefs as taxonomyCategoryBrief> 
296									<#assign taxonomyVocabularyName = taxonomyCategoryBrief.embeddedTaxonomyCategory.parentTaxonomyVocabulary.name /> 
297 
298									<#if taxonomyVocabularyName == "Release Status Previous"> 
299										<span class="font-weight-normal label label-previous-status label-secondary label-tonal-secondary px-2 text-paragraph-sm"> 
300											${taxonomyCategoryBrief.taxonomyCategoryName} 
301 
302											<span class="pl-1"> 
303												<@clay["icon"] symbol="info-circle" /> 
304											</span> 
305										</span> 
306										<span class="mr-1"> 
307											<@clay["icon"] symbol="order-arrow-right" /> 
308										</span> 
309									</#if> 
310								</#list> 
311 
312								<#list restArticle.taxonomyCategoryBriefs as taxonomyCategoryBrief> 
313									<#assign taxonomyVocabularyName = taxonomyCategoryBrief.embeddedTaxonomyCategory.parentTaxonomyVocabulary.name /> 
314 
315									<#if taxonomyVocabularyName == "Feature Availability"> 
316										<span class="font-weight-normal label label-success label-tonal-success mb-3 px-2 text-paragraph-sm"> 
317											${taxonomyCategoryBrief.taxonomyCategoryName} 
318 
319											<span class="pl-1"> 
320												<div class="clay-tooltip-top fade tooltip" id="tooltipId-${searchEntry.getClassPK()}" role="tooltip"> 
321													<div class="arrow"></div> 
322 
323													<div class="tooltip-inner"> 
324														<#assign articleTooltipURL = "https://learn.liferay.com/web/guest/w/dxp/system-administration/configuring-liferay/feature-flags" /> 
325 
326														<a href="${articleTooltipURL}" target="_blank"> 
327															${languageUtil.get(locale, "learn-about-the-feature-availability-statuses", "Learn about the feature availability statuses.")} 
328														</a> 
329													</div> 
330												</div> 
331 
332												<button class="btn-tooltip-availability tooltip-button" data-tooltip-id="tooltipId-${searchEntry.getClassPK()}" type="button"> 
333													<@clay["icon"] symbol="info-circle" /> 
334												</button> 
335											</span> 
336										</span> 
337									</#if> 
338								</#list> 
339							</div> 
340						</div> 
341					</div> 
342 
343					<hr class="solid"> 
344				</#if> 
345			</#list> 
346		<#else> 
347			<div class="empty-container"> 
348				<div class="d-flex empty-result-message flex-column"> 
349					<div class="icon-container"> 
350						<div class="search-icon"> 
351							<@clay["icon"] symbol="search-experiences" /> 
352						</div> 
353					</div> 
354 
355					<span class="empty-message-title text-center"> 
356						${languageUtil.get(locale, "no-features-found-for-the-selected-product-capabilities-and-feature-availability", "No features found for the selected product capabilities and feature availability.")} 
357					</span> 
358				</div> 
359			</div> 
360		</#if> 
361	</div> 
362</div> 
363 
364<script> 
365	(function() { 
366		let buttons = document.querySelectorAll(".tooltip-button"); 
367 
368		buttons.forEach(function(button) { 
369			let tooltipId = button.dataset.tooltipId; 
370 
371			let tooltip = document.getElementById(tooltipId); 
372 
373			if (tooltip) { 
374				tooltip.style.display = "none"; 
375
376 
377			button.addEventListener("mouseover", function(event) { 
378				if (tooltip) { 
379					tooltip.classList.add("show"); 
380					tooltip.style.display = "block"; 
381
382			}); 
383 
384			document.addEventListener("click", function(event) { 
385				if (!event.target.classList.contains("tooltip-button")) { 
386					let tooltips = document.querySelectorAll(".tooltip.show"); 
387 
388					tooltips.forEach(function(tooltip) { 
389						tooltip.classList.remove("show"); 
390						tooltip.style.display = "none"; 
391					}); 
392
393			}); 
394		}); 
395	})(); 
396</script> 
Product Capabilities
Feature Availability