Meine APEX-Anwendung hier (Ticketsystem) bietet die Möglichkeit, per Mail auf neue Tickets zu benachrichtigen. Dies wollte ich ändern. Ein RSS-Feed mußte her.
Die Suchmaschine meiner Wahl führte mich zu folgendem Link. Der Code dahinter, auf meine Tabelle angepasst, funktionierte. Allerdings nur im Firefox. Der Internet Explorer und Outlook 2010 zeigten zwar den Feed als solches an, nur nicht den Inhalt (Item) darin. Ein kurzer Vergleich mit einem funktionieren Feed (von heise.de) zeigte mir, dass das „channel“-Tag vor den „item“-Tags endete. Richtig wäre es aber, das „channel“-Tag erst nach dem Inhalt enden zu lassen.
Folgendermaßen angepasst funktioniert mein Code:
create or replace PROCEDURE rss(p_wb_id in varchar2) as v_xml blob; BEGIN with tickets as ( select id, creator_name, created_on, title from ( select tik.id, tik.creator_name, tik.created_on, tik.title from tickets tik where tik.wb_id = p_wb_id and tik.status_external = 1 order by tik.created_on desc ) where rownum < 20 ) select XMLElement("rss", XMLAttributes('2.0' as "version"), XMLElement( "channel", XMLElement("title", 'Application Express RSS Feed'), XMLElement("language", 'de_de'), XMLElement("link", 'http://my_ticketsystem'), XMLElement("description", 'Neue Tickets'), ( XMLAgg( XMLElement("item", XMLElement( "title", to_char(t.created_on, 'DD.MM.YYYY')||': ' || t.id || ': ' ||t.creator_name || ': ' ||t.title), XMLElement( "link", 'http://my_ticketsystem' ) ) ) ) ) ).getblobval(nls_charset_id('AL32UTF8')) into v_xml from tickets t; owa_util.mime_header('text/xml'); wpg_docload.download_file(v_xml); dbms_lob.freetemporary(v_xml); END rss;
Anschließend muß die Prozedur mit folgender Code-Zeile im SQL Developer freigegeben werden.
grant execute on rss to public
Seit APEX-Version 3.x ist es noch erforderlich, die Prozedur im Schema „FLOWS_030100“ in der Function „wwv_flow_epg_include_mod_local“ einzutragen.
Damit der RSS-Feed direkt aus meiner Anwendung heraus abonniert werden kann, reicht eine Zeile im Header der Seite.
<link rel="alternate" type="application/rss+xml" title="Neue Tickets von Ihrem Arbeitskorb" href="&P210_SERVER.#OWNER#.rss?p_wb_id=&P210_ARBEITSKOERBE." />
Um das Item :P210_SERVER dynamisch zu füllen, habe ich eine „Condition – Before Header“ hinzugefügt, die o.g. Item wie folgt mit Daten füllt:
return OWA_UTIL.get_cgi_env('REQUEST_PROTOCOL')|| '://' ||OWA_UTIL.get_cgi_env('HTTP_HOST')||OWA_UTIL.get_cgi_env('SCRIPT_NAME')|| '/';
Das Item :P210_ARBEITSKOERBE ist eine Select-List, mit der die Anwender den Report für einen bestimmten Arbeitskorb auswählen können. Dieser Wert wird als Übergabeparameter für meine Prozedur verwendet.
Hallo Carsten,
danke für die Korrektur – der Tipp ist nun schon „uralt“, heute konnte ich ihn dann endlich mal korrigieren …
Beste Grüße aus München
-Carsten
Hallo Carsten,
gern geschehen. Ich habe auf der Seite leider keinen Link gefunden, um die Änderung direkt zu melden. 😉
Grüße aus Nürnberg