ChrisK
I'm new here

Aktuelle Sprache in Einblendelogik

Hallo zusammen,

ich habe einen Arbeitsablauf, der für Redakteure nur auf Seiten ausführbar sein soll, die bestimmte Werte in sprachabhängigen Eingabekomponenten haben. Hierfür möchte ich die Einblendelogik bei Arbeitsabläufen nutzen.

Um die Felder auslesen zu können, benötige ich das Language-Objekt der aktuell dargestellten Sprache. Dieses würde ich normalerweise über den UIAgent mit #getDisplayLanguage() bekommen.

Meine Versuche, den UIAgent innerhalb des ScriptContext zu bekommen, sind allerdings fehlgeschlagen.

Folgendes habe ich versucht:

1) context.requestSpecialist(UIAgent.TYPE)

2)

BrokerAgent brokerAgent = broker.requireSpecialist(BrokerAgent.TYPE);

broker = brokerAgent.getBrokerByProjectName("projekt");

agent = broker.requireSpecialist(UIAgent.TYPE);

Meine Frage also: gibt es sonst irgendeine Möglichkeit, im ScriptContext an den UIAgent zu kommen oder sonst irgendeine Möglichkeit, die aktuelle Sprache herauszubekommen?


Danke für Hinweise.

Viele Grüße

Chris

0 Kudos
4 Replies
mbergmann
Crownpeak employee

Hallo Chris,

um welchen Client geht es hier? Da Du schon UIAgent erwähnt hast vermute ich mal den SiteArchitect, richtig?

Das Problem hier ist, dass es "die aktuelle Redaktionssprache im Client" generell einfach nicht gibt, sondern höchstens die Sprache in der ein aktuelles Element gerade angezeigt wird bzw. genauer welcher Sprach-Tab für dieses Objekt gerade aktiv ist. Da kommt man theoretisch ran, siehe hier. Bei mehreren offenen Tabs können das je Element ja durchaus verschiedene sein.

Aber: Man muss auch bedenken, dass sich Workflows nicht nur über den "Link" links unten im mittleren Bereich starten lassen sondern auch per Rechtsklick auf ein Element im Baum, zu dem ggf. gar kein offener Tab (und somit eine "aktuelle Sprache") existiert.

Ohne jetzt den genauen Hintergrund Deiner Anforderung zu kennen, bin ich etwas skeptisch ob das so tatsächlich sinnvoll ist. Ob ein Arbeitsablauf verfügbar ist oder nicht sollte eher vom Objekt selber abhängen und nicht vom aktuellen Status der GUI. Der WF selber ist ja eh nicht sprachabhängig, er läuft auf dem "ganzen Objekt".

Aber vielleicht kannst Du den Hintergrund mal etwas genauer beschreiben.

Viele Grüße

Michael

0 Kudos

Hallo Michael,

wir möchten einen Workflow abhängig davon anzeigen, ob ein bestimmter Wert (z.B. pt_actualShopUrl oder pt_shopUrl) für eine bestimmte Sprache in einem Feld gefüllt ist. Über den Menüpunkt Extra--> Bevorzugte Anzeigesprache kann man ja die Sprache im SA ändern. Jetzt könnte ich mit dem folgendem Code ja die Sprache erhalten:

webeditagent = context.requestSpecialist(WebeditUiAgent.TYPE);

uIAgent = context.requestSpecialist(UIAgent.TYPE);

if(webeditagent == null){

          lang =  uIAgent.getDisplayLanguage();

}else{

          lang =  webeditagent.getPreviewLanguage();

}

Dies funktioniert auch ohne Probleme, wenn dies in einem Skript passiert. Jetzt möchten wir das ganze aber in der Einblendelogik von Workflows abrufen. Hier scheint dies aber nicht zu funktioinieren, weil der uiAgent immer null ist bei der Einblendelogik. Der normale LanguageAgent scheint zu funktioineren. Sprich manche Agent funktionieren wohl.

Dies wäre die Prüfung für die Einblendelogik eines Workflows:

 

if( (storeElement.isReleased() &&  (storeElement.getFormData().get(language, "pt_shopUrl").get() != null && !storeElement.getFormData().get(language, "pt_shopUrl").get().isEmpty()))

          || (!storeElement.isReleased() && (storeElement.getFormData().get(language, "pt_shopUrl").get() != null && !storeElement.getFormData().get(language, "pt_shopUrl").get().isEmpty())

          && (storeElement.getFormData().get(language, "pt_actualShopUrl").get() == null || storeElement.getFormData().get(language, "pt_actualShopUrl").get().isEmpty())  )

          ) {

          show = true;

}

Ist da vielleicht ein Fehler, oder ist das nicht vorgesehen im SA auf die aktuelle Sprache zu kommen?

Gruß

Daniel Lüttel

0 Kudos

Hallo Daniel,

in der Einblendelogik steht ein WorkflowScriptContext zur Verfügung. Dieser erbt von GuiScriptContext und besitzt deshalb die Methode getGuiHost, auf dessen Rückgabeobjekt man getGuiLanguage aufrufen kann.

Vielleicht reicht euch die Sprache, die ihr darüber erhaltet, ja schon für euren Anwendungsfall.

Viele Grüße

Tim

0 Kudos

Hallo Daniel,

ist diese Frage noch offen? Benötigst du noch weitere Hilfe oder konnte Tim dir bereits weiterhelfen?

Viele Grüße,

Sebastian

0 Kudos