Kopieren von Objekten 2

Hier können Sie Fragen bezüglich des Datenbank-/Objektmoduls stellen.
yaem
Member
Beiträge: 96
Registriert: Mi 26. Nov 2008, 12:24

Kopieren von Objekten 2

Beitragvon yaem » Sa 25. Feb 2017, 15:10

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

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

Re: Kopieren von Objekten 2

Beitragvon yaem » Sa 25. Feb 2017, 16:56

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?

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

Re: Kopieren von Objekten 2

Beitragvon mokraemer » Sa 25. Feb 2017, 19:11

das ist die falsche Funktion.
Wenn, dann brauchst du

Code: Alles auswählen

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

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

Re: Kopieren von Objekten 2

Beitragvon yaem » Sa 25. Feb 2017, 19:53

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.

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

Re: Kopieren von Objekten 2

Beitragvon mokraemer » Mo 27. Feb 2017, 12:58

gar nicht. Die Kopie ist logischer Weise in der gleichen Klasse.
webEdition-Kern-Entwickler

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

Re: Kopieren von Objekten 2

Beitragvon yaem » Mo 27. Feb 2017, 15:39

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

Benutzeravatar
Carrear
webEdition Partner
webEdition Partner
Beiträge: 646
Registriert: Do 17. Jan 2013, 03:02
Wohnort: Hannover
Kontaktdaten:

Re: Kopieren von Objekten 2

Beitragvon Carrear » Mo 27. Feb 2017, 15:56

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.

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

Re: Kopieren von Objekten 2

Beitragvon mokraemer » Mo 27. Feb 2017, 20:29

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.
webEdition-Kern-Entwickler

WBTMagnum
webEdition Partner
webEdition Partner
Beiträge: 1825
Registriert: Di 7. Mär 2006, 16:50
Wohnort: Wien
Kontaktdaten:

Re: Kopieren von Objekten 2

Beitragvon WBTMagnum » Mo 27. Feb 2017, 22:37

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

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

Re: Kopieren von Objekten 2

Beitragvon yaem » Di 28. Feb 2017, 01:59

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.

Benutzeravatar
Carrear
webEdition Partner
webEdition Partner
Beiträge: 646
Registriert: Do 17. Jan 2013, 03:02
Wohnort: Hannover
Kontaktdaten:

Re: Kopieren von Objekten 2

Beitragvon Carrear » Di 28. Feb 2017, 09:05

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.

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

Re: Kopieren von Objekten 2

Beitragvon mokraemer » Di 28. Feb 2017, 14:09

die Frage bleibt, warum es die gleichen Felder in 2 unterschiedlichen Klassen gibt.
webEdition-Kern-Entwickler

WBTMagnum
webEdition Partner
webEdition Partner
Beiträge: 1825
Registriert: Di 7. Mär 2006, 16:50
Wohnort: Wien
Kontaktdaten:

Re: Kopieren von Objekten 2

Beitragvon WBTMagnum » Di 28. Feb 2017, 17:06

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

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

Re: Kopieren von Objekten 2

Beitragvon yaem » Mi 1. Mär 2017, 10:38

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.

Benutzeravatar
Carrear
webEdition Partner
webEdition Partner
Beiträge: 646
Registriert: Do 17. Jan 2013, 03:02
Wohnort: Hannover
Kontaktdaten:

Re: Kopieren von Objekten 2

Beitragvon Carrear » Mi 1. Mär 2017, 12:41

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.


Zurück zu „DB-/Objektmodul“

Wer ist online?

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