/o//commerce-media/accounts/-1/images/18471927?download=true

Show Pending Web Content
Data Modeling, Process & Business Logic
18470984
Description
When any liferay web content is in workflow, no user can see the changes (from Web content Display Portlet) happening during workflow execution. For example, let say 4 levels of workflow has been configured for some site. When any user creates any web content, it will start workflow and reach to each level. At each level, a user who is part of that level, may update web content and send it further. Any user can't see these intreme changes happening during workflow from Web Content Display Portlet.

Many time Business users who owns the content want to see on going changes done through workflow. Out of the box, Liferay will not provide this facility. This App will help to avoid this limitation. It comprises of EXT and one hook. This app provides dynamic mechanism which allow users to see on going changes during workflow execution by introducing special role. This role is declared in portal-ext.properties(included in EXT plugin) file as below.

role.to.see.pending.content=SHOW_PENDING_CONTENT_ROLE

So after deploying this app, you need to just create one regular role called 'SHOW_PENDING_CONTENT_ROLE' and assign it to user who wants to see on going changes. This way they can see on going changes without explicitly going to Control Panel
When any liferay web content is in workflow, no user can see the changes (from Web content Display Portlet) happening during workflow execution. For example, let say 4 levels of workflow has been configured for some site. When any user creates any web content, it will start workflow and reach to each level. At each level, a user who is part of that level, may update web content and send it further. Any user can't see these intreme changes happening during workflow from Web Content Display Portlet.

Many time Business users who owns the content want to see on going changes done through workflow. Out of the box, Liferay will not provide this facility. This App will help to avoid this limitation. It comprises of EXT and one hook. This app provides dynamic mechanism which allow users to see on going changes during workflow execution by introducing special role. This role is declared in portal-ext.properties(included in EXT plugin) file as below.

role.to.see.pending.content=SHOW_PENDING_CONTENT_ROLE

So after deploying this app, you need to just create one regular role called 'SHOW_PENDING_CONTENT_ROLE' and assign it to user who wants to see on going changes. This way they can see on going changes without explicitly going to Control Panel
DEVELOPER

Réalisateur


Publisher Date

January 22, 2024


Deployment Method

Liferay Self-Hosted

Liferay PaaS


App Type

DXP

Version

1.0

Standard Price

Free

Help and Support


Partager le lien

DEVELOPER
19/08/14 00:00
Published date
19/08/14 00:00
Published Date
19/08/14 00:00
SUPPORTED OFFERINGS
Liferay PaaS
Supported Versions
Resource Requirements
Une erreur s'est produite lors du traitement du modèle.
The following has evaluated to null or missing:
==> channel.items  [in template "3192443#3192485#null" at line 18, column 30]

----
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: #assign channelId = channel.items[0].id  [in template "3192443#3192485#null" at line 18, column 9]
----
1<#if themeDisplay?has_content> 
2	<#assign scopeGroupId = themeDisplay.getScopeGroupId() /> 
3</#if> 
4 
5<#if currentURL?has_content> 
6	<#if currentURL?contains('web')> 
7		<#assign 
8			index = 2 
9			partsUrl = currentURL?split('/') 
10			siteName = partsUrl[index..index]?join('/') 
11		/> 
12	</#if> 
13</#if> 
14 
15<#assign channel = restClient.get("/headless-commerce-delivery-catalog/v1.0/channels?accountId=-1&filter=name eq 'Marketplace Channel' and siteGroupId eq '${scopeGroupId}'") /> 
16 
17<#if channel?has_content> 
18	<#assign channelId = channel.items[0].id /> 
19</#if> 
20 
21<#if (CPDefinition_cProductId.getData())??> 
22	<#assign productId = CPDefinition_cProductId.getData() /> 
23</#if> 
24 
25<#assign 
26	product = restClient.get("/headless-commerce-delivery-catalog/v1.0/channels/"+ channelId +"/products/"+ productId +"?accountId=-1&nestedFields=productSpecifications") 
27	specifications = product.productSpecifications![] 
28/> 
29 
30<div> 
31	<#if specifications?has_content> 
32 
33		<#assign 
34			specificationCPUs = specifications?filter(item -> stringUtil.equals(item.specificationKey, "cpu")) 
35			specificationRAMs = specifications?filter(item -> stringUtil.equals(item.specificationKey, "ram")) 
36			 cpuQuantity = "" 
37				  memoryQuantity = "" 
38		/> 
39 
40		<#if specificationCPUs?has_content> 
41		 	<#list specificationCPUs as cpu> 
42				<#assign cpuQuantity = cpu.value /> 
43 
44				<#if cpuQuantity?has_content> 
45					${cpuQuantity} 
46					<#if cpuQuantity?eval gt 1> 
47						CPUS 
48					</#if> 
49 
50					<#if cpuQuantity?eval lt 2> 
51						CPU 
52					</#if> 
53				</#if> 
54		  	</#list> 
55		</#if> 
56 
57		<#if specificationRAMs?has_content> 
58		  	<#list specificationRAMs as ram> 
59				<#assign memoryQuantity = ram.value /> 
60 
61				<#if cpuQuantity?has_content && memoryQuantity?has_content >, </#if> 
62 
63				<#assign memoryQuantity = ram.value /> 
64 
65				<#if memoryQuantity?has_content> 
66					${memoryQuantity} GB RAM 
67				</#if> 
68		  	</#list> 
69		</#if> 
70	</#if> 
71</div> 
Edition
Community
PRICE
Free
help & support
SHARE LINK
Copy & Share

HTML Example

A paragraph is a self-contained unit of a discourse in writing dealing with a particular point or idea. Paragraphs are usually an expected part of formal writing, used to organize longer prose.