템플렛을 가공하고 있는 동안 과실은 일어났다.
Java method "jdk.proxy4.$Proxy169.getDLFileEntryByUuidAndGroupId(String, long)" threw an exception when invoked on jdk.proxy4.$Proxy169 object "com.liferay.document.library.internal.service.FriendlyURLDLFileEntryLocalServiceWrapper@2686e5ed"; see cause exception in the Java stack trace.

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign displayHeadshotId = DLFileEnt...  [in template "20116#20152#31814" at line 261, column 41]
----
1<#-- Web content templates are used to lay out the fields defined in a web content structure.  Please use the left panel to quickly add commonly used variables. Autocomplete is also available and can be invoked by typing "${". --> 
2<#assign serviceContext = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"].getServiceContext() /> 
3<#assign themeDisplay = serviceContext.getThemeDisplay() /> 
4<#assign preview = false/> 
5<#assign currentPageUrl = themeDisplay.getURLCurrent() /> 
6 
7<#if (currentPageUrl?contains("preview_article_content.jsp")) || (currentPageUrl?contains("preview_article_content_template.jsp"))> 
8    <#assign preview = true />     
9     
10    <script data-senna-track="permanent" 
11				src="/o/atk-dot-com-theme/js/react/dist/vendor.bundle.js"></script> 
12	 
13	<script data-senna-track="permanent" 
14				src="/o/atk-dot-com-theme/js/react/dist/bundle.js"></script> 
15				 
16	<style data-senna-track="temporary" type="text/css"> 
17	:root { 
18		--container-max-sm: 576px; 
19		--h4-font-size: 22px; 
20		--font-weight-bold: 700; 
21		--rounded-pill: 50rem; 
22		--navigation-submenu-item-float: left; 
23		--display4-weight: 300; 
24		--danger: #da1414; 
25		--atk-row: absolute; 
26		--display2-size: 5.5rem; 
27		--body-bg: #f9f9f9; 
28		--display2-weight: 300; 
29		--display1-weight: 300; 
30		--display3-weight: 300; 
31		--box-shadow-sm: 0 .125rem .25rem rgba(0, 0, 0, .075); 
32		--text-align-hero-text-container: center; 
33		--cta-background-color: #F5F5F5; 
34		--font-weight-lighter: lighter; 
35		--h3-font-size: 36px; 
36		--btn-outline-primary-hover-border-color: #0b5fff; 
37		--transition-collapse: height .35s ease; 
38		--blockquote-small-color: #6b6c7e; 
39		--gray-200: #f1f2f5; 
40		--btn-secondary-hover-background-color: #f7f8f9; 
41		--gray-600: #6b6c7e; 
42		--secondary: #6b6c7e; 
43		--btn-outline-primary-color: #0b5fff; 
44		--btn-link-hover-color: #004ad7; 
45		--hr-border-color: rgba(0, 0, 0, .1); 
46		--hr-border-margin-y: 1rem; 
47		--light: #f1f2f5; 
48		--btn-outline-primary-hover-color: #0b5fff; 
49		--font-weight-read-more: 400; 
50		--btn-secondary-background-color: #fff; 
51		--btn-outline-secondary-hover-border-color: transparent; 
52		--display3-size: 4.5rem; 
53		--primary: #0b5fff; 
54		--container-max-md: 768px; 
55		--border-radius-sm: 0.1875rem; 
56		--display-line-height: 1.2; 
57		--font-family-hero-text: 'Graphik Web'; 
58		--h6-font-size: 0.8125rem; 
59		--h2-font-size: 44px; 
60		--aspect-ratio-4-to-3: 75%; 
61		--font-family-read-more: 'Graphik Web'; 
62		--spacer-10: 10rem; 
63		--font-family-semibold: 'Graphik Web'; 
64		--font-weight-normal: 400; 
65		--dark: #272833; 
66		--blockquote-small-font-size: 80%; 
67		--h5-font-size: 0.875rem; 
68		--blockquote-font-size: 1.25rem; 
69		--transition-fade: opacity .15s linear; 
70		--display4-size: 3.5rem; 
71		--border-radius-lg: 0.375rem; 
72		--btn-primary-hover-color: #fff; 
73		--display1-size: 6rem; 
74		--black: #000; 
75		--gray-300: #e7e7ed; 
76		--gray-700: #495057; 
77		--btn-secondary-border-color: #cdced9; 
78		--btn-outline-secondary-hover-color: #272833; 
79		--purple: #7823DC; 
80		--body-color: #111; 
81		--btn-outline-secondary-hover-background-color: rgba(39, 40, 51, 0.03); 
82		--font-weight-button-body: 400; 
83		--btn-primary-color: #fff; 
84		--btn-secondary-color: #6b6c7e; 
85		--btn-secondary-hover-border-color: #cdced9; 
86		--box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, .175); 
87		--container-max-lg: 992px; 
88		--btn-outline-primary-border-color: #0b5fff; 
89		--aspect-ratio: 100%; 
90		--cta-link-hover-color: #000; 
91		--body-container: #fff; 
92		--cta-link-color: #7823DC; 
93		--aspect-ratio-16-to-9: 56.25%; 
94		--box-shadow: 0 .5rem 1rem rgba(0, 0, 0, .15); 
95		--white: #fff; 
96		--portlet-bg-color: #272833; 
97		--warning: #b95000; 
98		--info: #2e5aac; 
99		--hr-border-width: 1px; 
100		--btn-link-color: #0b5fff; 
101		--gray-400: #cdced9; 
102		--font-weight-hero-text-h4: 100; 
103		--gray-800: #393a4a; 
104		--font-weight-semibold: 600; 
105		--btn-outline-primary-hover-background-color: #f0f5ff; 
106		--btn-primary-hover-background-color: #0053f0; 
107		--btn-primary-background-color: #0b5fff; 
108		--font-weight-heading4: 100; 
109		--font-weight-hero-text-h1: 600; 
110		--font-weight-heading3: 400; 
111		--success: #287d3c; 
112		--font-family-heading4: 'Graphik Web'; 
113		--font-family-heading3: 'Graphik Web'; 
114		--font-weight-heading2: 400; 
115		--font-weight-heading1: 600; 
116		--font-size-sm: 0.875rem; 
117		--font-family-heading2: 'Graphik Web'; 
118		--btn-primary-border-color: #0b5fff; 
119		--font-family-heading1: 'Graphik Web'; 
120		--font-family-base: 'Arabic', sans-serif; 
121		--spacer-0: 0; 
122		--font-family-monospace: 'Arabic', sans-serif; 
123		--lead-font-size: 1.25rem; 
124		--border-radius: 0.25rem; 
125		--spacer-9: 9rem; 
126		--font-weight-light: 300; 
127		--btn-secondary-hover-color: #272833; 
128		--spacer-2: 0.5rem; 
129		--font-family-button-body: 'Graphik Web'; 
130		--spacer-1: 0.25rem; 
131		--spacer-4: 1.5rem; 
132		--spacer-3: 1rem; 
133		--spacer-6: 4.5rem; 
134		--spacer-5: 3rem; 
135		--spacer-8: 7.5rem; 
136		--border-radius-circle: 50%; 
137		--spacer-7: 6rem; 
138		--font-size-lg: 1.125rem; 
139		--aspect-ratio-8-to-3: 37.5%; 
140		--font-family-sans-serif: 'Arabic', sans-serif; 
141		--gray-100: #f7f8f9; 
142		--font-weight-bolder: 900; 
143		--container-max-xl: 1280px; 
144		--btn-outline-secondary-color: #6b6c7e; 
145		--custom-black: #1E1E1E; 
146		--gray-500: #a7a9bc; 
147		--h1-font-size: 66px; 
148		--gray-900: #272833; 
149		--text-muted: #a7a9bc; 
150		--btn-primary-hover-border-color: transparent; 
151		--btn-outline-secondary-border-color: #cdced9; 
152		--lead-font-weight: 300; 
153		--font-size-base: 0.875rem; 
154
155         
156    #leftColumnDiv 
157    a{     
158        color: var(--purple) !important; 
159        text-decoration: underline !important; 
160        text-decoration-color: #E6E6E6 !important; 
161
162         
163    #leftColumnDiv 
164    a:hover{     
165	       text-decoration: none !important; 
166
167	 
168	a.smallerMobileText 
169    {     
170        color: var(--purple) !important; 
171        text-decoration: underline !important; 
172        text-decoration-color: #E6E6E6 !important; 
173
174         
175     
176    a.smallerMobileText:hover{     
177	       text-decoration: none !important; 
178
179	 
180    </style> 
181		 
182</#if> 
183 
184<#assign JournalArticleLocalService = serviceLocator.findService( 
185"com.liferay.journal.service.JournalArticleLocalService")> 
186<#assign AssetEntryLocalService = serviceLocator.findService( 
187"com.liferay.asset.kernel.service.AssetEntryLocalService")> 
188<#assign AssetCategoryLocalService = serviceLocator.findService( 
189"com.liferay.asset.kernel.service.AssetCategoryLocalService")> 
190<#assign AssetVocabularyLocalService = serviceLocator.findService( 
191"com.liferay.asset.kernel.service.AssetVocabularyLocalService")> 
192<#assign AssetCategoryPropertyLocalService = serviceLocator.findService( 
193"com.liferay.asset.category.property.service.AssetCategoryPropertyLocalService")/> 
194<#assign AssetLinkLocalService = serviceLocator.findService("com.liferay.asset.link.service.AssetLinkLocalService")> 
195<#assign AssetEntryAssetCategoryRelLocalService = serviceLocator.findService("com.liferay.asset.entry.rel.service.AssetEntryAssetCategoryRelLocalService")> 
196<#assign GroupLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.GroupLocalService")> 
197<#assign CurrentJournalArticle = JournalArticleLocalService.getLatestArticle(groupId,.vars['reserved-article-id'].data)> 
198<#assign CurrentAssetEntry = AssetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle",CurrentJournalArticle.getResourcePrimKey())> 
199<#assign AssetLinks = AssetLinkLocalService.getReverseLinks(CurrentAssetEntry.getEntryId(), 0)> 
200<#assign LayoutLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService")> 
201 
202<#assign TemplateCustomService = serviceLocator.findService("template.custom.services.TemplateCustomService") /> 
203<!-- update name here if change asset library name --> 
204<#assign assetLibGroup = GroupLocalService.getGroup(themeDisplay.getCompanyId(), "Kearney Global Asset Library") /> 
205<#assign DLFolderLocalService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFolderLocalService")/> 
206<#assign DLFileEntryLocalService = serviceLocator.findService( 
207	"com.liferay.document.library.kernel.service.DLFileEntryLocalService")/> 
208<#if assetLibGroup?? > 
209	<#assign assetLibGroupId = assetLibGroup.getGroupId() /> 
210</#if> 
211<#assign atkGroupId = company.getGroupId() /> 
212<#assign layoutUrl = themeDisplay.getLayout().getFriendlyURL()/> 
213 
214<#-- Macro used to get specific field text from an Asset Entry --> 
215<#macro entryNode assetEntry field> 
216	<#assign document = saxReaderUtil.read(assetEntry.getContent())> 
217	<#if document.selectSingleNode("/root/dynamic-element[@name='"+field+"']/dynamic-content")??> 
218    "${document.selectSingleNode("/root/dynamic-element[@name='"+field+"']/dynamic-content").getText()?js_string}" 
219	<#else> 
220    "" 
221	</#if> 
222</#macro> 
223 
224<!-- Adjust portlet topper offset since bio goes to top of page --> 
225<style> 
226    header.portlet-topper { 
227        position: absolute !important; 
228        top: 33px !important; 
229        width: 100% !important; 
230
231</style> 
232 
233<div id="employeeBioDiv"></div> 
234<script> 
235 
236	<#assign displayHeadshotId = "" /> 
237	<#assign displayHeadshot = "" /> 
238	<#assign displayHeadshotFileName = "" /> 
239 
240	<#if DisplayHeadshot??> 
241		<#assign displayHeadshot = DisplayHeadshot.getData()> 
242		<#assign parts = displayHeadshot?split("/")!""> 
243		<#if DisplayHeadshot.getAttribute("title")??> 
244			<#assign displayHeadshotFileName = DisplayHeadshot.getAttribute("title") /> 
245		<#else> 
246			<#assign displayHeadshotFileName = parts[4]!"" /> 
247		</#if> 
248		<#if DisplayHeadshot.getAttribute("fileEntryId")??> 
249			<#assign displayHeadshotId = DisplayHeadshot.getAttribute("fileEntryId")> 
250		<#else> 
251			<#attempt> 
252				<#assign displayHeadshotId = DLFileEntryLocalService.getFileEntryByFileName(parts[2]?number, parts[3]?number, displayHeadshotFileName).getFileEntryId() /> 
253			<#recover> 
254				<#if DisplayHeadshot.getAttribute("uuid")??> 
255					<#assign displayHeadshotUuid = DisplayHeadshot.getAttribute("uuid") /> 
256				</#if> 
257				<#if DisplayHeadshot.getAttribute("groupId")??> 
258					<#assign displayHeadshotGroupId = DisplayHeadshot.getAttribute("groupId")?number /> 
259				</#if> 
260				<#if displayHeadshotUuid?? && displayHeadshotGroupId??> 
261					<#assign displayHeadshotId = DLFileEntryLocalService.getDLFileEntryByUuidAndGroupId(displayHeadshotUuid,displayHeadshotGroupId).getFileEntryId()!"" /> 
262				</#if> 
263			</#attempt>	 
264		</#if> 
265	</#if> 
266	 
267	<#-- ATK-941 Bio Contact Form --> 
268	<#assign bioContactUrl = "" /> 
269	<#attempt> 
270		<#assign bioContactLayout = LayoutLocalService.getFriendlyURLLayout(themeDisplay.getScopeGroupId(),false,"/contact/bio") /> 
271		<#assign bioContactUrl = themeDisplay.getPortalURL() + "/contact/bio" /> 
272	<#recover> 
273		<#assign guestGroup = GroupLocalService.getFriendlyURLGroup(themeDisplay.getCompanyId(), "/guest") /> 
274		<#assign bioContactLayout = LayoutLocalService.getFriendlyURLLayout(guestGroup.getGroupId(),false,"/contact/bio") /> 
275		<#assign bioContactUrl = themeDisplay.getURLHome() + "/contact/bio" /> 
276	</#attempt> 
277 
278    var empInfo = { 
279        fullName: "${(htmlUtil.unescape(FullName.getData()))?js_string}", 
280        preferredName: "${(htmlUtil.unescape(PreferredFirstName.getData()))?js_string}", 
281        position: "${(htmlUtil.unescape(Position.getData()))?js_string}", 
282        office: "${(htmlUtil.unescape(Office.getData()))?js_string}", 
283        title: "${(htmlUtil.unescape(Title.getData()))?js_string}", 
284        linkedIn: "${LinkedInURL.getData()?js_string}", 
285        headshotLocation: "${displayHeadshot}", 
286        headShotId: "${displayHeadshotId}", 
287        headshotFileName: "${displayHeadshotFileName}", 
288        quote: "${(htmlUtil.unescape(Quote.getData()))?js_string}", 
289        description: "${Description.getData()?js_string}", 
290        urlTitle: "${.vars['reserved-article-url-title'].data?js_string}", 
291        bioContactFormUrl: "${bioContactUrl}" 
292    }; 
293 
294	<#assign industryVocabulary = AssetVocabularyLocalService.getGroupVocabulary(atkGroupId, "Industries")/> 
295	<#assign industryCategories = industryVocabulary.getCategories()/> 
296 
297    var industryCategories = []; 
298	<#list industryCategories as category> 
299	<#if category.parentCategoryId == 0> 
300	<#attempt> 
301		<#assign categoryUrl = AssetCategoryPropertyLocalService.getCategoryProperty(category.categoryId, "url")/> 
302    industryCategories.push({ 
303        id: "${category.categoryId}", 
304        name: "${category.name}", 
305        url: "${categoryUrl.value}", 
306    }); 
307    <#recover> 
308    	console.log("could not find url property on industry category ${category.name?js_string}"); 
309    </#attempt> 
310    </#if> 
311	</#list> 
312 
313	<#assign expertiseVocabulary = AssetVocabularyLocalService.getGroupVocabulary(atkGroupId, "Services")/> 
314	<#assign expertiseCategories = expertiseVocabulary.getCategories()/> 
315 
316    var expertiseCategories = []; 
317	<#list expertiseCategories as category> 
318	<#if category.parentCategoryId == 0> 
319		<#attempt> 
320			<#assign categoryUrl = AssetCategoryPropertyLocalService.getCategoryProperty(category.categoryId, "url")/> 
321        expertiseCategories.push({ 
322            id: "${category.categoryId}", 
323            name: "${category.name}", 
324            url: "${categoryUrl.value}", 
325        }); 
326			<#recover> 
327            console.log("could not find url property on capability category ${category.name?js_string}"); 
328		</#attempt> 
329	</#if>	 
330	</#list> 
331 
332    var expertise = []; 
333    var industries = []; 
334 
335    <#-- ATK-830 : Adding Experties & Industries to Bio Rail (Right sidebar on Bio Page) using Asset Categories -->	 
336	<#assign CurrentArticleAssetCategoryIdList = AssetEntryAssetCategoryRelLocalService.getAssetEntryAssetCategoryRelsByAssetEntryId(CurrentAssetEntry.getEntryId()) /> 
337	<#assign CategoryNameSequence = [] /> 
338	<#assign industryVocabularyId = industryVocabulary.vocabularyId /> 
339	<#assign expertiseVocabularyId = expertiseVocabulary.vocabularyId /> 
340	 
341	<#-- Generating Map of Category Name and Category URL --> 
342	<#assign CategoryURLmap = {} /> 
343	<#list CurrentArticleAssetCategoryIdList as assetEntryAssetCategoryRel> 
344		<#assign assetcategory = AssetCategoryLocalService.getCategory(assetEntryAssetCategoryRel.assetCategoryId)> 
345		<#assign categoryPropertyFound = false /> 
346		<#if assetcategory.vocabularyId == industryVocabularyId> 
347			<#if AssetCategoryPropertyLocalService.getCategoryProperties(assetcategory.categoryId)??> 
348				<#assign CategoryPropertyList = AssetCategoryPropertyLocalService.getCategoryProperties(assetcategory.categoryId) /> 
349				<#list CategoryPropertyList as categoryProperty> 
350					<#if categoryProperty.key == "url"> 
351						<#assign categoryUrlForIndustries = AssetCategoryPropertyLocalService.getCategoryProperty(assetcategory.categoryId, "url") /> 
352						<#if categoryUrlForIndustries??> 
353							<#assign CategoryURLmap = CategoryURLmap + { (assetcategory.name + "--Industries") : categoryUrlForIndustries.value } >	 
354						<#else> 
355							<#assign CategoryURLmap = CategoryURLmap + { (assetcategory.name + "--Industries") : "" } >	 
356						</#if> 
357						<#assign categoryPropertyFound = true /> 
358					</#if> 
359				</#list> 
360			</#if> 
361			<#if !categoryPropertyFound> 
362				<#assign CategoryURLmap = CategoryURLmap + { (assetcategory.name + "--Industries") : "" } > 
363			</#if> 
364		<#elseif assetcategory.vocabularyId == expertiseVocabularyId> 
365			<#if AssetCategoryPropertyLocalService.getCategoryProperties(assetcategory.categoryId)??> 
366				<#assign CategoryPropertyList = AssetCategoryPropertyLocalService.getCategoryProperties(assetcategory.categoryId) /> 
367				<#list CategoryPropertyList as categoryProperty> 
368					<#if categoryProperty.key == "url"> 
369						<#assign categoryUrlForServices = AssetCategoryPropertyLocalService.getCategoryProperty(assetcategory.categoryId, "url") /> 
370						<#if categoryUrlForServices??> 
371							<#assign CategoryURLmap = CategoryURLmap + { (assetcategory.name + "--Expertise") : categoryUrlForServices.value } > 
372						<#else> 
373							<#assign CategoryURLmap = CategoryURLmap + { (assetcategory.name + "--Expertise") : "" } >		 
374						</#if> 
375						<#assign categoryPropertyFound = true /> 
376					</#if> 
377				</#list> 
378			</#if> 
379			<#if !categoryPropertyFound> 
380				<#assign CategoryURLmap = CategoryURLmap + { (assetcategory.name + "--Expertise") : "" } > 
381			</#if> 
382		</#if> 
383	</#list> 
384 
385	<#-- Sorting in Alphabetical Order --> 
386	<#assign SortedCategoryURLmap = {} /> 
387	<#list CategoryURLmap?keys?sort as key> 
388		<#assign SortedCategoryURLmap = SortedCategoryURLmap + { key : CategoryURLmap[key] } > 
389	</#list> 
390 
391	<#assign CategoryURLmap = SortedCategoryURLmap /> 
392	<#-- Generation Map of Category Name and Category URL Over --> 
393	 
394	<#-- Adding Industries and Expertise To Bio Rail based on asset categories selected in webcontent --> 
395	<#list CategoryURLmap as categoryName, categoryURL> 
396			<#if categoryName?contains("--Industries")> 
397				<#assign CategoryNameSequence = CategoryNameSequence + [categoryName?keep_before("--Industries")] /> 
398				<#if categoryURL?has_content>	 
399    				industries.push({	 
400            			title: "${categoryName?keep_before("--Industries")?js_string}",	 
401            			customURL: "/${categoryURL?js_string}",	 
402            			useDefault: false 
403        			}); 
404        		<#else> 
405        			industries.push({	 
406	            		title: "${categoryName?keep_before("--Industries")?js_string}",	 
407	            		customURL: "",	 
408	            		useDefault: false	 
409        			});	 
410        		</#if>	 
411    		</#if> 
412    		 
413    		<#if categoryName?contains("--Expertise")>	 
414    			<#assign CategoryNameSequence = CategoryNameSequence + [categoryName?keep_before("--Expertise")] /> 
415				<#if categoryURL?has_content>	 
416    		    	expertise.push({	 
417	            		title: "${categoryName?keep_before("--Expertise")?js_string}",	 
418	         			customURL: "/${categoryURL?js_string}",	 
419	      			    useDefault: false	 
420  					}); 
421  				<#else> 
422  					expertise.push({	 
423	            		title: "${categoryName?keep_before("--Expertise")?js_string}",	 
424	         			customURL: "",	 
425	      			    useDefault: false	 
426  					}); 
427				</#if> 
428			</#if> 
429    </#list>	 
430 
431	<#-- Adding Industries and Expertise To Bio Rail based on manual entry provided in webcontent's Field --> 
432    <#if Industries.getSiblings()?has_content> 
433		<#list Industries.getSiblings() as cur_Industries> 
434        var defaultChecked = false; 
435			<#if getterUtil.getBoolean(cur_Industries.UseDefaultIndustryPage.getData())> 
436	            defaultChecked = true; 
437			</#if> 
438 
439			<#if !(CategoryNameSequence?seq_contains(cur_Industries.getData())) > 
440				<#assign CategoryNameSequence = CategoryNameSequence + [htmlUtil.unescape(cur_Industries.getData())] /> 
441			        industries.push({ 
442			            title: "${(htmlUtil.unescape(cur_Industries.getData()))?js_string}", 
443			            customURL: "${cur_Industries.CustomIndustryURL.getData()?js_string}", 
444			            useDefault: defaultChecked 
445			        }); 
446        	</#if> 
447		</#list> 
448	</#if> 
449	<#if Expertise?? && Expertise.getSiblings()?has_content> 
450		<#list Expertise.getSiblings() as cur_Expertise> 
451        var defaultChecked = false; 
452			<#if getterUtil.getBoolean(cur_Expertise.UseDefaultExpertisePage.getData())> 
453	            defaultChecked = true; 
454			</#if> 
455 
456			<#if !(CategoryNameSequence?seq_contains(cur_Expertise.getData())) > 
457		        expertise.push({ 
458		            title: "${(htmlUtil.unescape(cur_Expertise.getData()))?js_string}", 
459		            customURL: "${cur_Expertise.CustomExpertiseURL.getData()?js_string}", 
460		            useDefault: defaultChecked 
461		        }); 
462        	</#if> 
463		</#list> 
464	</#if> 
465	 
466	<#-- If No Expertise added for web content then null entry is added --> 
467	if(expertise.length == 0) 
468
469		expertise.push({ 
470		            title: "", 
471		            customURL: "", 
472		            useDefault: false 
473		        }); 
474
475	 
476	<#-- If No Industries added for web content then null entry is added --> 
477	if(industries.length == 0) 
478
479		industries.push({ 
480		            title: "", 
481		            customURL: "", 
482		            useDefault: false 
483		        }); 
484
485	 
486	<#-- ATK-830 Over -->	 
487 
488    var clientImpact = []; 
489	<#if ClientImpactTitle?? && ClientImpactTitle.getSiblings()?has_content> 
490		<#list ClientImpactTitle.getSiblings() as cur_ClientImpactTitle> 
491 
492        var impactUrlTitle = ""; 
493			<#assign jArt = "" /> 
494			<#if cur_ClientImpactTitle.impactUrlTitle?? && cur_ClientImpactTitle.impactUrlTitle.getData()?has_content> 
495				<#assign jArt = JournalArticleLocalService.getArticleByUrlTitle(assetLibGroupId, cur_ClientImpactTitle.impactUrlTitle.getData()) /> 
496            impactUrlTitle = "${cur_ClientImpactTitle.impactUrlTitle.getData()?js_string}"; 
497			</#if> 
498 
499        var link = ""; 
500			<#if cur_ClientImpactTitle.ClientImpactLink?? && cur_ClientImpactTitle.ClientImpactLink.getData()?has_content> 
501            link = "${cur_ClientImpactTitle.ClientImpactLink.getData()?js_string}"; 
502			</#if> 
503 
504        var title = ""; 
505			<#if cur_ClientImpactTitle?? && cur_ClientImpactTitle.getData()?has_content> 
506            title = "${(htmlUtil.unescape(cur_ClientImpactTitle.getData()))?js_string}"; 
507			<#elseif jArt != ""> 
508            title = "${jArt.getTitle(locale)?js_string}"; 
509			</#if> 
510 
511        var subtitle = ""; 
512			<#if cur_ClientImpactTitle.ClientImpactText?? && cur_ClientImpactTitle.ClientImpactText.getData()?has_content> 
513            subtitle = "${(htmlUtil.unescape(cur_ClientImpactTitle.ClientImpactText.getData()))?js_string}"; 
514			<#elseif jArt != ""> 
515            subtitle = <@entryNode assetEntry=jArt field="Subtitle"/>; 
516			</#if> 
517 
518        var svgMask = ""; 
519			<#if TextDecoration.getData()?has_content> 
520            svgMask = "${TextDecoration.getData()?js_string}"; 
521			<#elseif jArt != ""> 
522            svgMask = <@entryNode assetEntry=jArt field="SvgMask"/>; 
523			</#if> 
524 
525        var articleCategories = []; 
526			<#if jArt != ""> 
527				<#assign jAsset = AssetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", jArt.getResourcePrimKey()) /> 
528				<#assign assetCategories =  AssetCategoryLocalService.getAssetEntryAssetCategories(jAsset.getEntryId()) /> 
529 
530				<#list assetCategories as category> 
531					<#assign categoryVocabulary = AssetVocabularyLocalService.getAssetVocabulary(category.getVocabularyId())> 
532					<#assign categoryUrl = AssetCategoryPropertyLocalService.getCategoryProperty(category.categoryId, "url")/> 
533                articleCategories.push({ 
534                    id: "${category.categoryId}", 
535                    name: "${category.name}", 
536                    url: "${categoryUrl.value}", 
537                    vocabularyName: "${categoryVocabulary.getName()?js_string}", 
538                }); 
539				</#list> 
540			</#if> 
541 
542        clientImpact.push({ 
543            slug: "Client Impact", 
544            title: title, 
545            description: subtitle, 
546            largeDescriptionText: 'false', 
547            link: link, 
548            urlTitle: impactUrlTitle, 
549            categories: articleCategories, 
550            displayType: "Bio Feature", 
551            svgMaskURL: svgMask 
552        }); 
553		</#list> 
554	</#if> 
555 
556    if (clientImpact.length > 0) { 
557	<#if SmallerPrimaryClientImpactTitle??> 
558            clientImpact[0].useSmallerTitle = !${getterUtil.getBoolean(SmallerPrimaryClientImpactTitle.getData())?c}; 
559	<#else> 
560            clientImpact[0].useSmallerTitle = false; 
561	</#if> 
562 
563	<#if SmallerPrimaryClientImpactSubtitle??> 
564        clientImpact[0].largeDescriptionText = '' + (!${getterUtil.getBoolean(SmallerPrimaryClientImpactSubtitle.getData())?c}); 
565	<#else> 
566        clientImpact[0].largeDescriptionText = 'true'; 
567	</#if> 
568
569 
570    if (clientImpact[0].useSmallerTitle) { 
571        clientImpact[0].titleTextSize = 'heading1'; 
572    } else { 
573        clientImpact[0].titleTextSize = 'heading2'; 
574
575 
576    var perspectives = []; 
577	<#if PerspectiveTitle?has_content && PerspectiveTitle.getSiblings()?has_content> 
578		<#list PerspectiveTitle.getSiblings() as cur_PerspectiveTitle> 
579        <#if cur_PerspectiveTitle.getData()?has_content && cur_PerspectiveTitle.PerspectiveLink.getData()?has_content> 
580            perspectives.push({ 
581                title: "${(htmlUtil.unescape(cur_PerspectiveTitle.getData()))?js_string}", 
582                link: "${(htmlUtil.unescape(cur_PerspectiveTitle.PerspectiveLink.getData()))?js_string}", 
583            }); 
584        </#if> 
585		</#list> 
586	</#if> 
587 
588 
589	var formData = {}; 
590		<#if TemplateCustomService.getBioDDMDdmFormInstance()??> 
591		<#assign recordset = TemplateCustomService.getBioDDMDdmFormInstance() > 
592		<#if recordset??> 
593		<#assign recordSetUUID = recordset.getUuid()> 
594    	<#assign structure = recordset.getStructure() > 
595    	<#assign JSONFactory = serviceLocator.findService( 
596    	"com.liferay.portal.kernel.json.JSONFactory")/> 
597    	<#assign definition = JSONFactory.createJSONObject(structure.getDefinition()) > 
598    	<#assign description = structure.getDescription("en_US") > 
599     
600    	<#assign name = structure.getName("en_US") > 
601     
602        formData = { 
603            configuration: {formId: '${recordSetUUID}'}, 
604            definition: ${definition}, 
605            description: "${description}", 
606            name: "${name}" 
607
608        </#if> 
609		</#if> 
610 
611 
612    ATK.React.App.EmployeeBio('employeeBioDiv', empInfo, industries, industryCategories, expertise, expertiseCategories, clientImpact, perspectives, formData);  </script> 
613<#compress>     
614    <script type="application/ld+json"> 
615
616        "@context": "https://schema.org/", 
617        "@type": "ProfilePage", 
618        "mainEntity": { 
619            "@type": "Person", 
620            "name": "<#if (FullName.getData())??>${htmlUtil.unescape(FullName.getData())?replace('<[^>]+>','','r')?replace('\\n+','','r')?replace('\\t+','','r')?replace('\\r+','','r')?replace('&nbsp;','','r')}</#if>", 
621            "givenName": "<#if (PreferredFirstName.getData())??>${htmlUtil.unescape(PreferredFirstName.getData())?replace('<[^>]+>','','r')?replace('\\n+','','r')?replace('\\t+','','r')?replace('\\r+','','r')?replace('&nbsp;','','r')}</#if>", 
622            "familyName": "<#if (FullName.getData())??><#if (FullName.getData())?contains(" ")>${FullName.getData()?split(" ")[1]}<#elseif (FullName.getData())?contains("・")>${FullName.getData()?split("・")[1]}<#else>${FullName.getData()}</#if></#if>", 
623            "url": "https://www.kearney.com${layoutUrl}", 
624            "image": "<#if (DisplayHeadshot.getData())??>${DisplayHeadshot.getData()}</#if>", 
625            "jobTitle": "<#if (Title.getData())??>${htmlUtil.unescape(Title.getData())?replace('<[^>]+>','','r')?replace('\\n+','','r')?replace('\\t+','','r')?replace('\\r+','','r')?replace('&nbsp;','','r')}</#if>", 
626            "worksFor": { 
627                "@id": "https://www.kearney.com#organization" 
628            }, 
629            "sameAs": [ 
630                "<#if (LinkedInURL.getData())??>${LinkedInURL.getData()}</#if>" 
631
632
633
634    </script> 
635</#compress> 
636 
637 
638<script> 
639$(document).on("click",".buttonBodyText", function (event) { 
640   var text = $(this).text();  
641   if(text == "Contact"){ 
642	 
643	<#-- ATK-941 Changes Start --> 
644	event.preventDefault();  
645     
646    <#if (!preview)> 
647		var keyLastName = (themeDisplay.getLayoutURL()).substring(themeDisplay.getLayoutURL().lastIndexOf("/")+1).split('?')[0].split('#')[0]; 
648		localStorage.setItem("bio-name-"+keyLastName, "<#if (FullName.getData())??>${FullName.getData()}</#if>"); 
649	</#if> 
650	<#-- ATK-941 Changes Over --> 
651   	 
652   	try { 
653   		Analytics.track('emailClick',{ 
654		'propertyName': 'emailClick', 
655		'bioName':"${FullName.getData()?js_string}", 
656		'pageURL':'themeDisplay.getLayoutURL()' 
657		}); 
658
659   	catch(error) { 
660   		console.error("Error with Analytics tracking:", error); 
661
662   	 
663   	window.location.href = event.target.href;	  
664
665}); 
666</script>