Une erreur s'est produite lors du traitement du modèle.
The following has evaluated to null or missing:
==> mlxAssetHelperService.getAssetCategoryByAssetEntryAndVocabularyId(softwareCatEntry, vocabularyId)  [in template "20101#20128#SOFTWARE-SOLUTIONS-PRODUCTS-STR-DEFAULT-TEMPLATE" at line 191, column 23]

----
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 categoryId = mlxAssetHelperSe...  [in template "20101#20128#SOFTWARE-SOLUTIONS-PRODUCTS-STR-DEFAULT-TEMPLATE" at line 191, column 1]
----
1<!-- TODO: Inyección de estilos de manera directa por el problema de la carga directa a través de los inputs del contenido web, por ejemplo "Software-solutions-supply-chain-analytics-software" 
2--> 
3<style> 
4    #container #bodyID { 
5        margin-left: unset; 
6        margin-right: unset; 
7        clear: unset; 
8
9    .corporate--prefooter-v3--newsletter iframe { 
10        position: unset; 
11        top: unset; 
12        left: unset; 
13        width: unset; 
14        height: unset; 
15
16</style> 
17 
18<#assign globalGroupId = mlxConstants.getLongConstant("GroupIds","GLOBAL")/> 
19<#assign cdn = (mlxUrlUtilService.getCdn(groupId))!"" /> 
20		 
21<#if !heading.getSiblings()?first.getData()?has_content> 
22    ${content.getData()} 
23<#else> 
24		 
25    <div class="corporate--software-solucion-compleja--introduccion--container"> 
26        <figure class="corporate--software-solucion-compleja--introduccion--background-figure"> 
27            ${corporate.img(image.getData(), false, 'data-sticky-background="true"', 'alt="' + title.getData() + '"', 'title="' + title.getData() + '"', 'class="corporate--software-solucion-compleja--introduccion--background-image"')} 
28        </figure> 
29        <div class="corporate--software-solucion-compleja--introduccion"> 
30            <h1 data-sticky-title="true" class="corporate--software-solucion-compleja--introduccion--heading">${title.getData()}</h1> 
31            <p data-sticky-subheading="true" class="corporate--software-solucion-compleja--introduccion--subheading">${subtitle.getData()}</p> 
32            <#if cta_link.getData()?has_content> 
33                <a data-track-download-view="true" data-track-download-name="cta-link" data-track-download-type="Download-file" data-track-event-category="CTA_Main" data-track-event-label="EasyBasicDownload" class="corporate--software-solucion-compleja--introduccion--cta" href="${cta_link.getData()}" rel="nofollow">${cta.getData()}</a> 
34            <#else> 
35                <a data-sticky-cta="true" data-sticky-btn="true" data-group="cta-contact-form" data-track-event-category="CTA_Main" data-track-event-label="GoTo_Contact-Software-Form" class="corporate--software-solucion-compleja--introduccion--cta" href="#contact-name">${cta.getData()}</a> 
36            </#if> 
37        </div> 
38    </div> 
39    <#-- DESTACADO GARTNER TEMPORAL: init  
40    este trozo de código debería solo estar aqui mientras quieran tener el destacado --> 
41     
42    <#assign gartnerPage  = mlxMastersHelperService.getLayoutByMasterAndGroup(56024, groupId)!""> 
43    <#assign bannerGartnerMasterId = 5734 /> 
44    <#assign bannerArticle = mlxMastersHelperService.getJournalArticleByMasterAndGroup(bannerGartnerMasterId, groupId)!"" /> 
45    <#if bannerArticle!=""> 
46    <#assign bannerContent = mlxJournalContentService.getContent(bannerArticle, bannerArticle.getDDMTemplateKey(),"${locale}",themeDisplay,'view') />  
47    </#if> 
48     
49    <#if bannerArticle != "" && gartnerPage != ""> 
50    	${bannerContent} 
51    </#if> 
52    <#-- DESTACADO GARTNER TEMPORAL: end  --> 
53    <main> 
54        <#if heading.getSiblings()?has_content> 
55            <div class="corporate--section"> 
56                <#list heading.getSiblings() as item> 
57                    <#if item.getData()?has_content> 
58                        <h2 class="corporate--title-h1">${item.getData()}</h2> 
59                    </#if> 
60                    <#if item.subtitle_h3.getData()?has_content> 
61                        <h3 class="corporate--title-h3">${item.subtitle_h3.getData()}</h3> 
62                    </#if> 
63                    <#list item.paragraph.getSiblings() as p> 
64                        <#if p.getData()?has_content> 
65                            <p class="corporate--paragraph">${p.getData()}</p> 
66                        </#if> 
67                    </#list> 
68                    <#if item.list_item.getData()?has_content> 
69                        <ul class="corporate--unordered-list"> 
70                            <#list item.list_item.getSiblings() as li > 
71                                <#if li.getData()?has_content> 
72                                    <li class="corporate--unordered-list--item">${li.getData()}</li> 
73                                </#if> 
74                            </#list> 
75                        </ul> 
76                    </#if> 
77                    <#list item.img.getSiblings() as img> 
78                        <#if img.getData()?has_content> 
79                            ${corporate.img(img.getData(), false, 'alt=""', 'title=""', 'class="corporate--content-image"')} 
80                        </#if> 
81                    </#list> 
82                </#list> 
83            </div> 
84        </#if> 
85    </main> 
86</#if> 
87 
88<script> <#--MKTG-881 showVid - Inicializar vídeos Software Solucion Compleja Tiny, habrá que deprecar estos iframes post-migración --> 
89function showVid(url, img, waterMark, w, h, divId, autoplay, controls, stretchingType, extension, youtubeEmbeddedCode) { 
90 
91  if (youtubeEmbeddedCode != null && youtubeEmbeddedCode != "") { 
92    var v = document.getElementById(divId); 
93    var ap = (autoplay) ? 1 : 0; 
94    v.insertAdjacentHTML('beforeend', '<iframe width="' + w + '" height="' + h + 
95      '" src="https://www.youtube.com/embed/' + youtubeEmbeddedCode + '?autoplay=' + ap + 
96      '&rel=0" frameborder="0" allowfullscreen></iframe>') 
97 
98  } else { 
99    stretchingType = stretchingType != null && stretchingType != '' ? stretchingType : 'uniform'; 
100    var autoStart = autoplay == true || autoplay == 'true' ? true : false; 
101    var canPlay = false; 
102    var ext = extension; 
103    var justForMobile = false; 
104    var v = document.createElement('video'); 
105    if (url != '' && v.canPlayType) { 
106      if ((typeof (ext) == "undefined" || ext == null) && url.indexOf('.') > 0) { 
107        var end = url.lastIndexOf('?') > url.lastIndexOf('.') ? url.lastIndexOf('?') : url.length - 1; 
108        ext = url.substring(url.lastIndexOf('.') + 1, end); 
109
110 
111    if (ext == 'mp4' && v.canPlayType('video/mp4').replace(/no/, '')) { 
112        canPlay = true; 
113      } else if (ext == 'webm' && v.canPlayType('video/webm').replace(/no/, '')) { 
114        	canPlay = true; 
115      		} else if (ext == 'ogv' && v.canPlayType('video/ogg').replace(/no/, '')) { 
116        		canPlay = true; 
117
118
119    if (canPlay) { 
120      if (mecalux.browser == null || mecalux.browser == undefined || mecalux.browser == {}) { 
121        mecalux.browser = { 
122          msie: navigator.userAgent.indexOf("MSIE "), 
123          chrome: /chrom(e|ium)/.test(navigator.userAgent.toLowerCase()), 
124          mobile: /android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini/i.test(navigator.userAgent 
125            .toLowerCase()) 
126        }; 
127
128	  if (w == '100%') 
129        w = '287'; 
130 
131      var type = ''; 
132      if (ext == 'mp4') { 
133        type = "video/mp4"; 
134      } else if (ext == 'webm') { 
135        type = "video/flv"; 
136      } else if (ext == 'ogv') { 
137        type = "video/ogg"; 
138      } else if (ext == 'flv') { 
139        type = "video/webm"; 
140
141 
142      var element = document.getElementById(divId); 
143      element.innerHTML = ''; 
144      var video = document.createElement('video'); 
145      //attributes for video tag 
146      video.addClass("fancy-video fancy-video-" + stretchingType); 
147      video.css('background', '#000'); 
148      video.attr('controlslist', 'nodownload'); 
149      video.attr('preload', 'none'); 
150      video.attr('width', w); 
151      video.attr('height', h); 
152      video.attr('controls', 'controls'); 
153 
154      //poster 
155      var poster = ''; 
156      if (img != null && img != '' && img != undefined) { 
157        poster = img; 
158
159      video.attr('poster', poster); 
160 
161      //autoplay 
162      if (autoStart) { 
163        video.attr('autoplay', 'autoplay'); 
164
165 
166      //add video tag to the div 
167      video.appendTo('#' + divId); 
168 
169      //source tag 
170      var source = document.createElement('source'); 
171      source.setAttribute('src', url); 
172      source.setAttribute('type', type); 
173 
174      //add source tag to video tag 
175      video[0].appendChild(source); 
176 
177      var element = document.getElementById(divId); 
178      element.style.display = 'block'; 
179
180
181
182</script> 
183 
184<#assign article = mlxAssetHelperService.fetchLatestApprovedArticle(groupId, .vars["reserved-article-id"].getData()) /> 
185<#assign articleId = article.getArticleId() /> 
186<#assign globalGroupId = mlxConstants.getLongConstant("GroupIds","GLOBAL")/> 
187 
188<!--Get Category--> 
189<#assign softwareCatEntry = mlxAssetHelperService.getAssetEntryByJournalArticle(article) /> 
190<#assign vocabularyId = 396488 /> 
191<#assign categoryId = mlxAssetHelperService.getAssetCategoryByAssetEntryAndVocabularyId(softwareCatEntry, vocabularyId).categoryId />  
192<#assign categorySoftwareModules = 396495 /> 
193 
194<#if (categorySoftwareModules == categoryId)> <!-- MKTG-1439 solamente se muestran los relacionados en SoftwareModules --> 
195 
196    <!--MKTG-1284 CASOS PRÁCTICOS--> 
197 
198    <#assign practicalCasesStrKey = "PRACTICAL-CASE-STR" /> 
199    <#assign practicalCasesRelated = mlxAssetHelperService.getRelatedArticlesByStructure(groupId, articleId, practicalCasesStrKey) /> 
200 
201    <#if practicalCasesRelated?has_content> 
202 
203        <div class="corporate--software-solucion-compleja--cases"> 
204            <div class="corporate--software-solucion-compleja--cases--container" data-js="slider" data-js-type="tiny-slider" data-js-config='{"container": ".corporate--software-solucion-compleja--cases--slider", "navPosition": "bottom", "controls": false, "mouseDrag": true}' data-gtm-block-name="Case_Study"> 
205                <h3 class="corporate--software-solucion-compleja--cases--title"><@corporate.mlxlanguage key="mlx.breadcrumb.practical-cases" /></h3> 
206                <div class="corporate--software-solucion-compleja--cases--slider" data-gtm-block-name="Case_Study">  
207 
208                    <#list practicalCasesRelated as practicalCase> 
209                         
210                        <#if practicalCase?index < 4> 
211 
212                            <#assign practicalCaseContentValues = (mlxJournalHelperService.getStructureFieldValues(practicalCase, locale))!{}  /> 
213                            <#assign practicalCaseName = (practicalCaseContentValues["name"]?string)!"" /> 
214                            <#assign practicalCaseUrl = mlxUrlUtilService.getUrlByJournalArticle(practicalCase, "${locale}", groupId)?string /> 
215                            <#assign practicalCaseName = (practicalCaseContentValues["name"]?string)!"" /> 
216                            <#assign practicalCaseDescription = (practicalCaseContentValues["html_description"]?string)!"" /> 
217         
218                            <#assign clientStrKey = "CLIENT-STR" /> 
219                            <#assign practicalCaseClient = (mlxAssetHelperService.getFirstRelatedArticle(groupId, practicalCase.articleId, clientStrKey))!"" /> 
220         
221                            <div class="corporate--software-solucion-compleja--cases--item"> 
222                                <div class="corporate--software-solucion-compleja--cases--info"> 
223         
224                                    <#if practicalCaseClient != ""> 
225                                        <#assign practicalCaseClientName = mlxJournalHelperService.getStructureFieldValue(practicalCaseClient, "name", "${locale}")?string /> 
226                                        <h3 class="corporate--software-solucion-compleja--cases--item-title">${practicalCaseClientName}</h3> 
227                                    <#else> 
228                                        <#assign practicalCaseClientName = practicalCaseName> 
229                                    </#if> 
230         
231                                    <#if practicalCaseName?has_content> 
232                                        <p class="corporate--software-solucion-compleja--cases--item-subtitle">${practicalCaseName}</p> 
233                                    </#if> 
234                                    <#if practicalCaseDescription?has_content> 
235                                        <p class="corporate--software-solucion-compleja--cases--item-description">${practicalCaseDescription?truncate(350, '...')} 
236                                            <a href="${practicalCaseUrl}" title="${practicalCaseClientName}" class="corporate--software-solucion-compleja--cases--item-link"><@corporate.mlxlanguage key="mlx.search.article.readmore" /></a> 
237                                        </p> 
238                                    </#if> 
239                                 
240                                </div> 
241         
242                                <#assign practicalCaseImageContent = (mlxJournalHelperService.getStructureFieldValue(practicalCase, "list_image", "${locale}"))!{}  /> 
243                                 
244                                <#if practicalCaseImageContent?has_content> 
245                                    <#assign practicalCaseImage = jsonFactoryUtil.createJSONObject(practicalCaseImageContent) /> 
246                                    <#if practicalCaseImage?has_content> 
247                                         
248                                        <#assign fileEntry = mlxDLFileEntryHelperService.getDLFileEntry(practicalCaseImage.uuid, globalGroupId) /> 
249                                        <#assign practicalCaseImageUrl = (mlxExpandoService.getExpandoValueForClass("com.liferay.document.library.kernel.model.DLFileEntry","mlxDocumentUrl",fileEntry.getFileVersion().getFileVersionId()).getString(locale))!""/> 
250                                        <#assign practicalCaseImageUrl = mlxUrlUtilService.getLRUrl(fileEntry) /> 
251         
252                                        <div class="corporate--software-solucion-compleja--cases--thumbnail"> 
253                                            <#assign practicalCaseVideoContent = (mlxJournalHelperService.getStructureFieldValue(practicalCase, "video_gallery_fileFieldSet", "${locale}"))![] /> 
254                                            <#assign firstPracticalCaseVideoContent = practicalCaseVideoContent?first.video_gallery_file /> 
255 
256                                            <#if firstPracticalCaseVideoContent?has_content> 
257                                                <#assign practicalCaseVideo = jsonFactoryUtil.createJSONObject(firstPracticalCaseVideoContent) /> 
258                                                <#assign practicalCaseVideoUuid = practicalCaseVideo.uui!"" />  
259                                                <#if ("${practicalCaseVideoUuid!}"!="") > 
260                                                    <#assign fileEntry = mlxDLFileEntryHelperService.getDLFileEntry(practicalCaseVideo.uuid, globalGroupId) /> 
261                                                     
262                                                    <#assign videoTitle = (mlxExpandoService.getExpandoValueForClass("com.liferay.document.library.kernel.model.DLFileEntry","mlxDocumentTitle",fileEntry.getFileVersion().getFileVersionId()).getString(locale))!"" /> 
263                                                    <#if (videoTitle=="") > 
264                                                        <#assign videoTitle = practicalCaseName /> 
265                                                    </#if> 
266                                                     
267                                                    <#assign practicalCaseVideoUrl = mlxUrlUtilService.getLRUrl(fileEntry) /> 
268                                                    <#assign youtubeEmbeddedCode = (mlxExpandoService.getExpandoValueForClass("com.liferay.document.library.kernel.model.DLFileEntry","mlxYoutubeEmbeddedCode",fileEntry.getFileVersion().getFileVersionId()).getString(locale))!""/> 
269             
270                                                    <#if youtubeEmbeddedCode?has_content> 
271                                                        <#assign htmlModalAttributes='data-fancybox="video-gallery-${practicalCase?index}" data-type="iframe" data-src="https://www.youtube.com/embed${youtubeEmbeddedCode}" data-caption="${practicalCaseName}"' /> 
272                                                    <#else> 
273                                                        <#assign htmlModalAttributes='data-fancybox="video-gallery-${practicalCase?index}" data-type="html5video" data-src="${practicalCaseVideoUrl}" data-thumb="${practicalCaseImageUrl}" data-caption="${practicalCaseName}"' /> 
274                                                    </#if> 
275             
276                                                    <a href="#" class="corporate--software-solucion-compleja--cases--video-container" data-has-modal="true" ${htmlModalAttributes} data-gtm-event="modal" data-gtm-event-label="/Case-study/Video/${videoTitle}"> 
277                                                        <figure class="corporate--software-solucion-compleja--cases--figure" > 
278                                                            <div class="corporate--software-solucion-compleja--cases--container-icon" > 
279                                                                ${corporate.img(cdn + '/o/corporate-theme/images/common/th-play2.png', false,'data-role="play-btn" class="corporate--software-solucion-compleja--cases--video-icon" alt="play"')} 
280                                                            </div> 
281 
282																														<#if practicalCaseImage.uuid?has_content > 
283																																<#assign docUrl = (mlxExpandoService.getExpandoValueForClass("com.liferay.document.library.kernel.model.DLFileEntry","mlxDocumentUrl",fileEntry.getFileVersion().getFileVersionId()).getString(locale))!""/> 
284																																<#if docUrl == ''> 
285																																		<#assign imgUrl = practicalCaseImageUrl /> 
286																																<#else> 
287																																		<#assign imgUrl = cdn + docUrl + "." + fileEntry.getVersion() + "." + fileEntry.getExtension() /> 
288																																</#if> 
289 
290																																<#assign imgWidth = '640'> 
291																																<#assign imgTitle = practicalCaseClientName> 
292																																<#assign imgAlt = practicalCaseClientName> 
293																																<#assign imgClass = 'corporate--software-solucion-compleja--cases--item-image corporate--software-solucion-compleja--cases--item-image-youtube'> 
294																																<#assign urlParamConcat = imgUrl?contains("?")?then("&","?")> 
295																																${corporate.img(imgUrl + urlParamConcat + 'imwidth=' + imgWidth + '', true, 
296																																								'alt="' + imgAlt + '"', 'title="' + imgTitle + '"', 'class="' + imgClass + '"' 
297																																								'srcset="' + imgUrl + urlParamConcat + 'imwidth=320&imdensity=1 320w,' +  
298																																														 imgUrl + urlParamConcat + 'imwidth=640&imdensity=1 640w"')} 
299																													</#if> 
300                                                        </figure>   
301                                                    </a> 
302                                                <#else> 
303                                                    <figure class="corporate--software-solucion-compleja--cases--figure"> 
304																												<#if practicalCaseImage.uuid?has_content > 
305																														<#assign docUrl = (mlxExpandoService.getExpandoValueForClass("com.liferay.document.library.kernel.model.DLFileEntry","mlxDocumentUrl",fileEntry.getFileVersion().getFileVersionId()).getString(locale))!""/> 
306																														<#if docUrl == ''> 
307																																<#assign imgUrl = practicalCaseImageUrl /> 
308																														<#else> 
309																																<#assign imgUrl = cdn + docUrl + "." + fileEntry.getVersion() + "." + fileEntry.getExtension() /> 
310																														</#if> 
311 
312																														<#assign imgWidth = '640'> 
313																														<#assign imgTitle = practicalCaseClientName> 
314																														<#assign imgAlt = practicalCaseClientName> 
315																														<#assign imgClass = 'corporate--software-solucion-compleja--cases--item-image'> 
316																														<#assign urlParamConcat = imgUrl?contains("?")?then("&","?")> 
317																														${corporate.img(imgUrl + urlParamConcat + 'imwidth=' + imgWidth + '', true, 
318																																						'alt="' + imgAlt + '"', 'title="' + imgTitle + '"', 'class="' + imgClass + '"' 
319																																						'srcset="' + imgUrl + urlParamConcat + 'imwidth=320&imdensity=1 320w,' +  
320																																												 imgUrl + urlParamConcat + 'imwidth=640&imdensity=1 640w"')} 
321																											</#if> 
322                                                    </figure> 
323                                                </#if> 
324                                            <#else> 
325                                                <figure class="corporate--software-solucion-compleja--cases--figure"> 
326																												<#if practicalCaseImage.uuid?has_content > 
327																														<#assign docUrl = (mlxExpandoService.getExpandoValueForClass("com.liferay.document.library.kernel.model.DLFileEntry","mlxDocumentUrl",fileEntry.getFileVersion().getFileVersionId()).getString(locale))!""/> 
328																														<#if docUrl == ''> 
329																																<#assign imgUrl = practicalCaseImageUrl /> 
330																														<#else> 
331																																<#assign imgUrl = cdn + docUrl + "." + fileEntry.getVersion() + "." + fileEntry.getExtension() /> 
332																														</#if> 
333 
334																														<#assign imgWidth = '640'> 
335																														<#assign imgTitle = practicalCaseClientName> 
336																														<#assign imgAlt = practicalCaseClientName> 
337																														<#assign imgClass = 'corporate--software-solucion-compleja--cases--item-image'> 
338																														<#assign urlParamConcat = imgUrl?contains("?")?then("&","?")> 
339																														${corporate.img(imgUrl + urlParamConcat + 'imwidth=' + imgWidth + '', true, 
340																																						'alt="' + imgAlt + '"', 'title="' + imgTitle + '"', 'class="' + imgClass + '"' 
341																																						'srcset="' + imgUrl + urlParamConcat + 'imwidth=320&imdensity=1 320w,' +  
342																																												 imgUrl + urlParamConcat + 'imwidth=640&imdensity=1 640w"')} 
343																												</#if> 
344                                                </figure> 
345         
346                                            </#if> 
347         
348                                        </div> 
349         
350                                    </#if> 
351         
352                                </#if> 
353         
354         
355                            </div> 
356                         
357                        </#if> 
358 
359                    </#list> 
360 
361                </div> 
362 
363                 
364                <!-- init --> 
365                <#assign pcasesMasterId=56006 />  <#--referencias --> 
366                <#assign pcasesLayout=(mlxMastersHelperService.getLayoutByMasterAndGroup(pcasesMasterId,scopeGroupId)!"") /> 
367<#if pcasesLayout == "" > 
368                    <#assign pcasesMasterId=640015 /> <#--cps --> 
369                    <#assign pcasesLayout=(mlxMastersHelperService.getLayoutByMasterAndGroup(pcasesMasterId,scopeGroupId)!"") /> 
370                </#if> 
371                <#if pcasesLayout != "" > 
372                <#assign pcasesUrl = pcasesLayout.getFriendlyURL() /> 
373                <a href="${pcasesUrl}" title='<@corporate.mlxlanguage key="mlx.practical-case.show-more" />' class="corporate--software-solucion-compleja--cases--viewmore"><@corporate.mlxlanguage key="mlx.practical-case.show-more" /></a> 
374</#if> 
375                <!-- end --> 
376 
377 
378            </div> 
379        </div> 
380 
381    </#if> 
382 
383 
384 
385    <!--MKTG-1284 QUIZAS TAMBIÉN LE INTERESE---> 
386 
387    <#-- Article ARTICLE-STR, Blog BLOG-POST-STR, ManualArticle MANUAL-DE-ALMACENAJE-STR, Manual Category CATEGORIA-DE-MANUAL-DE-ALMACENAJE-STR, Video VIDEO-STR, Link Module LINK-MODULE-STR --> 
388    <#assign otherArticleKeyList = ["ARTICLE-STR","BLOG-POST-STR","MANUAL-DE-ALMACENAJE-STR","CATEGORIA-DE-MANUAL-DE-ALMACENAJE-STR","VIDEO-STR", "LINK-MODULE-STR"] /> 
389    <#assign currentOtherArticleRelatedLinks = (mlxAssetHelperService.getRelatedArticlesByStructure(groupId, articleId, otherArticleKeyList))![] /> 
390 
391    <#if currentOtherArticleRelatedLinks?has_content > 
392        <div class="corporate--software-solucion-compleja--related-others"> 
393            <div class="corporate--software-solucion-compleja--related-others--container" data-js="slider" data-js-type="tiny-slider" data-js-config="{'container': '.corporate--software-solucion-compleja--related-others--slider', 'loop':false, 'navPosition': 'bottom', 'mouseDrag': 'true', 'items':1,'gutter':20, 'controlsText': ['',''], 'responsive': {'600': {'items':1},'750': {'items':2},'1280': {'items':3,'gutter': 30}}}" data-gtm-block-name="Your_Interest"> 
394                <#-- quitamos de forma temporal esta key y usamos la misma de de producto (Mª del mar) => h3 class="corporate--software-solucion-compleja--related-others--title"><@corporate.mlxlanguage key="mlx.software.relateds.product.title"/></h3--> 
395                <h3 class="corporate--software-solucion-compleja--related-others--title"><@corporate.mlxlanguage key="mlx.related.alsointerested"/></h3> 
396 
397                <#-- CONST ids de structura, para poder saber que contenido nos llega --> 
398                <#assign articuloStrKey = "ARTICLE-STR" /> 
399                <#assign manualArticleStrKey = "MANUAL-DE-ALMACENAJE-STR" /> 
400                <#assign manualCategoryStrKey = "CATEGORIA-DE-MANUAL-DE-ALMACENAJE-STR" /> 
401                <#assign videoStrKey = "VIDEO-STR" /> 
402                <#assign blogStrKey = "BLOG-POST-STR" /> 
403                <#assign linkModuleStrKey = "LINK-MODULE-STR" /> 
404                <#--   ====>   segun estructura  --> 
405                 
406                <#assign filtersMap={} /> 
407                <#assign filtersLinkModuleNames=[] /> 
408         
409                <#list currentOtherArticleRelatedLinks as journalArticle > 
410                 
411                 
412                    <#if journalArticle?index < 6> 
413                 
414                        <#assign currStr = journalArticle.getDDMStructure().getStructureKey() /> 
415 
416                        <#if ( currStr == articuloStrKey ) > 
417                            <#assign ribbonText><@corporate.mlxlanguage key='mlx.search.news' /></#assign> 
418                            <#if !filtersMap[currStr]?? > 
419                                <#assign filtersMap=filtersMap + {currStr : [ribbonText]} /> 
420                            </#if> 
421                        <#elseif ( currStr == manualArticleStrKey ) > 
422                            <#assign ribbonText><@corporate.mlxlanguage key='mlx.software.content.type.articles' /></#assign> <#-- No hay key de languange para manual --> 
423                            <#if !filtersMap[currStr]?? > 
424                                <#assign filtersMap=filtersMap + {currStr : [ribbonText]} /> 
425                            </#if> 
426                        <#elseif ( currStr == manualCategoryStrKey ) > 
427                            <#assign ribbonText><@corporate.mlxlanguage key='mlx.software.content.type.articles' /></#assign> <#-- No hay key de languange para manual --> 
428                            <#if !filtersMap[currStr]?? > 
429                                <#assign filtersMap=filtersMap + {currStr : [ribbonText]} /> 
430                            </#if> 
431                        <#elseif ( currStr == blogStrKey ) > 
432                            <#assign ribbonText><@corporate.mlxlanguage key='mlx.search.blog' /></#assign> 
433                            <#if !filtersMap[currStr]?? > 
434                                <#assign filtersMap=filtersMap + {currStr : [ribbonText]} /> 
435                            </#if> 
436                        <#elseif ( currStr == videoStrKey ) > 
437                            <#assign ribbonText><@corporate.mlxlanguage key='mlx.software.resources.videos.title' /></#assign> 
438                            <#if !filtersMap[currStr]?? > 
439                                <#assign filtersMap=filtersMap + {currStr : [ribbonText]} /> 
440                            </#if> 
441                        <#elseif ( currStr == linkModuleStrKey ) > 
442                            <#assign ribbonText = mlxJournalHelperService.getStructureFieldValue(journalArticle,"link_type_title",locale) /> 
443                            <#if !filtersMap[currStr]?? > 
444                                <#assign ribbonArray = [ribbonText] /> 
445                                <#assign filtersLinkModuleNames = filtersLinkModuleNames + ribbonArray /> 
446                                <#assign filtersMap=filtersMap + {currStr : filtersLinkModuleNames} /> 
447                            <#else> 
448                                <#if (!filtersMap[currStr]?seq_contains(ribbonText)) > 
449                                    <#assign ribbonArray = [ribbonText] /> 
450                                    <#assign filtersLinkModuleNames = filtersLinkModuleNames + ribbonArray /> 
451                                    <#assign filtersMap=filtersMap + {currStr : filtersLinkModuleNames} /> 
452                                </#if> 
453                            </#if> 
454                        </#if> 
455                         
456                    </#if> 
457                     
458                </#list> 
459 
460                <#if (filtersMap?size > 1) > 
461 
462                    <div class="corporate--software-solucion-compleja--related-others--filters"> 
463                        <button class="corporate--software-solucion-compleja--related-others--chip" data-js-filter="all" data-gtm-block-name="Your-Interest" data-gtm-event="clickfilter" data-gtm-event-label='All'><@corporate.mlxlanguage key="mlx.theme.all" /></button> <#-- Todos --> 
464 
465                        <#list filtersMap as key, filterArrayNames > 
466                            <#list filterArrayNames as filterValue > 
467                                <#assign gtmTextFormat = filterValue?replace(" ", "-") /> 
468                                <button class="corporate--software-solucion-compleja--related-others--chip" data-js-filter='${filterValue?replace(" ", "-")}' data-gtm-block-name="Your_Interest" data-gtm-event="clickfilter" data-gtm-event-label='${gtmTextFormat}'>${filterValue}</button> 
469                            </#list> 
470                        </#list> 
471                 
472                    </div> 
473 
474                </#if> 
475                 
476                <div class="corporate--software-solucion-compleja--related-others--slider" data-gtm-block-name="Your_Interest"> 
477                     
478                    <#list currentOtherArticleRelatedLinks as journalArticle > 
479                     
480                        <#if journalArticle?index < 8> 
481 
482                            <#assign currStr = journalArticle.getDDMStructure().getStructureKey() > 
483         
484                            <#assign assetUrl =  mlxUrlUtilService.getUrlByJournalArticle(journalArticle,locale, groupId)?string /> 
485                             
486                            <#assign journalArticleValues = (mlxJournalHelperService.getStructureFieldValues(journalArticle, locale))!"" /> 
487                                                 
488                            <#assign magazineTitle = (journalArticleValues["name"])!"" /> 
489                            <#assign magazineDescription = (journalArticleValues["description"])!"" />  
490                            <#assign magazineImage = (journalArticleValues["list_image"])!"" />  
491         
492                            <#if ( currStr == articuloStrKey ) > 
493                                <#assign ribbonText><@corporate.mlxlanguage key='mlx.search.news' /></#assign> 
494                                <#assign magazineTitle = (journalArticleValues["article_name"])!"" /> 
495                                <#assign magazineImage = (journalArticleValues["image_list"])!"" />  
496                                <#assign magazineDescription = (journalArticleValues["magazine_title"])!"" />  
497                                <#if magazineDescription?has_content > 
498                                    <#assign magazineDescription = (journalArticleValues["description"])!"" /> 
499                                </#if> 
500                            <#elseif ( currStr == manualArticleStrKey ) > 
501                                <#assign ribbonText><@corporate.mlxlanguage key='mlx.software.content.type.articles' /></#assign> <#-- No hay key de languange para manual --> 
502                                <#assign magazineImage = (journalArticleValues["image_list"])!"" /> 
503                            <#elseif ( currStr == manualCategoryStrKey ) > 
504                                <#assign ribbonText><@corporate.mlxlanguage key='mlx.software.content.type.articles' /></#assign> <#-- No hay key de languange para manual --> 
505                                <#assign magazineImage = (journalArticleValues["social_networks_image"])!"" /> 
506                                <#assign magazineDescription = (journalArticleValues["text"])!"" /> 
507                            <#elseif ( currStr == blogStrKey ) > 
508                                <#assign ribbonText><@corporate.mlxlanguage key='mlx.search.blog' /></#assign> 
509                                <#assign magazineDescription = (journalArticleValues["list_summary"])!"" /> 
510                            <#elseif ( currStr == videoStrKey ) > 
511                                <#assign ribbonText><@corporate.mlxlanguage key='mlx.software.resources.videos.title' /></#assign> 
512                                 
513                                <#assign video = (journalArticleValues["video"])!"" />  
514                                <#assign videoField = jsonFactoryUtil.createJSONObject(video) /> 
515                                <#assign videoUuid = videoField.uuid /> 
516                                <#assign fileEntry = mlxDLFileEntryHelperService.getDLFileEntry(videoUuid,globalGroupId) /> 
517                                <#assign magazineImage = mlxDLFileEntryHelperService.getDLFileEntryMlxFieldValuePersisted("thumbnail", fileEntry.getFileEntryId())!"" /> 
518                                <#if magazineImage == "" > 
519                                    <#assign magazineImage = mlxDLFileEntryHelperService.getDLFileEntryMlxFieldValuePersisted("background", fileEntry.getFileEntryId()) /> 
520                                </#if> 
521 
522                            <#elseif ( currStr == linkModuleStrKey ) > 
523                                <#assign ribbonText = (journalArticleValues["link_type_title"])!"" /> 
524                                <#assign assetUrl = (journalArticleValues["link_automatic"])!"" /> 
525                                <#if !assetUrl?has_content > 
526                                    <#assign assetUrl = (journalArticleValues["link_manual"])!"" /> 
527                                <#else>	 
528                                    <#-- split the string to just get the page layout id , groupID and if its a private layout --> 
529                                    <#assign linkPageObj = jsonFactoryUtil.createJSONObject(assetUrl) /> 
530                                    <#assign linkPageId = getterUtil.getLong(linkPageObj.layoutId) /> 
531                                    <#assign linkGroupId = getterUtil.getLong(linkPageObj.groupId) /> 
532                                    <#assign linkPrivate = linkPageObj.privateLayout /> 
533         
534                                    <#-- get Friendly URL --> 
535                                    <#assign assetUrl = mlxUrlUtilService.getUrlByLayoutId(linkGroupId, linkPageId, linkPrivate, locale) /> 
536                                </#if> 
537         
538                                <#assign newTab = (journalArticleValues["target"])!false />  
539                                <#assign targetAttr = "" /> 
540                                <#if newTab > 
541                                    <#assign targetAttr = 'target="_blank"' /> 
542                                </#if> 
543                            </#if> 
544         
545                            <#if !magazineImage?has_content > 
546                                <#assign magazineImage = "/documents/20128/455220/article-generic.jpg/90759464-6e87-2453-9b8f-bf012535f258" />	<#-- Imagen default en caso de artículos antiguos sin imagen --> 
547                            <#else> 
548                                <#assign articleImage = jsonFactoryUtil.createJSONObject(magazineImage) /> 
549                                <#assign magazineImage = mlxDocumentsHelperService.getDocumentUrlFromUUID(articleImage.uuid, locale) /> 
550                            </#if> 
551         
552                            <div class="corporate--software-solucion-compleja--related-others--item" data-js-filter-values='${ribbonText?replace(" ", "-")}'> 
553                                <div class="corporate--software-solucion-compleja--related-others--item-card"> 
554                                    <#assign mlxPageInfo= mlxPageInfoService.getPageInfoByUrl(assetUrl, scopeGroupId, locale)!"" /> 
555                                    <#assign pageView = mlxPageInfo?has_content?then(mlxPageInfo.getPageView(), "") /> 
556                                    <#assign pagePath = "/" + pageView?replace("_","/") /> 
557                                    <a href="${assetUrl}" title="${magazineTitle}" class="corporate--software-solucion-compleja--related-others--item-link" ${targetAttr!} data-gtm-event="click" data-gtm-event-label='${journalArticle?counter}_${pagePath}' data-gtm-event-click-category='[pageMaster]_Your_Interest' > 
558                                        <figure class="corporate--software-solucion-compleja--related-others--item-figure"> 
559																						<#if magazineImage?has_content > 
560																								<#if (magazineImage?index_of('?') >= 0) > 
561																										<#assign lazyImage = magazineImage + "&imageThumbnail=1" /> 
562																										<#assign magazineImage = magazineImage + "&imageThumbnail=2" /> 
563																								<#else> 
564																										<#assign lazyImage = magazineImage + "?imageThumbnail=1" /> 
565																										<#assign magazineImage = magazineImage + "?imageThumbnail=2" /> 
566																								</#if> 
567																						</#if> 
568                                            ${corporate.img(cdn + magazineImage, true, 'alt="' + magazineTitle + '"', 'title="' + magazineTitle + '"', 'class="corporate--software-solucion-compleja--related-others--item-image lazyload"')} 
569                                        </figure> 
570                                        <div class="corporate--software-solucion-compleja--related-others--item-wrapper"> 
571                                            <span class="corporate--software-solucion-compleja--related-others--item-upperheading">${ribbonText}</span> 
572                                            <h4 class="corporate--software-solucion-compleja--related-others--item-heading">${magazineTitle}</h4> 
573                                        </div> 
574                                    </a> 
575                                </div> 
576                            </div>  
577         
578                            <#assign magazineTitle = "" /> 
579                            <#assign magazineDescription = "" /> 
580                            <#assign magazineImage = "" /> 
581                            <#assign lazyImage = "" /> 
582                            <#assign assetUrl = "" /> 
583                            <#assign ribbonText = "" /> 
584                            <#assign target = "" /> 
585                             
586                        </#if> 
587 
588                    </#list> 
589                </div> 
590            </div> 
591        </div> 
592    </#if> 
593 
594 
595    <!--MKTG-1284 CATALOGS---> 
596 
597    <#assign scopeId = themeDisplay.getScopeGroupId() /> 
598    <#assign article = mlxAssetHelperService.fetchLatestApprovedArticle(scopeId, articleId) /> 
599    <#assign entry = mlxAssetHelperService.getAssetEntryByJournalArticle(article) /> 
600 
601    <#assign relatedMlxCatalogues = mlxAssetHelperService.getRelatedAssetEntriesByAssetEntryAndDocumentTypeIds(entry, 398591) /> <!--398591 TypeID Catalogue--> 
602 
603 
604 
605    <#if relatedMlxCatalogues?has_content> 
606 
607    <div class="corporate--software-solucion-compleja--downloads"> 
608        <div class="corporate--software-solucion-compleja--downloads--container"> 
609            <h3 class="corporate--software-solucion-compleja--downloads--title"><@corporate.mlxlanguage key="mlx.software.resources.catalogs.title" /></h3> 
610 
611            <div class="corporate--software-solucion-compleja--downloads--row"> 
612 
613                <#list relatedMlxCatalogues as catalog> 
614 
615                    <#assign fileEntry = mlxDLFileEntryHelperService.getDLFileEntry(catalog.getClassUuid(),globalGroupId) /> 
616                    <#assign catalogueTitle = (mlxExpandoService.getExpandoValueForClass("com.liferay.document.library.kernel.model.DLFileEntry","mlxDocumentTitle",fileEntry.getFileVersion().getFileVersionId()).getString(locale))!"" /> 
617                    <#if (catalogueTitle=="") > 
618                        <#assign catalogueTitle=catalog.getTitle() /> 
619                    </#if> 
620                    <#assign catalogueDescription = (mlxExpandoService.getExpandoValueForClass("com.liferay.document.library.kernel.model.DLFileEntry","mlxDocumentDescription",fileEntry.getFileVersion().getFileVersionId()).getString(locale))!"" /> 
621                    <#if (catalogueDescription=="") > 
622                        <#assign catalogueDescription=catalog.getDescription() /> 
623                    </#if> 
624 
625                    <#assign thumbnailUuid = "" /> 
626                    <#assign thumbnail = "" /> 
627                    <#assign thumbnailField = (mlxDLFileEntryHelperService.getDLFileEntryMlxFieldValuePersisted("thumbnail", fileEntry.getFileEntryId())) /> 
628                    <#if thumbnailField?has_content > 
629                        <#assign thumbnailField = jsonFactoryUtil.createJSONObject(thumbnailField) /> 
630                        <#assign thumbnailUuid = thumbnailField.uuid /> 
631                        <#if ("${thumbnailUuid!}"!="") > 
632                            <#assign thumbnailFileEntry = (mlxDLFileEntryHelperService.getDLFileEntry(thumbnailUuid, globalGroupId))!{} /> 
633                            <#if thumbnailFileEntry?has_content > 
634                                <#assign thumbnail = (mlxUrlUtilService.getLRUrl(thumbnailFileEntry))!"" /> 
635                            </#if> 
636                        </#if> 
637                    </#if> 
638 
639                    <#assign downloadLink = mlxUrlUtilService.getLRUrl(fileEntry) /> 
640 
641                    <div class="corporate--software-solucion-compleja--downloads--item"> 
642                        <div class="corporate--software-solucion-compleja--downloads--item-card"> 
643                            <figure class="corporate--software-solucion-compleja--downloads--item-figure"> 
644                                ${corporate.img(thumbnail, true, 'alt="' + catalogueTitle + '"', 'title="' + catalogueTitle + '"', 'class="corporate--software-solucion-compleja--downloads--item-image"')} 
645                            </figure> 
646                            <div class="corporate--software-solucion-compleja--downloads--item-wrapper"> 
647                                <#if catalogueTitle?has_content > 
648                                    <h3 class="corporate--software-solucion-compleja--downloads--item-heading">${catalogueTitle}</h3> 
649                                </#if> 
650                                <#if catalogueDescription?has_content > 
651                                    <p class="corporate--software-solucion-compleja--downloads--item-description">${catalogueDescription}</p> 
652                                </#if> 
653                                <a  
654                                    href="${downloadLink}"  
655                                    title="${catalogueTitle}"  
656                                    target="_blank"  
657                                    class="corporate--software-solucion-compleja--downloads--item-button-download"  
658                                    data-track-download-view="true"  
659                                    data-track-download-name="${catalogueTitle}"  
660                                    data-gtm-event="download"  
661                                    data-gtm-event-label="${catalogueTitle}" 
662                                    data-gtm-event-click-category="Download"> 
663                                    <@corporate.mlxlanguage key="mlx.theme.download" /> 
664                                </a> 
665                            </div> 
666                        </div> 
667                    </div>                     
668 
669                </#list> 
670 
671            </div> 
672 
673        </div> 
674    </div> 
675 
676    </#if> 
677 
678</#if> 
679 
680<script> 
681/* FIX contenidos con CTA contacto fijo */ 
682window.addEventListener('load', function(){ 
683mecalux.cache.body.querySelector("a[href='#']").setAttribute("onclick","") 
684mecalux.cache.body.querySelector("a[href='#']").setAttribute("href","#contact-name") 
685}, false); 
686 
687</script> 

CONTACTEZ NOS EXPERTS

Si vous le souhaitez, vous pouvez envoyer une image ou un document. Il est possible de joindre jusqu'à 5 fichiers de 15 Mo chacun.

POURQUOI CHOISIR MECALUX SOFTWARE SOLUTIONS ?

  • Appui d'une entreprise solide possédant plus de 55 ans d'expérience.

  • Plus de 400 ingénieurs qui se consacrent exclusivement au développement de solutions logicielles.

  • Mecalux s'adapte aux besoins et aux objectifs de chaque entreprise.

  • Développement et mise à jour permanents du logiciel, grâce à un investissement continu en R&D.