Firecom
I'm new here

FS Export als Outlook vCard

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();

}

%>

0 Kudos
5 Replies
broszeit
I'm new here

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

0 Kudos
marro
Crownpeak employee

Hallo Michael,

ich hab's bei mir mit folgenden Änderungen an Deinem Code hinbekommen:

  • Die Zeile beginnend mit HttpServletResponse response... muss komplett raus, da Du in der JSP-Seite direkt auf den response zugreifen kannst.
  • Es fehlt der Import für den InputStream <%@ page import="java.io.InputStream" %>
  • Beim Erzeugen des ByteArrayInputStreams musst Du den StringBuilder vcr übergeben anstelle von sb.
  • Beim Schreiben in den OutputStream muss die Methode write auf os aufgerufen werden, nicht auf out.

Ich glaub, das sollte es gewesen sein. 😉

Viele Grüße

Donato

0 Kudos

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

0 Kudos
marro
Crownpeak employee

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

0 Kudos
thmarx
I'm new here

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

0 Kudos