Seite 1 von 2

Kopieren von Objekten 2

Verfasst: Sa 25. Feb 2017, 15:10
von yaem
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

Re: Kopieren von Objekten 2

Verfasst: Sa 25. Feb 2017, 16:56
von yaem
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?

Re: Kopieren von Objekten 2

Verfasst: Sa 25. Feb 2017, 19:11
von mokraemer
das ist die falsche Funktion.
Wenn, dann brauchst du

Code: Alles auswählen

$obj = new we_objectFile();
$obj ->copyDoc(107470);
$obj->we_publish();

Re: Kopieren von Objekten 2

Verfasst: Sa 25. Feb 2017, 19:53
von yaem
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.

Re: Kopieren von Objekten 2

Verfasst: Mo 27. Feb 2017, 12:58
von mokraemer
gar nicht. Die Kopie ist logischer Weise in der gleichen Klasse.

Re: Kopieren von Objekten 2

Verfasst: Mo 27. Feb 2017, 15:39
von yaem
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

Re: Kopieren von Objekten 2

Verfasst: Mo 27. Feb 2017, 15:56
von Carrear
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

Verfasst: Mo 27. Feb 2017, 20:29
von mokraemer
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.

Re: Kopieren von Objekten 2

Verfasst: Mo 27. Feb 2017, 22:37
von WBTMagnum
Hallo Yves,

Ich sehe das auch so:
  1. wE Update durchführen
  2. Objekte mittels PHP Skript migrieren (wie von Martin beschrieben)
Alternativ könnte auch ein CSV-Export der Objekte klappen. Dh. Objekte exportieren, nachbearbeiten und in die neue Klasse importieren. Ein Skript ist - da reproduzierbar und anpassbar - aber vermutlich die nachhaltigere Lösung.

Liebe Grüße,
Sascha

Re: Kopieren von Objekten 2

Verfasst: Di 28. Feb 2017, 01:59
von yaem
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.

Re: Kopieren von Objekten 2

Verfasst: Di 28. Feb 2017, 09:05
von Carrear
Okay :) Und das klappt dann nicht?

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;
Wenn das nicht klappt, dann habe ich das Problem noch nicht richtig verstanden.

Re: Kopieren von Objekten 2

Verfasst: Di 28. Feb 2017, 14:09
von mokraemer
die Frage bleibt, warum es die gleichen Felder in 2 unterschiedlichen Klassen gibt.

Re: Kopieren von Objekten 2

Verfasst: Di 28. Feb 2017, 17:06
von WBTMagnum
Hallo Yves,

Ich bin den ganzen Thread gerade noch mal durchgegangen. In deinem ersten Post hast du geschrieben:
... zwischen zwei gleichen Klassen ...
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.


Liebe Grüße,
Sascha

Re: Kopieren von Objekten 2

Verfasst: Mi 1. Mär 2017, 10:38
von yaem
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.

Re: Kopieren von Objekten 2

Verfasst: Mi 1. Mär 2017, 12:41
von Carrear
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.