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

PGA unter Oracle 11g

trunc(sysdate) - nette Spiele mit dem Datum

Datapump - Verzeichnis erstellen