Search the FirstSpirit Knowledge Base
Hey Community,
ich möchte in meinem Formular einen Datensatz auswählen und benötige eine Eingabekomponente, die nur den Wert einer bestimmten Spalte des gewählten Datensatzes speichert. Der Wert der Eingabekomponente soll dem der Spalte entsprechen und nicht dem Datensatzobjekt.
Konkret brauche ich das, weil der Wert der Spalte über GenericAttributes an das SAP Portal weiter gegeben werden soll.
Beispiel:
Tabelle: Person
id name city ...
-------------------------------------------
1 Meier New York ...
2 Müller Paris ...
3 Schulze Barcelona ...
Ich möchte jetzt einen Datensatz, z.B. id=1 (Meier) in meinem Formular auswählen, der Wert der Komponente soll dabei aber "Meier" sein und nicht das gesamte Objekt "<VALUE uid="DB_Schema.person"><KEY><ITEM>1</ITEM></KEY></VALUE>" .
Beispiel:
<FS_DATASET name="fs_portal_person" mode="combobox">
<LANGINFOS>
<LANGINFO lang="*" label="Name" expression="#item.name"/>
</LANGINFOS>
<SOURCES>
<CONTENT name="person"/>
</SOURCES>
</FS_DATASET>
Im portal xml steht dann:
<GenericAttribute name="person" value="<VALUE uid="DB_Schema.person"><KEY><ITEM>1792</ITEM></KEY></VALUE>" />
ich will aber
<GenericAttribute name="person" value="Meier" />
An Datensatzauswahlkomponenten stehen mir wenn ich das richtig sehe folgende Objekte zur Verfügung:
- FS_DATASET entfällt aber, da es für den Modus "Combobox" zu viele Einträge in der Tabelle gibt und der Modus "Dialog" viel zu viele Klicks erfordert, um einen einzigen Datensatz auszuwählen (erst Öffnen, dann entsprechende Tabelle suchen und wählen, dann Datensatz wählen).
- Checkboxen und Comboboxen entfallen, da es zu viele Einträge gibt und wir eine Suche benötigen.
- CMS_INPUT_CONTENTLIST trifft noch am ehesten das was wir brauchen:
<CMS_INPUT_CONTENTLIST name="fs_portal_person" maxEntries="1" rows="2" table="DB_Schema.person" useLanguages="no">
<LANGINFOS>
<LANGINFO lang="*" label="TEXT"/>
</LANGINFOS>
</CMS_INPUT_CONTENTLIST>
Aber auch hier das Problem, dass der Wert von "fs_portal_person" immer das Objekt enthält und ich keine Spalte angeben kann.
Die nächste Überlegung ist über einen Button ein Script aufrufen, welches einen Auswahldialog zur Verfügung stellt und automatisch die gewünschte Zeile in ein readonly Textfeld schreibt, sowas wie
<FS_BUTTON name="cs_select_person" onClick="script:select_person" useLanguages="no">
<LANGINFOS>
<LANGINFO lang="*" label="wähle Person"/>
</LANGINFOS>
<PARAMS>
<PARAM name="textfield">#field.fs_portal_person</PARAM>
</PARAMS>
</FS_BUTTON>
<CMS_INPUT_DOM name="fs_portal_person" editable="no">
<LANGINFOS>
<LANGINFO lang="*" label="Person" description="Person"/>
</LANGINFOS>
</CMS_INPUT_DOM>
Aber wie kann ich per Script einen Datensatz auswählen?
Eine andere Idee ist, erst im Nachgang den Namen aus dem gewählten Datensatz zu lesen. Aber an welcher Stelle mache ich das? Wenn ich das richtig sehe ist es mit 4.2 nicht möglich, an die Speicherroutine ein Skript zu setzen. Und ich möchte ungerne ein Script im generate & deploy Mechanismus einsetzen, welches dann noch mal alle Objekte durchläuft und den Wert liest und schreibt.
Hat hier jemand eine Idee?
Danke für die Info und viele Grüße,
Steffi
FirstSpirit Client 4.2.446.45868
Server: srv-spirit-entw.xxx.local:8000 (HTTP)
Benutzer: Admin
Version Server: 4.2.446.45868
Lizensiert für: xxx
Speicher: 35,14 von 123,75 MByte belegt
Java Version: 1.6.0_25 32bit Sun Microsystems Inc.
Betriebssystem: Windows 7 6.1 x86
Hallo Steffi,
Du bist da schon auf einem guten Weg.
Aber wie kann ich per Script einen Datensatz auswählen?
Ein Weg wäre z.B. das Anlegen der 3 geposteten Eingabekomponenten hintereinander:
1) CMS_INPUT_CONTENTLIST zum Auswählen des Datensatzes (fs_portal_person)
2) FS_BUTTON zum Übernehmen der Änderungen. Dieser führt dann ein Script aus, welches als Parameter die Komponenten 1 und 3 bekommt. Das Script liest dann den Spaltenwert des in 1 ausgewählten Datensatzes und schreibt den Wert in 3.
3) CMS_INPUT_TEXT (oder auch DOM, wobei dann aber kein editable="no" möglich ist) um den Spaltenwert zu speichern und dann später in das Portal zu schreiben
Ich hoffe dieser Ansatz erfüllt alle Anforderungen.
Viele Grüße
Rouven
Hallo Rouven,
vielen Dank für den Ansatz!
Sowas habe ich mir auch schon überlegt. Leider muss dann der Redakteur mehrfach klicken, also zuerst den Datensatz auswählen und dann noch auf den Button klicken. Das ist dem Fachbereich leider zu kompliziert... 🙂
Im Moment tendiere ich dazu, einfach ein Freitextfeld zu nehmen...
Dankeschön und viele Grüße,
Steffi