APEX: RSS-Feed aus eigener Anwendung bereitstellen

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.

Dieser Beitrag wurde unter APEX, Oracle abgelegt und mit , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

2 Responses to APEX: RSS-Feed aus eigener Anwendung bereitstellen

  1. 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

  2. cc13 sagt:

    Hallo Carsten,

    gern geschehen. Ich habe auf der Seite leider keinen Link gefunden, um die Änderung direkt zu melden. 😉

    Grüße aus Nürnberg

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.