APEX: Kalendereinträge erstellen

Eine nette Erweiterung von Anwendungen stellt die Verbindung zu Kalenderprogrammen (Outlook, Lotus etc.) dar.

In APEX lässt sich das - wenn man die richtigen Vorlagen hat - recht leicht umsetzen:


  • in PL:


    • eine Prozedur erstellen, die über die htp.p-Funktion die eigentliche ics-Datei erzeugt. Bsp:

      procedure myDowload_ICS_File -- Purpose : Download der dynamisch erzeugten ICalender-Datei
        (
         p_ID in number -- ID des Eintrags
        )
      is
        v_filename varchar2(100); -- Dateiname

        v_TerminBeginn varchar2(100); -- Anfangszeit des Termins
        v_TerminEnde varchar2(100); -- Ende des Termins
        v_TerminSummary varchar2(1000); -- Kopfzeile des Termins
        v_TerminInhalt varchar2(4000); -- Inhalt des Termins
        v_TerminID number; -- ID des Termins
      begin
      -- Werte füllen
      v_TerminInhalt := 'Hallo,\n\nund hier der Inhalt des Termins ...';
      ...
      -- WICHTIG - Datumsangaben im entsprechenden Format erstellen (siehe RPC), Bsp: 20110331T142715
      SELECT TO_CHAR (sysdate, 'yyyymmdd') || 'T' || TO_CHAR (sysdate, 'hh24miss') dtstart
           , TO_CHAR (sysdate + (1 / 24), 'yyyymmdd') || 'T' || TO_CHAR (sysdate + (1 / 24), 'hh24miss') dtend
        INTO v_TerminBeginn, v_TerminEnde
        FROM dual;

      -- ID für Termin erzeugen
      SELECT TO_CHAR (sysdate, 'yyyymmddhh24miss') uid
        INTO v_TerminID
        FROM dual;

      -- create response header
      OWA_UTIL.mime_header('text/plain', false);
      -- add furhter header attributes
      -- htp.p('Content-length: ' || l_length);
      htp.p('Content-Disposition: attachment; filename="' || v_filename || '"');
      -- close the headers
      OWA_UTIL.http_header_close;

      -- Download des eigentlichen Files
      htp.p('BEGIN:VCALENDAR');
      htp.p('PRODID:--myFS-ID--');
      htp.p('VERSION:2.0');
      htp.p('METHOD:PUBLISH');
      htp.p('BEGIN:VEVENT');
      htp.p('CLASS:PUBLIC');
      htp.p('CREATED:'||v_TerminBeginn);
      htp.p('DTSTART:'||v_TerminBeginn);
      htp.p('DTEND:'||v_TerminEnde);
      htp.p('DTSTAMP:'||v_TerminBeginn);
      htp.p('SUMMARY;LANGUAGE=de:'||v_TerminSummary);
      htp.p('DESCRIPTION:'||v_TerminInhalt);
      htp.p('UID:MYID'||v_TerminID);
      htp.p('BEGIN:VALARM');
      htp.p('TRIGGER:-PT15M');
      htp.p('ACTION:DISPLAY');
      htp.p('DESCRIPTION:Reminder');
      htp.p('END:VALARM');
      htp.p('END:VEVENT');
      htp.p('END:VCALENDAR');
      apex_application.g_unrecoverable_error := true; -- Stopt weiteren Output
      exception
       when others then
        v_ErrCode := sqlcode;
        v_ErrTxt := substr(sqlerrm,1,300);
        log(c_Modul, 'FEHLER download_ICS_File '||v_ErrCode||' / '||v_ErrTxt);
        raise;
      end myDowload_ICS_File;



  • in APEX:


    • leere APEX-Seite erstellen

    • PL/SQL-Prozess erstellen, mit
      * Prozesspoint: On Load - before Header
      * Prozess: Prozedur-Aufruf als anonymer Block, Bsp:
      begin
      myDowload_ICS_File(:P1_X);
      end;

    • Hidden ITEMS für evtl. benötigte Parameter erstellen
      im Bsp.: :P1_X


  • fertig!





Adaption folgender Quellen:
- http://spendolini.blogspot.com/2006/04/custom-export-to-csv.html -> htp.p-Version
- http://forums.oracle.com/forums/thread.jspa?messageID=9279176#9279176 => eine Version, die mit LOBs arbeitet

Ressourcen zum Thema ICAL:
- http://www.kanzaki.com/docs/ical/
- http://msdn.microsoft.com/en-us/library/ee158284%28v=EXCHG.80%29.aspx

Kommentare

  1. Hallo Frank,

    das sieht interessant aus.
    Werde es in den nächsten Tagen testen und Rückmeldung geben.

    Dankeschön!

    AntwortenLöschen

Kommentar veröffentlichen

Beliebte Posts aus diesem Blog

trunc(sysdate) - nette Spiele mit dem Datum

Zufallszahlen und -text generieren - DBMS_RANDOM

Laufzeiten umrechnen, Sekundenangaben lesbar darstellen