mfitt
Returning Observer

FS_INDEX Auswahl beschränken

Hallo zusammen,

Ich möchte gewissen Inhalten unterschiedliche Berechtigungen aus einer Datenquelle zuordnen und dies wird auf einer Absatzvorlage oder Seitenvorlage über FS_INDEX gemacht.

Zuerst sollen Länder über FS_INDEX ausgewählt werden. Danach die Legal Entities über ein weiteres FS_INDEX, wobei dort nur die Legal Entities zur Auswahl stehen sollen, die dem entsprechenden Land zugeordnet sind, welches vorher ausgewählt wurde.

Anschließend die Locations, die sich wiederum an der Vorauswahl der Legal Entites orientieren sollen.

Hier einmal das DB Schema:

455892_pastedImage_0.png

Ist so eine Vorfilterung möglich?

Viele Grüße

Marcel

0 Kudos
1 Reply
hoebbel
Crownpeak employee

Hallo Marcel,

ich verstehe nicht, warum das Land über eine FS_INDEX Eingabekomponente ausgewählt wird. Hier würde ich eine COMBOBOX nehmen, die das Land mittels CMS_INCLUDE_OPTIONS zur Auswahl anbietet (st_country im Beispiel unten).

Für die FS_INDEX Eingabekomponente (st_legalEntities im Beispiel unten) kannst Du dann eine Query definieren, die nur Legal Entities zulässt, die für das als Parameter zu übergebene Land gültig sind.

Per Regel übergibst Du dann den Wert der COMBOBOX als Auswahlwert für die Query. Also ungefähr so:

<RULE>

<WITH>

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

</WITH>

<DO>

<PROPERTY name="query.CountryId" source="st_legalEntities"/>

</DO>

</RULE>

Jetzt gibt es noch den Haken, dass es Zugriffe geben kann, bei denen die Regel nicht angewendet werden kann. In dem Fall würden dem Query kein Wert für die Country zugeordnet werden, was dazu führt, dass alle ausgewählten LegalEntities als "nicht erlaubt" eingestuft würden. Um das zu umgehen, muss man in dem Query noch eine zusätzliche Abfrage unterbringen, die dazu führt, dass, wenn kein Wert übergebe wird, immer alle ausgewählten Datensätze gültig sind, also etwas in der Art von:

<QUERY entityType="LegalEntities">

<FILTERPARAM parameter="fakeId" datatype="java.lang.Integer" value="2147483647"/>

<FILTERPARAM parameter="CountryId" datatype="java.lang.Integer" value="1234"/>

<OR>

<LTE attribute="fs_id" parameter="fakeId"/>

<EQ attribute="countries.fs_id" parameter="CountryId"/>

</OR>

</QUERY>

und dann mit einer zweiten Regel dafür sorgen, dass diese Abfrage immer fehlschlägt, z.B. mit

<RULE when="ONLOCK">

<WITH>

<NUMBER>-1</NUMBER>

</WITH>

<DO>

<PROPERTY name="query.fakeId" source="st_legalEntities"/>

</DO>

</RULE>

ich hoffe, dass hilft weiter.

Viele Grüße

Holger

0 Kudos