/o//commerce-media/accounts/-1/images/18643191?download=true
DB Pruner is the perfect utility to prepare for a Liferay upgrade!
The Liferay upgrade documentation says a best practice is to
prune unnecessary data from your database before doing an upgrade. The
reason this is a best practice is that the Liferay upgrade processes
will typically at least verify but often update all of the records in
the database. The more records you have, the longer the upgrade
process will take to run. Cleaning out old and/or unnecessary records
can shorten your upgrade time.
Although the documentation tells you it is a best practice to
prune unused data, they don't tell you how to prune it properly (other
than to invoke the Liferay API and never delete in the database directly).
This tool, however, does handle the pruning properly.
The DB Pruning Wizard is a control panel available for Liferay
6.2 CE, Liferay 6.2 EE, Liferay 7.0 CE, Liferay 7.0 DXP, Liferay 7.1
CE and Liferay 7.1 DXP which can prune data correctly. The following
data can be pruned using the wizard:
* Unused Instances
* Unused Sites
* Older document
versions.
* Older web content versions.
* Idle users (users
that haven't logged in recently or have never logged in).
*
Orphaned docs (documents that have DB records but are missing the
corresponding filesystem assets).
* Recycle bins.
* User
public and/or private layouts.
* Liferay audit records in the database.
Relevant configuration overrides can be done in the
portal-ext.properties file per instructions on the wizard pages for
the data to prune.
The DB Pruning Wizard can also be used to regularly reduce the
database size by purging cruft from the database.
All DB pruning activities must be approved before changes are
made to the database, and each area can skipped entirely.
So get this tool today and shrink your database to shorten your
upgrade time!
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 productSpecifications = product.productSpecifications![]
28 catalogName=product.catalogName
29/>
30
31<#if catalogName?has_content>
32 <#assign publisePages=restClient.get("/c/publisherdetailses?filter=publisherName eq '${catalogName}'" ) />
33 <#assign redirectPath="https://marketplace.liferay.com/e/publisher-details/29282497"/>
34
35 <#if publisePages?has_content>
36 <#assign publisePage=publisePages.items />
37 <#if publisePage?has_content>
38 <#assign publisherDetail=publisePage[0]/>
39 </#if>
40 </#if>
41</#if>
42
43<div>
44 <#if productSpecifications?has_content>
45 <#assign developerNames = productSpecifications?filter(item -> stringUtil.equals(item.specificationKey, "developer-name")) />
46
47 <#if developerNames?has_content>
48 <#list developerNames as developerName>
49 <#if publisherDetail?has_content>
50 <a class="bg-neutral-8" href="${redirectPath}/${publisherDetail.id}">
51 ${developerName.value}
52 </a>
53 <#else>
54 <a class="bg-neutral-8" href="/?developer-name=${developerName.value}">
55 ${developerName.value}
56 </a>
57 </#if>
58 </#list>
59 </#if>
60 </#if>
61</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.