Esportazione in formato .CSV da applicazione web

Ho avuto bisogno di esportare dei dati in formato .Csv da un’applicazione realizzata totalmente per il browser . Come il solito LotusScipt mi è stato d’aiuto: ecco i passi che ho fatto:

  • creo una view con i dati che vuoi esportare e la chiamo “esportazione”
  • crei un agent da invocare dall’applicazione che fisicamente esegue l’export (chiamiamolo esportaCsv)
  • nell’applicazione inserisco un link in questo formato /folder/app.nsf/esportacsv?openagent che si apra in una nuova finestra dove esportacsv è il nome dell’agent

A questo punto l’agent:

Dim s As New NotesSession
Dim questodb As NotesDatabase
Dim vec As NotesViewEntryCollection
Dim view As NotesView
Dim nomevista As String
Dim entry As NotesViewEntry
Dim nomefile As String
Dim strn as string

nomevista = "esporta"        'inserisci qui il nome della vista
nomefile = "esportazione.csv"  'inserisci qui il nome del file .csv
Set questodb = s.CurrentDatabase
Set view = questodb.GetView(nomevista)  
Set vec = view.AllEntries
Set entry =  vec.GetFirstEntry

'HTTP HEADER: questo è importante perchè segnala al browser di utilizzare i dati che gli arrivano come allegato da scaricare
Print "Content-Disposition: attachment; filename=" & nomefile
Print "Content-Type: application/octet-stream"

strn = ""
'intestazioni delle colonne
ForAll c In view.Columns
strn =  strn &  |"| & c.Title & |",|
End ForAll

'campi del csv
Print strn  
strn = ""
While Not (entry Is Nothing)  
ForAll  cols In entry.ColumnValues  
cols = |"| & cols & |",|
strn = strn & cols 
End ForAll  
Print strn  
strn = ""
Set entry = vec.GetNextEntry(entry)
Wend

come potete vedere essenzialmente fa una serie di print ma siccome all’inizio esegue questo

Print "Content-Disposition: attachment; filename=" & nomefile

il browser interpreta il tutto come file da scaricare

0 commenti