Skip to main content

CSV-Import mit $REF

Comments

11 comments

  • Zendesk API User
    Author: hoebbel - 6/22/2022 13:04

    Hallo Thomas,

    ich bin mir nicht sicher, ob ich "Jetzt hat aber jeder Datensatz noch eine PDF Referenz" richtig verstehe. Ist das ein Link auf eine irgendwo liegende PDF Datei und wenn ja, was soll denn mit dem Link passieren?

    Im einfachsten Fall willst du daraus nur einen externen Link machen. Dazu musst Du entweder über das FormData des Datasets (<content2>.getDataset(<entity>)) dir die Ziel-Eingabekomponente holen und die entsprechend befüllen oder Du speicherst den Link einfach als Text in ein Textfeld und machst daraus über den Templatecode den Link (das geht auch problemlos über das Entity wie im jetzigen Skript).

    Wahrscheinlich willst Du aber zusätzlich das PDF importieren bzw. dieses liegt bereits im Media-Store. Das musst Du dir holen, in den Mediastore transferieren und dir die UID merken (bzw. die UID anhand der vorliegenden Informationen ermitteln). Mit Hilfe der UID musst Du dann eine (FS_REFERENCE) Eingabekomponente entsprechend füllen. 

    Ich hoffe, diese allgemeinen Hinweise helfen weiter
    Holger

    0
  • Zendesk API User
    Author: th_biedermann - 6/22/2022 13:55

    Hallo Holger

    Danke für dein Fedback. Ich möchte den ersten Punkt bauen.

    Im einfachsten Fall willst du daraus nur einen externen Link machen. Dazu musst Du entweder über das FormData des Datasets (<content2>.getDataset(<entity>)) dir die Ziel-Eingabekomponente holen und die entsprechend befüllen.

    Nur wie muss ich das in den Script einbauen?!?

    while ((line = reader.readLine()) != null) { if (counter > 0){ // Datensatz erzeugen Entity ent = session.createEntity(tableName); String[] fields = line.split(";"); //Semikolon ggf. durch dein CSV-Trennzeichen ersetzen // Datensatz befüllen ent.setValue("MaterialNo", Integer.parseInt(fields[0])); ent.setValue("HeadDiameter", Double.parseDouble(fields[1])); ent.setValue("DocReference", fields[2]); } counter ++;

     

    Grüsse. Thomas

    0
  • Zendesk API User
    Author: ncbruckner - 6/23/2022 13:09

    Ich habe das jetzt noch nicht in eine Entity gesetzt, deshalb keine Garantie, aber eigentlich müsste das so gehen, wenn das ein CMS_INPUT_LINK ist:

    TemplateStoreRoot templateStoreRoot = (TemplateStoreRoot) project.getUserService().getStore(Store.Type.TEMPLATESTORE, false); LinkTemplate externalLink = templateStoreRoot.getLinkTemplates().getTemplate("link_template_name"); Link newLink = externalLink.createLink(language); FormData linkFormData = newLink.getFormData(); FormField field = linkFormData.get(language, "lt_link"); field.set(fields[2]); ent.setValue("DocReference", newLink);
    0
  • Zendesk API User
    Author: th_biedermann - 8/30/2022 7:20

    Guten Tag Zusammen

    Ich nehme das Thema noch einmal auf.

    Ich kann das CSV - File einlesen und die Datenbank abfüllen.

    Was ich noch nicht hin bekommen habe, ist die Referenzen zu den PDF's und Gif's aus dem Medienstore.

    - Alle PDF und Gifs liegen bereits im MEDIASTORE

    - Es gibt eine Spalte im CVS die dem Referenznamen der PDF's und GIF's im MEDIASTORE entspricht.

    Wie kann ich jetzt eine <FS-REFERENZ> "cs_image_file_reference" erstellen lassen?

    import de.espirit.firstspirit.forms.FormData; import de.espirit.firstspirit.access.UserService; import de.espirit.firstspirit.access.store.Store; import de.espirit.firstspirit.access.store.Store.Type; import de.espirit.firstspirit.access.store.templatestore.Schema; import java.io.File; import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import javax.swing.JFileChooser; import de.espirit.or.schema.Entity; import de.espirit.or.Session; final String SCHEMA_NAME = "sfs_ctf_data"; final String TABLE_NAME = "CSVImporter"; //Auswahl der CSV Datei JFileChooser fileChooser = new JFileChooser(); fileChooser.setMultiSelectionEnabled(false); int selection = fileChooser.showOpenDialog(null); if (selection == JFileChooser.APPROVE_OPTION) { File file = fileChooser.getSelectedFile(); // Ermitteln der Session, um darüber Entities zu erzeugen UserService uss = context.getUserService(); Schema schema = uss.getTemplateStore().getSchemes().getSchemaByName(SCHEMA_NAME); Session session = schema.getSession(); String tableName = schema.getOrSchema().getEntityType(TABLE_NAME).getName(); // Auslesen der CSV Zeile pro Zeile BufferedReader reader = null; String line = ""; counter = 0; try { reader = new BufferedReader(new InputStreamReader(new FileInputStream(file))); while ((line = reader.readLine()) != null) { if (counter > 0){ // Datensatz erzeugen Entity ent = session.createEntity(tableName); String[] fields = line.split(";"); //Semikolon ggf. durch dein CSV-Trennzeichen ersetzen // Datensatz befüllen ent.setValue("MaterialNo", Integer.parseInt(fields[0])); ent.setValue("HeadDiameter", Double.parseDouble(fields[1])); /* TemplateStoreRoot templateStoreRoot = (TemplateStoreRoot) project.getUserService().getStore(Store.Type.TEMPLATESTORE, false); LinkTemplate externalLink = templateStoreRoot.getLinkTemplates().getTemplate("inline_link"); Link newLink = externalLink.createLink("de"); FormData linkFormData = newLink.getFormData(); FormField field = linkFormData.get("de", "cs_image_file_reference"); field.set(fields[2]); ent.setValue("DocReference", newLink); */ } counter ++; } session.commit(); } catch (IOException e) { //Fehler beim auslesen der Datei } finally { //Reader schließen } context.logInfo("Fertig"); } else { context.logInfo("Keine Datei gewählt"); }

     

    <FS_REFERENCE name="cs_image_file_reference" hFill="yes" useLanguages="no"> <FILTER> <HIDE type="all"/> <ALLOW type="picture"/> </FILTER> <LANGINFOS> <LANGINFO lang="*" label="Image reference"/> </LANGINFOS> <PROJECTS> <LOCAL name="."> <SOURCES> <FOLDER name="GIF" store="mediastore"/> </SOURCES> </LOCAL> </PROJECTS> </FS_REFERENCE>

    Danke und Grüsse

    Thomas

     

    0
  • Zendesk API User
    Author: ncbruckner - 8/30/2022 7:44

    Hi Thomas,

    du hast da keinen Link, sondern eine TargetReference.

    Also erst einmal über den MediaStore dein Element holen.

    Dann eine TargetReference auf dein Media-Element erstellen. https://docs.e-spirit.com/odfs/access/de/espirit/firstspirit/access/editor/value/TargetReference.TargetReferences.html

    static TargetReference newInstance(Language language) Create a new empty TargetReference. static TargetReference newInstance(Language language, IDProvider reference, String remoteName) Create a new TargetReference. static TargetReference newInstance(Language language, String uid, IDProvider.UidType uidType, String remoteName) Create a new TargetReference.

    Die TargetReference ist dann das Element, das du in dein field setzen musst.

    Hilft das weiter?

    0
  • Zendesk API User
    Author: th_biedermann - 8/30/2022 8:23

    Hallo

    Danke schon mal für deinen Input. Ich bin Anfänger und tu mich im moment noch schwer damit.

    Wie kann ich das Element aus dem MediaStore holen?

    Wie setze ich das TargetReference in das Feld?

    Sorry und Grüsse. Thomas

    0
  • Zendesk API User
    Author: ncbruckner - 8/30/2022 10:12
    MediaStoreRoot mediaStoreRoot = (MediaStoreRoot) project.getUserService().getStore(Store.Type.MEDIASTORE, false); Media media = mediaStoreRoot.getMediaByUid(filename); TargetReference targetReference = TargetReference.TargetReferences.newInstance(null, media, null); en.set("wasauchimmer", targetReference);

    Keine Ahnung, wie das Feld in deiner Entity heißt. Beim Schreiben in die Entity bin ich mir nicht sicher, das mache ich normalerweise nicht.

    0
  • Zendesk API User
    Author: th_biedermann - 8/31/2022 7:51

    Ein bisschen weiter sind wir gekommen

    Jetzt stehen wir aber definitiv an. Folgende Fehlermeldung wir geschmissen.

    Client Version: 5.2.191006.78608 Java Version: 11.0.4 AdoptOpenJDK FSVersion=5.2.191006.78608#5484;JDK=11.0.4 64bit AdoptOpenJDK;OS=Windows 10 10.0 amd64;Date=31.08.2022 08:49:54 de.espirit.firstspirit.access.script.ExecutionException: Method Invocation ent.setValue : at Line: 53 : in file: inline evaluation of: ``__execute() { import de.espirit.firstspirit.forms.FormData; import de.espirit.fi . . . '' : ent .setValue ( "DocReference" , targetReference ) Target exception: java.lang.IllegalArgumentException: de.espirit.or.SchemaException: illegal type class de.espirit.firstspirit.access.editor.value.TargetReferenceImpl for attribute 'DocReference' - correct type is class de.espirit.firstspirit.client.editorcomponent.EditorWrapper at line 53 at de.espirit.firstspirit.server.script.BeanshellScriptEngine$BeanshellExecutable.execute(BeanshellScriptEngine.java:109) at de.espirit.firstspirit.server.script.PermissionsScriptEngine$PermissionsExecutable.lambda$execute$1(PermissionsScriptEngine.java:83) at java.base/java.security.AccessController.doPrivileged(Native Method) at de.espirit.firstspirit.server.script.PermissionsScriptEngine$PermissionsExecutable.execute(PermissionsScriptEngine.java:88) at de.espirit.firstspirit.server.script.PermissionsScriptEngine$PermissionsExecutable.execute(PermissionsScriptEngine.java:83) at de.espirit.firstspirit.client.gui.applications.ApplicationTabRegistry$IdentifiableExecutable.execute(ApplicationTabRegistry.java:114) at de.espirit.firstspirit.common.ScriptUtil.execute(ScriptUtil.java:106) at de.espirit.firstspirit.common.ScriptUtil.executePrivileged(ScriptUtil.java:158) at de.espirit.firstspirit.common.ScriptUtil.access$000(ScriptUtil.java:31) at de.espirit.firstspirit.common.ScriptUtil$2.run(ScriptUtil.java:145) at de.espirit.firstspirit.client.gui.util.GuiUtil$RunnableWrapper.run(GuiUtil.java:1994) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.base/java.lang.Thread.run(Unknown Source) Caused by: java.lang.IllegalArgumentException: de.espirit.or.SchemaException: illegal type class de.espirit.firstspirit.access.editor.value.TargetReferenceImpl for attribute 'DocReference' - correct type is class de.espirit.firstspirit.client.editorcomponent.EditorWrapper at de.espirit.or.impl.EntityImpl.setValue(EntityImpl.java:891) at de.espirit.or.impl.EntityImpl.setValue(EntityImpl.java:283) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.base/java.lang.reflect.Method.invoke(Unknown Source) at bsh.Reflect.invokeMethod(Reflect.java:185) at bsh.Reflect.invokeObjectMethod(Reflect.java:118) at bsh.Name.invokeMethod(Name.java:858) at bsh.BSHMethodInvocation.eval(BSHMethodInvocation.java:75) at bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:102) at bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:47) at bsh.BSHBlock.evalBlock(BSHBlock.java:130) at bsh.BSHBlock.eval(BSHBlock.java:80) at bsh.BSHBlock.eval(BSHBlock.java:46) at bsh.BSHIfStatement.eval(BSHIfStatement.java:48) at bsh.BSHBlock.evalBlock(BSHBlock.java:130) at bsh.BSHBlock.eval(BSHBlock.java:80) at bsh.BSHBlock.eval(BSHBlock.java:46) at bsh.BSHWhileStatement.eval(BSHWhileStatement.java:78) at bsh.BSHBlock.evalBlock(BSHBlock.java:130) at bsh.BSHBlock.eval(BSHBlock.java:80) at bsh.BSHBlock.eval(BSHBlock.java:46) at bsh.BSHTryStatement.eval(BSHTryStatement.java:88) at bsh.BSHBlock.evalBlock(BSHBlock.java:130) at bsh.BSHBlock.eval(BSHBlock.java:80) at bsh.BSHBlock.eval(BSHBlock.java:46) at bsh.BSHIfStatement.eval(BSHIfStatement.java:48) at bsh.BSHBlock.evalBlock(BSHBlock.java:130) at bsh.BSHBlock.eval(BSHBlock.java:80) at bsh.BshMethod.invokeImpl(BshMethod.java:371) at bsh.BshMethod.invoke(BshMethod.java:267) at bsh.BshMethod.invoke(BshMethod.java:170) at bsh.PreparsedScript.invoke(PreparsedScript.java:66) at de.espirit.firstspirit.server.script.BeanshellScriptEngine$BeanshellExecutable.execute(BeanshellScriptEngine.java:100) ... 13 more Caused by: de.espirit.or.SchemaException: illegal type class de.espirit.firstspirit.access.editor.value.TargetReferenceImpl for attribute 'DocReference' - correct type is class de.espirit.firstspirit.client.editorcomponent.EditorWrapper at de.espirit.or.impl.schema.EntityTypeImpl.getAttribute(EntityTypeImpl.java:181) at de.espirit.or.impl.EntityImpl.setValue(EntityImpl.java:884) ... 47 more

    Irrgend eine Idee?

    DANKE und Grüsse

    Thomas

    0
  • Zendesk API User
    Author: ncbruckner - 8/31/2022 17:11

    Kannst du mir mal den Ausschnitt aus dem Formular für die Datenquelle zeigen, aus dem die Entity kommt und da das Feld, wo du die Referenz reinsetzen willst?

    0
  • Zendesk API User
    Author: th_biedermann - 8/31/2022 19:16

     

    <CMS_MODULE> <CMS_INPUT_NUMBER name="cs_material_no" hFill="yes" singleLine="no" useLanguages="no"> <LANGINFOS> <LANGINFO lang="*" label="Material Number" format="000"/> </LANGINFOS> </CMS_INPUT_NUMBER> <CMS_INPUT_NUMBER name="cs_head_diameter" type="double" hFill="yes" singleLine="no" useLanguages="no"> <LANGINFOS> <LANGINFO lang="*" label="Head diameter" format="0.00"/> </LANGINFOS> </CMS_INPUT_NUMBER> <FS_REFERENCE name="cs_document_file_reference" hFill="yes" useLanguages="no"> <FILTER> <HIDE type="all"/> <ALLOW type="file"/> </FILTER> <LANGINFOS> <LANGINFO lang="*" label="Document reference"/> </LANGINFOS> <PROJECTS> <LOCAL name="."> <SOURCES> <FOLDER name="PDF" store="mediastore"/> </SOURCES> </LOCAL> </PROJECTS> </FS_REFERENCE> <FS_REFERENCE name="cs_image_file_reference" hFill="yes" useLanguages="no"> <FILTER> <HIDE type="all"/> <ALLOW type="picture"/> </FILTER> <LANGINFOS> <LANGINFO lang="*" label="Image reference"/> </LANGINFOS> <PROJECTS> <LOCAL name="."> <SOURCES> <FOLDER name="GIF" store="mediastore"/> </SOURCES> </LOCAL> </PROJECTS> </FS_REFERENCE> </CMS_MODULE>

     

     

    0
  • Zendesk API User
    Author: th_biedermann - 10/26/2022 14:32

    Hallo zusammen

    Hat hier jemand einen Tipp wie ich das Problem lösen kann

    DANKE und Grüsse

    Thomas

    0

Please sign in to leave a comment.