/o//commerce-media/accounts/-1/images/18471927?download=true
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
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
Réalisateur
Publisher Date
January 22, 2024
Deployment Method
Liferay Self-Hosted
Liferay PaaS
App Type
Version
Standard Price
Help and Support
Partager le lien
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>
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.