-
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(/( )*/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 – excel–download.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 – excel–download.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
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.