Hallo zusammen,
kurz vorab. Die nachfolgenden Daten sind nur beispielhaft und entsprechen nicht den echten Inhalten.
Ich habe eine FS_DATASET Komponente über die ich einen Kontakt aus der entsprechenden Datenquelle auswähle. Anschließen soll die Combobox für Telefonnummern anhand des ausgewählten Kontakts vorgefiltert werden, so das nur noch dem Kontakt zugewiesene Telefonnummern auswählbar sind.
Hier der entsprechende Code für Formular, Rules und Query
<FS_DATASET name="st_contact" mode="sheet">
<LANGINFOS>
<LANGINFO lang="*" label="Kontakt"/>
</LANGINFOS>
<SOURCES>
<CONTENT name="contact"/>
</SOURCES>
</FS_DATASET>
<CMS_INPUT_COMBOBOX name="st_phone" allowEmpty="yes" hFill="no" useLanguages="no">
<CMS_INCLUDE_OPTIONS type="database">
<LABELS>
<LABEL lang="*">#item.number</LABEL>
</LABELS>
<QUERY name="LocalDB.phone_by_contact"/>
<TABLE>LocalDB.telefon</TABLE>
</CMS_INCLUDE_OPTIONS>
<LANGINFOS>
<LANGINFO lang="*" label="Telefon"/>
</LANGINFOS>
</CMS_INPUT_COMBOBOX>
<RULES>
<RULE>
<IF>
<PROPERTY name="FOCUS" source="st_telefon"/>
</IF>
<WITH>
<PROPERTY name="VALUE" source="st_contact"/>
</WITH>
<DO>
<PROPERTY name="query.contactId" source="st_telefon"/>
</DO>
</RULE>
</RULES>
<QUERY entityType="telefon">
<FILTERPARAM parameter="contactId" datatype="java.lang.Integer" value="0"/>
<EQ attribute="contactList.fs_id" parameter="contactId"/>
<ORDERCRITERIA attribute="number" descending="1"/>
</QUERY>
Nun zu meinem Problem. Damit das Ganze Funktioniert müsste ich der Query die FS_ID des Kontakts als Paramter "contactId" übergeben. Leider bekomme ich ja vom FS_DATASET als Value nur ein "de.espirit.firstspirit.client.access.editor.DatasetEditorValueImpl$DatasetContainerImpl" Objekt zurück. Ich hatte es auch schon über <PROPERTY name="VALUE" source="st_contact.fs_id"/> und ähnlichem probiert, leider ohne Erfolg.
Nun die Frage gibt es hier ein Weg an die FS_ID des ausgewählten Datensatzes zu kommen, damit ich diesen in der Query setzten kann?
P.S.: Dass es mit zwei Comboxen funktionieren würde ist mir klar. Ist aber bei einer Auswahl aus über 300 Kontakten nicht praktikabel.
Ebenso hab ich bereits probiert den Value in einen Service als property zu übergeben.
<RULE>
<IF>
<PROPERTY name="FOCUS" source="st_phone"/>
</IF>
<SCHEDULE delay="500" id="testID" service="ContactFilterService">
<PARAM name="contact">
<PROPERTY name="VALUE" source="st_contact"/>
</PARAM>
</SCHEDULE>
<DO>
<PROPERTY name="query.contactId" source="st_phone"/>
</DO>
</RULE>
Das geht jedoch auch nicht aus folgenden Gründen:
WARN (de.espirit.firstspirit.forms.rules.FactService): Fact for parameter 'contact' is not serializable: de.espirit.firstspirit.client.access.editor.DatasetEditorValueImpl$DatasetContainerImpl@cd227b16
Schöne Grüße
Dominik