Search the FirstSpirit Knowledge Base
Hallo FS-Community,
ich könnte bei folgender Frage eure Hilfe gebrauchen:
Gibt es eine Möglichkeit, innerhalb der Access-API bei einer FS_INDEX auf basis eines "DatasetDataAccessPlugin" abzufragen, mit welchem Tabellen-Template gearbeitet wird?
Hier einwenig Source-Code, damit verständig wird worum es mir geht:
Template template = // hier hole ich mir mein Template
GomElement gomElement = template.findEditor("pt_feldname");
GomIndex indexForm = (GomIndex) gomElement;
GomIndexSource source = indexForm.source();
DatasetDataAccessSession session = (DatasetDataAccessSession) source.createSession(broker, false);
TableTemplate tableTemplate = session.????
Hintergrund:
Ich arbeite grade an einem Importer der recht generisch aufgebaut ist.
Ich besitze während des Ablaufs die Information in welches Feld ich imporiere will (in diesem Fall eine wie oben beschriebene FS-Index) und der Wert der importiert werden soll.
Anhand des Wertes würde ich je Tabellen-Template dann eine entsprechende Funktion vorsehen, mit der ein passendes Dataset gefunden und hinterlegt werden könnte.
Leider habe ich keinen Weg gefunden dies so zu realisieren, da die Information welches Tabellentemplate zugrundeliegt fehlt.
Wäre für eure Hilfe echt dankbar
Gruß,
Christopher
Hi Christopher,
mir fällt gerade noch ein (wohl ziemlich bescheuerter) Workaround ein: Wenn du dir über den DataStream nur ein Element holst, erhältst du ja ein Dataset. Jedes Dataset bietet direkten Zugriff auf das verwendete TableTemplate. Und da es in einem Index immer nur eines geben kann ...
Beste Grüße
Stefan
Hi Christopher,
zuerst die schlechte Nachricht: Es gibt keinen öffentlichen Weg, um die gewünschte Information zu erhalten.
Um zu klären, was du überhaupt erreichen möchtest: Wie genau muss ich mir das "passendes Dataset" finden vorstellen? Welche Information (welcher Wert) steht dir denn beim Import zur Verfügung?
Beste Grüße
Stefan
Hallo Stefan,
doofe Frage meinerseits: Wäre es möglich den unöffentlichen Weg offiziel zu machen?
Hier ein Beispiel um die Ausgangssituation zu veranschaulichen:
Es gibt zwei Datenquellen: Autoren und Schlagworte.
Autoren hat folgende Spalten:
FS_ID, External_ID (PK aus einem dritt System), Vorname, Nachname, Wohnort
Schalgworte hat folgende Spalten:
FS_ID, Wert
Wenn beim import ein Autor referenziert werden soll, erhalte ich die "External_ID" und könnte via Query den entsprechenden Datensatz der eingefügt werden soll ermitteln.
Wenn beim import ein Schlagwort aus der entsprechenden Datenquelle referenziert werden kann, würde dies ebenfalls über eine Query funktionieren (halt nur auf Basis einer anderen Tabelle und einer anderen Spalte).
Der Importer könnte also die selben Code nutzen, solange ich die "Beschaffe mir den passenden Datensatz" für die entsprechenden Tabellen-Tempaltes bzw. Entitäten ausdefiniere. Dies geht aber nur, wenn die FS-Index diese Information verfügbar machen würde.
Der von mir geschriebene Importer kann das bislang mit jeder Eingabekomponente erreichen, da bei Auswahl-Komponenten (CMS_INPUT_CHECKBOX|RADIOBUTTON etc.) die Liste an Auswahlmöglichkeiten abfragbar ist. Dies ist leider bei der FS_INDEX nicht der Fall.
Gruß,
Christopher Kozielski
Hallo Christopher,
Christopher Kozielski schrieb:
doofe Frage meinerseits: Wäre es möglich den unöffentlichen Weg offiziel zu machen?
das ist leider nicht einfach möglich.
Der von mir geschriebene Importer kann das bislang mit jeder Eingabekomponente erreichen, da bei Auswahl-Komponenten (CMS_INPUT_CHECKBOX|RADIOBUTTON etc.) die Liste an Auswahlmöglichkeiten abfragbar ist. Dies ist leider bei der FS_INDEX nicht der Fall.
Auch bei der FS_INDEX kommt man an die Liste möglicher Werte. Man kann diese sogar filtern (wobei dies nur teilweise API ist).
Wenn du auf die Tabellenvorlage zugreifen möchtest, gehst du ja schon davon aus, dass die FS_INDEX über ein DatasetDataAccessPlugin befüllt wird. Die Arbeitsweise des DataAccessPlugins als Quelle für die FS_INDEX ist allerdings so, dass der Zugriff auf dessen Inhalte generisch ist und die Eingabekomponente nichts über dessen Implementierung wissen muss. Innerhalb der UI besteht die Möglichkeit, eine Auswahl existierender Einträge zu treffen. Für den Zugriff auf diese Auswahl gibt es die DataStream-API.
Ausgehend von der DataAccessSession, die du ja schon erzeugt hast, kannst du über den DataStreamBuilder einen solchen DataStream erstellen und (iterativ) die verfügbaren Einträge aus der Datenquelle abfragen. Als Eintrag erhält man Objekte vom Datentyp des Plugins, beim DatasetDataAccessPlugin sind dies Datasets.
Über den DataStreamBuilder kann man auf den optional vorhandenen Aspekt Filterable zugreifen, der vom DatasetDAP auch angeboten wird. Hierüber kann man den gelieferten DataStream dann filtern, so dass du nur eine eingeschränkte Menge an Daten abfragen musst. Ob das für deine Werte funktioniert, kannst du über den Auswahldialog der FS_INDEX UI ausprobieren, wo der Filter als Suchfeld angezeigt wird. Um den Filter zu nutzen, muss man den richtigen Parameter verwenden. Das Filterable liefert dir eine Liste verfügbarer Parameter. Und ab hier benötigt man ein wenig Wissen über den Parameter, um diesen ansteuern zu können. Dieses Wissen (Name des Parameters) ist dann nicht wirklich API.
Aktuell unterstützt das DatasetDataAccessPlugin nur einen Parameter vom Typ ParameterText, der offensichtlich für freie Anfragen gedacht ist. Somit ist das zumindest aktuell einfach, den Parameter zu bestimmen. Das kann sich aber zukünftig ändern (auch wenn aktuell nichts geplant ist).
Ich hoffe, dies hilft dir, eine mögliche Lösung für dein Szenario zu finden.
Beste Grüße
Stefan
Hallo Stefan,
danke für die schnelle Rückmeldung sowie die ausführliche Erklärung.
Der von dir aufgezeichnete Lösungsweg ist interessant, jedoch für meinen Anwendungsfall eher weniger geeignet, da ich mit dieser Art der Filterung nicht so konkret die Auswahl einschränken könnte, wie es die Anforderung vorsehen.
Das die FS-Index generischer konzipiert wurde verstehe ich und das ist auch eine tolle Sache.
Jedoch verstehe ich nicht ganz warum die Information nicht zur Verfügung gestellt werden kann.
Die Frage ist ja nicht "ist es möglich mit jedem DAP eine Session zur Verfügung zu stellen die ein Tabellen-Template zur Verfügung stellt (was in der Tat quatsch wäre, da nicht alle DAPs die Datenquelle von FirstSpirit anbinden), sondern ob konkret das DatasetDataAccessPlugin diese Information ausgeben könnte.
Leider ist das Plugin so geschrieben, dass es nicht leicht überschrieben und somit erweitert werden könnte.
Ansonsten ist die Anfrage meiner Meinung nach legitim:
Die Konfiguration die an einer Eingabekomponente hinterlegt wurde sollte via API abgefragt werden können.
Die Information ist weder Geheim, noch müsste die Information aufwädnig beschaffen werden (da sie schon vorliegt), noch ist davon auszugehen das in Zukunft gänzlich die Eingabe-Komponente ohne diese Information auskommen wird.
Wäre es möglich den API-Aufruf offiziel zu machen oder genau zu erklären, warum dies nicht möglich ist?
Gruß,
Christopher
Christopher Kozielski schrieb:
Der von dir aufgezeichnete Lösungsweg ist interessant, jedoch für meinen Anwendungsfall eher weniger geeignet, da ich mit dieser Art der Filterung nicht so konkret die Auswahl einschränken könnte, wie es die Anforderung vorsehen.
Ok. Schade.
Ansonsten ist die Anfrage meiner Meinung nach legitim:
Die Konfiguration die an einer Eingabekomponente hinterlegt wurde sollte via API abgefragt werden können.
Die Information ist weder Geheim, noch müsste die Information aufwädnig beschaffen werden (da sie schon vorliegt), noch ist davon auszugehen das in Zukunft gänzlich die Eingabe-Komponente ohne diese Information auskommen wird.
Wäre es möglich den API-Aufruf offiziel zu machen oder genau zu erklären, warum dies nicht möglich ist?
Ich schrieb ja nicht, dass es nicht möglich ist. Aktuell gibt es dort keine API. Die Konfigurationsinformationen eines Plugins werden zurzeit ausschließlich im Plugin selbst verwendet. Da ein Plugin seine eigene Implementierung kennt, kann es mit diesen Informationen arbeiten. Will man diese Informationen nach außen bereitstellen, so muss entsprechende API geschaffen werden. Das passiert aber nur dann, wenn eine entsprechend große Anfrage danach existiert.
Was du also machen kannst:
Sorry, dass ich dir nicht mehr anbieten kann.
Beste Grüße
Stefan
Hi Christopher,
mir fällt gerade noch ein (wohl ziemlich bescheuerter) Workaround ein: Wenn du dir über den DataStream nur ein Element holst, erhältst du ja ein Dataset. Jedes Dataset bietet direkten Zugriff auf das verwendete TableTemplate. Und da es in einem Index immer nur eines geben kann ...
Beste Grüße
Stefan