- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
FS_CATALOG copy Funktion
Hallo Community,
wir wรผrden gerne in der Komponente FS_CATALOG eine copy Funktion nutzen.
Also den vorher eingepflegten Datensatz kopieren und einfรผgen um auf dem alten Datenbestand aufzusetzen.
Geht das รผberhaupt und wenn Ja wie?
Gruร und Danke
David
- Labels:
-
Developers
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hallo David,
soweit ich weiร, bietet die FS_CATALOG-Komponente nur die Mรถglichkeit, Eintrรคge neu zu erstellen, zu bearbeiten und zu lรถschen, aber nicht zu kopieren. Auch eine Erweiterung der Komponente ist meines Wissens nach nicht mรถglich.
Evtl. besteht รผber einen FS_BUTTON und die Verwendung der API ein Weg, der Komponente eine Kopie eines Eintrags hinzuzufรผgen. Das weiร ich aber nicht und wรคre lediglich eine Idee.
Viele Grรผรe
Michaela
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hallo David,
ist diese Frage noch offen? Benรถtigst du noch weitere Hilfe oder konnte Michaela dir bereits weiterhelfen?
In diesem Fall wรคre es super, wenn du ihre "richtige Antwort" entsprechend markierst.
Solltest du selbst eine Lรถsung gefunden haben, wรคre es toll, wenn du sie hier bereitstellst.
Viele Grรผรe,
Sebastian
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi,
offen ist die Frage zwar nicht, ganz glรผcklich bin ich allerdings mit der Antwort auch nicht.
Die FS_CATALOG Komponente soll ja zukรผnftig anstatt der FS_LIST Komponente verwendet werden.
Wieso wird eine neue Komponente implementiert und vom Funktionsumfang komplett beschnitten?
Mfg
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hallo David,
der FS_CATALOG ersetzt zukรผnftig die FS_LIST vom Typ Inline. Laut dem ODFS war es fรผr diesen FS_LIST-Typ auch bisher nicht mรถglich, Eintrรคge zu kopieren. Demnach scheint keine Einschrรคnkung des Funktionsumfangs mit der Neuimplementierung zu erfolgen.
Viele Grรผรe
Michaela
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Michaela,
Danke fรผr das Feedback. Die FS_INDEX Komponente soll doch die FS_LIST Komponente vom Typ Database ersetzte?
ISt das richtig? Diese hat alledings auch keine copy Funktion mehr oder รผbersehe ich etwas?
Gruร und Danke
David
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hallo David,
vielleicht solltest Du uns den Anwendungsfall nรคher erlรคutern. Warum muss etwas kopiert werden und wie?
In dem Fall von Beziehungen zwischen Datensรคtzen (oder Objekten) sollte man die Kopierfunktion selbst implementieren, da man einen Deep-Copy implementieren muss, um nicht via Referenzen dann bestimmte Inhalte gemeinsam zu nutzen, wo das nicht ggf. gewollt ist oder auch aus Grรผnden der Datensicherheit nicht passieren darf (Datenschutz lasse ich jetzt mal weg). Bei flachen Strukturen mit Basistypen wie Zeichenketten, numerische Werte sowie Wahrheitswerten ist das natรผrlich kein Problem. Auch 1:N ist kein Problem, aber bei 1:1 und M:N fรคngt es schon an. Es muss also nicht nur der ausgewรคhlte Datensatz kopiert werden, sondern eine ganze Beziehungsstruktur darunter.
Ich halte die o.g. Lรถsung mittels FS_BUTTON und eigner Executable mit Implementierung einer Kopierfunktion des konkreten Anwendungsfalls fรผr die beste in dem Zusammenhang. Eine allgemeine, automatische Kopierfunktion ist wie oben beschrieben gefรคhrlich, da die den Einzelfall nicht betrachtet und kann im schlimmsten Fall zu Datenverlust fรผhren (vor allem beim Lรถschen, aber ist eigentlich noch ein weiteres Thema). Sollten die alten Kopierfunktionen nicht mehr existieren, dann kรถnnten diese รberlegungen im Hintergrund stehen. Das ist kein FS-Problem, sondern eine allgemeine Problematik bei Beziehungen von Datenbanken und Objekten untereinander.
Ich hoffe ich konnte etwas zum Verstรคndnis beitragen.
Grรผรe
Marian
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hallo David,
ja, laut dem ODFS soll die FS_INDEX-Komponente weitgehend die FS_LIST vom Typ Database ersetzen. In den ReleaseNotes ist dazu der Hinweis zu finden, dass die neuen Eingabekomponenten bewusst nicht funktionsรคquivalent zur FS_LIST sind.
Nach einem Blick auf die Beschreibung der FS_LIST im ODFS fรผr FS 5.1 scheint die Copy-Funktion tatsรคchlich entfallen zu sein. Ob dies bewusst geschehen ist oder es sich potentiell um einen Bug handeln kรถnnte, kann ich aktuell leider nicht beurteilen. Ich wรผrde dich daher bitten, dich diesbzgl. an unseren Technical Support zu wenden.
Viele Grรผรe
Michaela
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hallo David,
benรถtigst Du noch weitere Hilfe oder haben Dir die Antworten von Michaela und Marian bereits geholfen?
In diesem Fall wรคre es super, wenn Du die "richtige Antwort" entsprechend markierst, damit auch andere
Community-Teilnehmer diese auf den ersten Blick finden. Solltest Du zwischenzeitlich eine eigene Lรถsung
gefunden haben, wรคre es nett, wenn Du diese hier bereitstellst.
Viele Grรผรe,
Philipp
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hey,
also ich habe genau diese Funktion mittels FS_BUTTON realisiert, wobei ich zusรคtzlich noch die Mรถglichkeit biete auf einer anderen Seite ein Absatzelement (bzw. die Referenz-ID) aus einem FS_CATALOG in die Zwischenablage (Clipboard) zu kopieren und dann an anderer Stelle genau solch ein Element einzufรผgen/neu zu erstellen.
In meinem Fall haben alle Absรคtze einen Titel "st_headline" den ich fรผr das Auswahlfeld benรถtige.
Hier der Quelltext fรผr die Kopierfunktion. Wer ebenfalls das Script zum Einfรผgen braucht, kann sich hier wieder melden.
//! Beanshell
// ### Imports ###
import de.espirit.firstspirit.access.Language;
import de.espirit.firstspirit.access.script.Executable;
import de.espirit.firstspirit.access.script.ExecutionException;
import de.espirit.firstspirit.client.access.editor.lists.CatalogImpl;
import de.espirit.firstspirit.forms.FormData;
import de.espirit.or.schema.Entity;
import de.espirit.or.Session;
import java.awt.datatransfer.StringSelection;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import javax.swing.JOptionPane;
// ### Methoden ###
// Dialog zur Auswahl des zu erstellenden Inhaltselements
String selectContentElementDialog(String[] options) {
return response = (String) JOptionPane.showInputDialog(null, "Inhaltselement wรคhlen:", "Kopieren", JOptionPane.QUESTION_MESSAGE, null, options, options[0]);
}
// Daten in die Zwischenablage speichern
void copyElementToClipboard(String elementUid) {
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(
new StringSelection(elementUid), null
);
}
// ### Variables ###
ArrayList log = new ArrayList<String>();
StringBuffer message = new StringBuffer();
CatalogImpl elements = elements.get(); // FS_CATALOG "st_elements"
// ### Start ###
Map<String> elementList = new HashMap<String>();
for(element : elements) {
elementList.put(element.getItem().get(language, "st_headline").get(), element.getId().toString());
//message.append("\nElement: " + element.getItem().get(language, "st_headline").get() + " -> UID: " + element.getId());
}
String[] values = new String[elementList.size()];
int index = 0;
for(mapEntry : elementList.entrySet()) {
values[index] = mapEntry.getKey();
index++;
//message.append("\nKey: " + mapEntry.getKey() + "\nValue: " + mapEntry.getValue());
}
// Dialog zur Auswahl des Inhaltselements mit den aktuellen FS_CATALOG "st_elements" Elementen
String selectedElement = selectContentElementDialog(values);
// Referenz-ID (UID) des Elements holen
String elementUid = elementList.get(selectedElement);
// Referenz-ID (UID) des ausgewรคhlten Inhaltselement in die Zwischenablage kopieren
if(elementUid != null && !"".equals(elementUid.toString())) {
message.append("\nElement befindet sich in der Zwischenablage: \n\"" + selectedElement + "\""); // \nUID [" + elementUid + "]");
copyElementToClipboard(elementUid.toString());
}
// Erfolgsmeldung
if(!"".equals(message.toString())) {
JOptionPane.showMessageDialog(null, message.toString(), "Kopieren", JOptionPane.INFORMATION_MESSAGE);
} else { // Fehlermeldung
JOptionPane.showMessageDialog(null, message.toString(), "Kopieren", JOptionPane.ERROR_MESSAGE);
}
Zur Info: BeanShell "button_copy_element_to_clipboard" als Script anlegen und dann via FS_BUTTON aufrufen.
Hier nun die beiden Felder samt Einfรผgen Button mit gesondertem Script:
<FS_CATALOG name="st_elements" height="10" useLanguages="no">
<LANGINFOS>
<LANGINFO lang="*" label="Inhaltselemente" description="Inhaltselemente"/>
</LANGINFOS>
<TEMPLATES type="section">
<TEMPLATE uid="contentarea"/>
<TEMPLATE uid="content_element_headline"/>
<TEMPLATE uid="content_element_text"/>
<TEMPLATE uid="content_element_image"/>
</TEMPLATES>
</FS_CATALOG>
<FS_BUTTON
name="st_copy_element"
alwaysEnabled="yes"
hFill="yes"
icon="fs:edit"
noBreak="no"
onClick="script:button_copy_element_to_clipboard"
style="button"
useLanguages="no">
<LANGINFOS>
<LANGINFO lang="*" label="Element kopieren" description="Element kopieren"/>
</LANGINFOS>
<PARAMS>
<PARAM name="elements">#field.st_elements</PARAM>
</PARAMS>
</FS_BUTTON>
<FS_BUTTON
name="st_add_element"
alwaysEnabled="yes"
hFill="yes"
icon="fs:new"
noBreak="no"
onClick="script:button_add_contentelement"
style="button"
useLanguages="no">
<LANGINFOS>
<LANGINFO lang="*" label="Erweitertes Element hinzufรผgen" description="Erweitertes Element hinzufรผgen"/>
</LANGINFOS>
<PARAMS>
<PARAM name="elements">#field.st_elements</PARAM>
<PARAM name="name">#field.st_headline</PARAM>
</PARAMS>
</FS_BUTTON>

