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:
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
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
Hallo Frank,
AntwortenLöschendas sieht interessant aus.
Werde es in den nächsten Tagen testen und Rückmeldung geben.
Dankeschön!