der_sk
I'm new here

Kontextsensitiver ValueService

Jump to solution

Ich hab einen ValueService mit ModelListener implementiert (nach dem Beispiel von Marcel aus https://community.e-spirit.com/ideas/1292#comment-2859) um Referenznamen zu prüfen (ja, der Use-Case klingt merkwürdig, aber das soll jetzt erstmal irrelevant sein). Bei mir kommt also einfach nur ein boolean zurück. Ich habe allerdings keine innere Klasse benutzt.

Folgende Regel habe ich benutzt:

<RULES>

    <ON_RELEASE>

        <SCHEDULE service="PrettyUidValueService" id="x">

            <PARAM name="dummy_param">

                <TEXT>DUMMY_TEXT</TEXT>

            </PARAM>

        </SCHEDULE>

        <DO>

        <VALIDATION>

            <PROPERTY source="pt_dinge" name="VALID"/>

            <MESSAGE lang="*" text="testmeldung" />

            </VALIDATION>

        </DO>

    </ON_RELEASE>

</RULES>

Merkwürdig ist: Die Prüfung funktioniert genau so, wie sie soll. Trotzdem poppt immer folgende Meldung auf (6x pro Aktualisierung):

Admin (Admin), session: 1112417838550898609, project: 123456, ip:123.123.123.123 (de.espirit.firstspirit.forms.rules.Rules): Failed executing rules. Services are not supported for form accessing rules!

FSVersion=5.0.510.62658#3196;JDK=1.7.0_51 32bit Oracle Corporation;OS=Windows 7 6.1 x86;Date=17.04.2015 15:56:10

java.lang.IllegalStateException: Services are not supported for form accessing rules!

    at de.espirit.firstspirit.store.access.FormAccessingFactBase.getService(FormAccessingFactBase.java:186)

    at de.espirit.firstspirit.forms.rules.FactService.execute(FactService.java:126)

    at de.espirit.firstspirit.forms.rules.Rule.fire(Rule.java:217)

    at de.espirit.firstspirit.forms.rules.RuleEngine.doProcess(RuleEngine.java:215)

    at de.espirit.firstspirit.forms.rules.RuleEngine.reset(RuleEngine.java:124)

    at de.espirit.firstspirit.forms.rules.Rules.validate(Rules.java:268)

    at de.espirit.firstspirit.forms.rules.Rules.validate(Rules.java:199)

    at de.espirit.firstspirit.client.gui.SwingMultiFormView.computeValidityMapFromData(SwingMultiFormView.java:516)

    at de.espirit.firstspirit.client.gui.SwingMultiFormView.load(SwingMultiFormView.java:495)

    at de.espirit.firstspirit.client.gui.tree.store.pagestore.GomModuleView.init(GomModuleView.java:114)

    at de.espirit.firstspirit.client.gui.tree.store.pagestore.GomModuleView.setElement(GomModuleView.java:192)

    at de.espirit.firstspirit.client.gui.tree.store.pagestore.GomModuleView.<init>(GomModuleView.java:82)

    at de.espirit.firstspirit.client.gui.tree.store.pagestore.PSPageView.getView(PSPageView.java:241)

    at de.espirit.firstspirit.client.gui.tree.store.pagestore.PSPageView.constructComponent(PSPageView.java:214)

    at de.espirit.firstspirit.client.gui.tree.store.AbstractAccessTabbedView.getViewableComponent(AbstractAccessTabbedView.java:367)

    at de.espirit.firstspirit.client.gui.tree.store.AbstractAccessTabbedView.getComponent(AbstractAccessTabbedView.java:202)

    at de.espirit.firstspirit.client.gui.tree.store.AbstractAccessTabbedView.access$100(AbstractAccessTabbedView.java:54)

    at de.espirit.firstspirit.client.gui.tree.store.AbstractAccessTabbedView$1.tabSelected(AbstractAccessTabbedView.java:161)

    at de.espirit.firstspirit.client.gui.tree.store.AbstractAccessTabbedView$SubTabModel$2.invoke(AbstractAccessTabbedView.java:633)

    at de.espirit.firstspirit.client.gui.tree.store.AbstractAccessTabbedView$SubTabModel$2.invoke(AbstractAccessTabbedView.java:631)

    at de.espirit.firstspirit.client.gui.tree.store.AbstractAccessTabbedView$SubTabModel.notifyListeners(AbstractAccessTabbedView.java:686)

    at de.espirit.firstspirit.client.gui.tree.store.AbstractAccessTabbedView$SubTabModel.notifyTabSelected(AbstractAccessTabbedView.java:631)

    at de.espirit.firstspirit.client.gui.tree.store.AbstractAccessTabbedView$SubTabModel.selectTab(AbstractAccessTabbedView.java:621)

    at de.espirit.firstspirit.client.gui.tree.store.AbstractAccessTabbedView$SubTabModel.select(AbstractAccessTabbedView.java:574)

    at de.espirit.firstspirit.client.gui.tree.store.AbstractAccessTabbedView.getComponent(AbstractAccessTabbedView.java:255)

    at de.espirit.firstspirit.client.gui.tree.store.AbstractGuiStoreElement.getView(AbstractGuiStoreElement.java:1129)

    at de.espirit.firstspirit.client.gui.tabbing.ElementTabConfiguration$ElementView.doGetView(ElementTabConfiguration.java:290)

    at de.espirit.firstspirit.client.gui.tabbing.ElementTabConfiguration$ElementView.getViewComponent(ElementTabConfiguration.java:281)

    at de.espirit.firstspirit.client.gui.tabbing.TabContentView$ComponentFactory.getRealComponent(TabContentView.java:404)

    at de.espirit.firstspirit.client.gui.tabbing.TabContentView$ComponentFactory.call(TabContentView.java:377)

    at de.espirit.firstspirit.client.gui.tabbing.TabContentView$ComponentFactory.call(TabContentView.java:262)

    at de.espirit.firstspirit.client.gui.util.GuiUtil$CallableWrapper.call(GuiUtil.java:1948)

    at java.util.concurrent.FutureTask.run(Unknown Source)

    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)

    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)

    at java.lang.Thread.run(Unknown Source)

Kennt das jemand oder kann mir jemand übersetzen, was der Apparat von mir will? :smileygrin:

Danke und Gruß,

Sascha

1 Solution

Accepted Solutions

Sofern diese für Speichern oder Freigabe relevant sind, ist dies wohl so. Zumindest nicht direkt. Man kann natürlich statt einer Validierung den Wert einer anderen Eingabekomponente setzen ...

View solution in original post

0 Kudos
5 Replies
StefanSchulz
I'm new here

Hallo Sascha,

die Kombiination ON_RELEASE mit SCHEDULE ist das Problem. Die Nutzung eines ValueService funktioniert nämlich nur, wenn man redaktionell (interaktiv) arbeitet. Sobald die Regeln anderweitig ausgeführt werden, steht der Service nicht zur Verfügung. Die Fehlermeldung tritt (vermutlich) auf, weil andere Sprachen oder Inhalte nicht sichtbar sind. Im Hintergrund ausgeführte Regeln haben den gleichen Arbeitsbereich, als wäre kein Formular sichtbar. Daher die Fehlermeldung.

Bin mir nicht sicher, ob diese Information dir konkret hilft, aber so die Erklärung für das Verhalten.

Beste Grüße

Stefan

Okay - das hat aber als Konsequenz, dass ich ValueServices grundsätzlich nicht für Validierungskomponenten nutzen sollte, oder?

0 Kudos

Sofern diese für Speichern oder Freigabe relevant sind, ist dies wohl so. Zumindest nicht direkt. Man kann natürlich statt einer Validierung den Wert einer anderen Eingabekomponente setzen ...

0 Kudos

Vielen Dank, das hilft mir weiter. Ändert sich daran in FS5.2 etwas?

0 Kudos

Nein, da ändert sich nichts dran. Ist auch für die Zukunft nichts geplant.

0 Kudos