Search the FirstSpirit Knowledge Base
Hallo,
in der Community gibt es einige Beiträge zum Thema Rules & ValueService. Gerade der ValueService scheint mir leider kaum dokumentiert zu sein. Mir ist daher nicht klar, wie man von einem ValueService auf den aktuellen Inhalt zugreifen kann. Gibt es irgendwo eine Beschreibung oder ein Beispiel? Kann mir jemand einen Tipp geben?
Grundsätzlich scheint es ja möglich zu sein:
"Innerhalb des Dienstes steht ein SpecialistBroker zur Verfügung, über den der Zugriff auf die üblichen Inhalte von FirstSpirit möglich ist."
https://community.e-spirit.com/message/16742#16742
Der SpecialistsBroker in ValueService.getValue() ist vom Typ "GuiHostDelegatingSpecialistsBroker", den ich wiederum nicht in der API finden kann.
Wie geht es hier weiter? Ziel ist es weitere Informationen aus dem aktuellen Inhalt zu lesen.
Vielen Dank
Thomas Radigewski
Hallo Herr Radigewski,
das ist leider aktuell meines Wissens nach nicht möglich. Der ValueService hat nur die Informationen, die über Parameter hineinkommen: Also fixe Werte oder zugreifbare <PROPERTY>s. Und hier gibt es aktuell nur Properties, die zwar Informationen über das aktuelle StoreElement liefern - z.B. dessen Typ mit <PROPERTY source="#global" name="ELEMENTTYPE" />, aber nichts mit dem das konkrete Element identifiziert werden könnte.
Über den SpecialisBroker (bzw. einen Agent, den dieser liefern könnte) bekommen Sie im JavaClient leider auch überhaupt keine Informationen über den Element-Kontext...
Eine Möglichkeit, zumindest die aktuelle Seitenreferenz zu erhalten gibt es lediglich in WebEdit, da der SpecialistsBroker hier einen WebeditUiAgent liefern kann, den man dann per getPreviewElement() danach fragen kann. Ich habe mal ein Beispiel getestet, in dem die UID der entsprechenden Seitenreferenz zurückgeliefert und in ein INPUT_TEXT geschrieben wird:
public Object getValue(SpecialistsBroker specialistsBroker, Map<String, ?> stringMap) {
WebeditUiAgent agent=specialistsBroker.requestSpecialist(WebeditUiAgent.TYPE);
if(agent==null) {
return "No Agent there";
} else {
return agent.getPreviewElement().getUid();
}
}
Viele Grüße
Michael Bergmann
Hallo Her Radigewski,
um welche Informationen geht es genau? Werte von Eingabekomponenten desselben Formulars müssten Sie als Parameter übergeben:
<ON_EVENT>
<SCHEDULE service="NAME_DER_PUBLIC_KOMPONENTE" id="1" delay="200">
<CONDITION>
...
</CONDITION>
<PARAM name="myHeadline">
<PROPERTY source="st_headline" name="VALUE"/>
</PARAM>
</SCHEDULE>
<DO>
...
</DO>
</ON_EVENT>
... und dann im ValueService darauf zugreifen:
public Object getValue(final SpecialistsBroker broker, final Map<String, ?> params) {
String headline=(String) params.get("myHeadline");
...
}
Viele Grüße
Michael Bergmann
Ich möchte z.B. wissen, ob der aktuelle Absatz in einem Inhaltsbereich oder in einer FS_LIST angelegt wurde.
Hallo Herr Radigewski,
das ist leider aktuell meines Wissens nach nicht möglich. Der ValueService hat nur die Informationen, die über Parameter hineinkommen: Also fixe Werte oder zugreifbare <PROPERTY>s. Und hier gibt es aktuell nur Properties, die zwar Informationen über das aktuelle StoreElement liefern - z.B. dessen Typ mit <PROPERTY source="#global" name="ELEMENTTYPE" />, aber nichts mit dem das konkrete Element identifiziert werden könnte.
Über den SpecialisBroker (bzw. einen Agent, den dieser liefern könnte) bekommen Sie im JavaClient leider auch überhaupt keine Informationen über den Element-Kontext...
Eine Möglichkeit, zumindest die aktuelle Seitenreferenz zu erhalten gibt es lediglich in WebEdit, da der SpecialistsBroker hier einen WebeditUiAgent liefern kann, den man dann per getPreviewElement() danach fragen kann. Ich habe mal ein Beispiel getestet, in dem die UID der entsprechenden Seitenreferenz zurückgeliefert und in ein INPUT_TEXT geschrieben wird:
public Object getValue(SpecialistsBroker specialistsBroker, Map<String, ?> stringMap) {
WebeditUiAgent agent=specialistsBroker.requestSpecialist(WebeditUiAgent.TYPE);
if(agent==null) {
return "No Agent there";
} else {
return agent.getPreviewElement().getUid();
}
}
Viele Grüße
Michael Bergmann
Hallo,
ist an dieser Stelle noch weitere Hilfe gewünscht oder konnten Michaels Antworten die Frage bereits lösen? In diesem Fall wäre es super, wenn die "richtige Antwort" entsprechend ausgewählt werden würde.
Viele Grüße
Michaela
Hallo,
zum Eintrag von Herrn Bergmann:
Für die JavaClient funktioniert es über den UIStoreAgent siehe:
UIStoreAgent uiStoreAgent = specialistsBroker.requestSpecialist(UIStoreAgent.TYPE);
// JavaClient.
if (uiStoreAgent != null)
{
GuiStoreElement activeUiElement = uiStoreAgent.getActiveUiElement();
if (activeUiElement != null)
{
System.out.println("Debug id:" + activeUiElement.getId());
System.out.println("Debug storeElement:" + activeUiElement.getStoreElement());
}
}
Grüße
Martin Dirlewanger
Bitte Vorsicht, der UIStoreAgent ist keine API!
Gruß
Stefan
Hallo Herr Dirlewanger,
das API-Pendant zu dem NICHT-API-Weg über UiStoreAgent ist der folgende Weg:
Registrierung eines ModelListeners für den Modeltyp SelectionModel#EDITORIAL auf dem ModelService
Gruß
Hallo zusammen,
gibt es noch ein anderen Weg, als über den ModelListener?
Ich habe mich an diesem Beispiel orientiert: https://community.e-spirit.com/ideas/1292#comment-3140.
Jedoch reicht die Einbindung der fs-access.jar dann nicht aus, und die Einbindung der fs-lib-client.jar ist doch nicht gewollt, oder sehe ich das falsch?
Gruß Sabrina
Hallo Sabrina,
kannst du mit dieser Frage bitte ein neues Posting eröffnen und in ihm lediglich auf dieses Posting verweisen?
Da dieses Posting zwei Jahre alt ist und bereits eine "richtige Antwort" besitzt, wird deine Frage sonst potentiell nicht wahrgenommen. Ein neu eröffnetes Posting vermeidet dies.
Danke und viele Grüße
Michaela