Expándete con la oportunidad que presentan las PYMES mediante la venta de servidores en Rack & en Torre de ThinkSystem
Se estima que el gasto en infraestructura aumentará 8,6% en 2024 y 10,5% en 2025, con los servidores entre las principales prioridades para la inversión. A medida que las prioridades se centran en infraestructura de TI y servidores, las PYMES buscan socios que les sirvan como asesores de confianza.¿Quieres saber más sobre el Programa de crecimiento de Rack & Tower de Lenovo e Intel?
Inicia sesión en Lenovo 360 Partner Hub para obtener más información.
¿No tienes una cuenta?
Regístrate ahora para descubrir oportunidades de ventas y obtener acceso a materiales de ventas exclusivos y activos de marca compartida.
Java method "com.sun.proxy.$Proxy1181.getAemAssetMetadataByPath(String)" threw an exception when invoked on com.sun.proxy.$Proxy1181 object "com.lenovo.velocity.company.service.service.impl.AEMAssetMetadataLocalServiceImpl@d4857b5"; see cause exception in the Java stack trace.
----
FTL stack trace ("~" means nesting-related):
- Failed at: #assign aemAssetDownloadUrl = assetMe... [in template "20099#20135#TITLE_DESC_VIDEO_LEFT" at line 1, column 4337]
----
1<#assign dlFileEntryService=serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryService")><#assign customUserAttrService=serviceLocator.findService("com.lenovo.velocity.company.service.service.UserCustomAttributesLocalService")><#assign assetMetaDataService=serviceLocator.findService("com.lenovo.velocity.company.service.service.AEMAssetMetadataLocalService")><div class="lnv-web-content-admin-container detail-listing-padding"> <div class="lnv-web-content-admin-section-3"> <div class="lnv-content-info"> <ul> <li> <!--Download code starts--> <#if SelectVideo.getData()!=""> <!--Fetching uuid,groupId of the uploaded document--> <#assign count = 0 /> <#list "${SelectVideo.getData()}"?split("/") as url> <#if count == 2> <#assign groupId = url /> </#if> <#if count == 4> <#assign fileStr = url /> </#if> <#if count == 5> <#assign uuidStr = url /> </#if> <#assign count = count+1 /> </#list> <#assign count = 0 /> <#list "${fileStr}"?split(".") as fileSplit> <#if count == 0> <#assign fileName = fileSplit /> </#if> <#if count == 1> <#assign extension = fileSplit /> </#if> <#assign count = count+1 /> </#list> <#assign count = 0 /> <#list "${uuidStr}"?split("?") as uuidSplit> <#if count == 0> <#assign uuid = uuidSplit /> </#if> <#assign count = count+1 /> </#list> <#assign myGroupId=groupId?eval> <!--Fetch DLFileEntry with uuid and groupId--> <#assign file= dlFileEntryService.getFileEntryByUuidAndGroupId(uuid,myGroupId) > <!--Method to fetch url of the file uploaded using Asset or Doucument and media in download field --> <#assign file2 = customUserAttrService.fetchAssetUrl(themeDisplay.getLocale(),file,themeDisplay)><!--Method to fetch details like file size,name and extension attached to the asset --> <#assign assetDetails = customUserAttrService.getAssetDetails(file2)> <#if assetDetails?? && assetDetails?has_content> <#if assetDetails.getFileName()?? && assetDetails.getFileName()?has_content && file2?has_content > <span class="lnv-img"> <!--VEL-12381 added ontimeupdate method call to Analytic video track start --> <video controls controlsList="nodownload" oncontextmenu="return false;" id="leftVideo" ontimeupdate="callVideoTrack('leftVideo', '${fileName}')"> <source src="${file2}#t=0.1" type="video/mp4"> </video> </span> </#if> </#if> <#elseif SelectVideoFromAEM?? && SelectVideoFromAEM.getData()?? && SelectVideoFromAEM.getData()?has_content> <#assign aemVideoAssetId =SelectVideoFromAEM.getData()/> <#if aemVideoAssetId?? && aemVideoAssetId?has_content> <#assign aemAssetDownloadUrl=assetMetaDataService.getAemAssetMetadataByPath(aemVideoAssetId)/> <#if aemAssetDownloadUrl.getDownloadURL()?? && aemAssetDownloadUrl.getDownloadURL()?has_content && aemAssetDownloadUrl.getTitle()?? && aemAssetDownloadUrl.getTitle()?has_content> <span class="lnv-img"> <video controls controlsList="nodownload" oncontextmenu="return false;" id="leftVideo" ontimeupdate="callVideoTrack('leftVideo', '${aemAssetDownloadUrl.getTitle()}')"> <source src="${aemAssetDownloadUrl.getDownloadURL()}#t=0.1" type="video/mp4"> </video> </span> </#if> </#if> </#if> <div> <p class="lnv-title d-none d-lg-block">${Title.getData()}</p> <p class="lnv-content">${Description.getData()}</p> <#if WebContentName?? && WebContentName.getSiblings()?has_content> <#list WebContentName.getSiblings() as webContentName_Value> <#if webContentName_Value?? && webContentName_Value.GenericWebContent?? && webContentName_Value.getData()?? && webContentName_Value.getData()?has_content && webContentName_Value.GenericWebContent.getData()?? && webContentName_Value.GenericWebContent.getData()?has_content> <#assign articleURL=""> <#assign webContentData = jsonFactoryUtil.createJSONObject(webContentName_Value.GenericWebContent.getData())> <#if webContentData?? && webContentData?has_content> <#assign primaryKey=0/> <#assign wcprimaryKey = webContentData.getString("classPK")/> <#if wcprimaryKey?? && wcprimaryKey?has_content> <#assign primaryKey = wcprimaryKey?number/> <!-- Method for fetching detail page URL of campaign,promotions,etc --> <#if primaryKey?? && primaryKey?has_content> <#assign articleURL=customUserAttrService.retreiveWebContentUrl(themeDisplay,primaryKey)/> </#if> </#if> </#if> <div class="event-details-policy"> <a class="lnv-content-video-anchor" href="${articleURL}"> ${webContentName_Value.getData()} </a> </div> </#if> </#list> </#if> <#if AEMSELECT?? && AEMSELECT.getSiblings()?has_content> <#list AEMSELECT.getSiblings() as cur_AEMSELECT> <#if cur_AEMSELECT?? && cur_AEMSELECT.getData()?? && cur_AEMSELECT.getData()?has_content> <#assign assetId =cur_AEMSELECT.getData()/> <#assign encryptedAssetId=customUserAttrService.encryptAssetString(assetId)/> <#assign updatedFlag = assetMetaDataService.getAssetUpdatedFlag(assetId)> <#if updatedFlag!false> <#assign aemAssetDetails = assetMetaDataService.getAEMAssetTitle(assetId)> <#if aemAssetDetails?? && aemAssetDetails?has_content> <#assign assetDummyValue = aemAssetDetails.getAssetTitle()> <#assign assetFilteredValue =assetDummyValue?replace("'", '&apos')/> <div class="event-details-policy"> <a class="lnv-download-text-icon lnv-content-video-anchor" href="javascript:void(0);" onclick="getAEMAssetDetailsForContentList('${encryptedAssetId}','${assetFilteredValue}','${aemAssetDetails.getFileFormat()?lower_case}');setDownloadFileName('${aemAssetDetails.getAssetTitle()}')"> ${aemAssetDetails.getAssetTitle()}</a> </div> </#if> </#if> </#if> </#list> </#if> <#if DocumentsAndMediaName?? && DocumentsAndMediaName.getSiblings()?has_content> <#list DocumentsAndMediaName.getSiblings() as documentsAndMediaName_Value> <#if documentsAndMediaName_Value?? && documentsAndMediaName_Value.DocumentsAndMedia?? && documentsAndMediaName_Value.getData()?? && documentsAndMediaName_Value.getData()?has_content && documentsAndMediaName_Value.DocumentsAndMedia.getData()?? && documentsAndMediaName_Value.DocumentsAndMedia.getData()?has_content> <div class="event-details-policy"> <#assign fileStr = ""/> <#assign extension = ""/> <#assign uuidStr = ""/> <#assign uuid = "0" /> <#assign groupId = "0" /> <#assign count = 0 /> <#-- get groupid, file, uuid of the attached file by splitting the url from / --> <#list "${documentsAndMediaName_Value.DocumentsAndMedia.getData()}"?split("/") as url> <#-- get group id at 2nd place--> <#if count == 2> <#assign groupId = url /> </#if> <#-- get file name string at 4rth place--> <#if count == 4> <#assign fileStr = url /> </#if> <#-- get uuid string at 5th place--> <#if count == 5> <#assign uuidStr = url /> </#if> <#assign count = count+1 /> </#list> <#-- get file type of attachment --> <#if fileStr?? && fileStr != ""> <#list "${fileStr}"?split(".") as fileSplit> <#assign extension = fileSplit /> </#list> </#if> <#assign count = 0 /> <#-- split the uuid string to get the uuid --> <#if uuidStr?? && uuidStr != ""> <#list "${uuidStr}"?split("?") as uuidSplit> <#if count == 0> <#assign uuid = uuidSplit /> </#if> <#assign count = count+1 /> </#list> </#if> <#assign myGroupId=groupId?eval> <#-- get file from uuid and groupid --> <#if fileStr?? && fileStr != ""> <#assign file= dlFileEntryService.getFileEntryByUuidAndGroupId(uuid,myGroupId) > <#-- Changes for LPHPS-6044 start --> <#assign assetRefernceId = customUserAttrService.fetchAssetAEM(themeDisplay.getLocale(),file,themeDisplay)> <#if assetRefernceId?? && assetRefernceId?has_content > <#assign encryptedAssetId=customUserAttrService.encryptAssetString(assetRefernceId)/> <#assign docAndMediaAemAssetDetails = assetMetaDataService.getAEMAssetTitle(assetRefernceId)> <#else> <#-- Changes for LPHPS-6044 end --> <!--Method to fetch url of the file uploaded using External link --> <#assign assetDetails = customUserAttrService.getExternalUrl(themeDisplay.getLocale(),file,themeDisplay)> <!--Method to fetch url of the file uploaded using Asset or Doucument and media in download field --> <#if (!assetDetails?? && !assetDetails?has_content) || (assetDetails?? && assetDetails?has_content && !assetDetails.getDownloadLink()??)> <!--Method to fetch url of the file uploaded using Asset or Doucument and media in download field --> <#assign file2 = customUserAttrService.fetchAssetUrl(themeDisplay.getLocale(),file,themeDisplay)> <!--Method to fetch details like file size,name and extension attached to the asset --> <#assign assetDetails = customUserAttrService.getAssetDetails(file2)> </#if> </#if> </#if> <#-- Changes for LPHPS-6044 start --> <#if docAndMediaAemAssetDetails?? && docAndMediaAemAssetDetails?has_content> <#if docAndMediaAemAssetDetails.getFileSize()?? && docAndMediaAemAssetDetails.getFileSize()!= "0KB" && docAndMediaAemAssetDetails.getFileSize()?has_content > <#assign assetDummyValue = docAndMediaAemAssetDetails.getAssetTitle()> <#assign assetFilteredValue =assetDummyValue?replace("'", '&apos')/> <a class="lnv-content-video-anchor" href="javascript:void(0);" onclick="getAEMAssetDetailsForContentList('${encryptedAssetId}','${assetFilteredValue}','${docAndMediaAemAssetDetails.getFileFormat()?lower_case}');setDownloadFileName('${assetFilteredValue}')"> ${documentsAndMediaName_Value.getData()} </a> <#else> ${languageUtil.get(locale,'no-files-selected')} </#if> <#assign docAndMediaAemAssetDetails = ""> <#elseif assetDetails?? && assetDetails?has_content> <#if assetDetails.getDownloadLink()?? &&assetDetails.isExternalLinkIsAEM()?? && assetDetails.isExternalLinkIsAEM() && assetDetails.getAssetTitle()?? && assetDetails.getAssetTitle()?has_content > <a class="lnv-content-video-anchor" href="/o/filedownload-rest/download?attachment=${assetDetails.getDownloadLink()}&title=${assetDetails.getAssetTitle()}" target="_blank" onclick="setDownloadFileName('${assetDetails.getAssetTitle()}')" > ${DocumentsAndMediaName.getData()}</a> <#elseif assetDetails.getDownloadLink()?? &&assetDetails.isExternalLinkIsAEM()?? &&! assetDetails.isExternalLinkIsAEM() && assetDetails.getAssetTitle()?? && assetDetails.getAssetTitle()?has_content > <a class="lnv-content-video-anchor" href="${assetDetails.getDownloadLink()}" target="_blank" onclick="setDownloadFileName('${assetDetails.getAssetTitle()}')" >${DocumentsAndMediaName.getData()}</a> <#elseif assetDetails?? && assetDetails?has_content && assetDetails.getFileName()?? && assetDetails.getFileName()?has_content> <#if file2?has_content && assetDetails.getFileSize()?? && assetDetails.getFileSize()!= "0KB" && assetDetails.getFileSize()?has_content > <a class="lnv-content-video-anchor" href="${file2}?download=true" onclick="setDownloadFileName('${assetDetails.getFileName()}')">${documentsAndMediaName_Value.getData()}</a> <#else>${languageUtil.get(locale,'no-files-selected')} </#if> </#if> </#if> <#-- Changes for LPHPS-6044 end --> </div> </#if> </#list> </#if> <#if Internal_URL_Name?? && Internal_URL_Name.getSiblings()?has_content> <#list Internal_URL_Name.getSiblings() as cur_Internal_URL_Name> <#if cur_Internal_URL_Name.Internal_URL.getFriendlyUrl()?? && cur_Internal_URL_Name.Internal_URL.getFriendlyUrl()!=""> <div class="event-details-policy"> <a class="lnv-content-video-anchor" href="${cur_Internal_URL_Name.Internal_URL.getFriendlyUrl()}"> ${cur_Internal_URL_Name.getData()} </a> </div> </#if> </#list> </#if> <#if External_URL_Name?? && External_URL_Name.getSiblings()?has_content> <#list External_URL_Name.getSiblings() as cur_External_URL_Name> <#if cur_External_URL_Name.External_URL.getData()?? && cur_External_URL_Name.External_URL.getData()!=""> <div class="event-details-policy"> <a class="lnv-content-video-anchor" href="${cur_External_URL_Name.External_URL.getData()}" target="_blank" class="lnv-link-icon" >${cur_External_URL_Name.getData()}</a> </div> </#if> </#list> </#if> </div> </li> </ul> </div> </div></div><@liferay_portlet["runtime"] portletName="lenovo_velocity_asset_file_download_LenovoVelocityAssetFileDownloadPortlet_INSTANCE_gvPLS60vSBEr"/><script> function getAEMAssetDetailsForContentList(url,title,fileFormat){ var urlToSend= assetResourceUrl+"&fileUrl="+url; var req = new XMLHttpRequest(); req.open("GET", urlToSend, true); req.responseType = "blob"; req.onload = function (event) { var blob = req.response; var link=document.createElement('a'); link.href=window.URL.createObjectURL(blob); link.download=title.replace("&apos","'")+"."+fileFormat; link.click(); }; req.send(); }</script>
Los recursos para invertir en tu éxito
Apoyamos tu crecimiento con nuestro portal centrado en canales, Lenovo 360. Gracias al entrenamiento y los recursos, podrás aprovechar la oportunidad que ofrecen los servidores de torre y rack de gran volumen. Además, las herramientas de formación de ventas y los activos de marketing de marca compartida, podrán ayudarte a llegar a nuevos clientes potenciales y fortalecer las relaciones con tus clientes existentes, mientras que una variedad de incentivos y recompensas te permitirán beneficiarte gracias a tu compromiso.
Apoyamos tu crecimiento con nuestro portal centrado en canales, Lenovo 360. Gracias al entrenamiento y los recursos, podrás aprovechar la oportunidad que ofrecen los servidores de torre y rack de gran volumen. Además, las herramientas de formación de ventas y los activos de marketing de marca compartida, podrán ayudarte a llegar a nuevos clientes potenciales y fortalecer las relaciones con tus clientes existentes, mientras que una variedad de incentivos y recompensas te permitirán beneficiarte gracias a tu compromiso.
Fortalece tu posición competitiva con Lenovo 360
Fortalece tu posición competitiva con Lenovo 360
Lenovo 360 Partner Learning (LPL) apoya a los miembros de tu equipo a medida que aumentan su experiencia con Lenovo 360 Learning Paths. Estos incluyen nuestra ruta de aprendizaje de Data Center, que incorpora servidores en rack y en torre. A medida que tus equipos obtienen logros en Learning Path, tu organización podrá recibir acreditaciones Lenovo 360. Estos podrán reforzar tu credibilidad ante los clientes, calificar oportunidades de infraestructura y acelerar el crecimiento de los ingresos.
¿Estás buscando expandir tus oportunidades en el mercado de las PYMES?
Inicia sesión en Lenovo 360 Partner Hub para obtener más información.
Fuentes
- Análisis Mason, 2023
- Inteligencia de Bloomerang, 2024

