DatabasePublisher (Objekt)
Aus SiteparkWiki
| Dieser Artikel bedarf einer Überarbeitung. Näheres ist auf der Diskussionsseite angegeben. Hilf bitte mit ihn zu verbessern und entferne anschließend diese Markierung. |
Inhaltsverzeichnis |
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>
Regeln:
- Tabellen-Definitionen können auch nach einer Aktion definiert werden. (Innerhalb von <database-publishing>)
- Aktion können nur die Tabellen verwendet werden, die entsprechend definiert wurden
- Definitionen überschreiben sich, wenn der Name identisch ist.
- In dem <row>-Tag müssen so viele <entry>-Tags einthalten sein, wie in der Tabellen-Definition angegeben wurden.
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>
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 |

