Nueva versión
Comparte tu experiencia y sugerencias sobre nuestro servicio.
Se ha producido un error al procesar la plantilla.
The following has evaluated to null or missing: ==> pdfField.url [in template "97672940819578#20119#438253" at line 54, column 88] ---- 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 url = pdfField.url?replace("?... [in template "97672940819578#20119#438253" at line 54, column 73] ----
1<#if !entries?has_content>
2 <#if !themeDisplay.isSignedIn()>
3 ${renderRequest.setAttribute("PORTLET_CONFIGURATOR_VISIBILITY", true)}
4 </#if>
5</#if>
6
7<#assign letterTitle = "" />
8
9<div class="wrapper-data-list">
10 <#list entries as entry>
11 <#assign
12 assetRenderer = entry.getAssetRenderer()
13 entryTitle = htmlUtil.escape(assetRenderer.getTitle(locale))
14 dateFormat = "dd/MM/yyyy"
15 viewURL = assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse, assetRenderer, entry, !stringUtil.equals(assetLinkBehavior, "showFullContent" ))
16 fields = entry.getAssetRenderer().getDDMFormValuesReader().getDDMFormValues().getDDMFormFieldValues()
17 fieldsValuesMap = entry.getAssetRenderer().getDDMFormValuesReader().getDDMFormValues().getDDMFormFieldValuesMap()
18 text = entry.getDescription()
19 content = htmlUtil.stripHtml(assetRenderer.getAssetObject().getContent())?replace(']]>', '')
20 entryUrl = htmlUtil.escape(assetRenderer.getUrlTitle())
21 startDate = ""
22 endDate = ""
23 type = ""
24 url = ""
25 />
26
27 <#if entryTitle?substring(0, 1) != letterTitle>
28 <#assign letterTitle=entryTitle?substring(0, 1) />
29 <div class="wrapper-letter wrapper-data-${letterTitle?lower_case}" data-id="${letterTitle?lower_case}">${letterTitle}</div>
30 </#if>
31
32 <div class="wrapper-data wrapper-data-${letterTitle?lower_case}">
33
34 <div class="wrapper-data-left">
35
36 <div class="wrapper-data-title">${entryTitle}</div>
37
38 <#list fieldsValuesMap?keys as key>
39 <#list fieldsValuesMap[key] as data>
40 <#switch data.getDDMFormField().getLabel().getString(locale)>
41 <#case "Inicio vigencia">
42 <#assign startDate = data.getValue().getString(locale) />
43 <#break>
44 <#case "Fin vigencia">
45 <#assign endDate = data.getValue().getString(locale) />
46 <#break>
47 <#case "Tipo de proceso del que deriva">
48 <#assign type = data.getValue().getString(locale) />
49 <#break>
50 <#case "Documento asociado">
51 <#if data.getValue().getString(locale)?has_content>
52 <#assign pdfFielData = data.getValue().getString(locale) />
53 <#assign pdfField = jsonFactoryUtil.createJSONObject(pdfFielData) />
54 <#assign url = pdfField.url?replace("?previewFileIndex=1", "") />
55 <#else>
56 <#assign url = "" />
57 </#if>
58
59 <#break>
60 </#switch>
61 </#list>
62 </#list>
63
64 <div class="wrapper-data-date">Inicio de vigencia: ${startDate} | Fin de vigencia: ${endDate}</div>
65 <div class="wrapper-data-description">Tipo de proceso del que deriva: ${type}</div>
66
67 </div>
68 <div class="wrapper-data-right">
69 <div class="wrapper-button big secondary">
70 <a href="${url}" target="_blank">
71 <img class="wrapper-button-icon" alt="Icono del portal del cabildo" src="/documents/d/portal/icon-download" />Descargar documento</a>
72 </div>
73 </div>
74
75 </div>
76 </#list>
77</div>
78<style>
79 .wrapper-letter{
80 max-height: 31px;
81 margin-bottom: 24px;
82 padding: 8px 16px;
83 display: flex;
84 flex-direction: column;
85 justify-content: center;
86 align-items: flex-start;
87 gap: 24px;
88 align-self: stretch;
89 border-radius: 8px;
90 background: var(--neutros-claros-gris-000, #F3F5F5);
91 color: #000;
92 font-size: 23px;
93 font-style: normal;
94 font-weight: 700;
95 line-height: 130%;
96 }
97 .wrapper-data{
98 margin-bottom: 32px;
99 display: flex;
100 align-items: center;
101 gap: 16px;
102 align-self: stretch;
103 justify-content: space-between;
104 }
105 .wrapper-data-title, .wrapper-data-title a{
106 margin-bottom: 8px;
107 color: var(--semnticos-texto-enlace-defecto-negro, #050505);
108 font-size: 16px;
109 font-style: normal;
110 font-weight: 600;
111 line-height: 150%;
112 }
113 .wrapper-data-date, .wrapper-data-description{
114 color: var(--Semnticos-Texto-Base-Gris-600, #677379);
115 font-size: 16px;
116 font-style: normal;
117 font-weight: 600;
118 line-height: 150%; /* 24px */
119 }
120 .wrapper-data-date{
121 margin-bottom: 8px;
122 }
123 .wrapper-data:has(+.wrapper-letter){
124 margin-bottom: 40px;
125 }
126 .wrapper-data-right{
127 min-width: 190px;
128 }
129
130 .wrapper-data-left{
131 width: 70%;
132 }
133
134 .wrapper-button .wrapper-button-icon{
135 display: inline-block;
136 margin-right: 8px;
137 }
138
139 @media (max-width: 1023px) {
140 .wrapper-data-list {
141 padding: 8px 24px;
142 }
143 }
144 @media (min-width: 321px) and (max-width: 672px) {
145 .wrapper-data{
146 margin-bottom: 32px;
147 display: flex;
148 align-items: center;
149 gap: 16px;
150 align-self: stretch;
151 justify-content: space-between;
152 flex-direction: row;
153 flex-wrap: wrap;
154 align-content: center;
155 }
156 }
157 @media (max-width: 320px) {
158
159 .wrapper-data{
160 margin-bottom: 32px;
161 display: flex;
162 align-items: center;
163 gap: 16px;
164 align-self: stretch;
165 justify-content: space-between;
166 flex-direction: row;
167 flex-wrap: wrap;
168 align-content: center;
169 }
170 .wrapper-data-list {
171 padding: 8px 16px;
172 }
173 }
174</style>