0

I am working with Alfresco Share 5.2 and trying to create custom link that is a part of document name in Alfresco. To be more specific, I have button which is used to create new excel file and save it to specific location inside My files directory. Inside that excel file link is stored which is used to get search results page.

Can I put that link to be document name in Alfresco?

For example: Instead of Search_Results.xslx to be something like this Search_results_link and when I want to open that page, just one click on doc name and new page will be opened.

I tried to put link as doc name property, but I get this exception:

 org.springframework.extensions.webscripts.WebScriptException: 02210015 Wrapped Exception (with status template): org.apache.poi.xssf.usermodel.XSSFHyperlink cannot be cast to java.io.Serializable
        at org.springframework.extensions.webscripts.AbstractWebScript.createStatusException(AbstractWebScript.java:1138)
        at org.springframework.extensions.webscripts.DeclarativeWebScript.execute(DeclarativeWebScript.java:171)
        at org.alfresco.repo.web.scripts.RepositoryContainer$3.execute(RepositoryContainer.java:519)
        at org.alfresco.repo.transaction.RetryingTransactionHelper.doInTransaction(RetryingTransactionHelper.java:464)
        at org.alfresco.repo.web.scripts.RepositoryContainer.transactionedExecute(RepositoryContainer.java:587)
        at org.alfresco.repo.web.scripts.RepositoryContainer$4.doWork(RepositoryContainer.java:664)
        at org.alfresco.repo.security.authentication.AuthenticationUtil.runAs(AuthenticationUtil.java:555)
        at org.alfresco.repo.web.scripts.RepositoryContainer.transactionedExecuteAs(RepositoryContainer.java:668)
        at org.alfresco.repo.web.scripts.RepositoryContainer.executeScriptInternal(RepositoryContainer.java:428)
        at org.alfresco.repo.web.scripts.RepositoryContainer.executeScript(RepositoryContainer.java:308)
        at org.springframework.extensions.webscripts.AbstractRuntime.executeScript(AbstractRuntime.java:399)
        at org.springframework.extensions.webscripts.AbstractRuntime.executeScript(AbstractRuntime.java:210)
        at org.springframework.extensions.webscripts.servlet.WebScriptServlet.service(WebScriptServlet.java:132)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:770)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at org.alfresco.web.app.servlet.GlobalLocalizationFilter.doFilter(GlobalLocalizationFilter.java:68)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)

This is a part of my code where I create link and store it to excel file, and also try to put that link as document name:

XSSFWorkbook document = new XSSFWorkbook();
XSSFSheet sheet = document.createSheet(nameOfFile);
XSSFRow row = sheet.createRow(0);
XSSFRow rowSecond = sheet.createRow(1);
XSSFRow rowThird = sheet.createRow(2);
XSSFCell cell = row.createCell(0);
XSSFCell cellWithValue = rowSecond.createCell(0);
XSSFCell cellWithLink = rowThird.createCell(0);
cell.setCellValue("Link to fetch search results:");
cellWithValue.setCellValue(urlLink);

XSSFHyperlink link = document.getCreationHelper().createHyperlink(Hyperlink.LINK_URL);
XSSFCellStyle style = document.createCellStyle();
XSSFFont font = document.createFont();                          
font.setUnderline(HSSFFont.U_SINGLE);
font.setColor(IndexedColors.BLUE.index);
style.setFont(font);                            
cellWithLink.setCellValue("Click here");                            
link.setAddress(urlLink);                            
cellWithLink.setHyperlink(link);                            
cellWithLink.setCellStyle(style);                            
link.setLabel("ResultSearch");

Map<QName, Serializable> props = new HashMap<QName, Serializable>();
props.put(ContentModel.PROP_NAME, (Serializable) link);

Is there a way to avoid that exception and to save that link directly as document name? Thanks!

Mike1988B
  • 57
  • 5

1 Answers1

1

You can't set special characters into name. Principe is that name in alfresco have same limitation as names on file storage. So you can't set URL into name.

But you can put link in some another property of document. Try cm:description, Alfresco should make URL clickable by default, you don't need to use XSSFHyperlink at all.

David Dejmal
  • 359
  • 1
  • 8
  • I added url to description field but it is not clickable by default. I used this `URL urlToSave = new URL(urlLink);` and then this line of code to save that URL `props.put(ContentModel.PROP_DESCRIPTION, urlToSave.toString());`. @David Dejmal – Mike1988B Mar 21 '23 at 13:41
  • I tried to do it through the GUI and it works (links are clickable). Try it too. Is the same result if you try hardcoded some URL? Then it can be some problem in type conversion... – David Dejmal Mar 21 '23 at 13:50