Erweiterungen der Belegerfassung

Allgemeines

Im Bereich der Belegerfassung könnte man das Erweitern der Funktionen in drei Hauptbereiche unterteilen.

  • Erweiterungen der Erfassung und/oder der Bearbeitung eines Beleges
    • zusätzliche Daten anzeigen
    • zusätzliche Daten zur Bearbeitung zur Verfügung stellen, oder Geschäftsprozesse ausführen
    • auf Eingaben reagieren
  • Erweiterungen vor dem Speichern eines Beleges
    • mit Interaktion des Anwenders
    • ohne Interaktion des Anwenders
  • Erweiterungen nach dem Speichern eines Beleges

Es gibt in allen Bereichen mehrere Möglichkeiten bestehende Funktionen zu erweitern. Das Prinzip ist dabei immer gleich. Die nachfolgenden Beschreibungen beschränken sich auf das Wesentliche. Die Details sind in Funktionsaufrufe in Kontextmenüs und Makro-Funktionalität beschrieben. Ein Teil der Erweiterungen bedingen die Verwendung von Dynamic-Dll-Schnittstellen. Die Properties dieser DCMs werden nicht erläutert, da diese im Developer Handbuch beschrieben sind. Ferner wird Im Developer Handbuch erläutert, welche DCM die CM in der alten Technologie ersetzt.

Erweiterungen der Erfassung und/oder der Bearbeitung eines Beleges

Zusätzliche Daten

Bei der Erweiterung um zusätzliche Daten (gilt auch für Daten, die der Anwender nicht im UI sieht, also z.B. Flags zur Steuerung) in einem Data-Edit-Element vom Typ "Erfassung" gilt immer folgender Ablauf:

  • Erweiterung des UIs
  • Datentransfer zwischen Client und Server

benutzerdefinierte Felder

Benutzerdefinierte Felder gehören zur Applikation. Sie sind sowohl dem Client, also auch dem Server bekannt und stehen nach Anlage im Administrator in der Konfiguration des Clients zur Verfügung.

Erweiterung des UIs (zusätzliche Daten zum Beleg)

  • Anlage der Datenstruktur, die erweitert werden soll mit der Eigenschaft "Anhängen an Datenstruktur der Partner-Kennung" = "Sage.Wawi"
  • Anlage der Datenstruktur-Felder
  • Anlage des Daten-Edit-Elementes mit der Eigenschaft "Anhängen an Daten-Edit-Element der Partner-Kennung" = "Sage.Wawi"

Frage: Sollen die zusätzlichen Daten in einem neuen Register angezeigt werden?

  • Die Antwort ist Ja
    • Anlage des neuen Registers
  • Die Antwort ist Nein
    • Anlage des Registers mit Aktivierung der Eigenschaft "Feld-Attribute anhängen?"

Frage: Sollen die zusätzlichen Daten in einer neuen Feldgruppe angezeigt werden?

  • Die Antwort ist Ja
    • Anlage der neuen Feldgruppe
  • Die Antwort ist Nein
    • Anlage der Feldgruppe mit Aktivierung der Eigenschaft "Feld-Attribute anhängen?"
  • Anlage der Data-Edit-Element-Felder

Erweiterung des UIs (zusätzliche Daten zur Position)

  • Anlage der Datenstruktur, die erweitert werden soll mit der Eigenschaft "Anhängen an Datenstruktur der Partner-Kennung" = "Sage.Wawi"
  • Anlage der Datenstruktur-Felder
  • Anlage des Multi-Data-Edit-Elementes mit der Eigenschaft "Anhängen an Multi-Data-Edit-Element der Partner-Kennung" = "Sage.Wawi"
  • Anlage der Vorlage Standard mit Aktivierung der Eigenschaft "Feld-Attribute anhängen?"
  • Anlage der Multi-Data-Edit-Element-Felder
  • Anlage des Daten-Edit-Elementes mit der Eigenschaft "Anhängen an Daten-Edit-Element der Partner-Kennung" = "Sage.Wawi"

Frage: Sollen die zusätzlichen Daten im Register "Positionen" in einer neuen Feldgruppe angezeigt werden?

  • Die Antwort ist Ja
    • Anlage der neuen Feldgruppe
  • Die Antwort ist Nein
    • Anlage der Feldgruppe mit Aktivierung der Eigenschaft "Feld-Attribute anhängen?"
  • Anlage der Data-Edit-Element-Felder
    • Eigenschaft "Spaltennummer" = 0
    • Eigenschaft "Zeilennummer" = 1

Frage: Sollen die Daten im festen Bereich (z.B. hinter der Artikelnummer) des Grids angezeigt werden?

  • Die Antwort ist Ja
    • Eigenschaft "Spaltennummer" > 0
    • Eigenschaft "Zeilennummer" = 0

Frage: Sollen die Daten im im Grid angezeigt werden?

  • Die Antwort ist Ja
    • Eigenschaft "Spaltennummer" > 0
    • Eigenschaft "Zeilennummer" = 1

Erweiterung des UIs (1.N-Beziehung zum Beleg)

  • Anlage der Datenstruktur
  • Anlage der Datenstruktur-Felder
  • Anlage der Datenstruktur strEKBeleg oder strVKBeleg mit der Eigenschaft "Anhängen an Datenstruktur der Partner-Kennung" = "Sage.Wawi"
  • Zuordnung der neuen Datenstruktur in der Eigenschaft "Detail-Datenstrukturen"
  • Anlage des Multi-Data-Edit-Elementes
  • Anlage der Multi-Data-Edit-Element-Felder
  • Anlage des Daten-Edit-Elementes mit der Eigenschaft "Anhängen an Daten-Edit-Element der Partner-Kennung" = "Sage.Wawi"

Frage: Sollen die zusätzlichen Daten in einem neuen Register angezeigt werden?

  • Die Antwort ist Ja
    • Anlage des neuen Registers
  • Die Antwort ist Nein
    • Anlage des Registers mit Aktivierung der Eigenschaft "Feld-Attribute anhängen?"

Frage: Sollen die zusätzlichen Daten in einer neuen Feldgruppe angezeigt werden?

  • Die Antwort ist Ja
    • Anlage der neuen Feldgruppe
  • Die Antwort ist Nein
    • Anlage der Feldgruppe mit Aktivierung der Eigenschaft "Feld-Attribute anhängen?"
  • Anlage eines Data-Edit-Element-Feldes mit Namen = virtueller Feldname der Eigenschaft "Detail-Datenstrukturen" und "Typ" = "Unterelement"
  • Zuordnung des Multi-Data-Edit-Elementes

Datentransfer zwischen Client und Server

Frage: Gehören die zusätzlichen Daten zum Beleg?

  • Die Antwort ist Ja
    • Implementierung der DCM EKBelegProxyContainerToBeleg/ VKBelegProxyContainerToBeleg und EKBelegProxyBelegToContainer/ VKBelegProxyBelegToContainer

Frage: Gehören die zusätzlichen Daten zur Position?

  • Die Antwort ist Ja
    • Implementierung der DCM EKBelegPositionProxyContainerPositionToBelegPosition/ VKBelegPositionProxyContainerPositionToBelegPosition und EKBelegPositionProxyBelegPositionToContainerPosition/ VKBelegPositionProxyBelegPositionToContainerPosition
  • Die DCMs werden bei Verwendung einer VBA-Methode des Applikationsdienstes oder eines lokalen .NET-DLL-Applikations-Service (wenn das Belegobjekt mit BelegHandler.FromDataContainer und der DataContainer mit BelegHandler.ToDataContainer erzeugt werden) clientseitig ausgeführt.

Aktuell verwendet Sage selber VBA-Methoden des Applikationsdienstes (z.B. Variantenmatrix, Zubehördialog, Eingabe aller 1:N:M-Beziehungen etc.). Die Assembly, die diese DCMs implementiert hat, muss immer auf dem Client und auf dem Server installiert werden.


Handelt es sich bei den zusätzlichen Daten um eine Abbildung einer Klasse oder einer Collection eines Geschäftsprozesses, so sind diese Daten in einer flachen Struktur in den DCMProperties zu hinterlegen. Da das Belegobjekt auch clientseitig verwendet wird, wird unter anderem auch die Interopschicht des Parameterbags verwendet. Diese Schicht kennt keine Klassen und Collections.

Beispiel: Erweiterungen der Erfassung und/oder der Bearbeitung eines Beleges

Erweiterungen vor dem Speichern eines Beleges

Mit Interaktion des Anwenders (Validierung und Interaktion)

  • Es ist das Ereignis „Vor Änderung“ der Datenstruktur zu verwenden
  • Es ist zu prüfen, ob das Ereignis noch auf dem Client ausgeführt wird (IsRunningOnServer() = False)
  • Die Validierung ist ein
    • Execute des Daten-Service (mit serverseitige DCM)
    • Eine VBA Methode des Applikations-Service (VBA-Methode mit Übergabe des Belegobjektes)
    • Ein lokalen .NET-DLL-Applikations-Service (mit Übergabe des aktuellen DataContainer aus dem ein Belegobjekt erzeugt werden kann)
    • Ein VBA-Aufruf (nur wenn das Belegobjekt für eine Validierung nicht benötigt wird)
    • Makro AufrufenDLL (serverseitige Ausführung, nur wenn das Belegobjekt für eine Validierung nicht benötitg wird)

Frage: Soll das Speichern nach der Interaktion mit dem Anwender abgebrochen werden

  • Die Antwort ist Ja
    • Es ist der Makro-Befehl „Abbruch“ zu verwenden
  • Die Antwort ist Nein
    • Für Interaktionen habe Sie diese Möglichkeiten
      • Aufruf eines Accessformulars mit einer VBA Methode des Applikations-Service
      • Aufruf eines Accessformulars mit einer VBA Methode (ohne Möglichkeit Daten an die Erfassung zurückzugeben)
      • Aufruf eines Formulars eines lokalen .NET-DLL-Applikations-Service
      • Makrobefehl „SelektionsdialogÖffnen“
        • Die Daten der Felder der Datenstruktur können als lokale Variable (also „_“ + Feldname) nachfolgend im Makro verwendet werden
        • Der Selektionsdialog kann nur Felder aufnehmen. Komplizierte Strukturen, wie eine Liste (analog Multi-Daten-Edit-Element) sind nicht möglich
  • Werden Daten unabhängig vom Belegobjekt (genauer: die das Belegobjekt nicht behandelt) zur Validierung oder zur Steuerung verwendet, dann sind diese Daten mit den DCMs EKBelegProxyBelegToContainer/ VKBelegProxyBelegToContainer und VKBelegProxyContainerToBeleg/ VKBelegProxyContainerToBeleg (auf Ebene des Beleges) und EKBelegPositionProxyBelegPositionToContainerPosition/ VKBelegPositionProxyBelegPositionToContainerPosition und EVKBelegPositionProxyContainerPositionToBelegPosition/ VKBelegPositionProxyContainerPositionToBelegPosition (auf Ebene der Position) für den Transfer zwischen Client und Server zu implementieren
    • Die DCMs werden bei Verwendung einer VBA-Methode des Applikationsdienstes oder eines lokalen .NET-DLL-Applikations-Service (wenn das Belegobjekt mit BelegHandler.FromDataContainer und der DataContainer mit BelegHandler.ToDataContainer erzeugt werden) clientseitig ausgeführt.

Aktuell verwendet Sage selber VBA-Methoden des Applikationsdienstes (z.B. Variantenmatrix, Zubehördialog, Eingabe aller 1:N:M-Beziehungen etc.). Die Assembly, die diese DCMs implementiert hat, muss immer auf dem Client und auf dem Server installiert werden.


Handelt es sich bei den zusätzlichen Daten um eine Abbildung einer Klasse oder einer Collection eines Geschäftsprozesses, so sind diese Daten in einer flachen Struktur in den DCMProperties zu hinterlegen. Da das Belegobjekt auch clientseitig verwendet wird, wird unter anderem auch die Interopschicht des Parameterbags verwendet. Diese Schicht kennt keine Klassen und Collections.

Ohne Interaktion (Validierung, Geschäftsprozess und gegebenenfalls Verwendung des Meldungsstacks)

Validierung und gegebenenfalls Verwendung des Meldungsstacks

  • Implementierung der DCM EKBelegProxyBelegValidateSave/ VKBelegProxyBelegValidateSave

Beispiel: Erweiterungen vor dem Speichern eines Beleges

Geschäftsprozess und gegebenenfalls Verwendung des Meldungsstacks

  • Implementierung der DCM EKBelegBeforeSave/ VKBelegBeforeSave und/oder EKBelegSave/ EKBelegSave

Die DCMs EKBelegProxyBeforeSave/ VKBelegProxyBeforeSave und EKBelegProxyAfterSave/ VKBelegProxyAfterSave werden vor bzw. nach der Transaktion ausgeführt.

Beispiel: Erweiterungen vor dem Speichern eines Beleges