DatabasePublisher (Objekt)

Aus SiteparkWiki
Zur Navigation springen Zur Suche springen
Dieser Artikel bedarf einer Überarbeitung. Näheres ist auf der Diskussionsseite angegeben. Hilf bitte mit ihn zu verbessern und entferne anschließend diese Markierung.

Name

DatabasePublisher - Publiziert Artikel, Resourcen und Medien in eine Datebank

Beschreibung

Ein DatabasePublisher publiziert Artikel, Resourcen und Medien in eine Datebank. Dazu muss das Ausgabe-Template in einer XML-Struktur die Datensätze beschreiben, die in der Datenbank angelegt, geändert oder gelöscht werden sollen.

Beispiel: Insert-Statement

Das Insert-Statement fügt eine neue Zeile entsprechend der Angaben hinzu.

<database-publishing>
  <%-- Tabellen-Struktur bekannt geben --%>
  <table name="BodyTable">
    <key name="_id" type="long"/>
    <column name="_body" type="string"/>
  </table>
  <%-- Aktion für Tabelle BodyTable --%>
  <insert table="BodyTable">
    <row>
      <entry name="_id">123</entry>
      <entry name="_body">text a</entry>
    </row>
    <row>
      <entry name="_id">124</entry>
      <entry name="_body">text b</entry>
    </row>
  </insert>
</database-publishing>

Daraus werden zwei SQL-Statements

INSERT INTO BodyTable _id, _body VALUES (123, "text a")
INSERT INTO BodyTable _id, _body VALUES (124, "text b")

Beispiel: Update-Statement

Ein Update-Statement erwartet einen Eintrag mit dem angegebenen Primary-Key und aktuallisiert dessen Werte.

<database-publishing>
  <%-- Tabellen-Struktur bekannt geben --%>
  <table name="BodyTable">
    <key name="_id" type="long"/>
    <column name="_body" type="string"/>
  </table>
  <%-- Aktion für Tabelle BodyTable --%>
  <update table="BodyTable">
    <row>
      <entry name="_id">123</entry>
      <entry name="_body">text c</entry>
    </row>
  </update>
</database-publishing>

Daraus wird ein SQL-Statement

UPDATE FROM BodyTable SET _body = "text c" WHERE _id = 123

Beispiel: Delete-Statement

Bei einem Delete-Statement muss lediglich der Schlüssel angegeben werden.

<database-publishing>
  <%--
    Tabellen-Struktur bekannt geben.
    Da nur das Feld _id für die Aktion nötig ist,
    wird auch nur dieses angegeben.
  --%>
  <table name="BodyTable">
    <key name="_id" type="long"/>
  </table>
  <%-- Aktion für Tabelle BodyTable --%>
  <delete table="BodyTable">
    <row>
      <entry name="_id">123</entry>
    </row>
  </delete>
</database-publishing>

Daraus wird ein SQL-Statement

DELETE FROM BodyTable WHERE _id = 123

Beispiel: Insert- oder Update-Statement

Je nach dem ob der Zeile schon existiert wird ein Insert- oder Update-Statement erzeugt.

<database-publishing>
  <%-- Tabellen-Struktur bekannt geben --%>
  <table name="BodyTable">
    <key name="_id" type="long"/>
    <column name="_body" type="string"/>
  </table>
  <%-- Aktion für Tabelle BodyTable --%>
  <store table="BodyTable">
    <row>
      <entry name="_id">123</entry>
      <entry name="_body">text d</entry>
    </row>
    <row>
      <entry name="_id">125</entry>
      <entry name="_body">text e</entry>
    </row>
  </store>
</database-publishing>

Daraus werden zwei SQL-Statements

UPDATE FROM BodyTable SET _body = "text d" WHERE _id = 123
INSERT INTO BodyTable _id, _body VALUES(125, "text e")

Beispiel: Tabellen und Aktionen

Es können beliebig viele Tabellen und Aktionen verwendet werden.

<database-publishing>
  <%-- Tabellen-Struktur bekannt geben --%>
  <table name="ArticleTable">
    <key name="_id" type="long"/>
    <column name="_name" type="string"/>
  </table>
  <table name="BodyTable">
    <key name="_id" type="long"/>
    <column name="_body" type="string"/>
  </table>

  <%-- Aktion für Tabelle BodyTable --%>
  <store table="ArticleTable">
    <row>
      <entry name="_id">123</entry>
      <entry name="_name">Ein Name</entry>
    </row>
  </store>
  <%-- Aktion für Tabelle BodyTable --%>
  <store table="BodyTable">
    <row>
      <entry name="_id">123</entry>
      <entry name="_body">text d</entry>
    </row>
  </store>

  <table name="MyHistory">
  <key name="_id" type="long"/>
    <column name="_user" type="string"/>
    <column name="_timestamp" type="string"/>
  </table>
  <create table="BodyTable">
    <row>
      <entry name="_id">123</entry>
      <entry name="_user">Peter Lustig</entry>
      <entry name="_timestamp">11.11.2004 11:11</entry>
    </row>
  </create>
</database-publishing>

Template

Um ein Template für verschiedene Publications-Typen zu definieren kann es wie folgt aufgebaut werden:

<sp:io type="in">
  <%-- Eingabe-Teil --%>
</sp:io>

<sp:io type="out">
  <sp:condition>

  <%-- "Normaler" File-Publisher --%>
  <sp:if name="system.publisher.type" eq="file">
    ...
  </sp:if>

  <%-- Http-Publisher --%>
  <sp:elseif name="system.publisher.type" eq="http">
    ...
  </sp:elseif>

  <%-- Database-Publisher --%>
  <sp:elseif name="system.publisher.type" eq="database">

    <sp:condition>
    <%-- Artikel wird (erneut) publiziert --%>
      <sp:if name="system.publisher.isPublished">
        <database-publishing>
          <table ...>
            ...
          </table>
          <store ...>
            ...
          </store>
        </database-publishing>
      </sp:if>

      <%-- Artikel depubliziert --%>
      <sp:else>
        <database-publishing>
          <table ...>
            ...
          </table>
          <delete ...>
            ...
          </delete>
        </database-publishing>
      </sp:else>
    </sp:condition>

  </sp:elseif>
</sp:io>


Regeln:

  1. Tabellen-Definitionen können auch nach einer Aktion definiert werden. (Innerhalb von <database-publishing>)
  2. Aktion können nur die Tabellen verwendet werden, die entsprechend definiert wurden
  3. Definitionen überschreiben sich, wenn der Name identisch ist.
  4. In dem <row>-Tag müssen so viele <entry>-Tags einthalten sein, wie in der Tabellen-Definition angegeben wurden.


Attribute

Attribut Type Beschreibung ab IES Version
id ID ID des Publisher 1
type String Liefert immer database 1
anchor Anchor Anker des Publishers 1
name String Name des Publishers 1
encoding String Encoding das der Publisher verwenden soll (UTF-8, ISO-8859-15, ...) 1
locale Locale Die Sprache, die für diesen Publisher verwendet werden soll 1
clients Collection <Client> Liste der Mandanten, die Zugriff auf diesen Publisher haben 1
metadata Map <String,String> Metadaten eines Publishers 1
metadataString String Metadaten eines Publishers als Zeichenkette. Jede Zeile ist ein Schlüssel/Werte-Paar, getrennt mit einem = (gleich). 1
isPublished Boolean Liefert im Out-Modus true, wenn der Artikel vom Publisher publiziert wird oder false, wenn der Artikel vom Publisher depubliziert wird 1
database String Name der konfigurierten Datenbankverbindung 1