Benutzer-Werkzeuge

Webseiten-Werkzeuge


engine:procedures:fo_modifyposting_pu

fo_ModifyPosting_Pu

Ändert einen Foren-Beitrag - hierzu benötigt die identifizierte Person das Zugriffsrecht „512“ („bearbeiten aller Postings des Forums“) bzw. das Recht „8“ („bearbeiten eigener Postings“), wenn sie ihren EIGENEN Beitrag ändern möchte.
Anmerkung : Falls die Identifizierung fehlschlägt, werden die Rechte für die anonyme Person (mit der speziellen „PersonID = 0“) gecheckt.

Wie bei fo_InsertPosting_Pu wird der „Body“, also der Beitrag selbst, in „tempdb.dbo.TextData“ erwartet. Sollen evtl. zugehörige „Binaries“ geändert werden, sind die Prozeduren fo_DeletePostingBinary_Pu und fo_InsertBinaryForPosting_Pu zu verwenden.

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 in der ASE-Version 11.0.3 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 dem zu ändernden Beitrag zusätzliche „Eigenschaften“ (sprich Informationen) zu verwalten (hinzufügen, ändern, löschen). 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. Um eine bestehende Eigenschaft zu ändern oder zu löschen, ist die NEGATIVE „PostingCharacteristicID“ zu übergeben, und als „Value“ muß die „ValueID“ übergeben werden ! Hintergrund sind Datums-Werte, die u.U. anders ausgegeben werden, als sie intern gespeichert sind. Fehlt ein „korrespondierender“ Datensatz (zur POSITIVEN „CharacteristicID“), dann wird die vorhandene Eigenschaft gelöscht.
Bsp.: Der folgende Aufruf von mi_InsertTempdb_CharacValues vor dem Aufruf dieser Prozedur (z.B. mit „SavePostingProperties = 1“) führt dazu, daß die Eigenschaft mit der „ValueID = 42“ zum Merkmal mit der ID „17“ auf den Wert „Warum“ gesetzt wird :
exec mi_InsertTempdb_CharacValues '-17¶17', '42¶Warum', Delete = 1
Hingegen würde der Aufruf…
exec mi_InsertTempdb_CharacValues '-17', '42', Delete = 1
… bewirken, daß die Eigenschaft (mit der „ValueID = 42“) zum Merkmal mit der ID „17“ gelöscht würde.

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

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

5. 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).

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

7. 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
PostingID ID eines Beitrags, der geändert werden soll
integer3.5.0
NewAuthor Name des neuen Autors. Wird ignoriert, falls der (neue) 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
NewEMailOfAuthor Die eMail des neuen Autors
varchar(100)3.5.0
NewSubject Der neue Titel
varchar(100)3.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_ModifyPosting_Pu in „tempdb.dbo.AnyValues“ ein
bit3.5.8
KeepOldAuthor0 „0“ : Der identifizierte Teilnehmer, der den Beitrag ändert, wird auch (neuer) Autor
„1“ : Der Autor des alten Beitrags bleibt bestehen - hierfür wird allerdings das Zugriffsrecht „2048“ benötigt !
bit3.5.15
SavePostingProperties0 Angeben, um Eigenschaften zum 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

Rückgabe

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

Spaltenname Beschreibung SQL-Datentyp1) 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

Output-Parameter

Die Prozedur hat keine Output-Parameter.

Mögliche Return-Codes

Code Beschreibung Quelle 2)
-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
-840Posting kann nicht bearbeitet werden, weil es bereits von einem anderen Prozess bearbeitet wirdnur direkt
-804Keine Berechtigung zum Bearbeiten des Postingsnur direkt
-803Das Posting ist gelöschtnur 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
5.5.0 2008-01-071. Wenn „ApprovedPostingsOnly = 1“ konfigur. ist, ist u.U. „Visible“ auf 1„ zu setzen (war bisher nicht der Fall)
2. Ausgabe via „print“ im Fehler-Fall “-500„, die nähere Informationen über die Ursache enthält
3. Neuer Parameter „SeparatorInIdentVals“
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 neuen „MainPostingSorting“-Tabelle
2. Fehler : Bei „SavePostingProperties = 1“ wurden keine „Properties“ gespeichert
3. Fehlender Doku-Hinweis, daß Eigenschaften nur zur „PersonID = 0“ hinterlegt werden
4. Kleine interne Änderung
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.0 2003-04-03Im Fall „MaintainSearchPostings = 0“ wurden die alten Suchwörter nicht gelöscht
3.5.21 2002-08-06
3.5.18 2002-05-15
3.5.17 2002-05-02
3.5.15 2002-03-12
3.5.8 2001-05-19
3.5.7 2001-05-04
3.5.5 2001-03-30
3.5.2 2001-01-28
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_ModifyPosting_Pu?PersonIdentificationValues=<value>&PersonTypeID=<value>&UniqueID=<value>&PostingID=<value>&NewAuthor=<value>&NewEMailOfAuthor=<value>&NewSubject=<value>'

Mit xmllint 3) formatierte Ausgabe:

curl -X POST  'http://<partner>-<project>.dstore.de/default/engine/fo_ModifyPosting_Pu?PersonIdentificationValues=<value>&PersonTypeID=<value>&UniqueID=<value>&PostingID=<value>&NewAuthor=<value>&NewEMailOfAuthor=<value>&NewSubject=<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_ModifyPosting_Pu',
		array(
			'PersonIdentificationValues' => '<value>',
			'PersonTypeID' => <value>,
			'UniqueID' => '<value>',
			'PostingID' => <value>,
			'NewAuthor' => '<value>',
			'NewEMailOfAuthor' => '<value>',
			'NewSubject' => '<value>',
			// 'MaintainSearchPostings' => 0,
			// 'KeepOldAuthor' => 0,
			// 'SavePostingProperties' => 0,
			// 'Country' => 'german',
			// 'SeparatorInIdentVals' => '¶'
		)
);
 
$service->execute($request);
 
			$xml_result = $request->getResponse()->getBody()->toSimpleXmlDocument();
			$ResultSet = $xml_result->getRowsAsArray();
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_ModifyPosting_Pu">
			<Parameters>
				<Parameter Name="PersonIdentificationValues"><!-- varchar value --></Parameter>
				<Parameter Name="PersonTypeID"><!-- tinyint value --></Parameter>
				<Parameter Name="UniqueID"><!-- varchar value --></Parameter>
				<Parameter Name="PostingID"><!-- integer value --></Parameter>
				<Parameter Name="NewAuthor"><!-- varchar value --></Parameter>
				<Parameter Name="NewEMailOfAuthor"><!-- varchar value --></Parameter>
				<Parameter Name="NewSubject"><!-- varchar value --></Parameter>
				<!-- <Parameter Name="MaintainSearchPostings">0</Parameter> -->
				<!-- <Parameter Name="KeepOldAuthor">0</Parameter> -->
				<!-- <Parameter Name="SavePostingProperties">0</Parameter> -->
				<!-- <Parameter Name="Country">'german'</Parameter> -->
				<!-- <Parameter Name="SeparatorInIdentVals">'¶'</Parameter> -->
			</Parameters>
		</Procedure>
	</Batch>
</ListOfBatches>
2)
direkt meint „von der Prozedur selber“ und indirekt meint „von intern aufgerufenen Unterprozeduren“
3)
I.d.R. auf Unix-artigen Systemen bereits installiert, Bestandteil der libxml2, siehe http://www.xmlsoft.org
engine/procedures/fo_modifyposting_pu.txt · Zuletzt geändert: 11.01.2016 (Externe Bearbeitung)