bianca_batsch
New Responder

Query in Regeln auslesen

Hallo zusammen,

ich versuche über eine ComboBox, die mittels CMS_INCLUDE_OPTIONS eine DQ ausliest, den Wert einer der Spalten aus der DQ in ein anderes Formularfeld zu schreiben. Leider klappt das nicht, da ich die Anleitung unter Online Dokumentation FirstSpirit - Wertermittlung nicht so ganz verstehe.

Hier mein Formular:

<CMS_MODULE>

  <CMS_INPUT_COMBOBOX name="lt_combo" sortOrder="ascending" useLanguages="no">

    <CMS_INCLUDE_OPTIONS type="database">

      <LABELS>

        <LABEL lang="*">#item.Key</LABEL>

      </LABELS>

      <TABLE>xxx</TABLE>

    </CMS_INCLUDE_OPTIONS>

    <LANGINFOS>

      <LANGINFO lang="*" label="DQ Eintrag für Combobox"/>

    </LANGINFOS>

  </CMS_INPUT_COMBOBOX>

  <CMS_INPUT_TEXT name="lt_row" hFill="yes" useLanguages="no">

    <LANGINFOS>

      <LANGINFO lang="*" label="SpaltenWert aus DQ"/>

    </LANGINFOS>

  </CMS_INPUT_TEXT>

</CMS_MODULE>

Hier meine Regel:

<RULES>

<RULE>

<WITH>

<PROPERTY name="VALUE" source="lt_combo"/>

</WITH>

<DO>

<PROPERTY name="query.xxx" source="lt_row"/>

</DO>

</RULE>

</RULES>

Ich habe dazu auch eine Query gebaut, weiß aber nicht, wie ich die korrekt anspreche, oder ob das überhaupt als eigene Query gebraucht wird. Die Doku ist da nicht hilfreich oder bin ich blind Smiley Sad

0 Kudos
3 Replies
hoebbel
Crownpeak employee

Hallo Bianca,

ich fürchte, dass die Antwort lautet, dass dies nicht out-of-the-box funktioniert.

Du kannst zwar problemlos den ausgewählten Wert der COMBOBOX in eine andere, kompatible Eingabekomponente schreiben.

Beispielregel dazu (lt_row muss dann allerdings eine CMS_INPUT_NUMBER (typ long) sein, da die fs_id übertragen wird und das ist eine Zahl, kein String)

<RULE>

<WITH>

<PROPERTY name="ENTRY" source="lt_combo"/>

</WITH>

<DO>

<PROPERTY name="VALUE" source="lt_row"/>

</DO>

</RULE>

Du willst aber Daten aus dem Datensatz selber haben. Dazu muss auf das dataset Objekt zugegriffen werden, dass für die Regel nicht zur Verfügung steht.

Einzige mir bekannte Lösung dazu ist es, einen Value-Service zu schreiben, der die Eingabekomponente lt_combo ausliest, sich den Datensatz holt udn den gewünschten Wert in die andere Eingabekomponente übergibt.

Anmerkung: Das Setzen des Wertes für die Query funktioniert genau anders herum. Du kannst aus einer (kompatiblen) Eingabekomponente per Regel den Wert auslesen und diesen der Query, die in den CMS_INCLUDE_OPTIONS der Combobox definiert ist, entsprechend übergeben. Die Syntax hierbei ist

<PROPERTY name="query.<Name des Parameters aus der Query>" source="<Name der Combobox-Eingabekomponente, die die Query benutzt>"/>

Das bewirkt dann, dass in der Combobox nur noch Datensätze ausgewählt werden können, die für die so parametrisierte Query gültig sind.

In dem von Dir verlinkten Beispiel wird also der Wert aus der Eingabekomponente st_supplier verwendet, um die Query in der Eingabekomponente st_dish so zu konfigurieren, dass nur Gerichte des zuvor ausgewählten Lieferanten angeboten werden.

Viele Grüße

Holger

0 Kudos

Hallo Holger,

vielen Dank für deine Antwort. So genau verstehe ich das leider noch nicht ganz. Du schreibst:

Anmerkung: Das Setzen des Wertes für die Query funktioniert genau anders herum. Du kannst aus einer (kompatiblen) Eingabekomponente per Regel den Wert auslesen und diesen der Query, die in den CMS_INCLUDE_OPTIONS der Combobox definiert ist, entsprechend übergeben. Die Syntax hierbei ist

<PROPERTY name="query.<Name des Parameters aus der Query>" source="<Name der Combobox-Eingabekomponente, die die Query benutzt>"/>

Das bewirkt dann, dass in der Combobox nur noch Datensätze ausgewählt werden können, die für die so parametrisierte Query gültig sind.

In dem von Dir verlinkten Beispiel wird also der Wert aus der Eingabekomponente st_supplier verwendet, um die Query in der Eingabekomponente st_dish so zu konfigurieren, dass nur Gerichte des zuvor ausgewählten Lieferanten angeboten werden.

Wie sieht denn das Formular-Element von st_dish aus? Ich raff nicht, wieso ich da mit der supplier_id weiter komme.

LG Bianca

0 Kudos

Hallo Bianca,

mit der Anmerkung wollte ich nur kurz erwähnen, wozu die <PROPERTY name="query...." source="..."/> dient. Damit kann man die Auswahlliste der Eingabekomponente dynamisch eingeschränkt. Es können dann vom Redakteur nur die Datensätze ausgewählt werden, die für die über die Regel modifizierte Query gültig sind.

In dem dokumentierten Beispiel handelt es sich bei st_supplier und bei st_dish jeweils um eine CMS_INPUT_COMBOBOX. Der value, der über die Regel abgefragt werden kann, ist die FS_ID des ausgewählten Datensatzes.

In dem Beispiel ist für die Eingabekomponente st_dish eine Query definiert worden, die alle Datensätze zur Auswahl anbietet, die über die ID des entsprechenden Lieferanten (ausgewählt in der Eingabekomponente st_supplier) eingeschränkt werden. Das Ganze funktioniert auch nur exakt mit der FS_ID, da diese über die <PROPERTY source="st_supplier" name="VALUE"/> zurück geliefert wird.

Wenn der Wert statt dessen aus einer CMS_INPUT_TEXT Eingabekomponente gelesen würde, dann muss eine Query benutzt werden, die entsprechende Strings als Parameter annimmt.

Wichtig für deinen Anwendungsfall ist aber, dass Du out-of-the-box über die Regeln aus einer COMBOBOX nur die FS_ID eines ausgewählten Datensatzes nutzen kannst. Das ist der Wert, der mittels Regel direkt ausgelesen werden kann.

Vielleicht macht es folgendes Praxisbeispiel verständlicher:

<RULES> 

     <RULE> 

          <WITH> 

               <PROPERTY name="ENTRY" source="lt_combo"/> 

          </WITH> 

          <DO> 

               <PROPERTY name="VALUE" source="lt_row"/> 

          </DO> 

     </RULE> 

</RULES> 

Wenn Du einen Datensatz in der Eingabekomponente lt_combo auswählst, schreibt die Regel die FS_ID dieses Datensatzes in die Eingabekomponente lt_row.
Du kannst aber nicht einen anderen Wert aus dem Datensatz übertragen.

Anmerkung: Value funktioniert hier nicht, da Du damit das "Option" Rückgabe-Objekt der Combobox bekommst, die Eingabekomponente CMS_INPUT_TEXT dieses aber nicht verarbeiten kann.

Viele Grüße

Holger

0 Kudos