Fehler bei der Verarbeitung der Vorlage.
Java method "com.mecalux.util.service.impl.MlxJournalHelperServiceImpl.getStructureFieldValue(com.liferay.journal.model.JournalArticle, String, String)" threw an exception when invoked on com.mecalux.util.service.impl.MlxJournalHelperServiceImpl object "com.mecalux.util.service.impl.MlxJournalHelperServiceImpl@2fda45b4"; see cause exception in the Java stack trace.

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign categoryName = mlxJournalHelp...  [in template "20101#20128#VIDEO-STR-DEFAULT-TEMPLATE" at line 30, column 17]
----
1<#assign productsStrKeys = ["PRODUCT-STR","PRODUCT-CATEGORY-STR", "SOFTWARE-SOLUTIONS-PRODUCTS-STR"] /> 
2<#assign bannerContactMaster = "4013" /> 
3<#assign vidCategoryStrId = 415780 /> 
4<#assign videoStructureId = 415837/>    <#--"video str" aqui el metodo recibe un long, por eso no podemos poner el structurekey --> 
5<#assign vocabularyId = 388079 />      <#-- VideoCategories id mlxConstants.getLongConstant('???','?????') --> 
6<#assign article = mlxAssetHelperService.fetchLatestApprovedArticle(groupId, .vars["reserved-article-id"].getData()) /> 
7<#assign articleId = article.getArticleId() /> 
8<#assign cdn = (mlxUrlUtilService.getCdn(groupId))!"" /> 
9 
10<#--HEADER--> 
11<div class="corporate--video--header--container"> 
12    <div class="corporate--video--header"> 
13        <h1 class="corporate--video--header--heading">${name.getData()}</h1> 
14         
15        <#if description?has_content> 
16            <p class="corporate--video--header--subheading">${description.getData()}</p> 
17        </#if> 
18    </div> 
19</div> 
20 
21 
22<#--FILTERS--> 
23<#assign videoCategoriesOrdered = mlxAssetHelperService.getJournalArticleListByStructureIdIdSortedByStructureFieldName(groupId, themeDisplay.getUserId(), vidCategoryStrId, "order", locale)> 
24<div class="corporate--video--filters--container"> 
25    <ul class="corporate--video--filters"> 
26        <#list videoCategoriesOrdered as category> 
27            <#if category?counter == 1> 
28                <#assign categoryName><@corporate.mlxlanguage key='mlx.videocat.warehouse-videos' /></#assign> 
29            <#else> 
30                <#assign categoryName = mlxJournalHelperService.getStructureFieldValue(category, "name", locale)?string /> 
31            </#if> 
32            <#assign categoryUrl =  mlxUrlUtilService.getUrlByJournalArticle(category, locale, groupId)?string /> 
33            <li class="corporate--video--filters--item">        
34                <a href="${categoryUrl}" title="${categoryName}" class="corporate--video--filters--item--link">${categoryName}</a> 
35            </li> 
36        </#list> 
37    </ul> 
38</div> 
39 
40 
41<div class="corporate--video--container"> 
42 
43    <#--VIDEO PLAYER--> 
44    <div class="corporate--video--video-player--container"> 
45        <div class="corporate--video--video-player"> 
46            <#assign globalGroupId = mlxConstants.getLongConstant("GroupIds","GLOBAL")/> 
47            <#assign videoUuid = mlxUrlUtilService.getUuidFromLiferayUrl(video.getData())  /> 
48            <#assign videoFileEntry = mlxDLFileEntryHelperService.getDLFileEntry(videoUuid, globalGroupId) /> 
49            <#assign youtubeEmbeddedCode = mlxExpandoService.getExpandoValueForClass("com.liferay.document.library.kernel.model.DLFileEntry","Mlxyoutubeembeddedcode",videoFileEntry.getFileVersion().getFileVersionId()).getString(locale)/>                  
50            <#assign videoDescription = mlxExpandoService.getExpandoValueForClass("com.liferay.document.library.kernel.model.DLFileEntry","Mlxdocumenttitle",videoFileEntry.getFileVersion().getFileVersionId()).getString(locale)/>     
51            <#assign videoDuration = mlxExpandoService.getExpandoValueForClass("com.liferay.document.library.kernel.model.DLFileEntry", "Mlxduration", videoFileEntry.getFileVersion().getFileVersionId())!"" /> 
52            <#assign videoUrl = mlxDocumentsHelperService.getDocumentUrlFromUUID(videoUuid, locale)!"" /> 
53             
54            <#assign videoBackground = (mlxDLFileEntryHelperService.getDLFileEntryMlxFieldValuePersisted("background", videoFileEntry.getFileEntryId()))!"" /> 
55            <#if videoBackground?has_content> 
56                <#assign videoBackground = videoBackground?replace('\\u','')?eval /> 
57                <#assign videoBackgroundfileEntry = mlxDLFileEntryHelperService.getDLFileEntry(videoBackground.uuid, globalGroupId) /> 
58                <#assign videoBackground = mlxUrlUtilService.getLRUrl(videoBackgroundfileEntry) /> 
59            </#if> 
60 
61            <#if youtubeEmbeddedCode?has_content> 
62                <figure class="corporate--video--video-player--figure-youtube"> 
63                    <iframe class="corporate--video--video-player--youtube" width="100%" height="100%" src="https://www.youtube.com/embed/${youtubeEmbeddedCode}?rel=0" frameborder="0" allowfullscreen></iframe>             
64                </figure> 
65            <#else> 
66                <figure class="corporate--video--video-player--figure"> 
67                    <video class="corporate--video--video-player--vid" poster="${videoBackground}" controls="controls" controlsList="nodownload"> 
68                        <source src="${videoUrl}" > 
69                    </video> 
70                    <#if videoDescription?has_content> 
71                        <figcaption class="corporate--video--video-player--figcaption"> 
72                            <h3 class="corporate--video--video-player--figcaption-title">${videoDescription}</h3> 
73                        </figcaption>  
74                    </#if> 
75                </figure> 
76            </#if>  
77        </div> 
78 
79        <!-- DATOS ESTRUCTURADOS SEO JSON+LD --> 
80        <#assign domain = themeDisplay.getPortalDomain() />  
81        <#assign organizationName = "Mecalux"> 
82        <#assign publicDate = dateUtil.getDate(article.displayDate, "dd/MM/yyyy", locale, timeZoneUtil.getTimeZone("UTC")) /> 
83        <#assign cdn = mlxUrlUtilService.getCdn(groupId)!""/> <!-- Añado CDN, en principio no debería hacer falta, si viene videoURL por duplicado se retira de aqui y las llamadas --> 
84 
85        <#-- logo --> 
86        <#assign logo="/documents/20128/3456912/Mecalux-logo_600x60px.jpg/04c628fa-bb4c-0e81-75c9-2e598563979d?t=1582118551000" /> 
87        <#if (domain?contains("es")) || (domain?contains("mecalux.es")) > 
88            <#assign logo="/documents/20128/3456912/MecaluxEsmena-logo_600x60px.jpg/55173d2f-aadd-3f09-d3fb-456a758b3bd6?t=1582118551000" /> 
89        </#if> 
90        <#if (domain?contains("us")) || (domain?contains("interlake")) > 
91            <#assign logo="/documents/20128/3456912/InterlakeMecalux-logo_600x60px.jpg/48f97d72-4230-e18c-9424-b06fae217c90?t=1582118551000"> 
92        </#if> 
93         
94        <!-- DATOS ESTRUCTURADOS SEO JSON+LD --> 
95        <#assign domain = themeDisplay.getPortalDomain() />  
96        <#assign organizationName = "Mecalux"> 
97        <#assign publicDate = dateUtil.getDate(article.displayDate, "dd/MM/yyyy", locale, timeZoneUtil.getTimeZone("UTC")) /> 
98        <#assign cdn = mlxUrlUtilService.getCdn(groupId)!""/> <!-- Añado CDN, en principio no debería hacer falta, si viene videoURL por duplicado se retira de aqui y las llamadas --> 
99 
100        <#-- logo --> 
101        <#assign logo="/documents/20128/3456912/Mecalux-logo_600x60px.jpg/04c628fa-bb4c-0e81-75c9-2e598563979d?t=1582118551000" /> 
102        <#if (domain?contains("es")) || (domain?contains("mecalux.es")) > 
103            <#assign logo="/documents/20128/3456912/MecaluxEsmena-logo_600x60px.jpg/55173d2f-aadd-3f09-d3fb-456a758b3bd6?t=1582118551000" /> 
104        </#if> 
105        <#if (domain?contains("us")) || (domain?contains("interlake")) > 
106            <#assign logo="/documents/20128/3456912/InterlakeMecalux-logo_600x60px.jpg/48f97d72-4230-e18c-9424-b06fae217c90?t=1582118551000"> 
107        </#if> 
108 
109        <script type="application/ld+json"> 
110
111                "@context": "https://schema.org", 
112                "@type": "VideoObject", 
113                "name": "${name.getData()?replace("\"","\\\"")?replace("“","\\\"")}", 
114                "description": "${description.getData()}", 
115                "thumbnailUrl": "${videoBackground!}", 
116                "uploadDate": "${publicDate}", 
117                <#if videoDuration?has_content> 
118                    "duration": "${videoDuration.getData()}", 
119                </#if> 
120                "publisher": { 
121                    "@type": "Organization", 
122                    "name": "${organizationName}", 
123                    "logo": { 
124                        "@type": "ImageObject", 
125                        "url": "${logo}", 
126                        "width": 600, 
127                        "height": 60 
128
129                }, 
130                "contentUrl": "${cdn}${videoUrl}", 
131                "embedUrl": "${cdn}${videoUrl}" 
132
133             
134        </script> 
135 
136    </div> 
137 
138    <#--RELATED PRODUCTS--> 
139    <#assign productRelated = mlxAssetHelperService.getRelatedArticlesByStructure(groupId, articleId, productsStrKeys)!"{}" /> 
140                 
141    <#if productRelated?has_content> 
142 
143        <div class="corporate--video--related-prods--container"> 
144            <h3 class="corporate--video--related-prods--title">${languageUtil.get(locale,"mlx.video.related.products")}</h3> 
145            <div class="corporate--video--related-prods"> 
146             
147                <#list productRelated as product> 
148                    <#assign productValues = mlxJournalHelperService.getStructureFieldValues(product, locale) /> 
149                    <#assign productImageContent = (productValues.list_imageFieldSet["list_image"]?eval)!"{}"  /> 
150                     
151                    <#assign productName = (productValues["name"]?string)!"" /> 
152                    <#assign productUrl = mlxUrlUtilService.getUrlByJournalArticle(product,locale, groupId)?string /> 
153                    <#assign productMasterName = mlxMastersHelperService.getMasterNameByJournalArticle(product) /> 
154                    <#if !(productName?ends_with("*"))> 
155                        <article class="corporate--video--related-prods--item"> 
156                            <#if productImageContent?has_content> 
157                                <#assign productImage = productImageContent  /> 
158                            </#if> 
159                            <#if productImage?has_content> 
160                                <#assign fileEntry = mlxDLFileEntryHelperService.getDLFileEntry(productImage.uuid, globalGroupId)!"{}" /> 
161                                <#assign productImageUrl = mlxUrlUtilService.getLRUrl(fileEntry) /> 
162                                <figure class="corporate--video--related-prods--item--figure"> 
163                                    ${corporate.img(productImageUrl, true, 'alt="' + productName + '"', 'title="' + productName + '"', 'class="corporate--video--related-prods--item--image"')} 
164                                </figure> 
165                            </#if> 
166                            <h2 class="corporate--video--related-prods--item--link-wrapper"> 
167                                <a href="${productUrl}" title="${productName}" class="corporate--video--related-prods--item--link" data-content-master="${product.getDDMStructure().getStructureKey()}" data-content-structure="${productMasterName}">${productName}</a> 
168                            </h2> 
169                        </article> 
170                    </#if> 
171                </#list> 
172 
173            </div> 
174        </div> 
175 
176    </#if> 
177             
178 
179    <#-- TRANSCRIPTION 
180		 
181		 
182    <#if video_transcription.getData()?has_content> 
183        <section class="corporate--section"> 
184            <h2 class="mecalux--content--title"><@corporate.mlxlanguage key="mlx.video.transcription" /></h2> 
185            <div class="mecalux--content--transcripcion"> 
186                ${video_transcription.getData()} 
187            </div> 
188        </section> 
189    </#if> 
190		 
191    --> 
192 
193    <#--BANNER CONTACTO  --> 
194 
195    <#assign bannerContacto = (mlxMastersHelperService.getJournalArticleByMasterAndGroup(bannerContactMaster?number, scopeGroupId))!""> 
196    <#if bannerContacto?has_content> 
197        <#assign articleBanner = mlxJournalHelperService.getStructureFieldValues(bannerContacto, locale)>  
198 
199        <#assign headerText = articleBanner["header_text"]!"" /> 
200        <#assign btText = articleBanner["button_text"]!"" /> 
201        <#assign lbText = articleBanner["text"]!"" /> 
202 
203        <aside class="corporate--quote-info--container"> 
204            <div class="corporate--quote-info"> 
205                <p class="corporate--quote-info--item-heading"> 
206                    ${headerText} 
207 
208                    <#assign serviceContext = mlxServiceContext/> 
209                    <#assign tel = (mlxPhoneUtilService.getTelephone(serviceContext))!"" /> 
210                    <#assign rtl = (mlxExpandoService.getExpandoValueForClass("com.liferay.portal.kernel.model.Group","is-rtl", scopeGroupId).getBoolean())!false /> 
211                     
212                    <#if rtl> 
213                        <#assign tel = "&#x202A;${tel}&#x202C;"	> 
214                    </#if> 
215                    <#if tel?has_content> 
216                        <br><strong title="${tel}" class="corporate--quote-info--item-heading-phone">${tel}</strong> 
217                    </#if>         
218 
219                <p class="corporate--quote-info--item-content">${lbText}</p> 
220                <a href="" data-fancybox data-type="ajax" class="corporate--quote-info--item-link product-contact-btn" data-sticky-btn="true" rel="nofollow">${btText}</a> 
221            </div> 
222        </aside> 
223    </#if> 
224  
225 
226    <#--RELATED VIDEOS--> 
227    <#assign vidCatEntry = mlxAssetHelperService.getAssetEntryByJournalArticle(article)!"{}" /> 
228    <#assign category = mlxAssetHelperService.getAssetCategoryByAssetEntryAndVocabularyId(vidCatEntry, vocabularyId)!"{}" />  
229 
230    <#if category != "{}"> 
231        <#assign categoryId = category.categoryId /> 
232         
233        <#--!!FALTA PODER ORDENAR ESTAS LISTAS por "fecha de creación"!! =>  idem que en 6.2 (se usaba el portlet de busqueda) --> 
234        <#assign videosRelated = mlxAssetHelperService.getJournalArticleListByStructureIdAndCategoryId(groupId, themeDisplay.getUserId(), videoStructureId, categoryId) /> 
235     
236        <#if (videosRelated?has_content) && (videosRelated?size > 1)> 
237         
238            <div class="corporate--video--related-vids--container"> 
239                <h3 class="corporate--video--related-vids--title"><@corporate.mlxlanguage key="mlx.video.related.videos" /></h3> 
240                <div class="corporate--video--related-vids"> 
241                    <#assign videosRelatedIndex = 0 /> 
242                    <#list videosRelated as relatedVideo> 
243                        <#if (videosRelatedIndex < 3) && (relatedVideo.getArticleId() != articleId)> 
244                            <#assign videoValues = mlxJournalHelperService.getStructureFieldValues(relatedVideo, locale) /> 
245                            <#assign videoName = (videoValues["name"]?string)!"" /> 
246                            <#assign videoUrl =  mlxUrlUtilService.getUrlByJournalArticle(relatedVideo,locale, groupId)?string /> 
247                            <#assign videoUuid = (videoValues["video"])!"{}" /> 
248                            <#if videoUuid?has_content> 
249                                <#assign videoUuid = jsonFactoryUtil.createJSONObject(videoUuid).uuid /> 
250                            </#if> 
251                            <#assign videoFileEntry = mlxDLFileEntryHelperService.getDLFileEntry(videoUuid, globalGroupId) /> 
252                            <article class="corporate--video--related-vids--item" > 
253 
254                                ${corporate.img(cdn + '/o/corporate-theme/images/common/th-play2.png', false, 'alt="' + videoName + '"', 'title="' + videoName + '"', 'class="corporate--video--related-vids--item--icon"')} 
255                                <#assign videobackground = (mlxDLFileEntryHelperService.getDLFileEntryMlxFieldValuePersisted("background", videoFileEntry.getFileEntryId()))!"" /> 
256                                <#if videobackground?has_content> 
257                                    <#assign videobackground = videobackground?replace('\\u','')?eval /> 
258                                    <#assign videobackgroundfileEntry = mlxDLFileEntryHelperService.getDLFileEntry(videobackground.uuid, globalGroupId) /> 
259                                    <#assign videobackground = mlxUrlUtilService.getLRUrl(videobackgroundfileEntry) /> 
260                                    <figure class="corporate--video--related-vids--item--figure"> 
261                                        ${corporate.img(videobackground, true, 'alt="' + videoName + '"', 'title="' + videoName + '"', 'class="corporate--video--related-vids--item--image"')} 
262                                    </figure> 
263                                </#if> 
264                                <div class="corporate--video--related-vids--item--content">                         
265                                    <a href="${videoUrl}" title="${videoName}" class="corporate--video--related-vids--item--link">${videoName}</a> 
266                                </div> 
267                            </article> 
268                            <#assign videosRelatedIndex = videosRelatedIndex + 1 /> 
269                        </#if> 
270                    </#list> 
271                </div> 
272            </div> 
273        </#if> 
274    </#if> 
275 
276</div> 
277 
278 
279 
280<script> /*MKTG-848 Obtener portletInstance y reemplazar button href con marcacion gtm porque el portlet namespace difiere de paginas de producto */ 
281window.addEventListener('load', function(){  
282    var portletNameSpace = Liferay.Portlet.list.find(pn => pn.includes('contact')); 
283    mecalux.cache.$body.find('.corporate--quote-info--item-link').attr('href','?p_p_id='+portletNameSpace+'&p_p_lifecycle=0&p_p_state=exclusive&p_p_mode=view&cta_origin=CTA_Footer'); 
284    mecalux.cache.$body.find('.corporate--sticky-header--cta').attr('href','?p_p_id='+portletNameSpace+'&p_p_lifecycle=0&p_p_state=exclusive&p_p_mode=view&cta_origin=CTA_Sticky'); 
285}); 
286</script>