pschulz
I'm new here

Innerhalb eines GomIncludeValueProvider den angemeldeten User abfragen

Jump to solution

Moin,

ich habe einen GomIncludeValueProvider implementiert.

Der funktionier soweit auch ganz gut.

Nun würde ich aber gerne innerhalb der Methode "public List<T> getValues(SpecialistsBroker broker)"

den angemeldeten User abfragen, um damit dann die zurückzugebende Liste einzuschränken.

Wenn ich in dieser Methode folgende Zeile einfüge

UserService service = broker.requireSpecialist(ServicesBroker.TYPE).getService(UserService.class);

bekomme ich im FirstSpirit-Client folgende Fehlermeldung:

"Fehler in der Vorlage 'xxx'. Der ausgewählte Inhalt kann nicht angezeigt werden.

Grund: Der Service 'de.espirit.firstspirit.access.UserService' ist nicht gestartet."

Was mache ich falsch?

Gruß

Peter

0 Kudos
1 Solution

Accepted Solutions
Peter_Jodeleit
Crownpeak employee

"UserService" ist nicht über den "ServicesBroker" erreichbar, die Fehlermeldung ist da tatsächlich verwirrend.

Den aktuellen Benutzer bekommst du so:

User user = broker.requireSpecialist(UserAget.TYPE).getUser();

Gruß, Peter


Peter

View solution in original post

0 Kudos
13 Replies
Peter_Jodeleit
Crownpeak employee

"UserService" ist nicht über den "ServicesBroker" erreichbar, die Fehlermeldung ist da tatsächlich verwirrend.

Den aktuellen Benutzer bekommst du so:

User user = broker.requireSpecialist(UserAget.TYPE).getUser();

Gruß, Peter


Peter
0 Kudos

Hi Peter,

besten Dank!

So passt es.

Gruß

Peter

0 Kudos

Hallo,

wir haben jetzt das Problem dass wir den User zwar erhalten - sobald wir diesen verwenden aber nicht wie erwartet

"de.espirit.firstspirit.access.store.templatestore.gom.GomIncludeOptions$GenericOption" von einer CMS_INPUT_COMBOBOX bekommen.

Sobald man das User-Objekt verwendet bekommt man hier "de.espirit.firstspirit.access.editor.value.SimpleOption" und damit als value nur noch den String zurück..

Was läuft hier falsch bzw. was machen wir falsch? Ich habe einmal ein Test-Beispiel angehängt, dass das Ergebnis zeigen sollte..

Viele Grüße,

Torben

0 Kudos

Das Beispiel liefert keine User-Instanzen, sondern eine innere Klasse "SampleBean".

Wahrscheinlich verstehe ich das Problem nicht... Smiley Wink

Peter
0 Kudos

Okay: Gemeint ist der Rückgabewert in einem Formular:

  <CMS_INPUT_COMBOBOX name="st_registrationlist3" useLanguages="no">

    <CMS_INCLUDE_OPTIONS type="public">

      <NAME>com.hamburgsud.firstspirit.pub.SampleValueProvider</NAME>

    </CMS_INCLUDE_OPTIONS>

    <LANGINFOS>

      <LANGINFO lang="*" label="Auswahl" description="TEXT"/>

    </LANGINFOS>

  </CMS_INPUT_COMBOBOX>

Hier liefert dann ein $CMS_VALUE(st_registrationlist3.class)$ im guten Fall "de.espirit.firstspirit.access.store.templatestore.gom.GomIncludeOptions$GenericOption"

im schlechten Fall

"de.espirit.firstspirit.access.editor.value.SimpleOption"

😞

0 Kudos

Da das Verhalten der API hier eher unerwartet ist: Soll ich hierfür zur Klärung besser ein Ticket beim Helpdesk aufmachen?

0 Kudos

Bevor wir ein Ticket beim Helpdesk aufmachen, versuche ich es nochmal zu erklären.

Der SampleValueProvider wird im Formular wie folgt eingebunden:

  <CMS_INPUT_COMBOBOX name="st_registrationlist3" useLanguages="no">

    <CMS_INCLUDE_OPTIONS type="public">

      <NAME>com.hamburgsud.firstspirit.pub.SampleValueProvider</NAME>

    </CMS_INCLUDE_OPTIONS>

    <LANGINFOS>

      <LANGINFO lang="*" label="Auswahl" description="TEXT"/>

    </LANGINFOS>

  </CMS_INPUT_COMBOBOX>

Das klappt an sich auch.

Das Problem taucht erst in der Ausgabe auf ( im Beispiel durch $CMS_VALUE(st_registrationlist3.class)$ verdeutlicht).

Wenn aus der bereits angehängten Javaklasse die Zeile 31 statt 34 ausgeführt wird

result.add(new SampleBean("BLUB"));

wird im Formular "BLUB" angezeigt und in der Ausgabe steht dann

de.espirit.firstspirit.access.store.templatestore.gom.GomIncludeOptions$GenericOption

Wenn jedoch Zeile 34 statt 31 ausgeführt (und somit auf den Usernamen zugegriffen) wird

result.add(new SampleBean(username));

wird im Formular korrekterweise der aktuelle Loginname angezeigt.

In der Ausgabe steht jedoch

de.espirit.firstspirit.access.editor.value.SimpleOption

Der Unterschied zwischen GenericOption und SimpleOption ist ganz einfach, dass man bei der GenericOption mittels getValue() das gewünschte "SampleBean" erhält. Bei der SimpleOption erhält man mittels getValue() lediglich einen String.

Es wäre schön, wenn sich hierzu noch jemand melden kann.

Auch wenn es hier nicht gelöst werden kann.

Gruß

Peter

0 Kudos

Danke für die zahlreichen Antworten!

Ticket wurde aufgemacht...

0 Kudos
klein
Crownpeak employee

Hallo,

folgenden Denkfehler wurde hier von unseren Entwicklern entdeckt:

für die Auswahl im Client liefert der Provider lediglich ein Objekt, nämlich für den aktuellen Benutzer (z.B. "Admin").

Bei der Generierung ist der Benutzer aber ein anderer (Systembenutzer). Der Provider liefert in seiner Auswahlmenge nur diesen Systembenutzer, "Admin" ist somit kein unterstützter Wert der Menge und daher wird ein SimpleOption-Objekt erzeugt (weil nicht entscheidbar ist, warum "Admin" nicht in der Wertemenge enthalten ist).

Deshalb also die unterschiedlichen Ausgaben bei:

result.add(new SampleBean(username));

und

result.add(new SampleBean("BLUB"));

Gruß,

Walter.

0 Kudos