Content_C&P_facilities_management_MainRegion
Facilities Management
Welcome to Hays Construction & Property, where we match skilled facilities management professionals and contractors to the right roles.
Our track record with Facilities Management is unrivalled across the specialist recruitment industry. We have operated across the UK for 20 years within the FM sector, are corporate members of BIFM, and work with the UK's leading FM, Hard Services Providers and Direct Client in-house teams.
Hays involvement in the industry combined with the increased spending of FM project and salaries has meant we're able to offer an expansive knowledge of the market and a broad range of quality jobs to our candidates.
The jobs we offer include Facilities Manager, Account Manager, Soft Services Manager, Assistant Facilities Manager jobs, Head of Facilities, Commercial Manager jobs, Engineering Manager jobs and Front of House jobs.
We have numerous offices across the UK, including London, Belfast, Birmingham, Leeds and Edinburgh. We offer tailored career advice such as providing you CV tips and interview presentation tips. Get in contact with your local office to meet one of our experts.
HaysSearchForm Portlet
Search for jobs
SearchCandidate
Search for candidates
Content_C&P_featured_employers_PromoBox
The following has evaluated to null or missing: ==> assetEntryLocalService.getjobs("keyword", specialismId, subSpecialismId, countJobs, locale) [in template "20115#20151#81915" at line 66, column 32] ---- Tip: If the failing expression is known to be 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 getResponse = assetEntryLocal... [in template "20115#20151#81915" at line 66, column 9] ----
1<#assign FeaturedEmployerTitle = FeaturedEmployerTitle.getData()>
2<#assign PopularSearchesTitle = PopularSearchesTitle.getData()>
3<#assign LatestJobsTitle = LatestJobsTitle.getData()>
4<#assign tabsLabels = "">
5<#assign featuredCount = 0>
6<#assign latestJobsCount = 0>
7<#assign assignedCategoriesIds = "">
8<#assign assignedCategoriesNames = "">
9<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") />
10<#assign plId = layout.getPlid()>
11<#assign layoutEntry = assetEntryLocalService.fetchEntry("com.liferay.portal.kernel.model.Layout", plId)>
12<#assign assetCategories = layoutEntry.getCategories()/>
13
14<#assign keyword = "">
15<#assign subSpecialismId = "">
16<#assign specialismId = "">
17<#assign parentPlid = layout.getParentPlid()>
18
19<#if FeaturedEmployerTitle != "">
20 <#assign FeaturedEmployerTitle += ','>
21 <#assign featuredEmployerService = serviceLocator.findService("com.hays.employer.service.HaysFeaturedEmployerLocalService") />
22 <#assign totalCount = 6 >
23 <#assign groupIdVal = groupId?c >
24 <#assign targetAudience = "common,jobseeker" >
25 <#list assetCategories as cat>
26 <#assign catName = cat.getCategoryId()>
27 <#assign catName += '|'>
28 <#assign assignedCategoriesIds += catName>
29 </#list>
30 <#assign assignedCategoriesIds = assignedCategoriesIds?keep_before("|")/>
31 <#assign response = featuredEmployerService.getFeaturedEmployers(assignedCategoriesIds, groupIdVal, targetAudience, totalCount)>
32 <#if response.EmpResult??>
33 <#assign EmpResultArray = response.getJSONArray("EmpResult")>
34 <#assign featuredCount = EmpResultArray.length()>
35 <#if featuredCount !=0>
36 <#assign tabsLabels += FeaturedEmployerTitle>
37 </#if>
38 </#if>
39</#if>
40
41<#if LatestJobsTitle != "">
42 <#assign LatestJobsTitle += ','>
43 <#assign LayoutLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService")>
44 <#assign nodeId = LayoutLocalService.getLayout(parentPlid).getExpandoBridge().getAttribute("NodeId")>
45 <#list assetCategories as cat>
46 <#assign catName = cat.getName()>
47 <#assign catName += '|'>
48 <#assign assignedCategoriesNames += catName>
49 </#list>
50 <#assign assignedCategoriesNames = assignedCategoriesNames?keep_before("|")/>
51 <#if nodeId == "job-seeker">
52 <#assign specialismId = assignedCategoriesNames>
53 <#else>
54 <#assign subSpecialismId = assignedCategoriesNames>
55 </#if>
56 <#assign ucmLocaleKey = themeDisplay.getLocale()+"."+siteType+"."+"ucmLocale">
57 <#assign projectSURLKey = "Mobile_URL_" + locale.getCountry()>
58 <#if (siteType != "Expert")>
59 <#assign projectSURLKey = projectSURLKey + "_"+ siteType>
60 </#if>
61 <#assign locale = propsUtil.get(ucmLocaleKey)/>
62 <#assign GCSLocales = propsUtil.get("GCSLocales")/>
63 <#assign projectSURL = propsUtil.get(projectSURLKey)/>
64 <#assign countJobs = "5">
65 <#assign assetEntryLocalService = serviceLocator.findService("com.hays.service.jobs.service.HaysJobsLocalService")/>
66 <#assign getResponse = assetEntryLocalService.getjobs("keyword", specialismId, subSpecialismId, countJobs, locale)>
67 <#if getResponse?? && getResponse.result??>
68 <#assign getResponseResult = getResponse.result>
69 <#if getResponseResult.resultCount gt 0>
70 <#assign getResponseResultArray = getResponseResult.getJSONArray("jobs")>
71 <#assign latestJobsCount = getResponseResultArray.length()>
72 <#if getResponseResultArray.length() < 5>
73 <#assign countJobs = getResponseResultArray.length()>
74 </#if>
75 <#if latestJobsCount != 0>
76 <#assign tabsLabels += LatestJobsTitle>
77 </#if>
78 </#if>
79 </#if>
80</#if>
81
82<#if PopularSearchesTitle != "">
83 <#assign PopularSearchesTitle += ','>
84 <#if Label.getSiblings()?has_content>
85 <#assign tabsLabels += PopularSearchesTitle>
86 </#if>
87</#if>
88
89<#if tabsLabels != "">
90 <div class="box">
91 <div class="hays-tabs">
92 <#assign tabsLabels = tabsLabels?keep_before_last(",")/>
93 <@liferay_ui["tabs"]
94 names=tabsLabels
95 param=tabs2
96 refresh=false
97 type=tabs
98 >
99
100 <#if FeaturedEmployerTitle != "" && featuredCount !=0>
101 <@liferay_ui["section"] >
102 <ul class="list emp-list">
103 <#list 0 ..< featuredCount as i>
104 <#assign empTitle = EmpResultArray.get(i).title>
105 <#assign empArticleId = EmpResultArray.get(i).articleId>
106 <#assign empUrl = EmpResultArray.get(i).empUrl>
107 <#assign empImage = EmpResultArray.get(i).image>
108 <li class="${empArticleId}"><a href="${empUrl}" target="_blank"><img src="${empImage}" alt="${empTitle}"></a></li>
109 </#list>
110 </ul>
111 <#assign privateLayout = false>
112 <#assign LayoutLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService")>
113 <#assign layouts = LayoutLocalService.getLayouts(groupId, privateLayout)>
114 <#assign featureEmployerPageUrl = "/">
115 <#if (layouts?size > 0)>
116 <#assign featuredEmpSectionFound = 0>
117 <#list layouts as layout>
118 <#if layout?? && featuredEmpSectionFound == 0>
119 <#assign nodeIdFeatured = layout.getExpandoBridge().getAttribute("NodeId")>
120 <#if (nodeIdFeatured??)>
121 <#if (nodeIdFeatured == "featured-employer")>
122 <#assign featuredEmpSectionFound = 1>
123 <#assign featureEmployerPageUrl = layout.getFriendlyURL()>
124 <#assign portalurl= themeDisplay.getURLPortal() >
125 <#if portalurl?contains("expertcontrib")>
126 <#assign featureEmployerPageUrl= "/web"+themeDisplay.getSiteGroup().getFriendlyURL()+ featureEmployerPageUrl >
127 </#if>
128 </#if>
129 </#if>
130 </#if>
131 </#list>
132 </#if>
133 <a class="btn" href="${featureEmployerPageUrl}">${languageUtil.get(themeDisplay.getLocale(), "lr_featuredEmployersTitle")}</a>
134 </@>
135 </#if>
136
137 <#if LatestJobsTitle != "" && latestJobsCount != 0 >
138 <@liferay_ui["section"]>
139 <ul class="list sponsored-list">
140 <#list 0 ..< countJobs?number as i>
141 <#assign JobUrl = getResponseResultArray.get(i).jobRequisitionId>
142 <#if GCSLocales?contains(locale)>
143 <#assign JobUrl += "?jobSource=HaysGCJ">
144 </#if>
145 <#assign jobtitle = getResponseResultArray.get(i).title>
146 <#if getResponseResultArray.get(i).getJSONObject("nonFilterableCustomFields").has("xLocationDescription")>
147 <#assign location = getResponseResultArray.get(i).getJSONObject("nonFilterableCustomFields").getJSONObject("xLocationDescription").getJSONArray("values").getString(0)>
148 <#else>
149 <#assign location = "">
150 </#if>
151 <li><a href="${JobUrl}"><strong>${jobtitle}</strong><small><p>${location}</p></small></a></li>
152 </#list>
153 </ul>
154 <a class="btn" href="${projectSURL}${propsUtil.get("SEARCH")}?q=hays&specialismId=${specialismId}&subSpecialismId=${subSpecialismId}"><span>${languageUtil.get(themeDisplay.getLocale(), "lr_latestAllJobs")}</span></a>
155 </@>
156 </#if>
157
158 <#if PopularSearchesTitle != "">
159 <@liferay_ui["section"]>
160 <#if Label.getSiblings()?has_content>
161 <ul class="list arrow-list">
162 <#list Label.getSiblings() as cur_PopularSearchesContent>
163 <li ><h3><a target="_blank" href="${cur_PopularSearchesContent.Link.getData()}">${cur_PopularSearchesContent.getData()}</a></h3></li>
164 </#list>
165 </ul>
166 </#if>
167 </@>
168 </#if>
169 </div>
170 </div>
171</@>
172</#if>
Content_multi_generic_specialism_PromoBox
Have a vacancy?
Have a vacancy? Send us some details about the job, and we can help you out. We have a huge database of professionals available to fill your vacancies.
Find your local office
Hays have offices across the the UK. Contact your local recruitment expert to discuss any vacancies or job opportunities.
Join our social network
HaysSpecialismTree
Content_multi_office_locator_RHmodule
Contact us
Hays has offices across the whole of the UK. Contact us to discuss your employment needs.
Content_C&P_recent_reports_RHModule
Content_C&P_facilities_management_blogs_RHModule
Content_multi_salary_checker_2019_RHModule
Salary Checker
Our salary checker helps you to understand what the standard salaries are and what your potential earnings could be.