处理模板时发生错误。
The following has evaluated to null or missing:
==> channel.items [in template "3192443#3192485#null" at line 8, 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 8, column 9]
----
1<#if themeDisplay?has_content>
2 <#assign scopeGroupId = themeDisplay.getScopeGroupId() />
3</#if>
4
5<#assign channel = restClient.get("/headless-commerce-delivery-catalog/v1.0/channels?accountId=-1&filter=name eq 'Marketplace Channel' and siteGroupId eq '${scopeGroupId}'") />
6
7<#if channel?has_content>
8 <#assign channelId = channel.items[0].id />
9</#if>
10
11<#if (CPDefinition_cProductId.getData())??>
12 <#assign productId = CPDefinition_cProductId.getData() />
13</#if>
14
15<#assign
16 product = restClient.get("/headless-commerce-delivery-catalog/v1.0/channels/"+ channelId +"/products/"+ productId +"?accountId=-1&images.accountId=-1&nestedFields=images")
17 productImage = product.images?filter(item -> item.tags?seq_contains("app icon"))![]
18/>
19
20<#if productImage?has_content>
21 <#assign productThumbnail = productImage[0].src?split("/o") />
22 <#if productThumbnail?has_content && productThumbnail?size gte 2>
23 <#assign productThumbnail1 = "/o/${productThumbnail[1]}"!"" />
24 <#else>
25 <#assign productThumbnail1 = "/o/commerce-media/default/?groupId=${scopeGroupId}" />
26 </#if>
27<#else>
28 <#if product.urlImage?has_content>
29 <#assign productThumbnail = product.urlImage?split("/o") />
30 <#if productThumbnail?has_content && productThumbnail?size gte 2>
31 <#assign productThumbnail1 = "/o/${productThumbnail[1]}"!"" />
32 <#else>
33 <#assign productThumbnail1 = "/o/commerce-media/default/?groupId=${scopeGroupId}" />
34 </#if>
35 <#else>
36 <#assign productThumbnail1 = "/o/commerce-media/default/?groupId=${scopeGroupId}" />
37 </#if>
38</#if>
39
40${productThumbnail1}
The following has evaluated to null or missing:
==> channel.items [in template "3192443#3192485#null" at line 8, 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 8, column 9]
----
1<#if themeDisplay?has_content>
2 <#assign scopeGroupId = themeDisplay.getScopeGroupId() />
3</#if>
4
5<#assign channel = restClient.get("/headless-commerce-delivery-catalog/v1.0/channels?accountId=-1&filter=name eq 'Marketplace Channel' and siteGroupId eq '${scopeGroupId}'") />
6
7<#if channel?has_content>
8 <#assign channelId = channel.items[0].id />
9</#if>
10
11<#if (CPDefinition_cProductId.getData())??>
12 <#assign productId = CPDefinition_cProductId.getData() />
13</#if>
14
15<#assign
16 product = restClient.get("/headless-commerce-delivery-catalog/v1.0/channels/"+ channelId +"/products/"+ productId +"?accountId=-1&images.accountId=-1&nestedFields=images")
17 productImage = product.images?filter(item -> item.tags?seq_contains("app icon"))![]
18/>
19
20<#if productImage?has_content>
21 <#assign productThumbnail = productImage[0].src?split("/o") />
22 <#if productThumbnail?has_content && productThumbnail?size gte 2>
23 <#assign productThumbnail1 = "/o/${productThumbnail[1]}"!"" />
24 <#else>
25 <#assign productThumbnail1 = "/o/commerce-media/default/?groupId=${scopeGroupId}" />
26 </#if>
27<#else>
28 <#if product.urlImage?has_content>
29 <#assign productThumbnail = product.urlImage?split("/o") />
30 <#if productThumbnail?has_content && productThumbnail?size gte 2>
31 <#assign productThumbnail1 = "/o/${productThumbnail[1]}"!"" />
32 <#else>
33 <#assign productThumbnail1 = "/o/commerce-media/default/?groupId=${scopeGroupId}" />
34 </#if>
35 <#else>
36 <#assign productThumbnail1 = "/o/commerce-media/default/?groupId=${scopeGroupId}" />
37 </#if>
38</#if>
39
40${productThumbnail1}
Google Drive Quick Links
Data Modeling, Process & Business Logic
描述
The Google Drive Quick Links app allows a user to maintain quick links
to frequently accessed Google Drive documents directly from within
Liferay. The app allows users to browse and choose documents from Google
Drive to be added as Quick Links. It allows the user to open and delete
such links. This application is an integration with Google Picker API.
Google Drive Quick Links app consists of a portlet which uses the Google Picker Iframe. The portlet allows the user to select the files through the Google Picker Iframe. The google picker uses OAuth and none of the user credentials are kept in the portlet application. The only information stored is the current Liferay userId along with the document Id, name and url to make available the quick links from the portal.
You need to get keys from Google in order to be able to use this app. The setup process is documented here:
http://wiki.rivetlogic.com/display/LRA/Google+Drive+Quick+Links
Google Drive Quick Links app consists of a portlet which uses the Google Picker Iframe. The portlet allows the user to select the files through the Google Picker Iframe. The google picker uses OAuth and none of the user credentials are kept in the portlet application. The only information stored is the current Liferay userId along with the document Id, name and url to make available the quick links from the portal.
You need to get keys from Google in order to be able to use this app. The setup process is documented here:
http://wiki.rivetlogic.com/display/LRA/Google+Drive+Quick+Links
The Google Drive Quick Links app allows a user to maintain quick links
to frequently accessed Google Drive documents directly from within
Liferay. The app allows users to browse and choose documents from Google
Drive to be added as Quick Links. It allows the user to open and delete
such links. This application is an integration with Google Picker API.
Google Drive Quick Links app consists of a portlet which uses the Google Picker Iframe. The portlet allows the user to select the files through the Google Picker Iframe. The google picker uses OAuth and none of the user credentials are kept in the portlet application. The only information stored is the current Liferay userId along with the document Id, name and url to make available the quick links from the portal.
You need to get keys from Google in order to be able to use this app. The setup process is documented here:
http://wiki.rivetlogic.com/display/LRA/Google+Drive+Quick+Links
Google Drive Quick Links app consists of a portlet which uses the Google Picker Iframe. The portlet allows the user to select the files through the Google Picker Iframe. The google picker uses OAuth and none of the user credentials are kept in the portlet application. The only information stored is the current Liferay userId along with the document Id, name and url to make available the quick links from the portal.
You need to get keys from Google in order to be able to use this app. The setup process is documented here:
http://wiki.rivetlogic.com/display/LRA/Google+Drive+Quick+Links
DEVELOPER
开发者
Publisher Date
January 22, 2024
Deployment Method
Liferay Self-Hosted
Liferay PaaS
App Type
DXP
版本
1.1.0
支持的版本
6.2
Standard Price
Free
Help and Support
共享链接
DEVELOPER
24-11-21 下午5:44
Published date
24-11-21 下午5:44
Published Date
24-11-21 下午5:44
SUPPORTED OFFERINGS
Liferay PaaS
Supported Versions
6.2
Resource Requirements
Edition
Community
PRICE
Free
SHARE LINK
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.