reger
Returning Observer

Import von csv-Daten in Datenquelle

Jump to solution

Hallo zusammen,

mit dem Hintergrund Sätze aus Datenquellen von einem in ein anderes Projekt zu übertragen und inspiriert von folgendem Artikel: CSV-Daten in Datenquelle importieren haben wir uns den Quellcode geschnappt, entsprechend modifiziert und mit Strings (in und out) läuft alles prima. Da sowohl die bestehenden Quellsätze als auch die Zielsätze in der Datenquelle FIRSTspirit-Editor-Felder (für RichText) enthalten, haben wir als Datentyp beim Import den EditorWrapper eingesetzt. Leider ist es aber bisher in verschiedenen Konstellationen nicht gelungen, im besten Fall wird das Script nicht abgebrochen, im Zielfeld steht aber auch nichts drin.

Hier ein Ausschnitt aus dem Script:


  reader = new BufferedReader(new InputStreamReader(new FileInputStream(file))); 
  while ((line = reader.readLine()) != null) { 
  // Datensatz erzeugen 
  Entity ent = session.createEntity(tableName); 
  String[] fields = line.split(";");
  de.espirit.firstspirit.client.editorcomponent.EditorWrapper newEditorWrapper = new de.espirit.firstspirit.client.editorcomponent.EditorWrapper(fields[2]);
   

  // Datensatz befüllen 
  ent.setValue("aktiv", "1".equals(fields[0])); 
  ent.setValue("begriff", fields[1]); 
  ent.setValue("beschreibung", newEditorWrapper);

Und das der Test-Input:

1;test1;Das ist ein Text und so;

1;test2;Das ist der zweite Text;

Unsere Quellsätze und damit auch die RichText-Felder werden als normaler String in der csv-Datei abgelegt. Das erste Feld symbolisiert einen boolschen Wert, das zweite einen normalen String, der dritte Wert sollte in das RichText-Feld.
Wir haben in der Doku keine nähere Beschreibung dieses "EditorWrapper" finden können.

Hat jemand eine Idee?

Viele Grüße

Gaby
 

0 Kudos
1 Solution

Accepted Solutions

Hallo Gaby,

ich tue mich schwer hier eine schöne Lösung für dich zu finden. So wie ich das sehe gibt es für deinen Anwendungsfall keine out-of-the-box-Lösung - was der Grund ist, dass FirstSpirit genau dafür eine umfassende Java-Api bietet. Ich finde es schwierig hier ohne Customizing weiterzukommen. Wäre für euch Projektunterstützung von unserem Professional Service eine gute Idee?

Grüße,

Hannes

View solution in original post

0 Kudos
6 Replies
pavone
I'm new here

Hallo Gaby,

müsst ihr denn den Umweg über die CSV-Datei gehen? Schon weil EditorWrapper keine offizielle API ist, rate ich davon ab.

Könntet ihr nicht einfach ein Skript ausführen, das die Datensätze in einem  Projekt ausliest und in ein anderes schreibt? Also in etwa so:

  1. Über den BrokerAgent (FirstSpirit Developer-API) einen Broker für das Projekt holen, in das geschrieben werden soll
  2. Quell- und Ziel-Datenquellen (Content2 Objekte) über StoreElementAgent (FirstSpirit Developer-API) holen
  3. Über Content2.getSchema().getSession() eine Session für die Zieldatenbank holen
  4. Über Content2.getDatasets() über alle Quelldatensätze iterieren
  5. Für jeden Datensatz über Session.createEntity eine neue Entity erzeugen und die Daten z. B. über die Entity.get- und set-Methoden übertragen. Vermutlich funktioniert sogar Entity.copyFrom()
  6. Zum Schluss noch Session.commit() aufrufen

Habe das jetzt nur gedanklich und anhand der API durchgedacht und nicht tatsächlich getestet, aber dieser Ansatz ist meine Empfehlung.

Viele Grüße

Tim

0 Kudos
reger
Returning Observer

Hallo Tim,

erstmal danke für die Antwort. Für uns wäre die csv-Datei kein Umweg, da sie im Quellprojekt sowieso erzeugt wird. Und das oben beschriebene Script hört sich sehr simpel an (und funktioniert ja auch für Strings). Das, was du beschreibst, setzt anscheinend wieder JAVA-Kenntnisse voraus, die uns leider nicht zur Verfügung stehen. Deshalb finde ich den Ansatz nicht so richtig verlockend. Und leider ist ja das DB-Handling in FS so wenig intuitiv, normalerweise sollte es ja kein großer Aufwand sein, Daten von einer DB-Quelle in eine andere gesteuert zu überführen ...

Ein anderer (Gedanken-)Ansatz fällt mir noch ein: Was passiert denn eigentlich, wenn ich die Daten auf Datenbank-Ebene (wir haben ORACLE zugrunde liegen) in die bereits bestehende Tabelle reinschiebe. Dann habe ich allerdings keine FS_ID zur Verfügung. Würde diese dann automatisch generiert, sobald ich den Satz über FS anfasse oder eher nicht funktional/defekt sein...?

Viele Grüße

Gaby

0 Kudos

Hallo Gaby,

ich versuche mich mal an einer Antwort.

Du hast in deiner letzten Antwort gefragt, was FirstSpirit machen würde, wenn du direkt in die externe Datenquelle schreibst, und ob es dann eine FS_ID gibt etc. Theoretisch könntest du die Daten extern übertragen - dabei wäre es sinnvoll, die Tabelle nicht schreibbar von FS einzubinden, dann hättest du auch keine Sorgen um eine FS_ID - die würde dann nicht existieren. Allerdings hättest du auch keine Versionierung etc - an der Stelle bin ich mir über deinen Use-Case nicht so ganz sicher.

Genau das ist auch, was mich dahin bringt zu fragen: Hast du dir schon mal ContentTransport angeschaut? Eventuell löst das dein Problem auch schon, ohne dass du programmieren musst. Hier findest du die Dokumentation für das Feature: https://docs.e-spirit.com/odfs/dokumentation/module/entwickler/CONT_DE_FirstSpirit_CorporateContent....

Besonders, wenn du nur eine initiale Befüllung machen möchtest, kann das Feature hilfreich sein. Dabei erstellst du eine zip-Datei in dem einen Projekt, und kannst die Daten dann in ein anderes importieren.

Viele Grüße,

Lena

0 Kudos
reger
Returning Observer

Hallo Lena,

eine Versionierung wäre schon sinnvoll, deshalb kommt eine externe Tabelle nicht in Frage.

ContentTransport war meine erste Wahl, aber so, wie ich das verstehe, habe ich keine Chance, die einzelnen Felder der jeweiligen Struktur anzusprechen. Also wenn ich z.B. 3 Felder A, B und C habe, nur A und B zu importieren, C wegzulassen (OK, die Spalte könnte ich ja nach dem Import löschen) oder so ganz nebenbei auch eine Datentyp-Konvertierung vorzunehmen (das ist allerdings nicht der Fokus).
Problem ist auch, dass ich die Zieltabelle schon habe und zusätzliche Sätze aus einem anderen Projekt aufnehmen möchte. Wenn man wenigstens innerhalb eines Projektes Daten von einer Tabelle in eine andere schieben könnte, wäre ich ja schon angetan....

Trotzdem: Danke für deine Tipps

Viele Grüße

Gaby

0 Kudos

Hallo Gaby,

ich tue mich schwer hier eine schöne Lösung für dich zu finden. So wie ich das sehe gibt es für deinen Anwendungsfall keine out-of-the-box-Lösung - was der Grund ist, dass FirstSpirit genau dafür eine umfassende Java-Api bietet. Ich finde es schwierig hier ohne Customizing weiterzukommen. Wäre für euch Projektunterstützung von unserem Professional Service eine gute Idee?

Grüße,

Hannes

0 Kudos
reger
Returning Observer

Hallo Hannes,

Danke für dein Feedback. Da das System leider  so unflexibel ist, wäre eine Beauftragung wahrscheinlich die richtige Lösung. Wir haben uns jetzt entschieden, die Daten in Fleißarbeit zu übernehmen. Dann wird auch direkt mal ausgemistet... 😉

Viele Grüße

Gaby

0 Kudos