Startseite / Vorlagenentwicklung / Formulare / Eingabekomponenten / Migrationsleitfaden für FS_LIST / FS_LIST, Typ INLINE → FS_CATALOG
FS_LIST, Typ INLINE → FS_CATALOG
Inhaltsverzeichnis |
Bei einer Umstellung von FS_LIST zu FS_CATALOG ist folgendes zu beachten.
Wenn Daten mit FS_CATALOG gespeichert wurden, können diese bei einer evtl. späteren Rückkehr zur FS_LIST (aufgrund eines abweichenden Datenformats) nicht mehr von FS_LIST gelesen und interpretiert werden.
Aktionen und Regeln
Während in FS_LIST-Komponenten auf dem Formular-Register über das <ACTIONS>/<ACTION>-Tag definiert wird, welche Bearbeitungsmöglichkeiten (z. B. „Neu“, „Bearbeiten“, „Löschen“) zur Verfügung stehen sollen, wird dies in FS_CATALOG über das Regel-Register definiert.
Hierbei ist zu beachten, dass die Einblende-Logik der verfügbaren ACTIONs umgekehrt ist. Wenn eine der ACTIONs für die FS_LIST definiert wurde, braucht für die FS_CATALOG nichts getan zu werden. Fehlt in der FS_LIST eine ACTION, so muss diese für die FS_CATALOG Eingabekomponente explizit ausgeblendet werden.
Folgende ACTIONs für die FS_LIST stehen in der FS_CATALOG Eingabekomponente automatisch zur Verfügung, können aber explizit ausgeblendet werden:
ADD / NEW / REMOVE / EDIT / DELETE
Folgende ACTIONs stehen automatisch zur Verfügung und können nicht deaktiviert werden:
VIEW / UP / DOWN
Folgende ACTIONs werden von FS_CATALOG nicht unterstützt:
COPY / GOTO
Formularbeispiel
Formulardefinition der Eingabekomponente FS_LIST:
<FS_LIST name="BEZEICHNER" hFill="yes" rows="10">
<DATASOURCE type="inline" useLanguages="no" maxEntries="1">
<ACTIONS>
<ACTION name="ADD"/>
<ACTION name="REMOVE"/>
<ACTION name="UP"/>
<ACTION name="DOWN"/>
<ACTION name="EDIT"/>
</ACTIONS>
<COLUMNS>
<COLUMN show="no">#identifier</COLUMN>
</COLUMNS>
<LAYOUT>
<ADD component="toolbar" constraint="top"/>
<ADD component="overview" constraint="center"/>
<ADD component="singleview" constraint="bottom"/>
</LAYOUT>
<TEMPLATES source="sectiontemplates">
<TEMPLATE uid="mysections"/>
</TEMPLATES>
</DATASOURCE>
<LANGINFOS>
<LANGINFO lang="*" label="Absätze bearbeiten"/>
</LANGINFOS>
</FS_LIST>
In diesem Beispiel werden für die FS_LIST alle Buttons bis auf „NEW“ erlaubt, d.h. für FS_CATALOG muss über eine Regel der „NEW“ Button ausgeblendet werden.
Formulardefinition der Eingabekomponente FS_CATALOG:
<FS_CATALOG name="BEZEICHNER" useLanguages="no">
<LANGINFOS>
<LANGINFO lang="*" label="Datensatzauswahl"/>
</LANGINFOS>
<TEMPLATES type="section">
<TEMPLATE uid="mysections"/>
</TEMPLATES>
</FS_CATALOG>
Regeldefinition der Eingabekomponente FS_CATALOG:
<RULES>
<RULE when="ONLOCK">
<WITH>
<FALSE/>
</WITH>
<DO>
<PROPERTY name="NEW" source="BEZEICHNER"/>
</DO>
</RULE>
</RULES>
Beschriftungen
Die Beschriftung von Einträgen einer FS_LIST-Eingabekomponente wird mithilfe von #item.BEZEICHNER innerhalb des LABELS/LABEL-Tags modelliert. Die Beschriftung von Einträgen einer FS_CATALOG-Eingabekomponente wird nicht innerhalb der Formulardefinition sondern über eine entsprechende Schnipseldefinition vorgenommen. Hierzu wird die Schnipsel-Definition der gewählten Absatz-/Verweisvorlagen verwendet.
Höhe der Eingabekomponente
Der Parameter height bezieht sich im Falle von FS_LIST-Komponenten auf die Höhe in Pixeln, bei FS_CATALOG auf die Anzahl der Zeilen.
Anzahl der Einträge
In FS_LIST-Komponenten wird mithilfe des Parameters maxEntries festgelegt, wie viele Einträge hinzugefügt werden dürfen. In FS_CATALOG wird dies über eine Regel mit der Eigenschaft SIZE erreicht.
Ausgabe
Werden Einträge mittels $CMS_FOR(...)$ ausgegeben, muss im Falle des FS_CATALOG der Methodenaufruf .getItem (oder in Bean-Syntax .item) ergänzt werden:
FS_LIST
$CMS_FOR(VARIABLE, LISTENNAME)$
$CMS_VALUE(VARIABLE.ELEMENT)$
$CMS_END_FOR$
In diesem Beispiel ist LISTENNAME der Bezeichner der FS_LIST-Komponente und ELEMENT der Variablenname der gewünschten Eingabekomponente in der gewählten Absatz- oder Verweisvorlage.
FS_CATALOG
$CMS_FOR(VARIABLE, LISTENNAME)$
$CMS_VALUE(VARIABLE.item.ELEMENT)$
$CMS_END_FOR$
Beispiel-Skripte
Script: FS_CATALOG auslesen
final FormData myFormData = section.getFormData();
final FormField myFsCatalogFormField = myFormData.get(lang, "st_myFsCatalog");
final Catalog myFsCatalog = (Catalog) myFsCatalogFormField.get();
final Iterator<Catalog.Card> cardIterator = myFsCatalog.iterator();
while (cardIterator.hasNext()){
final Catalog.Card card = cardIterator.next();
final Template sectionOrLinkTemplate = card.getTemplate();
final FormData formData = card.getItem();
Integer myNumber = (Integer) formData.get(lang, "st_number").get();
}
Script: FS_CATALOG leeren
//Clear Catalog of all cards
myFsCatalog.clear();
Script: Neue CatalogCard erzeugen
//Create new card
final FormsAgent formsAgent = context.requireSpecialist(FormsAgent.TYPE);
final Form form = formsAgent.getForm(sectionTemplate.getGomSource());
final FormData formData = form.createFormData();
final Catalog.Card newCard = myFsCatalog.create(sectionTemplate, formData);
myFsCatalog.add(newCard);
Verwendung von Systemobjekten
Das Systemobjekt #sectionList wird nur für die Eingabekomponente FS_LIST, Type INLINE verwendet.
Bei der Umstellung von FS_LIST zu FS_CATALOG muss gegebenenfalls auch das Systemobjekt #sectionList zu #fs_catalog migriert werden.
FS_LIST
Nummerierte Ausgabe in der Absatzvorlage (HTML-Vorlagensatz):
<CMS_HEADER />
$CMS_IF(!#index.isNull && !#sectionList.size.isNull)$
$CMS_VALUE(#index + 1)$/$CMS_VALUE(#sectionList.size)$:
$CMS_END_IF$
$CMS_VALUE(st_text)$
<br>
FS_CATALOG
Nummerierte Ausgabe in der Absatzvorlage (HTML-Vorlagensatz):
<CMS_HEADER />
$CMS_IF(!#index.isNull && !#fs_catalog.size.isNull)$
$CMS_VALUE(#index + 1)$/$CMS_VALUE(#fs_catalog.size)$:
$CMS_END_IF$
$CMS_VALUE(st_text)$
<br>