Hallo zusammen,
aktuell kämpfe ich mit den FirstSpirit Regeln, allerdings funktioniert es nicht so wie ich mir das eigentlich vorstelle. Gegeben ist V5.0.510.62658. Ich versuche in einer Tabellenvorlage über die Regeln mehrere CMS_INPUT_COMBOBOX und eine CMS_INPUT_LIST dynamisch über eine Query-Abfrage zu befüllen.
Hierzu habe ich folgenden Ausschnitt aus dem Formular
<CMS_GROUP tabs="top">
<CMS_INPUT_NUMBER name="tt_created_in" type="long" editable="no" hFill="yes" singleLine="no" useLanguages="no">
<LANGINFOS>
<LANGINFO lang="*" label="Project id created in"/>
</LANGINFOS>
</CMS_INPUT_NUMBER>
<CMS_GROUP>
<LANGINFOS>
<LANGINFO lang="*" label="Category and type settings"/>
</LANGINFOS>
<CMS_INPUT_COMBOBOX name="tt_type" hFill="yes" singleLine="no" useLanguages="no">
<CMS_INCLUDE_OPTIONS type="database">
<LABELS>
<LABEL lang="*">#item.name_%lang%</LABEL>
</LABELS>
<TABLE>internet_dict.article_type</TABLE>
</CMS_INCLUDE_OPTIONS>
<LANGINFOS>
<LANGINFO lang="*" label="Article type"/>
</LANGINFOS>
</CMS_INPUT_COMBOBOX>
<CMS_INPUT_LIST name="tt_category_one" hFill="yes" useLanguages="no">
<CMS_INCLUDE_OPTIONS type="database">
<LABELS>
<LABEL lang="*">#item.display_name_%lang%</LABEL>
</LABELS>
<QUERY name="internet_dict.get_categories_one"/>
<TABLE>internet_dict.article_category</TABLE>
</CMS_INCLUDE_OPTIONS>
<LANGINFOS>
<LANGINFO lang="*" label="Category one"/>
</LANGINFOS>
</CMS_INPUT_LIST>
<CMS_INPUT_COMBOBOX name="tt_category_two" hFill="yes" singleLine="no" useLanguages="no">
<CMS_INCLUDE_OPTIONS type="database">
<LABELS>
<LABEL lang="*">#item.display_name_%lang%</LABEL>
</LABELS>
<QUERY name=internet_dict.get_categories_two"/>
<TABLE>internet_dict.article_category</TABLE>
</CMS_INCLUDE_OPTIONS>
<LANGINFOS>
<LANGINFO lang="*" label="Category two"/>
</LANGINFOS>
</CMS_INPUT_COMBOBOX>
<CMS_INPUT_COMBOBOX name="tt_category_three" hFill="yes" singleLine="no" useLanguages="no">
<CMS_INCLUDE_OPTIONS type="database">
<LABELS>
<LABEL lang="*">#item.display_name_%lang%</LABEL>
</LABELS>
<QUERY name="internet_dict.get_categories_three"/>
<TABLE>internet_dict.article_category</TABLE>
</CMS_INCLUDE_OPTIONS>
<LANGINFOS>
<LANGINFO lang="*" label="Category three"/>
</LANGINFOS>
</CMS_INPUT_COMBOBOX>
</CMS_GROUP>
</CMS_GROUP>
Den dazugehörige Query in dreifacher Ausführung, weil ich dachte das da eventuell Werte überschrieben werden, vorher hatte ich nur einen.
<QUERY entityType="article_category">
<FILTERPARAM parameter="categoryNumberOne" datatype="java.lang.Integer" value="-1"/>
<FILTERPARAM parameter="articleTypeOne" datatype="java.lang.Long" value="-1"/>
<FILTERPARAM parameter="currentProjectIdOne" datatype="java.lang.Long" value="-1"/>
<AND>
<EQ attribute="category_number" parameter="categoryNumberOne"/>
<EQ attribute="created_in" parameter="currentProjectIdOne"/>
<EQ attribute="article_type.fs_id" parameter="articleTypeOne"/>
</AND>
</QUERY>
und die Regeln für die einzelnen Formularelemente.
<!-- @group start event handling category 1 -->
<ON_EVENT>
<IF>
<PROPERTY source="tt_category_one" name="FOCUS"/>
</IF>
<WITH>
<PROPERTY source="tt_type" name="ENTRY"/>
</WITH>
<DO>
<PROPERTY source="tt_category_one" name="query.articleTypeOne"/>
</DO>
</ON_EVENT>
<ON_EVENT>
<IF>
<PROPERTY source="tt_category_one" name="FOCUS"/>
</IF>
<WITH>
<PROPERTY source="tt_created_in" name="VALUE"/>
</WITH>
<DO>
<PROPERTY source="tt_category_one" name="query.currentProjectIdOne"/>
</DO>
</ON_EVENT>
<ON_EVENT>
<IF>
<PROPERTY source="tt_category_one" name="FOCUS"/>
</IF>
<WITH>
<NUMBER>1</NUMBER>
</WITH>
<DO>
<PROPERTY source="tt_category_one" name="query.categoryNumberOne"/>
</DO>
</ON_EVENT>
<!-- @group end event handling category 1 -->
<!-- @group start event handling category 2 -->
<ON_EVENT>
<IF>
<PROPERTY source="tt_category_two" name="FOCUS"/>
</IF>
<WITH>
<PROPERTY source="tt_type" name="ENTRY"/>
</WITH>
<DO>
<PROPERTY source="tt_category_two" name="query.articleTypeTwo"/>
</DO>
</ON_EVENT>
<ON_EVENT>
<IF>
<PROPERTY source="tt_category_two" name="FOCUS"/>
</IF>
<WITH>
<PROPERTY source="tt_created_in" name="VALUE"/>
</WITH>
<DO>
<PROPERTY source="tt_category_two" name="query.currentProjectIdTwo"/>
</DO>
</ON_EVENT>
<ON_EVENT>
<IF>
<PROPERTY source="tt_category_two" name="FOCUS"/>
</IF>
<WITH>
<NUMBER>2</NUMBER>
</WITH>
<DO>
<PROPERTY source="tt_category_two" name="query.categoryNumberTwo"/>
</DO>
</ON_EVENT>
<!-- @group end event handling category 2 -->
<!-- @group start event handling category 3 -->
<ON_EVENT>
<IF>
<PROPERTY source="tt_category_three" name="FOCUS"/>
</IF>
<WITH>
<PROPERTY source="tt_type" name="ENTRY"/>
</WITH>
<DO>
<PROPERTY source="tt_category_three" name="query.articleTypeThree"/>
</DO>
</ON_EVENT>
<ON_EVENT>
<IF>
<PROPERTY source="tt_category_three" name="FOCUS"/>
</IF>
<WITH>
<PROPERTY source="tt_created_in" name="VALUE"/>
</WITH>
<DO>
<PROPERTY source="tt_category_three" name="query.currentProjectIdThree"/>
</DO>
</ON_EVENT>
<ON_EVENT>
<IF>
<PROPERTY source="tt_category_three" name="FOCUS"/>
</IF>
<WITH>
<NUMBER>3</NUMBER>
</WITH>
<DO>
<PROPERTY source="tt_category_three" name="query.categoryNumberThree"/>
</DO>
</ON_EVENT>
<!-- @group end event handling category 3 -->
Der Query wird dynmisch über tt_created_in (ProjektID aus einem ValueService wo der Datensatz angelegt wurde), der entsprechenden Typauswahl tt_type und der Nummer der Kategorie befüllt.
Folgende Probleme bestehen
FSClient
Die beiden Comboboxen werden mit den korrekten Werten befüllt, die input_list (Auswahl) leider nicht, wobei dort auch schonmal die richtigen Werte zurück kamen, aber seit neustem einfach nichts mehr.
WebClient
Ähnliches Problem wie im FSClient. Ausnahme: Die Comboboxen werden zwar abgefragt (Request an ServerGadgetRequestService) und es kommen scheinbar auch die richtigen Werte über den Request als Antwort zurück, allerdings werden diese nur sehr sporadisch in die Comboboxen geschrieben. Hier ist es meistens so, dass nur eine Combobox befüllt wird, manchmal aber auch keine und selten auch mal beide. Die CMS_INPUT_LIST hingegen feuert keinen Request ab im hintergrund, wenn man das Feld betätigt, aber das hat auch schonmal funktioniert (Im FSClient).
Ich konnt in der Dokumentation zu den Regeln leider keine Beschränkungen ausfindig machen, vielleicht funktioniert es nicht mit der dyn. befüllung der CMS_INPUT_LIST?
Meine Lösungsansätze bisher waren:
- Für jede Kategorie eine Abfragen anlegen, anstatt nur eine Abfrage
- Die Parameter der Abfragen unterschiedlich benennen
- Die Typisierung in der Abfrage zwischen Long und Integer wechseln
- PROPERTY von VALUE auf ENTRY ändern
Ich vermute stark, dass dort die Parameter nicht richtig ankommen oder ich irgendwo einen Fehler in der Parameterübergabe habe. Wenn ich den Query manuell mit den richtigen Werten fülle, werden mir im FSClient sowie im WebClient auch in der CMS_INPUT_LIST die richtigen Werte zur Verfügung gestellt. Gibt es eine Möglichkeit zu prüfen welche Werte dort ankommen, oder generell irgendwelche Debug-Ausgaben vorzunehmen?
Nachtrag:
Im Request an ServerGadgetRequestService der Comboboxen stehen auch die richtigen werte drin:
Request
...combobox.ComboboxParameter/3729699889
|categoryNumberThree|3|currentProjectIdThree|20034|articleTypeThree
|1152|...
Response
..
.combobox.ComboboxOption/163437042","1216","Category two"],0,7]
Allerdings stehen tortzdem gerade keine Auswahlmöglichkeiten zur Verfügung in den Boxen.
Viele Grüße
Patrick