Si è verificato un errore nell'elaborarazione del modello.
The following has evaluated to null or missing:
==> journalArticleLocalService.fetchLatestArticle(relatedAssetEntry.classPK)  [in template "20101#20127#35063" at line 249, column 90]

----
Tip: If the failing expression is known to be 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 relatedJournalArticle = journ...  [in template "20101#20127#35063" at line 249, column 57]
----
1<#-- 
2LargoConsumo ~ Thread solutions ~ 2019 
3@baxtheman 
4journal template / full content article 
5/// 
6see https://bitbucket.org/threadsolutions/largoconsumo-liferay-7.2/issues/18/gestione-stati-campo-testo-e-pulsanti-web 
7--> 
8<#assign ARTICLEID = .vars['reserved-article-id'].data /> 
9 
10<#assign count = 0 /> 
11<#if serviceLocator??> 
12    <#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") /> 
13    <#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") /> 
14    <#assign journalArticle = journalArticleLocalService.getArticle(articleGroupId,ARTICLEID) /> 
15    <#assign assetEntry = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", journalArticle.resourcePrimKey) /> 
16    ${assetEntryLocalService.incrementViewCounter(themeDisplay.getUserId(), assetEntry)} 
17 
18    <#assign count = assetEntry.viewCount /> 
19</#if> 
20<#assign mimeTypesUtil = staticUtil["com.liferay.portal.kernel.util.MimeTypesUtil"] /> 
21 
22<#setting date_format="dd/MM/yyyy"> 
23<#setting locale = 'it_IT'> 
24<#assign serviceContext = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"].getServiceContext()> 
25<#assign httpServletRequest = serviceContext.getRequest()> 
26 
27<#assign ARTICLEID = .vars['reserved-article-id'].data /> 
28<#assign ARTICLEURL = themeDisplay.getURLPortal() + '/-/' + .vars['reserved-article-url-title'].data /> 
29<#assign SMALLIMAGEURL = .vars['reserved-article-small-image-url'].data /> 
30<#assign LCLOGO = themeDisplay.getURLPortal() +'/o/largoconsumo-theme/images/largo-consumo.svg'/> 
31<#assign TITLE = .vars['reserved-article-title'].data /> 
32<#assign DISPLAYDATE = .vars['reserved-article-display-date'].data?date('EEE, dd MMM yyyy HH:mm:ss Z') /> 
33<#assign ISCORPORATE = (CORPORATE??)?then(getterUtil.getBoolean(CORPORATE.getData()),false) /> 
34<#assign TAGS = .vars['reserved-article-asset-tag-names'].data?replace(',', ', ') /> 
35 
36<#assign ISPDF = (PDF?? && PDF.data?has_content) /> 
37<#assign ISBOT = webContentUtil.botVerifie(httpServletRequest)> 
38 
39<#assign SHOW_FULL_ABSTRACT = (FULL_ABSTRACT??)?then(getterUtil.getBoolean(FULL_ABSTRACT.getData()),false) /> 
40<#assign PREVIEW = (SUMMARY??)?then(SUMMARY.data,'') /> 
41<#if (PREVIEW?length > 300 && !SHOW_FULL_ABSTRACT)> 
42	<#assign TRIMMED = PREVIEW?substring(0,300) + "..." /> 
43	<#assign ABSTRACT = htmlService.repair(TRIMMED) /> 
44<#else> 
45	<#assign ABSTRACT = PREVIEW /> 
46</#if> 
47<#assign CONTENT = (HTML?? && HTML.data?has_content)?then(HTML.data,PREVIEW) /> 
48<#assign WOWBOOKURL = '/DOCUMENTI/articoli/index.html?file=' /> 
49<#assign PDFURL = WOWBOOKURL + '/c/portal/createpdf?articleId=${ARTICLEID}&groupId=${articleGroupId}#book/' /> 
50 
51<#assign ISGUEST = themeDisplay?? && !themeDisplay.isSignedIn() /> 
52<#assign ISSIGNIN = themeDisplay?? && themeDisplay.isSignedIn() /> 
53<#assign ISPAYWALL = (PAYWALL??)?then(getterUtil.getBoolean(PAYWALL.getData()),false) /> 
54<#assign ISFREE = !ISPAYWALL /> 
55<#assign ISSUBSCRIBER = permissionChecker.isOmniadmin() || portletPermission.contains(permissionChecker,'com_thread_largoconsumo_login_register','SUBSCRIPTION') /> 
56 
57 
58<#assign SMALLIMAGEURL = SMALLIMAGEURL?replace("@cdn_host", portalUtil.getCDNHost(request)) /> 
59<#assign SMALLIMAGEURL = SMALLIMAGEURL?replace("root_path", portalUtil.getPathContext(request)) /> 
60<#assign SMALLIMAGEURL = SMALLIMAGEURL?replace("@", "") /> 
61<#assign SMALLIMAGEURL = themeDisplay.getURLPortal() + SMALLIMAGEURL /> 
62 
63 
64<@assettics_util["event"] 
65	action="view" 
66	category="article" 
67	label=TITLE 
68/> 
69 
70<#assign CSSTRACKLEAD = "" /> 
71<#assign TRACKLEAD = false /> 
72<#assign SHOWCHECKBOX = false /> 
73<#assign LEADMESSAGE = "" /> 
74<#assign ISINTERNALROLE = false /> 
75<#assign roleLocalService= serviceLocator.findService("com.liferay.portal.kernel.service.RoleLocalService")> 
76<#assign rolesList = roleLocalService.getUserRoles(themeDisplay.getUserId()) /> 
77 
78<#list rolesList as role> 
79 <#if role.getRoleId()==(roleLocalService.getRole(themeDisplay.getCompanyId(),"Administrator").getRoleId()) > 
80    <#assign ISINTERNALROLE = true /> 
81 </#if> 
82</#list> 
83 
84<#if (permissionChecker.isOmniadmin() ) || ISINTERNALROLE> 
85 
86    <div class="contatore "  style="width: fit-content;padding:10px; margin-bottom: 10px; background-color: #f2f3f5;border-style: solid"> 
87        <div class="text" style="color: #293b53;">  
88                Questo articolo è stato visualizzato <b>${count}</b> volte 
89        </div> 
90    </div> 
91</#if> 
92<#if ISSIGNIN > 
93	<#assign campaignsArticle = campaignArticleService.getByJournalArticleAndEnabled(themeDisplay.getCompanyId(), themeDisplay.getScopeGroupId(), ARTICLEID?number, true) /> 
94	<#if (campaignsArticle?size > 0) > 
95		<#assign CAMPAIGN = campaignsArticle[0] /> 
96		<#if ISSUBSCRIBER > 
97			<#assign LEADMESSAGE = CAMPAIGN.messageSubscribed /> 
98		<#else> 
99			<#assign LEADMESSAGE = CAMPAIGN.messageRegistered /> 
100		</#if> 
101		<#assign CSSTRACKLEAD = " trackLead " /> 
102		<#assign TRACKLEAD = true /> 
103		<#assign campaignsUser = campaignUserService.getByUser(themeDisplay.getCompanyId(), themeDisplay.getScopeGroupId(), themeDisplay.getUserId()) /> 
104		<#if (campaignsUser?size == 0) > 
105			<#assign SHOWCHECKBOX = true /> 
106		</#if> 
107	</#if> 
108</#if> 
109 
110<article class="article"> 
111 
112	<header> 
113		<div class="article__heading b-block d-md-flex justify-content-between align-items-top"> 
114			<div class="text h4"> 
115				<strong>${DISPLAYDATE?date}</strong><br> 
116				${(REFERENCE?? && REFERENCE.data?has_content)?then(REFERENCE.getData(), '')} 
117				${(TYPE?? && TYPE.data?has_content)?then('- ' +  TYPE.getData(), '')} 
118				${ISCORPORATE?then(" di comunicazione d'Impresa", "")} 
119				<#if (START_PAGE?? && START_PAGE.data?has_content)> 
120					<#if (START_PAGE.data?length > 3)> 
121						- ${START_PAGE.getData()} 
122					<#else> 
123						- pagina ${START_PAGE.getData()} 
124					</#if> 
125				</#if> 
126				<#if (LENGTH?? && LENGTH.data?has_content)> 
127					<#if (LENGTH.data?length > 3)> 
128						- ${LENGTH.getData()} 
129					<#else> 
130						<#if (LENGTH.getData() == '1')> 
131							- ${LENGTH.getData()} pagina 
132						<#else> 
133							- ${LENGTH.getData()} pagine 
134						</#if> 
135					</#if> 
136				</#if> 
137				${(AUTHOR?? && AUTHOR.data?has_content)?then('- ' + AUTHOR.getData(), '')} 
138			</div> 
139			<div class="socials-share socials-share--circle mt-3 mt-sm-0 pl-0 pl-md-3"> 
140				<@liferay_social_bookmarks["bookmarks"] 
141					className="com.liferay.journal.model.JournalArticle" 
142					classPK=ARTICLEID?number 
143					displayStyle="inline" 
144					title=TITLE 
145					types="twitter,facebook,linkedin" 
146					url=ARTICLEURL 
147				/> 
148			</div> 
149		</div> 
150 
151		<div class="d-block d-sm-flex justify-content-between align-items-center"> 
152			<#if SUBTITLE.data?has_content> 
153				<span class="lc-tag lc-tag-primary mb-0 ${ISCORPORATE?then('corporate', '')}"> 
154					${SUBTITLE.getData()} 
155				</span> 
156			</#if> 
157		</div> 
158	</header> 
159 
160	<section class="mt-3"> 
161		<h1> 
162			${TITLE} 
163		</h1> 
164 
165		<div class="content mt-5"> 
166			<#if SMALLIMAGEURL?has_content> 
167				<img class="article__image" alt="${TITLE}" src="${SMALLIMAGEURL}" /> 
168			</#if> 
169 
170			<#-- gestione testo --> 
171			<div class="text"> 
172				<#if ISGUEST || TRACKLEAD> 
173					${ABSTRACT} 
174				<#elseif (ISSIGNIN && ISFREE)> 
175					${CONTENT} 
176				<#elseif !ISSUBSCRIBER && ISPAYWALL> 
177					${ABSTRACT} 
178				<#elseif ISSUBSCRIBER || ISBOT> 
179					${CONTENT} 
180				</#if> 
181			</div> 
182 
183			<#if SHOWCHECKBOX > 
184				<div id="trackLeadCheckbox" style="clear:both"> 
185					<input type="checkbox" id="chkTrackLead"> ${LEADMESSAGE} 
186				</div> 
187			</#if> 
188			<#-- gestione azione --> 
189			<div id="action" <#if SHOWCHECKBOX > style="display:none" </#if> > 
190				<#if ISGUEST> 
191					<div class="mt-5 text-right"> 
192						<#assign portalUtil = staticUtil["com.liferay.portal.kernel.util.PortalUtil"] /> 
193						<#assign httpUtil = staticUtil["com.liferay.portal.kernel.util.HttpUtil"] /> 
194						<#assign  
195							loginURL = portalUtil.getSiteLoginURL(themeDisplay)  
196							loginURL = httpUtil.addParameter(loginURL, "p_p_lifecycle", 0) 
197							loginURL = httpUtil.addParameter(loginURL, "p_p_state", "normal") 
198							loginURL = httpUtil.addParameter(loginURL, "p_p_mode", "view") 
199							loginURL = httpUtil.addParameter(loginURL, "p_p_id", "com_liferay_login_web_portlet_LoginPortlet") 
200							loginURL = httpUtil.addParameter(loginURL, "_com_liferay_login_web_portlet_LoginPortlet_redirect", portalUtil.getCurrentURL(request)) 
201						/> 
202						<a href="${loginURL}" class="btn btn-primary"> 
203							Accedi per continuare... 
204						</a> 
205					</div> 
206				<#elseif !ISSUBSCRIBER && ISPAYWALL> 
207					<div class="mt-5 text-right"> 
208						<a href="/abbonamenti" class="btn btn-primary"> 
209							Sottoscrivi l'abbonamento per continuare... 
210						</a> 
211					</div> 
212				<#elseif ISPDF > 
213					<div class="mt-5 text-right"> 
214						<a target="_blank" href="${PDFURL}" class="btn btn-primary ${CSSTRACKLEAD}"> 
215							<@clay["icon"] symbol="web-content" /> 
216							Leggi l'articolo completo in PDF 
217						</a> 
218					</div> 
219				<#elseif TRACKLEAD > 
220					<div class="mt-5 text-right"> 
221						<a target="_blank" href="#" class="btn btn-primary ${CSSTRACKLEAD}"> 
222							<@clay["icon"] symbol="web-content" /> 
223							Leggi tutto 
224						</a> 
225					</div> 
226				</#if> 
227			</div> 
228 
229		</div> 
230	</section> 
231 
232	<footer class="mt-5"> 
233 
234		<#if serviceLocator??> 
235			<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") /> 
236			<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") /> 
237			<#assign assetLinkLocalServiceUtil = serviceLocator.findService("com.liferay.asset.kernel.service.AssetLinkLocalService") /> 
238			<#assign journalArticle = journalArticleLocalService.getArticle(articleGroupId,ARTICLEID) /> 
239			<#assign assetEntry = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", journalArticle.resourcePrimKey) /> 
240			<#assign assetLinks = assetLinkLocalServiceUtil.getDirectLinks(assetEntry.getEntryId()) /> 
241			<#if assetLinks?has_content> 
242				<section> 
243					<div class="heading-decorated"> 
244						<h2 class="portlet-title-text">Informazioni a corredo</h2> 
245					</div> 
246					<ul class="asset-links mt-3 mb-0 h3"> 
247						<#list assetLinks as assetLink> 
248							<#assign relatedAssetEntry = assetEntryLocalService.getAssetEntry(assetLink.entryId2) /> 
249							<#assign relatedJournalArticle = journalArticleLocalService.fetchLatestArticle(relatedAssetEntry.classPK) /> 
250							<li> 
251								<#assign docXml = saxReaderUtil.read(relatedJournalArticle.getContent()) /> 
252								<#assign pdf = docXml.valueOf("//dynamic-element[@name='PDF']/dynamic-content/text()") /> 
253								<#assign relatedTitle = relatedJournalArticle.title?replace("(?s)<[^>]*>(\\s*<[^>]*>)*", " ", "r") /> 
254								<#if (relatedJournalArticle.getDDMStructureKey() == "299426" && pdf == '')> 
255									${relatedJournalArticle.title} 
256								<#else> 
257									<a href="/-/${relatedJournalArticle.urlTitle}">${relatedTitle}</a> 
258								</#if> 
259							</li> 
260						</#list> 
261					</ul> 
262				</section> 
263			</#if> 
264 
265			<#assign assetVocabularyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService") /> 
266			<#assign assetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") /> 
267			<#assign assetVocabulary = assetVocabularyLocalService.fetchGroupVocabulary(articleGroupId, "Argomenti") /> 
268			<#assign assetCategories = assetEntry.categories /> 
269			<#if assetCategories?has_content> 
270				<section class="justify-content-start align-items-start row no-gutters"> 
271					<div class="heading-decorated"> 
272						<h2 class="portlet-title-text">Argomenti</h2> 
273					</div> 
274					<div class="col mt-3"> 
275						<ul class="list-inline mb-0"> 
276							<#list assetCategories as assetCategory> 
277								<#if assetCategory.vocabularyId = assetVocabulary.vocabularyId> 
278									<#assign categoryUrl = '/percorsi/-/categoria/' + assetCategory.name?replace(' ','-')?url('utf-8') + '/' + assetCategory.categoryId + '?p_r_p_categoryId=' + assetCategory.categoryId /> 
279									<li class="list-inline-item"> 
280										<span class="lc-tag"><a href="${categoryUrl}">${assetCategory.name}</a></span> 
281									</li> 
282								</#if> 
283							</#list> 
284						</ul> 
285					</div> 
286				</section> 
287			</#if> 
288		</#if> 
289		 
290		<#if TAGS?has_content > 
291			<section class="justify-content-start align-items-start row no-gutters border-top mt-3"> 
292				<div class="title col-12 col-md-auto mb-2 mb-md-0 mr-3"> 
293					Citati in questo articolo: 
294				</div> 
295				<div class="col"> 
296					${TAGS} 
297				</div> 
298			</section> 
299		</#if> 
300 
301		<#assign TITLE = stringUtil.shorten(htmlUtil.stripHtml(.vars['reserved-article-title'].data), 60) /> 
302		<#assign description = stringUtil.shorten(htmlUtil.stripHtml(.vars['reserved-article-description'].data), 150) /> 
303		<#if !description?has_content > 
304			<#assign description = stringUtil.shorten(htmlUtil.stripHtml(ABSTRACT), 150) /> 
305		</#if> 
306 
307		<#assign section = "" /> 
308		<#if SUBTITLE.data?has_content> 
309			<#assign section = SUBTITLE.data /> 
310		</#if> 
311 
312 
313		<#assign og_image = LCLOGO /> 
314		<#if SMALLIMAGEURL?? && SMALLIMAGEURL !="" > 
315			<#assign og_image = SMALLIMAGEURL /> 
316		</#if> 
317		<#assign og_image_type = mimeTypesUtil.getContentType(og_image) /> 
318 
319		<#assign createdate = .vars['reserved-article-create-date'].data ?datetime("EEE, d MMM yyyy HH:mm:ss Z")/> 
320		<#assign modifieddate = .vars['reserved-article-modified-date'].data?datetime("EEE, d MMM yyyy HH:mm:ss Z")/> 
321		<#assign tags = .vars['reserved-article-asset-tag-names'].data/> 
322 
323		<@liferay_util["html-top"]> 
324			<title>${TITLE}</title> 
325			<meta name="description" content="${description}"/> 
326			<meta property="og:title" content="${TITLE}"> 
327			<meta property="og:description" content="${description}"> 
328			<meta property="og:type" content="article"> 
329			<meta property="og:url" content="${portalUtil.getCurrentCompleteURL(request)?keep_before('?')}"> 
330			 
331			<#list tags?split(",") as tag> 
332				<meta property="article:tag" content="${tag}"> 
333			</#list> 
334			<#list assetCategories as assetCategory> 
335				<meta property="article:tag" content="${assetCategory.name}"> 
336			</#list> 
337 
338			<meta property="article:published_time" content="${createdate?iso_utc}"> 
339			<meta property="article:modified_time" content="${modifieddate?iso_utc}"> 
340			<meta property="article:author" content="${.vars['reserved-article-author-name'].data }"> 
341			<meta property="article:section" content="${section}"> 
342			<meta property="og:image" content="${og_image}"> 
343			<meta property="og:image:type" content="${og_image_type}"> 
344			<meta property="og:image:alt" content="${TITLE}"> 
345		</@> 
346 
347	</footer> 
348 
349 
350</article> 
351 
352<@liferay_aui.script use="liferay-navigation-interaction"> 
353	var A=AUI(); 
354	var _item = A.one(".trackLead"); 
355	if (_item) { 
356		_item.on('click',function(e) { 
357			Liferay.Service( 
358				'/lead.campaignuser/create-articolo-utente', 
359
360					companyId: ${themeDisplay.getCompanyId()}, 
361					groupId: ${themeDisplay.getScopeGroupId()}, 
362					campaignId: ${(CAMPAIGN??)?then(CAMPAIGN.campaignId, '""')}, 
363					campaignArticleId: ${(CAMPAIGN??)?then(CAMPAIGN.campaignArticleId, '""')}, 
364					userId: ${themeDisplay.getUserId()} 
365				}, 
366				function(obj) { 
367					console.log(obj); 
368
369			); 
370		}); 
371	} else { 
372		console.log("nessun oggetto trovato"); 
373
374 
375	var _item = A.one("#trackLeadCheckbox"); 
376	if (_item) { 
377		_item.on('change',function(e) { 
378			console.log("click"); 
379			A.one("#trackLeadCheckbox").hide(); 
380			A.one("#action").show(); 
381		}); 
382	} else { 
383		console.log("nessuna checkbox trovata"); 
384
385 
386</@> 

Percorsi di lettura correlati