Alfresco Share-Export to Excel from YUI Data table without using Repo Webscript

  • In Alfresco share, some details are being fetched dynamically and displayed using YUI data table on any page. Many times, there is a requirement to export this YUI datatable information to EXCEL file.

  • To provide Save As/ Download option to user for any such dynamic data, first we need to store that data in a file in alfresco repository and then we can easily give download option to any user.

  • But for EXCEL file, we can directly give option to download without storing to the repository.

  • To achieve this, define one action listener on any button/link to call export funtion in javascript file.

  • On clicking of that link/button, make a call to below function “exportToEXCEL” by passing the datatable object and one Boolean parameter indicating include last column or not.

Parameters Format:

var options =

{

datatable: // your YUI datatable object

includeLastColumn: true/false

};

Javascript Fucntion

exportToEXCEL : function exportToEXCEL(e,options)

{

var tab_text=“<table border=’2px’><tr bgcolor=’#87AFC6′><td>”;

var textRange; var j=0;

table = options.datatable; // id of table

var i,j,k, oData;

var includeLastColumn=true;

var aRecs = table.getRecordSet().getRecords(),aCols = table.getColumnSet().keys;

var aColsLength = aCols.length;

var aRecsLength = aRecs.length;

for(i=0; i < aColsLength; i++)

{

tab_text += aCols[i].label.replace(/(&nbsp;)*/g,“”).replace(/<br[^>]*>/g,” “) + ( i < aColsLength ? “</td><td>” : “”);

}

tab_text += “</td></tr><tr><td>”;

for (j=0; j<aRecsLength; j++) {

oData = aRecs[j].getData();

for (k=0; k < aColsLength; k++) {

tab_text += ( oData[aCols[k].key] + ( k < aColsLength ? “</td><td>” : “”));

}

tab_text += “</td></tr><tr><td>”;

}

tab_text=tab_text+“</td></tr></table>”;

tab_text= tab_text.replace(/<A[^>]*>|<\/A>/g, “”);//remove if u want links in your table

tab_text= tab_text.replace(/<img[^>]*>/gi,“”); // remove if u want images in your table

tab_text= tab_text.replace(/<input[^>]*>|<\/input>/gi, “”); // reomves input params

var thisForm = document.createElement(‘form’);

thisForm.style.display = ‘none’;

document.body.appendChild(thisForm);

var fileName = document.createElement(‘input’);

fileName.type = ‘hidden’;

fileName.name = ‘fileName’;

fileName.value = ‘DMS Report–‘+new Date();

thisForm.appendChild(fileName);

var dataTable = document.createElement(‘input’);

dataTable.type = ‘hidden’;

dataTable.name = ‘tableData’;

dataTable.value = tab_text;

thisForm.appendChild(dataTable);

thisForm.method = ‘POST’;

thisForm.action = Alfresco.constants.URL_CONTEXT+“page/csv-download”;

thisForm.submit();

document.body.removeChild(thisForm);

}

And create the following files in following locations:

  • .Page descriptor file – excel-download.xml 

 – Should be kept under /shared/classes/alfresco/web-extension/pages

<?xml version=’1.0′ encoding=’UTF-8′?>
<page>
<title>Excel Download</title>
<title-id>page.siteIndex.title</title-id>
<description>Downloads the Excel file of YUI datatable</description>
<description-id>page.siteIndex.description</description-id>
<template-instance>excel-download</template-instance>
<authentication>user</authentication>
</page>

  • Template instance file – exceldownload.xml

Should be kept under /shared/classes/alfresco/web-extension/pages/template-instances

<?xml version=’1.0′ encoding=’UTF-8′?>
<template-instance>
<template-type>excel-download</template-type>
</template-instance>

  • Template type – exceldownload.xml

Should be kept under /shared/classes/alfresco/web-extension/pages/template-types

<?xml version=”1.0″ encoding=”UTF-8″?>
<template-type>
<title>Excel Download</title>
<description>Excel Download</description>
<!– Define the rendering processors for this template type –>
<processor mode=”view”>
<id>jsp</id>
<jsp-path>/excelDownload.jsp</jsp-path>
</processor>
</template-type>

  • excelDownload.jsp

<ALF_INSTALL_HOME>/tomcat/webapps/share.

<%@ page language=”java” import=”java.util.*” pageEncoding=”ISO-8859-1″%>
<%@page contentType=”application/octet-stream” %>
<%
String tableData = “No records found”;
String fileName = “datatable”;

if(request.getParameter(“fileName”) != null || request.getParameter(“fileName”)!= “”)
{
fileName = request.getParameter(“fileName”);
}
if(request.getParameter(“tableData”) != null || request.getParameter(“tableData”)!= “”)
{
tableData = request.getParameter(“tableData”);
}

response.setHeader (“Content-Disposition”,”attachment;filename=\””+fileName+”.xls\””);

out.print(tableData);
%>

<ALF_INSTALL_HOME> stands for Alfresco installation directory.

– After that restart the server and check any YUI datatable export.

– For exporting into csv please refer the following link

http://aaditvm.blogspot.in/2013/08/alfresco-share-export-yui-datatable-to.html

This entry was posted in Uncategorized and tagged , . Bookmark the permalink.

1 Response to Alfresco Share-Export to Excel from YUI Data table without using Repo Webscript

  1. aishwarya jadhav says:

    Dear Sir,

    can you help me how should i create the one action listener on any button/link to call export function.
    Please suggest!

    Kind Regards,
    Aishwarya Jadhav.

Leave a comment