Anhängen an… Felder an ein Daten-Edit-Element

Ein Daten-Edit-Element kann für drei Verwendungszwecke erstellt werden.

  • Erfassung
  • Stammdatendialog für ein Geschäftsobjekt
  • Stammdatendialog für einen Datensatz

Sollen neue Felder (keine benutzerdefinierten Felder) in einem bestehenden Daten-Edit-Element integriert werden, dann spielt der Verwendungszweck eine entscheidende Rolle. Der Mechanismuss des „Anhängen an…“ bleibt zwar gleich, der Transfer der neuen Felder zwischen Client und Server ist aber unterschiedlich und verursacht auch mehr oder weniger Aufwand. Der generelle Unterschied soll an Beispielen erläutert werden.

Stammdatendialog für einen Datensatz

Beispiel: Pro Artikelvariante soll festgehalten werden, ob und wann ein Preis geprüft wurde.

Folgende Datenbankänderung ist durchzuführen:

ALTER TABLE KHKArtikelVarianten
ADD BPK_IstPreisGeprueft	KHKBoolean NOT NULL DEFAULT 0,
    BPK_PreisGeprueftAm	Date NULL

(BPK = Business Partner Kürzel)

In den Metadaten ist folgendes zu hinterlegen:

  • Datensatz „recArtikelstamm”
    • „Anhängen an Datensatz der Partner-Kennung“ = „Sage.Wawi“
  • Feld „BPK_IstPreisGeprueft“ in „recArtikelstamm”
    • „Titel“ = „Preis geprüft“
    • „SQL-Abfrage Tabelle 2“ = „KHKArtikelVarianten.BPK_IstPreisGeprueft“
    • „Datentyp“ = „Indizierter String“
    • „Datentyp Ergänzung“ = Index = -1, Common.-1.Sage.System und Index = 0, Common.0.Sage.System
  • Feld „BPK_PreisGeprueftAm“ in „recArtikelstamm”
    • „Titel“ = „Preis geprüft am“
    • „SQL-Abfrage Tabelle 2“ = „KHKArtikelVarianten.BPK_PreisGeprueftAm“
    • „Datentyp“ = „Date“
  • Daten-Edit-Element „ediArtikelstamm“
    • „Anhängen an Daten-Edit-Element der Partner-Kennung“ = „Sage.Wawi“
  • Daten-Element-Register „Grundlagen“
    • „Feld-Attribute anhängen?“ aktivieren
  • Daten-Element-Feldgruppe „Beschaffung“
    • „Feld-Attribute anhängen?“ aktivieren
  • Daten-Edit-Element-Feld „BPK_IstPreisGeprueft“ anlegen oder importieren
  • Daten-Edit-Element-Feld „BPK_PreisGeprueftAm“ anlegen oder importieren

Wenn Sie jetzt den Artikelstamm aufrufen, dann stehen Ihnen die beiden Felder zur Verfügung. Sie können pro Variante die Daten ändern und speichern. Es sind keine weiteren Aktionen nötig.

Wie in Anhängen an… beschrieben, wird vor der Verwendung der Metadatenobjekte in der Applikation, die anghängten Metadatenobjekte mit den Original-Metadatenobjekte zusammengeführt. Bei dem Verwendungszweck „Stammdatendialog für einen Datensatz“ werden die SQL-Statements SELECT, INSERT und UPDATE um die angehängten Felder erweitert und als ein Datensatz behandelt.

In diesen Beispielen geht es darum, die Unterschiede zwischen den Verwendungszwecken eines Daten-Edit-Elementes zu zeigen. Eigene Felder werden im Gegensatz zu benutzerdefinierten Feldern bei Datenbankaktionen im Administrator nicht berücksichtigt.

Stammdatendialog für ein Geschäftsobjekt oder Erfassung

Beispiel: In der Einkaufsbelegerfassung sollen die Dispositionsdaten „Meldebestand“ und „Bestellmenge“ im Positionsgrid angezeigt werden.

Die beiden Felder werden als editierbare Felder angelegt. Es soll hier in erster Linie der Unterschied zu Anhängen an… aufgezeigt werden. Am Schluss werden wir dieses Beispiel dann komplettieren (nur Anzeige, Ermittlung der Daten).

In den Metadaten ist folgendes zu hinterlegen:

  • Datenstruktur „strEKBelegPosition”
    • „Anhängen an Datenstruktur der Partner-Kennung“ = „Sage.Wawi“
  • Feld „BPK_Meldebestand“ in „strEKBelegPosition”
    • „Titel“ = „Meldebestand“
    • „Datentyp“ = „Decimal“
    • „Nachkommastellen“ = „variabel“
  • Feld „BPK_Bestellmenge“ in „strEKBelegPosition”
    • „Titel“ = „Bestellmenge“
    • „Datentyp“ = „Decimal“
    • „Nachkommastellen“ = „variabel“
  • Multi-Daten-Edit-Element „mdeEKBelegPositionen”
    • „Anhängen an Multi-Daten-Edit-Element der Partner-Kennung“ = „Sage.Wawi“
  • Multi-Daten-Edit-Element-Vorlage „Standard“
    • „Feld-Attribute anhängen?“ aktivieren
  • Feld „BPK_Meldebestand“ in Vorlage „Standard“ anlegen
    • „Spaltennummer“ = „5“
    • „Zeilennummer“ = „2“ (mit Spalten- und Zeilennummer Anzeige im Grid nach Langtext)
    • „Feldbreite“ = „1“
  • Feld „BPK_Bestellmenge“ in Vorlage „Standard“ anlegen
    • „Spaltennummer“ = „6“
    • „Zeilennummer“ = „2“ (mit Spalten- und Zeilennummer Anzeige im Grid nach Meldebestand)
    • „Feldbreite“ = „1“
  • Daten-Edit-Element „ediEKBelegerfassung”
    • „Anhängen an Daten-Edit-Element der Partner-Kennung“ = „Sage.Wawi“
  • Daten-Element-Register „Positionen“
    • „Feld-Attribute anhängen?“ aktivieren
  • Daten-Element-Feldgruppe „Positionensgrid“
    • „Feld-Attribute anhängen?“ aktivieren
  • Feld „BPK_Meldebestand“ in Feldgruppe „Positionensgrid“ anlegen
  • Feld „BPK_Bestellmenge“ in Feldgruppe „Positionensgrid“ anlegen

Wenn Sie jetzt die Belegerfassung des Einkaufs aufrufen, einen Lieferanten und eine Position erfassen, dann stehen Ihnen die beiden Felder im Positionsgrid zur Verfügung und es können Daten eingegeben werden. Erfassen Sie aber z.B. eine zweite Position, dann leeren sich die beiden neuen Felder der ersten Position. Für die hier besprochenen Verwendungszwecke reicht also die Anlage der Metadaten nicht aus.

Im Gegensatz zum Datensatz muss das Geschäftsobjekt das Lesen, Schreiben und Aktualisieren übernehmen. Das System benötigt die Schnittstelle, in der die CRUD- und Execute-Methoden hinterlegt sind. Über diese Schnittstellen schickt der Client die Daten vom Typ DataContainer an den Server. Der Server hat nun zwei Möglichkeiten auf den Request zu reagieren. Zum einen kann er eine Aktion ausführen und geänderte Daten in den DataContainer schreiben und diesen dann an den Client schicken. Zum anderen kann der Server aber auch eine neue Instanz eines DataContainer erstellen und auf Basis des Geschäftsobjektes diesen füllen und an den Client zurück schicken. Dieses Verfahren wird z.B. in der Belegerfassung angewendet. Das Belegobjekt kennt aber die beiden neuen Felder nicht. Sie sind daher auch nicht in dem auf serverseite erstellten DataConatiner enthalten und werden damit nach dem Response auf dem Client nicht behandelt und damit leer angezeigt. Die Felder werden aber nach wie vor auf dem Client angezeigt, da hier die zusammengeführten Metadatenobjekte gerendert werden.

In solch einen Fall muss man selber für den Transfer zwischen Client und Server sorgen. Die Applikation muss dafür Schnittstellen (DCMs) zur Verfügung stellen. Bei der Belegerfassung sind dies die DCMs EK/VKBelegProxyContainerToBeleg (Erstellung des Belegobjektes aus dem DataContainer) und EK/VKBelegProxyBelegToContainer (Erstellung des DataContainer aus dem Belegobjekt) auf Beleg- und EK/VKBelegPositionProxyContainerPositionToBelegPosition und EK/VKBelegPositionProxyBelegPositionToContainerPosition auf Positionsebene.

Es gilt nun die Daten der beiden Felder aus dem DataContainer des Request zu sichern und aus dieser Sicherung die Daten in den DataContainer des Response zu schreiben. Die Sicherung erfolgt wie gewohnt über den Parameterbag DCMProperties des Positionsobjektes.

Ein komplettes Beispiel für das Hinzufügen eines neuen Feldes, sowie die dazugehörige Codierung finden Sie in Erweiterungen der Erfassung und/oder der Bearbeitung eines Beleges im Bereich "Zusätzliche Daten".