Search the FirstSpirit Knowledge Base
Hallo Liebe Community,
da ihr mir schon des öfteren aus der Klemme helfen konntet. Hoffe ich, dass Ihr mir auch bei diesem Thema helfen könnt.
Ich versuche über eine DatenbankVorlage (HTML Kanal) eine Datei zu erstellen und als Download zurück zu geben.
Aber irgendwie will es nicht so wie es eigentlich sollte. Das habe ich bisher:
<%@ page contentType="text/calendar;charset=UTF-8" language="java" %>
<%@ page import="java.util.*" %>
<%@ page import="javax.servlet.http.*" %>
<%
try {
$CMS_SET(endDate, #row.EventTime + #row.Duration*60*60*24*1000)$
final StringBuilder vcr = new StringBuilder();
vcr.append("BEGIN:VCALENDAR\n");
vcr.append("METHOD:PUBLISH\n");
vcr.append("BEGIN:VEVENT\n");
vcr.append("SUMMARY:$CMS_VALUE(#row.Title)$\n");
vcr.append("LOCATION:$CMS_VALUE(#row.EventLocation)$\n");
vcr.append("DTSTART:$CMS_VALUE(#row.EventTime)$\n");
vcr.append("DTEND:$CMS_VALUE(endDate.format("dd.MM.yyyy"))$\n");
vcr.append("TRANSP:OPAQUE\n");
vcr.append("SEQUENCE:0\n");
vcr.append("DTSTAMP:20130920T082235Z\n");
vcr.append("DESCRIPTION:$CMS_VALUE(#row.Title)$\n");
vcr.append("PRIORITY:5\n");
vcr.append("X-MICROSOFT-CDO-IMPORTANCE:1\n");
vcr.append("CLASS:PUBLIC\n");
vcr.append("BEGIN:VALARM\n");
vcr.append("TRIGGER:-PT30M\n");
vcr.append("ACTION:DISPLAY\n");
vcr.append("DESCRIPTION:Reminder\n");
vcr.append("END:VALARM\n");
vcr.append("END:VEVENT\n");
vcr.append("END:VCALENDAR\n");
String vcrString = vcr.toString();
HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();
ServletOutputStream os = response.getOutputStream();
response.setCharacterEncoding("UTF-8");
response.setHeader("X-MB-VCRLength", "" + vcrString.length());
response.setHeader("Content-Description", "Outlook vCalender Format File");
response.setHeader("Content-Type", "text/calendar");
response.setHeader("Content-Disposition", "inline; filename=$CMS_VALUE(#row.Title.replace(" ", "_"))$.ics");
InputStream in = new ByteArrayInputStream(sb.toString().getBytes("UTF-8"));
byte[] outputByte = new byte[4096];
while(in.read(outputByte, 0, 4096) != -1) {
out.write(outputByte, 0, 4096);
}
in.close();
os.flush();
os.close();
} catch (Exception e) {
e.printStackTrace();
}
%>
Hallo,
Ausführlichere Informationen beim Finden des Fehlers könnten hilfreich sein. Zum Beispiel was funktioniert und was nicht und welche Exception an welcher Stelle geworfen wird.
Es sieht für mich so aus, dass eher ein Problem im JSP Code vorliegt, als im FirstSpirit-Teil. Oder wird die jsp schon nicht korrekt generiert?
Viele Grüße
Rouven
Hallo Michael,
ich hab's bei mir mit folgenden Änderungen an Deinem Code hinbekommen:
Ich glaub, das sollte es gewesen sein. 😉
Viele Grüße
Donato
Hallo Donato,
ich habe deine Tipps angewendet, doch leider ohne Erfolg. ich bekomme nach wie vor eine leere Seite angezeigt. Vielleicht sollte ich noch erwähnen, dass ich in FS eine extra Seitenvorlage angelegt habe und darin eine Datenquelle. Der Code steht dort im HTML Kanal. Die Seite habe ich als JSP deklariert.
Hast du eventuell noch eine Idee?
VG Michael
Hallo Michael,
wie sieht denn der Quelltext der Seite aus, die generiert wird? Der sollte ja wie der Quelltext aus Deinem ersten Posting aussehen, bloß mit konkreten Werten anstelle der CMS_VALUEs.
Nur noch mal zum besseren Verständnis: Du hast eine Datenquelle, die Kontaktinformationen zu verschiedenen Personen enthält. Diese Kontaktinformationen möchtest Du über eine Content-Projektion als .ics-Dateien zum Download zur Verfügung stellen. Ist das richtig? Dafür hast Du den oben geposteten Quelltext in die dazugehörige Tabellenvorlage gepackt. Und Du hast eine Seite (basierend auf einer leeren Seitenvorlage), in der Du die Tabellenvorlage als Absatz hinzugefügt hast. In der dazugehörigen Seitenreferenz müssen natürlich noch im Daten-Reiter die Anzahl der Datensätze pro Seite auf 1 und die Anzahl der Seiten auf 0 (= unbegrenzt) gesetzt werden. Entspricht das in etwa Deinem Setup?
Viele Grüße
Donato
Hallo Michael,
benötigst Du noch weitere Hilfe oder haben Dir die Antworten von Donato und Rouven bereits geholfen?
In diesem Fall wäre es super, wenn Du die "richtige Antwort" entsprechend markierst, damit auch andere
Community-Teilnehmer diese auf den ersten Blick finden. Solltest Du zwischenzeitlich eine eigene Lösung
gefunden haben, wäre es nett, wenn Du diese hier bereitstellst.
Viele Grüße
Thorsten