What does the new divided highway between the Western Tunnel and San Jerónimo (Colombia) mean for local residents?
We open 19 kilometers of Functional Unit 1 within the Autopista al Mar 1 project.
We lead the infrastructure sector in Colombia
Sacyr set up as a Colombian company originating in Spain, with an investment of close to US$3 billion. We have been firmly committed to developing the country’s infrastructure, by working on more than ten P3 and engineering initiatives.
We have always prioritized the recruitment of local talent in the execution of more than 500 km of roads and civil engineering works, which have improved connectivity and economic development throughout Colombia.

In figures
+520
KILOMETERS
P3 road projects
+370
HECTARES
Protected or conserved habitats
3
US$ BILLION
Direct investment
We improve the quality of life of Colombian people
In 2012, we consolidated our position by embarking on our first road projects. We currently have more than ten projects across the country and are always on the lookout for new business opportunities. We also participate in the street cleaning of Bogotá.
Our presence in Colombia has created more than 13,000 jobs in our areas of influence, offering our employees the chance to improve their skills and grow professionally.
The following has evaluated to null or missing:
==> JournalArticleLocalService.fetchLatestArticle(groupId, reserved\-article\-id.data, statusApproved) [in template "42020#42061#163037" at line 13, column 27]
----
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 journalArticle = JournalArtic... [in template "42020#42061#163037" at line 13, column 1]
----
1<#--
2Plantilla de apoyo para pintar los proyectos relacionados en pais en forma de pastilla
3-->
4
5<#assign JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")>
6<#assign assetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService")/>
7<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService")/>
8<#assign assetLinkLocalService = serviceLocator.findService("com.liferay.asset.link.service.AssetLinkLocalService") />
9<#assign assetVocabularyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService")>
10
11
12<#assign statusApproved = 0>
13<#assign journalArticle = JournalArticleLocalService.fetchLatestArticle(groupId, reserved\-article\-id.data, statusApproved)>
14<#assign entry = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", journalArticle.getResourcePrimKey())/>
15<#assign categories = assetCategoryLocalService.getEntryCategories(entry.getEntryId())>
16
17<#assign VOC_TIPO_PROYECTO = "SACYR_GLOBAL_TIPO_PROYECTO">
18
19
20<#list categories as category>
21 <#assign voc = assetVocabularyLocalService.getAssetVocabulary(category.getVocabularyId())>
22
23 <#if voc.getName()?lower_case == VOC_TIPO_PROYECTO?lower_case>
24 <#assign categoryName = category.getTitle(locale) />
25 <#break>
26 </#if>
27
28</#list>
29
30<#assign currentArticleRelatedLinks = assetLinkLocalService.getDirectLinks(entry.getEntryId()) />
31
32<div class="box-container">
33 <div class="text-media-box">
34 <#if codigoVideo?? && codigoVideo.getData()?? && codigoVideo.getData() != "">
35 <button class="multimedia multimedia-video" data-toggle="modal" data-target="#videoX3_${randomNamespace}">
36 <span class="icon icon-play-b-ig small"></span>
37 <#if imagenDesktop.getData()?? && imagenDesktop.getData() != "">
38 <img class="img-desktop" alt="${imagenDesktop.getAttribute("alt")}" data-fileentryid="${imagenDesktop.getAttribute("fileEntryId")}" src="${imagenDesktop.getData()}" />
39 </#if>
40 </button>
41 <#else>
42 <div class="multimedia">
43 <#if imagenDesktop.getData()?? && imagenDesktop.getData() != "">
44 <img class="img-desktop" alt="${imagenDesktop.getAttribute("alt")}" data-fileentryid="${imagenDesktop.getAttribute("fileEntryId")}" src="${imagenDesktop.getData()}" />
45 </#if>
46 </div>
47 </#if>
48
49 <div class="text">
50 <p class="tagline text-uppercase">${categoryName}</p>
51 <h3 class="title"><a href="${themeDisplay.getScopeGroup().getDisplayURL(themeDisplay,false)}/-/${reserved\-article\-url\-title.get("data")}">${titulo.getData()}</a></h3>
52
53 <#if (currentArticleRelatedLinks?size > 0)>
54 <#list currentArticleRelatedLinks as related_entry>
55 <#assign relatedAssetEntryId = related_entry.getEntryId2() />
56 <#assign relatedAssetEntry = assetEntryLocalService.getEntry(relatedAssetEntryId) />
57 <#assign relatedAssetEntryPrimKey = relatedAssetEntry.getClassPK() />
58 <#assign relatedArticle = JournalArticleLocalService.getLatestArticle(relatedAssetEntryPrimKey) />
59 <#assign relatedArticleId = relatedArticle.getArticleId() />
60 <#assign currentRelatedArticle = JournalArticleLocalService.getArticle(groupId, relatedArticleId) />
61
62 <#assign docXml = saxReaderUtil.read(relatedArticle.getContentByLocale(locale.toString())) />
63 <#assign countryName = docXml.getRootElement().selectSingleNode("//dynamic-element[@name='nombre']") />
64
65 <div class="location">
66 <span class="icon-location"></span>
67 <a href="${themeDisplay.getScopeGroup().getDisplayURL(themeDisplay,false)}/-/${currentRelatedArticle.getUrlTitle()}">${countryName.getStringValue()}</a>
68 </div>
69 </#list>
70 </#if>
71 </div>
72 </div>
73</div>
74
75<#if codigoVideo?? && codigoVideo.getData()?? && codigoVideo.getData() != "">
76 <div class="modal fade modal-video" id="videoX3_${randomNamespace}" role="dialog">
77 <div class="modal-dialog modal-lg modal-dialog-centered">
78 <div class="modal-content">
79 <div class="modal-header">
80 <button type="button" class="close" data-dismiss="modal">×</button>
81 </div>
82 <div class="modal-body">
83 <iframe width="420" height="315" src="${codigoVideo.getData()}"></iframe>
84 </div>
85 </div>
86 </div>
87 </div>
88</#if>
The following has evaluated to null or missing:
==> JournalArticleLocalService.fetchLatestArticle(groupId, reserved\-article\-id.data, statusApproved) [in template "42020#42061#163037" at line 13, column 27]
----
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 journalArticle = JournalArtic... [in template "42020#42061#163037" at line 13, column 1]
----
1<#--
2Plantilla de apoyo para pintar los proyectos relacionados en pais en forma de pastilla
3-->
4
5<#assign JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")>
6<#assign assetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService")/>
7<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService")/>
8<#assign assetLinkLocalService = serviceLocator.findService("com.liferay.asset.link.service.AssetLinkLocalService") />
9<#assign assetVocabularyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService")>
10
11
12<#assign statusApproved = 0>
13<#assign journalArticle = JournalArticleLocalService.fetchLatestArticle(groupId, reserved\-article\-id.data, statusApproved)>
14<#assign entry = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", journalArticle.getResourcePrimKey())/>
15<#assign categories = assetCategoryLocalService.getEntryCategories(entry.getEntryId())>
16
17<#assign VOC_TIPO_PROYECTO = "SACYR_GLOBAL_TIPO_PROYECTO">
18
19
20<#list categories as category>
21 <#assign voc = assetVocabularyLocalService.getAssetVocabulary(category.getVocabularyId())>
22
23 <#if voc.getName()?lower_case == VOC_TIPO_PROYECTO?lower_case>
24 <#assign categoryName = category.getTitle(locale) />
25 <#break>
26 </#if>
27
28</#list>
29
30<#assign currentArticleRelatedLinks = assetLinkLocalService.getDirectLinks(entry.getEntryId()) />
31
32<div class="box-container">
33 <div class="text-media-box">
34 <#if codigoVideo?? && codigoVideo.getData()?? && codigoVideo.getData() != "">
35 <button class="multimedia multimedia-video" data-toggle="modal" data-target="#videoX3_${randomNamespace}">
36 <span class="icon icon-play-b-ig small"></span>
37 <#if imagenDesktop.getData()?? && imagenDesktop.getData() != "">
38 <img class="img-desktop" alt="${imagenDesktop.getAttribute("alt")}" data-fileentryid="${imagenDesktop.getAttribute("fileEntryId")}" src="${imagenDesktop.getData()}" />
39 </#if>
40 </button>
41 <#else>
42 <div class="multimedia">
43 <#if imagenDesktop.getData()?? && imagenDesktop.getData() != "">
44 <img class="img-desktop" alt="${imagenDesktop.getAttribute("alt")}" data-fileentryid="${imagenDesktop.getAttribute("fileEntryId")}" src="${imagenDesktop.getData()}" />
45 </#if>
46 </div>
47 </#if>
48
49 <div class="text">
50 <p class="tagline text-uppercase">${categoryName}</p>
51 <h3 class="title"><a href="${themeDisplay.getScopeGroup().getDisplayURL(themeDisplay,false)}/-/${reserved\-article\-url\-title.get("data")}">${titulo.getData()}</a></h3>
52
53 <#if (currentArticleRelatedLinks?size > 0)>
54 <#list currentArticleRelatedLinks as related_entry>
55 <#assign relatedAssetEntryId = related_entry.getEntryId2() />
56 <#assign relatedAssetEntry = assetEntryLocalService.getEntry(relatedAssetEntryId) />
57 <#assign relatedAssetEntryPrimKey = relatedAssetEntry.getClassPK() />
58 <#assign relatedArticle = JournalArticleLocalService.getLatestArticle(relatedAssetEntryPrimKey) />
59 <#assign relatedArticleId = relatedArticle.getArticleId() />
60 <#assign currentRelatedArticle = JournalArticleLocalService.getArticle(groupId, relatedArticleId) />
61
62 <#assign docXml = saxReaderUtil.read(relatedArticle.getContentByLocale(locale.toString())) />
63 <#assign countryName = docXml.getRootElement().selectSingleNode("//dynamic-element[@name='nombre']") />
64
65 <div class="location">
66 <span class="icon-location"></span>
67 <a href="${themeDisplay.getScopeGroup().getDisplayURL(themeDisplay,false)}/-/${currentRelatedArticle.getUrlTitle()}">${countryName.getStringValue()}</a>
68 </div>
69 </#list>
70 </#if>
71 </div>
72 </div>
73</div>
74
75<#if codigoVideo?? && codigoVideo.getData()?? && codigoVideo.getData() != "">
76 <div class="modal fade modal-video" id="videoX3_${randomNamespace}" role="dialog">
77 <div class="modal-dialog modal-lg modal-dialog-centered">
78 <div class="modal-content">
79 <div class="modal-header">
80 <button type="button" class="close" data-dismiss="modal">×</button>
81 </div>
82 <div class="modal-body">
83 <iframe width="420" height="315" src="${codigoVideo.getData()}"></iframe>
84 </div>
85 </div>
86 </div>
87 </div>
88</#if>