Liebe Mitleser,

der Viewhelper f:debug wandelt ein Datenbank Object in eine HTML-Ausgabe um.  Ich suche eine Extension, die ähnliches macht - nur ein bisschen allgemeiner. Ich möchte TYPO3 zur Datenerfassung nutzen, und die erfassten daten später exportieren können. Es geht mir also darum, dass ich unter TYPO3 ein komplexes Datenbankobjekt von einer TYPO3-Aufsetzung exportieren und in eine andere TYPO3-Aufsetzung importieren kann.

ich suche also eine Extension mit folgenden zwei Eigenschaften.
Sie soll ein Datenbank-Objekt, das ich per Repository von Extbase erhalte, in einen XML-String umwandeln können. Sie soll ein XML-String inklusive der Resourcen in ein Datenbank-Object umwandeln und unter TYPO3 in der Datenbank zurückbauen/persistieren können.

Mir fehlt leider die Zeit, eine solche Klasse mal eben nach Feierabend zu programmieren. Andererseits ist das Problem so allgemein, dass eigentlich eine Lösung existieren sollte. Mit Symfonys ORM-Builder kenne ich mich zuwenig aus, um zu prüfen, ob ich über den Umweg von stdClass-Objekten gehen könnte. Ein Umweg über PHP-Arrays oder über JSON-Strings wäre mir auf recht.

Weiß jemand, ob ein solches Konstrukt schon einmal gebaut wurde oder existiert. Eine Herausforderung eines solchen Konstrukt ist, dass man mit absoulten Keys oder mit Hashs plus Datenabgleich bei Hash-Gleicheit arbeiten muss, wenn man die N:1-Relation korrekt abbilden und Sicherstellen will, dass nach der Konversion der Konversion eine identische Kopie vorliegt.

Das Framwork darf ausschließen, das es zirkuläre Datenbeziehungen gibt.

Die Extension sollte also im Idealfall folgenden bijektiven Umwandlungsregeln erfüllen.
0. Im XML sind werden die UID's durch Hash-Werte für den Datensatz ersetzt.
1. Konvertierung Field(Fieldname)
DB(Fieldname=>Data)  <-> XML(<fieldname>data</fieldname>)
1.b. Konvertierung Field(ResourcenID)
DB(Fieldname=>ResourcenID)  <-> XML(<fieldname filepath="ResourcenID">base64(ResourcenID)</fieldname>) 2. Konvertierung Field(DatensatzUid) der Tabelle TabellenName (setzen von Hash-Attribut) DB(Fieldname=>DatensatzUid; tabellenName)  <-> XML(<tabellenName fieldName="{hash von inkludierten Datensatz}">{ enthält alle Felder inklusive der referenzierten Tabellen}</tabellenName>)
3. Konvertierung Datensatz aus Tabelle(TabellenName, Uid)
DB(tabellenName=>Fields) <-> XML(<tabellenName>{Aufruf Field(fieldname) für alle Fields}</tabellenName>) 4. Konvertierung Relation 1:1 Relation(TabellenName); TabelleForeign,  RefForeign implizite Information DB(FieldRelation=>RefUid; TabelleForeign, RefForeign) <-> XML(<fieldRelation count="1" child="RefForeign">{Tabelle(TabelleForeign,RefUid)}</fieldRelation>) 4.b. Konvertierung Relation 1:n Relation(TabellenName); TabelleForeign, RefForeign implizite Information DB(FieldRelation=>RefCount; TabelleForeign; RefForeign) <-> XML(<fieldRelaton count="RefCount" child="RefForeign">{{Tabelle(TabelleForeign,Uid)} für alle Uids, die im  ForeignField den ID des aktuellen datensatze enthalten}</fieldRelation>) 5. Konvertierung von N:1-Relationen (TabellenName->RefField) implizite Infos zu TabelleForeign, UidForeignName und UidForeignValue DB(RefField=>UidForeignValue; TabelleForeign; UidForeign) <-> XML(<fieldReferenz parent="{Hash von von inkludiertem Datensatz zu UidForeignValue}">{Tabelle(TabelleForeign,UidForeignValue)}</fieldReferenz>)
6. Konvertierung Relation M:N Relation
Eine M:N-Relation kann als Relation von M:1 und 1:N betrachtet werden. Die Konvertierungen sind oben schon definiert worden.

Vermutlich muss der Zusammenbau mehrschrittig erfolgen, da über Hash-Werte sichergestellt werden muss, dass nach dem Rückbau eines Exports sicher genausoviel Datensätze wie vorher vorhanden sind. Im Idealfall prüft das System sogar, ob bestimmte Teilobjekte in der importierenden Datenbank schon vorhanden sind, um das doppelte Anlegen von Teilstrukturen tzu vermeiden. Wenn dass nach dem Import ein nachträglicher Clearing_prozess übernimmt, soll mir das auch recht sein.

Über Hinweise werde ich mich freuen.

Dieter


--

---

Dr. Dieter Porth
Grünenstraße 23
D-28199 Bremen
Germany

+(049) 421 / 51 48 35 48
+(049) 160 / 99 18 06 88 (abends/ after 18:00)

_______________________________________________
TYPO3-german mailing list
TYPO3-german@lists.typo3.org
http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german

Antwort per Email an