Kopieren von Objekten 2
Kopieren von Objekten 2
Ich habe die, sinngemäß, gleiche Aufgabenstellung wie in gleichnamigen Thread ohne 2 bislang per MySql-Hack gelöst. Da jetzt aber bei einem Update ein paar Tabellenfelder geändert wurden, nehme ich das als erneuten Anlaß das Thema auf den Tisch zu bringen:
Gibt es in irgendeiner WebEdition Version (Bin grade bei 6.2.7 will aber ganz nach oben, also erstmal nicht beachten) die Möglichkeit inhaltsgleiche Objekte innerhalb von Klassen oder, noch besser, weil benötigt, zwischen zwei gleichen Klassen zu kopieren?
In einem anderen Thread wurde mir makesamenew angeraten. Ich habe aber leider keinerlei Ahnung wie diese funktioniert und woher ich mir Informationen darüber holen kann.
gruss Yves
Gibt es in irgendeiner WebEdition Version (Bin grade bei 6.2.7 will aber ganz nach oben, also erstmal nicht beachten) die Möglichkeit inhaltsgleiche Objekte innerhalb von Klassen oder, noch besser, weil benötigt, zwischen zwei gleichen Klassen zu kopieren?
In einem anderen Thread wurde mir makesamenew angeraten. Ich habe aber leider keinerlei Ahnung wie diese funktioniert und woher ich mir Informationen darüber holen kann.
gruss Yves
Re: Kopieren von Objekten 2
Folgenden versuch habe ich in PHP unternommen:
$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 in der neuen Klasse (hier 15). Was mache ich falsch?
$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 in der neuen Klasse (hier 15). Was mache ich falsch?
Re: Kopieren von Objekten 2
das ist die falsche Funktion.
Wenn, dann brauchst du
Wenn, dann brauchst du
Code: Alles auswählen
$obj = new we_objectFile();
$obj ->copyDoc(107470);
$obj->we_publish();
webEdition-Kern-Entwickler
Re: Kopieren von Objekten 2
Leider fehlt auch hierzu die Docu :-/
Wie gebe ich denn die neue Klasse an?
$obj = new we_objectFile();
$obj ->copyDoc(107470);
$obj->TableID = 15;
$obj->we_publish();
Aber Danke für den Hinweis schonmal.
Wie gebe ich denn die neue Klasse an?
$obj = new we_objectFile();
$obj ->copyDoc(107470);
$obj->TableID = 15;
$obj->we_publish();
Aber Danke für den Hinweis schonmal.
Re: Kopieren von Objekten 2
gar nicht. Die Kopie ist logischer Weise in der gleichen Klasse.
webEdition-Kern-Entwickler
Re: Kopieren von Objekten 2
O. k., es gibt also keinerlei Dokumentation und keine Funktionsbeschreibung, richtig?
dass man keine neue Klasse angeben kann, erschließt sich mir nicht logischerweise. Denn kopiert man im backend ein Objekt, kann man das auch aus x-beliebigen anderen Klassen auswählen und webEdition kopiert dann den Inhalt gleichnamiger Felder.
Schade, das wäre doch eigentlich ne gute Funktion. So muss ich das wieder als üben MySQL Hack lösen.
Danke für die Hilfe
dass man keine neue Klasse angeben kann, erschließt sich mir nicht logischerweise. Denn kopiert man im backend ein Objekt, kann man das auch aus x-beliebigen anderen Klassen auswählen und webEdition kopiert dann den Inhalt gleichnamiger Felder.
Schade, das wäre doch eigentlich ne gute Funktion. So muss ich das wieder als üben MySQL Hack lösen.
Danke für die Hilfe
- Carrear
- webEdition Partner
- Beiträge: 646
- Registriert: Do 17. Jan 2013, 03:02
- Wohnort: Hannover
- Kontaktdaten:
Re: Kopieren von Objekten 2
Leg doch einfach per PHP ein neues Objekt an, hol dir das zu kopierende, übertrag die einzelnen Feldinhalte und speicher/veröffentliche das neue Objekt. Sind dann zwar je nach Anzahl der Felder ein paar Zeilen mehr, lohnt sich aber.
Re: Kopieren von Objekten 2
also grundsätzlich kann man ja nicht einfach Objekte aus einer Klasse in einer anderen Speichern. Das geht nur in Ausnahmen, wenn die Felder genau gleich sind. Das dürfte aber ein echter Zufall sein und ich würde mich fragen warum es dann 2 Klassen sind.
Ich denke nur bevor du dir über sowas Gedanken machst, solltest du erst mal auf eine neuere Version, denn dein SQL-Hack wird vermutlich kein Update überleben.
Ich denke nur bevor du dir über sowas Gedanken machst, solltest du erst mal auf eine neuere Version, denn dein SQL-Hack wird vermutlich kein Update überleben.
webEdition-Kern-Entwickler
-
- webEdition Partner
- Beiträge: 1825
- Registriert: Di 7. Mär 2006, 16:50
- Wohnort: Wien
- Kontaktdaten:
Re: Kopieren von Objekten 2
Hallo Yves,
Ich sehe das auch so:
Liebe Grüße,
Sascha
Ich sehe das auch so:
- wE Update durchführen
- Objekte mittels PHP Skript migrieren (wie von Martin beschrieben)
Liebe Grüße,
Sascha
Re: Kopieren von Objekten 2
Naja, es geht mir halt nicht um eine einmalige Lösung, sondern um eine Funktion, die das erledigt.
Sprich, ich habe Objekte in einer Klasse und wenn ein Redakteur das möchte, klickt er auf einen Link und das betroffene Objekt wird in eine andere Klasse kopiert.
Das ganze hat garnichts mit meinem Update zutun. Kommt jetzt nur dadurch wieder auf den Tisch, weil beim Update ein Par Spalten weggefallen sind.
Sprich, ich habe Objekte in einer Klasse und wenn ein Redakteur das möchte, klickt er auf einen Link und das betroffene Objekt wird in eine andere Klasse kopiert.
Das ganze hat garnichts mit meinem Update zutun. Kommt jetzt nur dadurch wieder auf den Tisch, weil beim Update ein Par Spalten weggefallen sind.
- Carrear
- webEdition Partner
- Beiträge: 646
- Registriert: Do 17. Jan 2013, 03:02
- Wohnort: Hannover
- Kontaktdaten:
Re: Kopieren von Objekten 2
Okay Und das klappt dann nicht?
Wenn das nicht klappt, dann habe ich das Problem noch nicht richtig verstanden.
Code: Alles auswählen
// Ausgangs-Objekt referenzieren
$ref = new we_objectFile();
$ref->initByID(497);
// Inhaltsfelder kopieren
$ref['feld1'] = $obj->getElement('Feld1');
$ref['feld2'] = $obj->getElement('Feld1');
// ggf. Unterverzeichnis der Klasse angeben
$idSubfolder = 123;
// ggf. ID des Trigger-Dokuments
$idTrigger = 2340;
// ggf. Objektname fürs Backend
$copyname = "XYZ";
$copy = new we_objectFile();
$copy->we_new();
$copy->TableID = 15;
$copy->setRootDirID(true);
$copy->resetParentID();
$copy->restoreDefaults();
$copy->setParentID($idSubfolder);
// ggf. kommaseperierte Kategorien
$copy->Category = $categories ;
$copy->Language = 'de_DE';
$copy->TriggerID = $idTrigger;
$copy->IsSearchable = 1;
$copy->Text = we_import_functions::correctFilename($copyname);
$copy->Path = $copy->getParentPath() . (($copy->getParentPath() != "/") ? "/" : "") . $copy->Text;
// hier dann die ganzen Kopien der Felder vom Ausgangsobjekt anlegen.
$copy->setElement('Feld1', $ref['feld1']);
$copy->setElement('Feld2', $ref['feld2']);
$copy->we_save();
$copy->we_publish();
$createdID = $copy->ID;
Re: Kopieren von Objekten 2
die Frage bleibt, warum es die gleichen Felder in 2 unterschiedlichen Klassen gibt.
webEdition-Kern-Entwickler
-
- webEdition Partner
- Beiträge: 1825
- Registriert: Di 7. Mär 2006, 16:50
- Wohnort: Wien
- Kontaktdaten:
Re: Kopieren von Objekten 2
Hallo Yves,
Ich bin den ganzen Thread gerade noch mal durchgegangen. In deinem ersten Post hast du geschrieben:
Liebe Grüße,
Sascha
Ich bin den ganzen Thread gerade noch mal durchgegangen. In deinem ersten Post hast du geschrieben:
Blöde Frage: Wenn die Klassen tatsächlich identisch sind, warum brauchst du dann zwei Klassen? Kannst du das eventuell auch über ein Attribut in der Klasse lösen? Damit sollten sich deine Anforderungen eigentlich erfüllen lassen.... zwischen zwei gleichen Klassen ...
Liebe Grüße,
Sascha
Re: Kopieren von Objekten 2
Beispiele für gleiche Klassen:
Entwürfe und Pläne, Angebote und Rechnungen, Anfragen und Angebote
Die Felder sind die gleichen, aber Priorität, Zugriffsrechte, Fehlerbehandlung, Backupstrategien sind komplett anders.
Also, ich möchte um bei meinem Beispiel zu bleiben ein Angebot in die Klasse Rechnung kopieren.
Und und ich finde es unschön, die einzelnen Felder anzugeben, da ich dann bei einer Änderungung der Klasse das Skript wieder anfassen muss.
Entwürfe und Pläne, Angebote und Rechnungen, Anfragen und Angebote
Die Felder sind die gleichen, aber Priorität, Zugriffsrechte, Fehlerbehandlung, Backupstrategien sind komplett anders.
Also, ich möchte um bei meinem Beispiel zu bleiben ein Angebot in die Klasse Rechnung kopieren.
Und und ich finde es unschön, die einzelnen Felder anzugeben, da ich dann bei einer Änderungung der Klasse das Skript wieder anfassen muss.
- Carrear
- webEdition Partner
- Beiträge: 646
- Registriert: Do 17. Jan 2013, 03:02
- Wohnort: Hannover
- Kontaktdaten:
Re: Kopieren von Objekten 2
Ja, aber es ist wohl eine bessere Lösung, wenn du bei Feldänderungen mal das Script um zwei Zeilen erweitern musst, als das komplett mit eigenen Queries zu schreiben. Die werden nämlich uU in späteren wE Versionen viel mehr Änderungen notwendig haben.
Außerdem:
Man kann via PHP selbst noch die Feldnamen einer Klasse auslesen und diesen Makel damit auch noch beheben. Insofern die zwei Klassen dann immer analog gehalten werden bzgl. der Felder klappt das immer.
Außerdem:
Man kann via PHP selbst noch die Feldnamen einer Klasse auslesen und diesen Makel damit auch noch beheben. Insofern die zwei Klassen dann immer analog gehalten werden bzgl. der Felder klappt das immer.
Wer ist online?
Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste