views:

141

answers:

2

how Can we change the output format to CSV instead of HTML in Alfresco using webscripts?

below are the my corresponding FTL and Webscript files


recursive.get.html.ftl

<#macro recurse_macro node depth>
  <#if node.isContainer>
    <tr>
    <td> 
        ${node.properties.name}
    </td>
<td></td>
  </tr>

   <#list node.children as child>
    <#if child.isContainer>

         <@recurse_macro node=child depth=depth+1/>

 <#list child.children as child2>
    <#if child2.isDocument>
     <tr><td></td><td>${child2.properties.name}</td></tr>
       </#if>
 </#list>

    </#if>
   </#list>
  </#if>
</#macro>

Recursive Listing of Spaces & Documents:

Space Document

recursive.get.desc.xml

<webscript>
  <shortname>recurcive</shortname>
  <description>Recursive</description>
  <url>/sample/recursive/{recursive}</url>
  <format default="html">extension</format>
  <authentication>guest</authentication>
  </webscript>

and html output is

Recursive Listing of Spaces & Documents:
Space   Document
Company Home    
Data Dictionary     
Space Templates     
Software Engineering Project    
Documentation   
Drafts  
Pending Approval    
Published   
Samples     
    system-overview.html
Discussions     
UI Design   
Presentations   
Quality Assurance   
Presentation Templates  
    doc_info.ftl
    localizable.ftl
    my_docs.ftl
    my_spaces.ftl
    my_summary.ftl
    translatable.ftl
    recent_docs.ftl
    general_example.ftl
    my_docs_inline.ftl
    show_audit.ftl
    readme.ftl
Email Templates     
    notify_user_email.ftl
    invite_user_email.ftl
RSS Templates   
    RSS_2.0_recent_docs.ftl
Saved Searches  
admin   
Scripts     
    backup.js
    example test script.js
    backup and log.js
    append copyright.js
    alfresco docs.js
    test return value.js
Web Scripts     
org     
alfresco    
sample  
    blogsearch.get.js
    blogsearch.get.atom.ftl
    blogsearch.get.desc.xml
    blogsearch.get.html.ftl
    blogsearch.get.html.400.ftl
    blogsearch.get.atom.400.ftl
    categorysearch.get.js
    categorysearch.get.atom.ftl
    categorysearch.get.desc.xml
    categorysearch.get.html.ftl
    categorysearch.get.html.404.ftl
    categorysearch.get.atom.404.ftl
    folder.get.js
    folder.get.atom.ftl
    folder.get.desc.xml
    folder.get.html.ftl
    avmstores.get.desc.xml
    avmstores.get.html.ftl
    avmbrowse.get.js
    avmbrowse.get.desc.xml
    avmbrowse.get.html.ftl
    recursive.get.desc.xml
    recursive.get.html.ftl
    sgs.get.desc.xml
    sgs.get.csv.ftl
    sample1.get.desc.xml
    sample1.get.csv.ftl
    first.get.desc.xml
    first.get.text.ftl
    rag.get.html.ftl
    rag.get.desc.xml
    new1.get.desc.xml
    new1.get.html.ftl
    excel.get.html.ftl
    excel.get.desc.xml
    sgs1.get.desc.xml
    one.get.html.ftl
    one.get.desc.xml
    one.get.js
    readme.html
Web Scripts Extensions  
    readme.html
Guest Home  
    Alfresco-Tutorial.pdf
User Homes  
isabel  
Users Home  
A: 

You can specify that the default output will be csv. Put this in the webscript description file (.desc.xml) extension

Then add a recursive.get.xml.ftl which will create the csv output.

zladuric
A: 

Yes it's possible to output a csv. Refer to http://wiki.alfresco.com/wiki/Web_Scripts#Implementation

You need to change your desc file to:

 <webscript>
  <shortname>recurcive</shortname>
  <description>Recursive</description>
  <url>/sample/recursive/{recursive}</url>
  <format default="csv">extension</format>
  <authentication>guest</authentication>
 </webscript>

or if you want to mantain html as your default format you can just call the script with the csv extension (alfresco/service/recursive/blabla.csv) or with the format parameter ?format=csv

Then you have create a recursive.get.csv.ftl file like this:

    <#macro recurse_macro node depth>
      <#if node.isContainer>       
            ${node.properties.name}
       <#list node.children as child>         
         <#if child.isContainer>
         ,         
         <@recurse_macro node=child depth=depth+1/>        
          <#list child.children as child2> 
            <#if child2.isDocument>
                ${child2.properties.name}
               <#if child2_has_next>,</#if>
            </#if>
          </#list>            
         </#if>
            \n        
       </#list>
      </#if>
    </#macro>

I haven't tested the code, but i'm assuming that you understand the idea that in the end of each main node you need to break the line, and after each child (except on the last) you need a coma.

pedrofalcaocosta