Fügt einen neuen Beitrag in ein bestimmtes Forum ein. Der „Body“ (also der Beitrag selbst) wird in der temporären Tabelle „tempdb.dbo.TextData“ erwartet.
Wie immer werden natürlich eine Identifizierung durchgeführt und die Berechtigungen der entsprechenden Person für das Forum, in dem der neue Beitrag angelegt werden soll, überprüft.
Falls die Identifizierung fehlschlägt, werden die Rechte für die anonyme Person (mit der speziellen „PersonID = 0“) gecheckt.
Einen „Spam“-Schutz (nicht auf inhaltlicher Ebene, sondern in Abhängigkeit der Abstände zwischen neuen Beiträgen) kann man durch die „ForumSettings“-Einträge zu den Schlüsseln „MinDelayTimeBetweenPostingsOfOneAuthorInSeconds“ bzw. „MinDelayTimeBetweenPostingsInSeconds“ konfigurieren.
Anmerkung zum Parameter „MaintainSearchPostings“ :
Um ein Suchen in den „Postings“ zu ermöglichen, gibt es die Tabelle „SearchPostings“, die für einen Beitrag beliebig viele Suchwörter speichern kann - im Regelfall alle Wörter des „Subjects“ und des „Bodies“ (siehe auch fo_SearchPostings_Pu).
Leider gibt es derzeit keine Möglichkeit, in T-SQL einen String vom Typ „text“ zu parsen, so daß die Ermittlung der Suchwörter in der Client-Anwendung erfolgen MUSS. Solche Suchwörter kann man aber dieser Prozedur via „tempdb.dbo.AnyValues“ (die Spalte „ID“ spielt keine Rolle) übergeben, und diese werden dann auch transaktionssicher in „SearchPostings“ eingetragen. (Ist dies gewünscht, muß „MaintainSearchPostings“ auf „1“ gesetzt werden.)
Hinweis : Ein Wort darf derzeit nicht mehr als 100 Byte belegen. Da in der „Value“-Spalte von „tempdb.dbo.AnyValues“ aber bis zu 1000 Bytes übergeben werden können, prüfen wir dies und werden ggf. einen Fehler !
Anmerkungen zum Parameter „SavePostingProperties“ :
1. Es gibt die Möglichkeit, zu einem Beitrag zusätzliche „Eigenschaften“ (sprich Informationen) zu speichern. Diese Eigenschaften können via „tempdb.dbo.CharacteristicValues“ übergeben werden :
Hierzu ist „SavePostingProperties“ auf „1“ zu setzen. Sollte es bzgl. der Eigenschaften irgendwelche Fehler geben (falsches Format, das zugehörige Merkmal ist nicht für das Forum konfiguriert etc.), schlägt das Anlegen
des Beitrags fehl !
Setzt man „SavePostingProperties“ jedoch auf „2“, werden evtl. fehlerhafte Eigenschaften ignoriert, d.h. der Beitrag plus die Eigenschaften, die alle Überprüfungen bestanden haben, werden angelegt.
2. Eigenschaften eines Beitrags sind immer an eine „PersonID“ gebunden. Dies bedeutet, daß eine Eigenschaft entweder „allgemein“ gültigt ist - nämlich wenn „PersonID = 0“ ist - oder die Eigenschaft hat nur Gültigkeit für die durch „PersonID“ angegebene Person. Pro Merkmal ist durch das sogenannte „CommonCharacteristic“-Flag (s. Rückgabemenge von fo_GetPostingCharacs_Ad) konfiguriert, ob
allgemeine(n) Eigenschaften hinterlegt werden können.
Die durch „tempdb.dbo.CharacteristicValues“ angegebenen Eigenschaften sind immer „allgemein“, d.h. werden zur „PersonID = 0“ versucht, zu speichern. Insbesondere könnte es daher z.B. zu einem Fehler kommen, wenn eine Eigenschaft zu einem Merkmal angegeben wurde, für das „CommonCharacteristic = 2“ konfiguriert ist
3. Genau wie im „Item-“ und „Person-Management“ gehören Eigenschaften immer zu einem Merkmal - Merkmale charakterisieren sozusagen die Eigenschaften.
Wenn für das zugehörige Forum eines Beitrags mindestens ein Merkmal zugeordnet ist (→ fo_ModifyCharacsForForums_Ad), können diesem Beitrag ausschließlich Eigenschaften zu Merkmalen hinzugefügt werden, die dem Forum zugeordnet sind.
4. Sind dem Forum eines Beitrags direkt KEINE Merkmale zugeordnet (→ fo_ModifyCharacsForForums_Ad), können diesem Beitrag ausschließlich Eigenschaften zu Merkmalen hinzugefügt werden, die wenigestens einer Kategorie, in die das Forum DIREKT eingeordnet ist, zugeordnet sind (→ fo_ModifyCharacForForumCats_Ad).
5. Der Wert im Parameter „Country“ (Groß-/Kleinbuchstaben sind egal) gibt in diesem Zusammenhang an, in welchem Format die „Value“-Werte sind, falls es sich um Datums-Angaben handelt :
6. Möchte man eine Ergebnismenge der fehlerhaften Eigenschaften bekommen, ist für „SavePostingProperties“ der Wert „3“ (dann schlägt das Anlegen des Beitrags fehl) bzw. „4“ (dann wird der Beitrag plus die Eigenschaften, die in Ordnung sind, angelegt) anzugeben.
Falls die Prozedur „0“ oder „-874“ („Die Posting-Eigenschaften können nicht gesetzt/geändert/gelöscht werden, da Fehler auftraten“) zurückgibt, erhält man dann eine entsprechende Rückgabemenge (s. Anmerkung zur Rückgabespalte „ErrorCode“).
Anmerkung zur Rückgabespalte „ErrorCode“ (falls „3“ oder „4“ für den Parameter „SavePostingProperties“ übergeben wurde) :
Für „ErrorCode“ sind derzeit folgende Werte möglich :
HTTP-Method | POST |
HTTP-Auth | Optional |
Tags | |
Engine-Kategorie | forums |
Engine-Typ | Daten-Änderung |
Letzte Aktualisierung | 7.0.7 (2015-01-29) |
PersonIdentificationValues | Liste von Werten, die den Forum-Teilnehmer identifizieren. Diese Werte müssen Eigenschaften zu den Merkmal-IDs sein, die in „PersonTypeSettings“ zur „PersonTypeID“ zum Schlüssel „PersonIdentificationIDs“ hinterlegt sind. | varchar(255) | 3.5.0 | |
PersonTypeID | ID des Personen-Typs dem der zu identifizierende Forum-Teilnehmer angehört. Dieser muß bei einer Identifizierung immer mit angegeben werden, da die Merkmale zur Identifizierung pro Personentyp variieren können. | tinyint | 3.5.0 | |
UniqueID | Eindeutige ID eines Besuchers, die dem zu identifizierenden Forum-Teilnehmer aktuell zugeordnet ist. Falls die Identifizierungsdaten zur Person in „SessionManagement“ (zur „UniqueID“) gespeichert sind, darf „PersonIdentificationValues“ „NULL“ sein. | varchar(50) | 3.5.0 | |
ForumID | ID eines Forums, in dem ein neuer Beitrag erstellt werden soll | smallint | 3.5.0 | |
ReplyToPostingID | NULL | ID des Postings, auf das der neue Beitrag eine Antwort darstellen soll. Falls „NULL“ angegeben wird, handelt es sich bei dem neuen Beitrag um einen Haupt-Beitrag, sprich „MainPosting“, der sozusagen einen neuen „Thread“ eröffnet. | integer | 3.5.0 |
Author | Name des Verfassers des Beitrags. Wird ignoriert, falls der Verfasser nicht als anonyme Person („PersonID = 0“) identifiziert wird und in „ForumSettings“ ein Eintrag zum Schlüssel „CharacteristicIDsForAuthor_<PersonTypeID der identif. Person>“ existiert ! | varchar(100) | 3.5.0 | |
EMailOfAuthor | eMail des Verfassers | varchar(100) | 3.5.0 | |
Subject | Titel des neuen Beitrags | varchar(255) | 3.5.0 | |
SelectResult | 1 | Die „PostingID“ des neu angelegten Beitrags wird im Ausgabeparameter „PostingID“ gespeichert. Möchte man diese ID zusätzlich in einer Rückgabemenge bekommen, setzt man diesen Parameter auf „1“. | bit | 3.5.0 |
MaintainSearchPostings | 0 | Sollen zum neuen Beitrag Suchwörter hinterlegt werden (um später den Beitrag über fo_SearchPostings_Pu wiederfinden zu können), übergibt man hier den Wert „1“ und fügt die Wörter vor dem Aufruf von fo_InsertPosting_Pu in „tempdb.dbo.AnyValues“ ein | bit | 3.5.7 |
SavePostingProperties | 0 | Angeben, um Eigenschaften zum neuen Beitrag zu speichern (s. Beschreibung): „1“ : Fehlerhafte Eigenschaften führen zum Abbruch „2“ : Fehlerhafte Eigenschaften ignorieren „3“ : Wie „1“ + Ergebnismenge der Fehler „4“ : Wie „2“ + Ergebnismenge der Fehler | tinyint | 4.0.16 |
Country | 'german' | Wird nur beachtet, wenn „SavePostingProperties > 0“ ist. Gibt an, in welchem Format Datums-Eigenschaften angegeben sind (Groß-/Kleinschreibung wird nicht beachtet) : 'german', 'germany' : Tag-Monat-Jahr 'english', 'england' : Monat-Tag-Jahr | varchar(10) | 4.0.16 |
SeparatorInIdentVals | '¶' | Gibt an, durch welche Zeichenkette die Werte in „PersonIdentificationValues“ getrennt sind | varchar(4) | 5.5.0 |
NewPostingAsNotApproved | 0 | Wird nur beachtet, wenn der „ForumSettings“-Eintrag zum Schlüssel „ApprovedPostingsOnly“ NICHT oder auf „0“ konfiguriert ist ! Bestimmt den „Visible“-Status des neuen Beitrags : „1“ : „1“ (für „unbestätigt“) „0“ : „4“ (für „sichtbar“) | bit | 6.0.0 |
Spaltenname | Beschreibung | SQL-Datentyp1) | ab Version |
---|---|---|---|
PostingID | ID des neuen Beitrags (der auch im Ausgabeparameter „PostingID“ steht) | integer | 3.5.0 |
Spaltenname | Beschreibung | SQL-Datentyp2) | ab Version |
---|---|---|---|
PostingCharacteristicID | ID eines Posting-Merkmals, auf das sich die fehlerhafte Eigenschaft „Value“ bezieht | smallint | 4.0.16 |
Value | Fehlerhafte Eigenschaft zum Merkmal „PostingCharacteristicID“ | varchar(250) | 4.0.16 |
ErrorCode | Gibt die Ursache des Fehlers an, also warum die Eigenschaft nicht übernommen werden konnte. Mögliche Werte : s. Beschreibung ! | tinyint | 4.0.16 |
Spaltenname | Beschreibung | SQL-Datentyp3) | ab Version |
---|---|---|---|
PostingCharacteristicID | ID eines Posting-Merkmals, auf das sich die fehlerhafte Eigenschaft „Value“ bezieht | smallint | 4.0.16 |
Value | Fehlerhafte Eigenschaft zum Merkmal „PostingCharacteristicID“ | varchar(250) | 4.0.16 |
ErrorCode | Gibt die Ursache des Fehlers an, also warum die Eigenschaft nicht übernommen werden konnte. Mögliche Werte : s. Beschreibung ! | tinyint | 4.0.16 |
PostingID | ID des neuen Beitrags (der auch im Ausgabeparameter „PostingID“ steht) - natürlich nur sofern der Aufruf erfolgreich war, also sozusagen im Fall „Result = 0“ (sonst steht hier „NULL“) ! | integer | 4.0.16 |
PostingID | Ausgabeparameter für die „PostingID“ des neu angelegten Beitrags |
Code | Beschreibung | Quelle 4) |
---|---|---|
-874 | Die Posting-Eigenschaften können nicht gesetzt/geändert/gelöscht werden, da Fehler auftraten | nur indirekt |
-856 | Fehlerhafte Daten in „MainPostingSorting“ | nur indirekt |
-855 | Fehlerhafte Konfiguration des Sortier-Kriteriums | nur indirekt |
-850 | Sortier-Kriterium nicht definiert oder inaktiv oder nicht verwendbar | nur indirekt |
-830 | Spam-Schutz: Posting konnte nicht angelegt werden | nur direkt |
-814 | Auf abgeschlossene oder gelöschte Postings kann nicht geantwortet werden | nur direkt |
-813 | Keine Berechtigung zum Antworten auf ein bestehendes Posting | nur direkt |
-812 | Keine Berechtigung zur Eröffnung eines neuen Threads | nur direkt |
-660 | Identifikation fehlgeschlagen | nur indirekt |
-621 | Fehlender oder falscher Eintrag in PersonTypeSettings | nur indirekt |
-602 | Zur defaultUniqueID („VisitorID = -2“) können keinerlei Daten gespeichert oder verändert werden | nur indirekt |
-599 | Lizenz ist ungültig oder abgelaufen | nur indirekt |
-572 | Die Prozedur darf nur innerhalb einer Transaktion ausgeführt werden | nur indirekt |
-569 | Der Benutzer hat kein Ausführungsrecht für die Prozedur | nur indirekt |
-567 | Die Prozedur darf z. Zt. nicht ausgeführt werden | nur indirekt |
-566 | Die Prozedur darf mit den übergebenen Parametern nicht ausgeführt werden | nur indirekt |
-550 | Fehlender oder falscher Eintrag in Settings | nur indirekt |
-540 | Falsches Format | nur indirekt |
-535 | Das Datum liegt nicht in der Vergangenheit | nur indirekt |
-530 | Der Wert ist nicht konvertierbar | nur indirekt |
-510 | Der Benutzer ist nicht registriert | nur indirekt |
-504 | Es ist ein Problem aufgetreten, das nicht gelöst werden kann, Prozedur wird daher abgebrochen | nur indirekt |
-502 | Die Parameter-Werte der Prozedur können nicht verarbeitet werden (kein passendes Trennzeichen) | nur indirekt |
-500 | Falsche Parameter | direkt und indirekt |
Die Rückgabe erfolgt als XML-Dokument welches gegen das Schema Response/EngineProcedure_v1_0.xsd validiert.
7.0.7 | 2015-01-29 | Interne Änderung : Datentyp-Erweiterung des „ReferenceKey“ [für „_mi_StartProcedure“-Aufruf] |
7.0.2 | 2013-08-29 | Ab jetzt werden die via „tempdb.dbo.AnyValues“ übergebenen Such-Wörter hinsichtlich der maximalen Länge geprüft und es gibt ggf. einen Fehler [vorher wurden die Werte einfach abgeschnitten] ⇒ Auch Doku-Hinweis |
6.5.3 | 2013-03-18 | Anpassungen an aktuellen Code-Standard, u.a. wg. UTF8-Unterstützung |
6.5.0 | 2012-09-17 | Fehler : Entgegen der Dokumentation wurde die Anlage des Beitrags NICHT abgebrochen, wenn Fehler bzgl. „PostingProperties“ auftraten [Ursache : fehlende Initialisierung einer internen Variablen] ! |
6.0.0 | 2010-03-26 | Neuer Parameter „NewPostingAsNotApproved“ |
5.5.0 | 2008-01-07 | 1. Neuer Parameter „SeparatorInIdentVals“ 2. Ausgabe an die Standard-Ausgabe [via „print“] im Fehler-Fall „-500“, die nähere Informationen über die Ursache enthält |
5.1.0 | 2006-02-08 | Die intern verwendete Prozedur „_fo_ModifyPostingProperties“ hat einen neuen Parameter bekommen, wodurch man die Rückgabe der fehlerhaften „Properties“ steuern kann |
5.0.4 | 2005-09-26 | 1. Pflege der „MainPostingSorting“-Tabelle [zur Sortierung von Hauptbeiträgen] 2. Fehler : Im Fall „SavePostingProperties = 1“ wurden keine „Properties“ gespeichert 3. Fehlender Doku-Hinweis, daß Eigenschaften nur zur „PersonID = 0“ hinterlegt werden |
5.0.0 | 2004-12-21 | 1. Aufruf von „_mi_StartProcedure“, „_mi_FinishProcedure“ und „_mi_ChooseParamValueSeperator“ 2. „set transaction isolation level 1“ und „set rowcount 0“ zu Beginn 3. Konsequente Fehlerbehandlung 4. Neue Möglichkeit, „PostingProperties“ anzulegen |
4.0.16 | 2004-08-31 | 1. „_mi_StartProcedure“, „_mi_FinishProcedure“ und „_mi_ChooseParamValueSeperator“ 2. „set transaction isolation level 1“ und „set rowcount 0“ zu Beginn 3. Konsequente Fehlerbehandlung 4. Neue Möglichkeit, „PostingProperties“ anzulegen |
4.0.3 | 2003-07-10 | 1. Fehler „-814“ bei Datenbank-Fehlern wie „Attempt to insert NULL value…“ - was natürlich falsch ist 2. Falscher Index-Name in einem Fall |
3.5.21 | 2002-08-06 | |
3.5.18 | 2002-05-15 | |
3.5.17 | 2002-05-02 | |
3.5.16 | 2002-04-25 | |
3.5.15 | 2002-03-12 | |
3.5.13 | 2001-12-06 | |
3.5.7 | 2001-05-04 | |
3.5.6 | 2001-04-17 | |
3.5.1 | 2000-12-20 | |
3.5.0 | 2000-11-23 | Erstmalig in dieser Version erstellt |
Der folgende Link öffnet in einem separaten Fenster den Engine Playground der fest mit dem dbap-demo System verbunden ist:
Unformatierte Ausgabe:
curl -X POST 'http://<partner>-<project>.dstore.de/default/engine/fo_InsertPosting_Pu?PersonIdentificationValues=<value>&PersonTypeID=<value>&UniqueID=<value>&ForumID=<value>&Author=<value>&EMailOfAuthor=<value>&Subject=<value>'
Mit xmllint 5) formatierte Ausgabe:
curl -X POST 'http://<partner>-<project>.dstore.de/default/engine/fo_InsertPosting_Pu?PersonIdentificationValues=<value>&PersonTypeID=<value>&UniqueID=<value>&ForumID=<value>&Author=<value>&EMailOfAuthor=<value>&Subject=<value>' | xmllint --format -
use dStore_php\WebService; $service = new WebService\Service( WebService\Scheme::HTTP,'<partner>-<project>.dstore.de', 80); $request = new WebService\Requests\Engine\Procedure\Request( new WebService\Requests\AccessData('default'), 'fo_InsertPosting_Pu', array( 'PersonIdentificationValues' => '<value>', 'PersonTypeID' => <value>, 'UniqueID' => '<value>', 'ForumID' => <value>, 'Author' => '<value>', 'EMailOfAuthor' => '<value>', 'Subject' => '<value>', // 'ReplyToPostingID' => NULL, // 'SelectResult' => 1, // 'MaintainSearchPostings' => 0, // 'SavePostingProperties' => 0, // 'Country' => 'german', // 'SeparatorInIdentVals' => '¶', // 'NewPostingAsNotApproved' => 0 ) ); $service->execute($request); $xml_result = $request->getResponse()->getBody()->toSimpleXmlDocument(); $ResultSet = $xml_result->getRowsAsArray(); $OutputParams = $xml_result->getOutputParametersAsArray();
XML zur Ausführung mit der Methode engine/execute, z.B. per
curl --header 'Content-Type: application/xml' -X POST 'http://<partner>-<kunde>.dstore.de/default/engine/execute' -d '<xml-daten>'
<?xml version="1.0" encoding="UTF-8"?> <ListOfBatches> <Batch No="0"> <Procedure Name="fo_InsertPosting_Pu"> <Parameters> <Parameter Name="PersonIdentificationValues"><!-- varchar value --></Parameter> <Parameter Name="PersonTypeID"><!-- tinyint value --></Parameter> <Parameter Name="UniqueID"><!-- varchar value --></Parameter> <Parameter Name="ForumID"><!-- smallint value --></Parameter> <Parameter Name="Author"><!-- varchar value --></Parameter> <Parameter Name="EMailOfAuthor"><!-- varchar value --></Parameter> <Parameter Name="Subject"><!-- varchar value --></Parameter> <!-- <Parameter Name="ReplyToPostingID">NULL</Parameter> --> <!-- <Parameter Name="SelectResult">1</Parameter> --> <!-- <Parameter Name="MaintainSearchPostings">0</Parameter> --> <!-- <Parameter Name="SavePostingProperties">0</Parameter> --> <!-- <Parameter Name="Country">'german'</Parameter> --> <!-- <Parameter Name="SeparatorInIdentVals">'¶'</Parameter> --> <!-- <Parameter Name="NewPostingAsNotApproved">0</Parameter> --> </Parameters> </Procedure> </Batch> </ListOfBatches>