Wozu ist die Spalte ObjectID in tblObjectFiles

Fragen zum Erstellen von Templates für webEdition.
yaem
Member
Beiträge: 96
Registriert: Mi 26. Nov 2008, 12:24

Wozu ist die Spalte ObjectID in tblObjectFiles

Beitragvon yaem » Fr 21. Jun 2013, 02:54

Hallo,

ich habe per PHP Objekte kopiert, sowohl von einer Klasse zur anderen, als auch innerhalb von tblObjectFiles.
Jetzt wurden die neuen Objekte zwar innerhalb eines Listviews angezeigt und im Backend aufgelistet, aber wenn man versucht auf das Object per we:object oder im Backend per "klick" drauf zuzugreifen, ist es leer.
Jetzt ist mir aufgefallen, dass die Zahl in ObjectID in der Tabelle tblObjectFiles irgendeiner Reihenfolge zu folgen scheint und habe die offensichtlich eingetragenen Zahlen (um mal ein Beispiel zu nennen 22) in die höchste Zahl der Reihenfolge (z.B. 2484 ) geändert. Und siehe da, alles ist vollkommen ok und wird auch korrekt angezeigt.

Zwischenbemerkung: tblTemporaryDoc ist leer.

Jetzt das, was mich fragen läßt: Sowohl (um das Beispiel aufzugreifen) die 22 als auch die 2484 finden keinerlei Verwendung, bzw. ich habe diese nicht gefunden. Es gibt keine Klassen mit diesen Nummern, keine Objekte oder irgendetwas anderes, was die 22 oder 2484 benutzt.

Also, woher, zur hölle soll mein PHP skript wisen, was es in die Spalte ObjectID eintragen soll, wenn ich es repariere?

bin für jede gebrauchbare Anregung dankbar


gruss Yves


P.S. ich lese mich auch gerne in Doku rein, habe aber bislang nichts gefunden was so genau die Tabellen der DB erklärt.

ThomasGoebe

Re: Wozu ist die Spalte ObjectID in tblObjectFiles

Beitragvon ThomasGoebe » Fr 21. Jun 2013, 09:16

Hallo Yves,

ich kann Dir nicht genau sagen, wozu die Spalte ist, vermute aber, dass mokraemer das sicher noch tun wird.
Aber das Problem liegt in meinen Augen hier schon vorher: direkte Manipulation in der DB sollte vermieden werden.
Warum, nutzt Dein Script nicht die webEdition Klassen, mit denen auch intern Objekte angelegt / bearbeitet werden?
Es gibt ein paar Code-Beispiele in der etwas veralteten Doku: http://documentation.webedition.org/wik ... ples/start.

Schau doch mal, ob Du damit arbeiten kannst, denn dann vermeidest Du Probleme wie mit der ObjectID grundsätzlich.

mokraemer
Senior Member
Beiträge: 3619
Registriert: So 8. Aug 2010, 01:23
Wohnort: Mainz

Re: Wozu ist die Spalte ObjectID in tblObjectFiles

Beitragvon mokraemer » Sa 22. Jun 2013, 02:09

autsch. ja, du solltest nicht per Hand auf die Objekte zugreifen. Und wenn, dann die internen Funktionen nutzen.

Die ObjectID ist die ID in TableID die das Objekt referenziert.
webEdition-Kern-Entwickler

yaem
Member
Beiträge: 96
Registriert: Mi 26. Nov 2008, 12:24

Re: Wozu ist die Spalte ObjectID in tblObjectFiles

Beitragvon yaem » Mi 26. Jun 2013, 12:11

Meine Aufgabe ist schlichtweg ein Objekt zu kopieren. Ich habe aber leider keinerlei Fukntion hierz gefunden.
Es müssen Objekte von der einen in die andere Klasse kopiert werden.
Mit WebEdition Bordmitteln klappt das bisher nur bis ~23 Objekte dann gibt es aufgrund von Speichermangel einen Internal Server Error, da WebEdition für ein Objekte auf alle beteiligten Klassen zugreift und dafür unendlich Speicher verbraucht.

Ich möchte in Zukunft aber Stapelweise auch mehr objekte von der einen, in die andere Klasse kopieren.
Alle Felder einzeln auszulesen und dann wieder als neues Objekt zu Speichern ist keine Option, da ich bei Veränderung der Klassenstruktur auch das "Kopierskript" anpassen müsste.

Wenn ich irgendwie die Möglichkeit hätte ein per WebEdition-Funktion ein Objekt aufzurufen, ein zweites neu anzulegen und dann den inhalt des ersten ins zweite zu packen um es dann zu speichern, wäre ich ja dabei.

Hat bei mir aber nicht geklappt, zumindest die Spalten in denen die IDs von Objekten stehen, werden nicht mit übernommen.

Aus den Fingern gesaugtes Beispiel:

$obj = new we_objectFile();
$obj->initByID(497);

$object->we_new();
$object->TableID = 19;
$object->setRootDirID(true);
$object->resetParentID();
$object->restoreDefaults();
$object->Text = $rechnungsnummer;
$object->Path=$object->getParentPath()

$object->elements = $obj->elements; (nagelt mich nicht dauf fest, hab das Skript anschließend gelöscht)

$object->we_save();
$object->we_publish();

So in die Richtung war mein hackfreier Ansatz. Aber, wie gesagt, dort wurden die Spalten mit we_object_XX nicht übernommen.

Bin für alles offen und Dankbar für Hilfe.

yaem
Member
Beiträge: 96
Registriert: Mi 26. Nov 2008, 12:24

Re: Wozu ist die Spalte ObjectID in tblObjectFiles

Beitragvon yaem » Mi 26. Jun 2013, 16:20

Hab das jetzt wie folg gelöst. Funktioniert einwandfrei.


$bew2stand = "CREATE TEMPORARY TABLE tmp2 SELECT * FROM `tblObject_20` WHERE OF_ID = " . $BewID . " LIMIT 1;
UPDATE tmp2 SET `ID` = NULL;
INSERT INTO `tblObject_15` SELECT * FROM tmp2;

UPDATE `tblObjectFiles` SET `ObjectID` = LAST_INSERT_ID(), TableID = 15 WHERE ID = " . $BewID . " LIMIT 1; ";

$delBew = "DELETE FROM `tblObject_20` WHERE OF_ID = " . $BewID . " LIMIT 1; ";

$mysqli = new mysqli($DBWE3->host,$DBWE3->User,$DBWE3->Password,$DBWE3->Database);

if( $mysqli->multi_query($bew2stand) ) {

$mysqli2 = new mysqli($DBWE3->host,$DBWE3->User,$DBWE3->Password,$DBWE3->Database);

$result = $mysqli2->multi_query($delBew);

return $result;

} else {

return false;

}

$mysqli->close();


return $result;

Bin dennoch für Kritik offen.

mokraemer
Senior Member
Beiträge: 3619
Registriert: So 8. Aug 2010, 01:23
Wohnort: Mainz

Re: Wozu ist die Spalte ObjectID in tblObjectFiles

Beitragvon mokraemer » Mi 26. Jun 2013, 19:31

kopieren heißt:
makeSameNew
also $obj->makeSameNew();
kein mysqli erzeugen!

entweder $db=new DB_WE();
oder du nutzt das $GLOBALS['DB_WE']
dann mit $db->query(); Abfrage absetzen!

Somit ist u.a. auch die Fehlerbehandlung sauber aktiv.
webEdition-Kern-Entwickler

yaem
Member
Beiträge: 96
Registriert: Mi 26. Nov 2008, 12:24

Re: Wozu ist die Spalte ObjectID in tblObjectFiles

Beitragvon yaem » Do 23. Feb 2017, 16:56

Steht irgendwo beschrieben, wie makeSameNew funktioniert?

yaem
Member
Beiträge: 96
Registriert: Mi 26. Nov 2008, 12:24

Re: Wozu ist die Spalte ObjectID in tblObjectFiles

Beitragvon yaem » Do 23. Feb 2017, 19:15

$obj = new we_objectFile();
$obj ->makeSameNew(107470);
$obj ->TableID = 15;
$obj ->we_save();
$obj ->we_publish();

107470 ist dabei die WE_ID des zu kopierenden Objekts. Ergebnis ist aber ein leeres Objekt. Was mache ich falsch?

Eigentlich gehört dieser Thread in das Object/DB Forum. Ich vermute mal, das gab es 2013 noch nicht. Vielleicht kann der Admin das verschieben, wäre, glaube ich, ganz gut.


Zurück zu „webEdition Templates erstellen (we:Tags)“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 Gäste