
UNE-EN ISO 527-2:2026
UNE-N0075564
The following has evaluated to null or missing:
==> restClient.get("/c/traininginfos/?filter=r_trainingInfo_CPDefinitionId eq '${CPDefinition_cpDefinitionId.getData()}'").items[0] [in template "34352066712900#33336#null" at line 2, column 25]
----
Tip: It's the final [] step 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 trainingInfo = restClient.get... [in template "34352066712900#33336#null" at line 2, column 1]
----
1<#assign ns = "ns-" + stringUtil.randomId() />
2<#assign trainingInfo = restClient.get("/c/traininginfos/?filter=r_trainingInfo_CPDefinitionId eq '${CPDefinition_cpDefinitionId.getData()}'").items[0]>
3<#if trainingInfo.ficheroAsociado?? && trainingInfo.ficheroAsociado?has_content>
4 <#assign isExternal = isUrl(trainingInfo.ficheroAsociado)>
5 <#if isExternal>
6 <#assign url = trainingInfo.ficheroAsociado>
7 <#else>
8 <#assign url = "/documents/d/global/${removeExtension(trainingInfo.ficheroAsociado)}?download=true">
9 </#if>
10 <a id="${ns}-doc-link" href="${url}" data-check-url="${url}" data-external="${isExternal?c}" class="<#if isExternal>d-block<#else>d-none</#if>">
11 <button class="btn-outline-ae btnae-- btn-outline-ae--primary animated-button">
12 ${languageUtil.get(locale, "curso.descarga")}
13 </button>
14 </a>
15</#if>
16
17<#function isUrl str>
18 <#return (str?starts_with("http://") || str?starts_with("https://"))>
19</#function>
20
21<#function removeExtension filename>
22 <#if filename?contains(".")>
23 <#return filename?substring(0, filename?last_index_of("."))>
24 <#else>
25 <#return filename>
26 </#if>
27</#function>
28
29
30<script>
31 (function() {
32 const link = document.getElementById('${ns}-doc-link');
33 if (!link) return;
34
35 const isExternal = link.getAttribute('data-external') === 'true';
36 if (isExternal) {
37 // URL externa: no se puede validar por CORS, se confía en el dato
38 return;
39 }
40
41 const url = link.getAttribute('data-check-url');
42 fetch(url, { method: 'HEAD' })
43 .then(response => {
44 if (response.ok) {
45 link.classList.remove('d-none');
46 }
47 })
48 .catch(() => {
49 // URL no existe, mantener oculto
50 });
51 })();
52</script>
The following has evaluated to null or missing:
==> restClient.get("/c/traininginfos/?filter=r_trainingInfo_CPDefinitionId eq '${CPDefinition_cpDefinitionId.getData()}'").items[0] [in template "34352066712900#33336#null" at line 1, column 25]
----
Tip: It's the final [] step 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 trainingInfo = restClient.get... [in template "34352066712900#33336#null" at line 1, column 1]
----
1<#assign trainingInfo = restClient.get("/c/traininginfos/?filter=r_trainingInfo_CPDefinitionId eq '${CPDefinition_cpDefinitionId.getData()}'").items[0]>
2<#if trainingInfo.bonificable>
3 <div class="bonus-link mt-4">
4 <a href="/formacion/bonificaciones">${languageUtil.get(locale, "curso.bonus")}</a>
5 </div>
6</#if>
7
8<style>
9 .bonus-link a {
10 font-family: "SohoGothicPro-Regular";
11 color: #fff;
12 font-size: 1.1875rem;
13 font-weight: 400;
14 line-height: 1.5rem;
15 text-align: left;
16 }
17</style>
The following has evaluated to null or missing:
==> restClient.get("/c/traininginfos/?filter=r_trainingInfo_CPDefinitionId eq '${CPDefinition_cpDefinitionId.getData()}'").items[0] [in template "34352066712900#33336#null" at line 1, column 25]
----
Tip: It's the final [] step 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 trainingInfo = restClient.get... [in template "34352066712900#33336#null" at line 1, column 1]
----
1<#assign trainingInfo = restClient.get("/c/traininginfos/?filter=r_trainingInfo_CPDefinitionId eq '${CPDefinition_cpDefinitionId.getData()}'").items[0]>
2<div id="trainingInfo" class="container">
3
4 <#if CPDefinition_description.getData()?? && CPDefinition_description.getData()?has_content>
5 <div class="content-area">
6 ${CPDefinition_description.getData()}
7 </div>
8 </#if>
9
10 <#if trainingInfo.dirigidoa?? && trainingInfo.dirigidoa?has_content>
11 <li class="custom-accordion-detail align-items-center d-flex flex-column accordion-entry w-100 ">
12 <div class="align-items-center content-area d-flex justify-content-between m-0 row w-100">
13 <p class="col-11 m-0 text-neutral-10 accordion-title" data-target="accordion-body-1">
14 ${languageUtil.get(locale, "curso.dirigido-a")}
15 </p>
16
17 <div class="col-1 custom-icon plus-icon px-0" data-target="accordion-body-1">
18 <@clay["icon"] symbol="angle-down"/>
19 </div>
20
21 <div class="col-1 custom-icon minus-icon px-0 d-none" data-target="accordion-body-1">
22 <@clay["icon"] symbol="angle-up"/>
23 </div>
24 </div>
25
26 <div class="accordion-body col-12 content-area text-neutral-8 w-100" id="accordion-body-1">
27 ${trainingInfo.dirigidoa}
28 </div>
29 </li>
30 </#if>
31
32 <#if trainingInfo.promocionEspecial?? && trainingInfo.promocionEspecial?has_content>
33 <li class="custom-accordion-detail align-items-center d-flex flex-column accordion-entry w-100 ">
34 <div class="align-items-center content-area d-flex justify-content-between m-0 row w-100">
35 <p class="col-11 m-0 text-neutral-10 accordion-title" data-target="accordion-body-2">
36 ${languageUtil.get(locale, "curso.promocionEspecial")}
37 </p>
38
39 <div class="col-1 custom-icon plus-icon px-0" data-target="accordion-body-2">
40 <@clay["icon"] symbol="angle-down"/>
41 </div>
42
43 <div class="col-1 custom-icon minus-icon px-0 d-none" data-target="accordion-body-2">
44 <@clay["icon"] symbol="angle-up"/>
45 </div>
46 </div>
47
48 <div class="accordion-body col-12 content-area text-neutral-8 w-100" id="accordion-body-2">
49 ${trainingInfo.promocionEspecial}
50 </div>
51 </li>
52 </#if>
53
54 <#if trainingInfo.objetivos?? && trainingInfo.objetivos?has_content>
55 <li class="custom-accordion-detail align-items-center d-flex flex-column accordion-entry w-100 ">
56 <div class="align-items-center content-area d-flex justify-content-between m-0 row w-100">
57 <p class="col-11 m-0 text-neutral-10 accordion-title" data-target="accordion-body-3">
58 ${languageUtil.get(locale, "curso.objetivos")}
59 </p>
60
61 <div class="col-1 custom-icon plus-icon px-0" data-target="accordion-body-3">
62 <@clay["icon"] symbol="angle-down"/>
63 </div>
64
65 <div class="col-1 custom-icon minus-icon px-0 d-none" data-target="accordion-body-3">
66 <@clay["icon"] symbol="angle-up"/>
67 </div>
68 </div>
69
70 <div class="accordion-body col-12 content-area text-neutral-8 w-100" id="accordion-body-3">
71 ${trainingInfo.objetivos}
72 </div>
73 </li>
74 </#if>
75
76 <#if trainingInfo.contenido?? && trainingInfo.contenido?has_content>
77 <li class="custom-accordion-detail align-items-center d-flex flex-column accordion-entry w-100 ">
78 <div class="align-items-center content-area d-flex justify-content-between m-0 row w-100">
79 <p class="col-11 m-0 text-neutral-10 accordion-title" data-target="accordion-body-4">
80 ${languageUtil.get(locale, "curso.contenido")}
81 </p>
82
83 <div class="col-1 custom-icon plus-icon px-0" data-target="accordion-body-4">
84 <@clay["icon"] symbol="angle-down"/>
85 </div>
86
87 <div class="col-1 custom-icon minus-icon px-0 d-none" data-target="accordion-body-4">
88 <@clay["icon"] symbol="angle-up"/>
89 </div>
90 </div>
91
92 <div class="accordion-body col-12 content-area text-neutral-8 w-100" id="accordion-body-4">
93 ${trainingInfo.contenido}
94 </div>
95 </li>
96 </#if>
97
98 <#if trainingInfo.requisitos?? && trainingInfo.requisitos?has_content>
99 <li class="custom-accordion-detail align-items-center d-flex flex-column accordion-entry w-100 ">
100 <div class="align-items-center content-area d-flex justify-content-between m-0 row w-100">
101 <p class="col-11 m-0 text-neutral-10 accordion-title" data-target="accordion-body-5">
102 ${languageUtil.get(locale, "curso.requisitos")}
103 </p>
104
105 <div class="col-1 custom-icon plus-icon px-0" data-target="accordion-body-5">
106 <@clay["icon"] symbol="angle-down"/>
107 </div>
108
109 <div class="col-1 custom-icon minus-icon px-0 d-none" data-target="accordion-body-5">
110 <@clay["icon"] symbol="angle-up"/>
111 </div>
112 </div>
113
114 <div class="accordion-body col-12 content-area text-neutral-8 w-100" id="accordion-body-5">
115 ${trainingInfo.requisitos}
116 </div>
117 </li>
118 </#if>
119
120 <#if trainingInfo.reconocimientos?? && trainingInfo.reconocimientos?has_content>
121 <li class="custom-accordion-detail align-items-center d-flex flex-column accordion-entry w-100 ">
122 <div class="align-items-center content-area d-flex justify-content-between m-0 row w-100">
123 <p class="col-11 m-0 text-neutral-10 accordion-title" data-target="accordion-body-6">
124 ${languageUtil.get(locale, "curso.reconocimientos")}
125 </p>
126
127 <div class="col-1 custom-icon plus-icon px-0" data-target="accordion-body-6">
128 <@clay["icon"] symbol="angle-down"/>
129 </div>
130
131 <div class="col-1 custom-icon minus-icon px-0 d-none" data-target="accordion-body-6">
132 <@clay["icon"] symbol="angle-up"/>
133 </div>
134 </div>
135
136 <div class="accordion-body col-12 content-area text-neutral-8 w-100" id="accordion-body-6">
137 ${trainingInfo.reconocimientos}
138 </div>
139 </li>
140 </#if>
141
142 <#if trainingInfo.colaboraciones?? && trainingInfo.colaboraciones?has_content>
143 <li class="custom-accordion-detail align-items-center d-flex flex-column accordion-entry w-100 ">
144 <div class="align-items-center content-area d-flex justify-content-between m-0 row w-100">
145 <p class="col-11 m-0 text-neutral-10 accordion-title" data-target="accordion-body-7">
146 ${languageUtil.get(locale, "curso.colaboraciones")}
147 </p>
148
149 <div class="col-1 custom-icon plus-icon px-0" data-target="accordion-body-7">
150 <@clay["icon"] symbol="angle-down"/>
151 </div>
152
153 <div class="col-1 custom-icon minus-icon px-0 d-none" data-target="accordion-body-7">
154 <@clay["icon"] symbol="angle-up"/>
155 </div>
156 </div>
157
158 <div class="accordion-body col-12 content-area text-neutral-8 w-100" id="accordion-body-7">
159 ${trainingInfo.colaboraciones}
160 </div>
161 </li>
162 </#if>
163</div>
164
165<script>
166$(document).ready(function () {
167 $(".accordion-title, .custom-icon").on("click", function () {
168 const targetId = $(this).data("target");
169 toggleAccordion(targetId);
170 });
171
172 function toggleAccordion(targetId) {
173 const $body = $("#" + targetId);
174 const $plusIcon = $(".plus-icon[data-target=" + targetId + "]");
175 const $minusIcon = $(".minus-icon[data-target=" + targetId + "]");
176 const $title = $(".accordion-title[data-target=" + targetId + "]");
177
178 $plusIcon.toggleClass("d-none");
179 $minusIcon.toggleClass("d-none");
180 $body.toggleClass("toggle-styles");
181 }
182});
183</script>
184
185<style>
186.content-area div {
187 font-family: 'SohoGothicPro-Regular' !important;
188 font-size: 16px !important;
189 font-weight: 400 !important;
190 line-height: 24px !important;
191 color: #2D2D2B !important;
192}
193
194.content-area span {
195 font-family: 'SohoGothicPro-Regular' !important;
196 font-size: 16px !important;
197 font-weight: 400 !important;
198 line-height: 24px !important;
199 color: #2D2D2B !important;
200}
201
202div > .lfr-layout-structure-item-accordion-faq-block--copy- {
203 border-top: 1px solid #DDE1E6;
204}
205div > .lfr-layout-structure-item-accordion-faq-block--copy- ~ .lfr-layout-structure-item-accordion-faq-block--copy- {
206 border-top: none;
207}
208
209.custom-accordion-detail.accordion-entry{
210 /*max-width: 900px; */
211 padding:40px 0 16px;
212 border-bottom: 1px solid #DDE1E6;
213}
214.custom-accordion-detail .accordion-body {
215 max-height: 0;
216 overflow: hidden;
217 transition: max-height 0.2s ease-out;
218 font-family: SohoGothicPro-Regular;
219 font-size: 16px;
220 font-weight: 400;
221 line-height: 24px;
222 text-align: left;
223 color: #2D2D2B;
224}
225.custom-accordion-detail .custom-icon {
226 cursor: pointer;
227 height: 24px !important;
228 width: 24px !important;
229 text-align: end;
230}
231.custom-accordion-detail .accordion-title{
232 padding-left: 0;
233 font-family: SohoStd-Medium;
234 font-size: 20px;
235 font-weight: 400;
236 line-height: 26px;
237 text-align: left;
238 color: var(--brand-color-1, #1F57A3);
239}
240.custom-accordion-detail .text-primary {
241 color: var(--brand-color-1, #1F57A3) !important;
242}
243.custom-accordion-detail .toggle-styles{
244 padding: 24px 0 14px;
245 max-height: none !important;
246}
247.custom-accordion-detail .lexicon-icon {
248 color: #3CB4E5;
249 font-size: 20px;
250}
251.custom-accordion-detail .accordion-body ul{
252 list-style: none;
253 padding-left: 0;
254}
255.custom-accordion-detail .accordion-body ul li{
256display: flex;
257}
258.custom-accordion-detail .accordion-body ul li:before{
259 content: "\f0c8";
260 color: var(--brand-color-1, #1F57A3);
261 font-size: 10px;
262 padding-right: 8px;
263 font-weight: 900;
264 font-family: 'Font Awesome 6 Free';
265}
266.custom-accordion-detail .accordion-body ul li:not(:first-child) {
267 margin-top: 8px;
268}
269</style>
Información de la convocatoria
PREGUNTAS FRECUENTES
¿Tienes alguna duda sobre nuestros cursos?
¿Cómo me matriculo en un curso de AENOR?
Inscribirte en un curso de AENOR es muy fácil. Solo tienes que seguir estos pasos:
- Elige el curso que más te interesa
- Dentro de la página del curso, verás el cuadro con las diferentes modalidades y fechas de inicio
- Selecciona la opción que mejor se adapte a ti y haz clic en "Reservar plaza"
- Se abrirá el formulario de preinscripción, donde deberás completar tus datos y, si eres responsable de formación de tu empresa, también los de los asistentes al curso.
Y listo, ¡Ya estarás en camino para formarte con los mejores!
¿Qué modalidades de formación ofrece AENOR?
En AENOR sabemos que cada persona tiene necesidades diferentes, por eso ofrecemos cuatro modalidades de formación:
- Live Training (en directo/streaming): Formación en tiempo real con profesores expertos.
- 100% Online: Aprende a tu ritmo con acceso a materiales y recursos digitales
- Presencial: Formación en nuestras instalaciones, con interacción directa con docentes y compañeros.
- Formación a medida para empresas: Diseñamos cursos personalizados para equipos, adaptándonos a sus necesidades y en sus propias instalaciones.
Dentro de cada curso, en el cuadro de convocatorias, podrás ver qué modalidades están disponibles para esa formación.
¿Los cursos de AENOR son bonificables?
Sí, casi todos los cursos AENOR pueden bonificarse a través del sistema de la Fundación Estatal para la Formación en el Empleo (FUNDAE), siempre que se cumplan los requisitos de la Ley 30/2015 y el Real Decreto 694/2017.
Además, te lo ponemos fácil: en AENOR gestionamos sin coste adicional la bonificación, para que tu empresa pueda aprovechar el crédito de formación disponible. Solo tienes que solicitarlo durante el proceso de inscripción.
Para más información, consulta nuestra sección de Cursos Bonificados AENOR.
¿Cuándo recibiré mi certificado?
Una vez finalices el curso, podrás descargar tu certificado directamente desde nuestro Campus Virtual.
Si has realizado una formación con examen para la obtención de la Titulación Propia de AENOR, el certificado y la titulación estarán disponibles tras verificar que has superado la evalución final.
¿Puedo inscribir a varios trabajadores en un curso?
¡Por supuesto! Si eres empresa y quieres inscribir a varios empleados en un curso, puedes hacerlo en un solo proceso de inscripción:
- Al iniciar el registro, selecciona la opción "Soy una empresa".
- Rellena los datos de la empresa y de la persona responsable.
- Acepta el Contrato de Encargado del Tratamiento.
- En la sección "Añadir alumnado", introduce los datos de todos los trabajadores de tu empresa que participarán en la formación.
Beneficio extra: Si inscribes a más de un trabajador en la misma convocatoria, tu empresa recibirá un 15% de descuento a partir de la segunda inscripción.
