Benutzer-Werkzeuge

Webseiten-Werkzeuge


engine:procedures:fo_insertposting_pu

fo_InsertPosting_Pu

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 :

  • „CharacteristicID“ enthält die ID eines Merkmals, zu der die Eigenschaft gehört
  • „Value“ enthält die Eigenschaft selbst

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

  • nur
  • auch
  • keine

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 :

  • 'german' : Tag-Monat-Jahr (Standardwert) - es wird auch „Germany“ akzeptiert
  • 'english' : Monat-Tag-Jahr - es wird auch „England“ akzeptiert

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 :

  • „1“ : Das Merkmal ist dem zugehörigen Forum des Postings nicht zugeordnet
  • „2“ : Die Eigenschaft ist ungültig, d.h. entspricht nicht dem Feldtyp des zugehörigen Merkmals
  • „3“ : Es handelt sich um ein Merkmal mit vordefinierten Werten, aber die übergebene Eigenschaft ist nicht vordefiniert
  • „4“ : Aufgrund des „CommonCharacteristic“-Flags kann die Eigenschaft zu diesem Merkmal zur angegebenen „PersonID“ nicht gesetzt werden
  • „5“ : Allgemeine Eigenschaften zu diesem Merkmal dürfen nicht mehr hinzugefügt werden
  • „6“ : Allgemeine Eigenschaften zu diesem Merkmal dürfen nicht mehr geändert werden
  • „7“ : Allgemeine Eigenschaften zu diesem Merkmal dürfen nicht mehr gelöscht werden
  • „8“ : Der Beitrag besitzt (zur gleichen „PersonID“) die Eigenschaft bereits
  • „9“ : Die maximale Anzahl von Eigenschaften zu diesem Merkmal ist überschritten
HTTP-MethodPOST
HTTP-AuthOptional
Tags
Engine-Kategorieforums
Engine-TypDaten-Änderung
Letzte Aktualisierung7.0.7 (2015-01-29)

Parameter

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.
tinyint3.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
smallint3.5.0
ReplyToPostingIDNULL 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.
integer3.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
SelectResult1 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“.
bit3.5.0
MaintainSearchPostings0 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
bit3.5.7
SavePostingProperties0 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
tinyint4.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
NewPostingAsNotApproved0 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“)
bit6.0.0

Rückgabe

wenn Result (Pseudo-Parameter) = 0 und SelectResult = 1 und SavePostingProperties NOT IN (3,4)

Spaltenname Beschreibung SQL-Datentyp1) ab Version
PostingIDID des neuen Beitrags (der auch im Ausgabeparameter „PostingID“ steht)
integer3.5.0

wenn SelectResult = 0 und Result (Pseudo-Parameter) IN (0, -874) und SavePostingProperties IN (3,4)

Spaltenname Beschreibung SQL-Datentyp2) ab Version
PostingCharacteristicIDID eines Posting-Merkmals, auf das sich die fehlerhafte Eigenschaft „Value“ bezieht
smallint4.0.16
ValueFehlerhafte Eigenschaft zum Merkmal „PostingCharacteristicID“
varchar(250)4.0.16
ErrorCodeGibt die Ursache des Fehlers an, also warum die Eigenschaft nicht übernommen werden konnte. Mögliche Werte : s. Beschreibung !
tinyint4.0.16

wenn SelectResult = 1 und Result (Pseudo-Parameter) IN (0, -874) und SavePostingProperties IN (3,4)

Spaltenname Beschreibung SQL-Datentyp3) ab Version
PostingCharacteristicIDID eines Posting-Merkmals, auf das sich die fehlerhafte Eigenschaft „Value“ bezieht
smallint4.0.16
ValueFehlerhafte Eigenschaft zum Merkmal „PostingCharacteristicID“
varchar(250)4.0.16
ErrorCodeGibt die Ursache des Fehlers an, also warum die Eigenschaft nicht übernommen werden konnte. Mögliche Werte : s. Beschreibung !
tinyint4.0.16
PostingIDID 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“) !
integer4.0.16

Output-Parameter

PostingIDAusgabeparameter für die „PostingID“ des neu angelegten Beitrags

Mögliche Return-Codes

Code Beschreibung Quelle 4)
-874Die Posting-Eigenschaften können nicht gesetzt/geändert/gelöscht werden, da Fehler auftratennur indirekt
-856Fehlerhafte Daten in „MainPostingSorting“nur indirekt
-855Fehlerhafte Konfiguration des Sortier-Kriteriumsnur indirekt
-850Sortier-Kriterium nicht definiert oder inaktiv oder nicht verwendbarnur indirekt
-830Spam-Schutz: Posting konnte nicht angelegt werdennur direkt
-814Auf abgeschlossene oder gelöschte Postings kann nicht geantwortet werdennur direkt
-813Keine Berechtigung zum Antworten auf ein bestehendes Postingnur direkt
-812Keine Berechtigung zur Eröffnung eines neuen Threadsnur direkt
-660Identifikation fehlgeschlagennur indirekt
-621Fehlender oder falscher Eintrag in PersonTypeSettingsnur indirekt
-602Zur defaultUniqueID („VisitorID = -2“) können keinerlei Daten gespeichert oder verändert werdennur indirekt
-599Lizenz ist ungültig oder abgelaufennur indirekt
-572Die Prozedur darf nur innerhalb einer Transaktion ausgeführt werdennur indirekt
-569Der Benutzer hat kein Ausführungsrecht für die Prozedurnur indirekt
-567Die Prozedur darf z. Zt. nicht ausgeführt werdennur indirekt
-566Die Prozedur darf mit den übergebenen Parametern nicht ausgeführt werdennur indirekt
-550Fehlender oder falscher Eintrag in Settingsnur indirekt
-540Falsches Formatnur indirekt
-535Das Datum liegt nicht in der Vergangenheitnur indirekt
-530Der Wert ist nicht konvertierbarnur indirekt
-510Der Benutzer ist nicht registriertnur indirekt
-504Es ist ein Problem aufgetreten, das nicht gelöst werden kann, Prozedur wird daher abgebrochennur indirekt
-502Die Parameter-Werte der Prozedur können nicht verarbeitet werden (kein passendes Trennzeichen)nur indirekt
-500Falsche Parameterdirekt und indirekt

XML-Schema

Die Rückgabe erfolgt als XML-Dokument welches gegen das Schema Response/EngineProcedure_v1_0.xsd validiert.

Historie

7.0.7 2015-01-29Interne Änderung : Datentyp-Erweiterung des „ReferenceKey“ [für „_mi_StartProcedure“-Aufruf]
7.0.2 2013-08-29Ab 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-18Anpassungen an aktuellen Code-Standard, u.a. wg. UTF8-Unterstützung
6.5.0 2012-09-17Fehler : 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-26Neuer Parameter „NewPostingAsNotApproved“
5.5.0 2008-01-071. 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-08Die 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-261. 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-211. 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-311. „_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-101. 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-23Erstmalig in dieser Version erstellt

Code-Snippets

Engine Playground

Der folgende Link öffnet in einem separaten Fenster den Engine Playground der fest mit dem dbap-demo System verbunden ist:

cURL

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 -
dStore_php
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();
engine/execute

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>
4)
direkt meint „von der Prozedur selber“ und indirekt meint „von intern aufgerufenen Unterprozeduren“
5)
I.d.R. auf Unix-artigen Systemen bereits installiert, Bestandteil der libxml2, siehe http://www.xmlsoft.org
engine/procedures/fo_insertposting_pu.txt · Zuletzt geändert: 11.01.2016 (Externe Bearbeitung)