wiki-spaces-s1-pages-198344705-version-plus-8-dot-1.md
By Andreas Langmaack (Unlicensed)
Oct 02, 2018
12 min
Add a reaction
Die Version ist binärinkompatibel
DevExpress Version 17.2.6.0
Stimulsoft Version 2018.2.3.0
In der nächsten Version ändert sich im Bereich "Feld-Attribute anhängen?" für die Eigenschaft "Sichtbarkeit" folgendes Verhalten: Felder mit "Sichtbarkeit = Versteckt" können durch die Eigenschaft "Feld-Attribute anhängen?" nicht mehr geändert werden. Da einige Felder in den Belegerfassungen im Standard auf "Sichtbarkeit = Versteckt" eingestellt sind, aber durchaus auch in den Erfassungen angezeigt werden könnten, werden diese Felder des Standards geändert.
Zeilennummer von 0 auf 1
Sichtbarkeit von Versteckt auf Eingeblendet
Deaktiviert = True
Mit TAB anspringen? = False
Anlage in Feldgruppe „PositionSonstiges“ mit
Position = 0
Sichtbarkeit = Eingeblendet
Deaktiviert = True
Mit TAB anspringen? = False
Sichtbarkeit von Versteckt auf Eingeblendet
Deaktiviert = True
Mit TAB anspringen? = False
Schreibschutz? = True
Anlage in Feldgruppe „PositionSonstiges“ mit
Position = 0
Sichtbarkeit = Eingeblendet
Deaktiviert = True
Mit TAB anspringen? = False
Sichtbarkeit von Versteckt auf Eingeblendet
Deaktiviert = True
Mit TAB anspringen? = False
Anlage in Feldgruppe „PositionSonstiges“ mit
Position = 0
Sichtbarkeit = Eingeblendet
Deaktiviert = True
Mit TAB anspringen? = False
Anlage in Vorlage Standard mit
Spaltennummer = 0
Zeilennummer = 1
Sichtbarkeit = Eingeblendet
Deaktiviert = True
Mit TAB anspringen? = False
Anlage in Feldgruppe „Positionseinheiten“ mit
Position = 0
Sichtbarkeit = Eingeblendet
Deaktiviert = True
Mit TAB anspringen? = False
Anlage in Vorlage Standard mit
Spaltennummer = 0
Zeilennummer = 1
Sichtbarkeit = Eingeblendet
Deaktiviert = True
Mit TAB anspringen? = False
Anlage in Feldgruppe „Positionseinheiten“ mit
Position = 0
Sichtbarkeit = Eingeblendet
Deaktiviert = True
Mit TAB anspringen? = False
Anlage in Vorlage Standard mit
Spaltennummer = 0
Zeilennummer = 1
Sichtbarkeit = Eingeblendet
Deaktiviert = True
Mit TAB anspringen? = False
Anlage in Feldgruppe „Positionseinheiten“ mit
Position = 0
Sichtbarkeit = Eingeblendet
Deaktiviert = True
Mit TAB anspringen? = False
Feldtitel von VKMittlererEKPreis in kalkulatorischer EK
Schreibschutz? deaktiviert
Der Schreibschutz wird durch serverseitige Codierung sichergestellt (Feld ist in der ReadOnlyFieldList). Durch die Deaktivierung der Eigenschaft „Schreibschutz?“ wird bei programmatische Änderung des Feldes der Beleg Dirty.
Zeilennummer = 1
Feldbreite = 6
Sichtbarkeit von Versteckt auf Eingeblendet
Deaktiviert = True
Mit TAB anspringen? = False
Anlage in Feldgruppe „PositionSonstiges“ mit
Position = 0
Sichtbarkeit = Eingeblendet
Deaktiviert = True
Mit TAB anspringen? = False
Zeilennummer = 1
Feldbreite = 6
Sichtbarkeit von Versteckt auf Eingeblendet
Deaktiviert = True
Mit TAB anspringen? = False
Anlage in Feldgruppe „PositionSonstiges“ mit
Position = 0
Sichtbarkeit = Eingeblendet
Deaktiviert = True
Mit TAB anspringen? = False
Zeilennummer von 0 auf 1
Sichtbarkeit von Versteckt auf Eingeblendet
Deaktiviert = True
Mit TAB anspringen? = False
Anlage in Feldgruppe „PositionSonstiges“ mit
Position = 0
Sichtbarkeit = Eingeblendet
Deaktiviert = True
Mit TAB anspringen? = False
Sichtbarkeit von Versteckt auf Eingeblendet
Deaktiviert = True
Mit TAB anspringen? = False
Schreibschutz? = True
Anlage in Feldgruppe „PositionSonstiges“ mit
Position = 0
Sichtbarkeit = Eingeblendet
Deaktiviert = True
Mit TAB anspringen? = False
Da alle Felder von Versteckt auf Eingeblendet umgestellt werden, werden für alle Felder Feldberechtigungen eingetragen.
Die Felder „kalkulatorischer EK“ und „Roherlös“ können kritische Informationen sein. Die Feldberechtigungen dieser Felder werden daher anhand der bereits vergebenen Berechtigungen von „Kalkulation/ Preisfindung“ und „Kalkulation/ Roherlös“ im Datenbankupdate behandelt.
Die 1:N:M-Beziehungen ließen sich bereits vorher im AppDesigner definieren. Nun wurde auch die Darstellung auf dem Client, sowie die Behandlung der CRUD-Methoden vom System implementiert.
Die Definition der M-Beziehung erfolgt analog der Definition der N-Beziehung. Die Verknüpfung erfolgt ebenfalls in der Eigenschaft "Detail-Datensätze", nur das die Hinterlegung des Detail-Datensatzes jetzt in der entsprechenden N-Beziehung zu erfolgen hat. Gleiches gilt für die Zuordnung für die UI-Darstellung. Das Multi-Data-Edit-Element der M-Beziehung muss einem Data-Edit-Element der N-Beziehung zugeordnet werden.
Als Ausgangspunkt nehmen wir das Beispiel "Projektsteuerung" aus Beispiel für die Zusammenhänge der Metadatenobjekte und ergänzen die N-Beziehung "BPKProjektsteuerungMitarbeiter" um einige Felder und legen die M-Beziehung "BPKProjektsteuerungMitarbeiterFehlzeiten" an.
Führen Sie die SQL-Statements aus Vorbereitung der Datenbank auf einer Demodatenbank aus. Zusätzlich führen Sie bitte diese SQL-Statements aus:
`CREATE TABLE "BPKProjektsteuerungMitarbeiterFehlzeiten" ( "FehlzeitId" INTEGER NOT NULL DEFAULT 0, "Mandant" SMALLINT NOT NULL DEFAULT 0, "SteuerungId" INTEGER NOT NULL DEFAULT 0, "Mitarbeiter" VARCHAR(20) NOT NULL, "DatumVon" DATETIME NOT NULL, "DatumBis" DATETIME NOT NULL, "Fehlzeit" SMALLINT NOT NULL DEFAULT 0, "Timestamp" ROWVERSION, CONSTRAINT PK_BPKProjektsteuerungMitarbeiterFehlzeiten PRIMARY KEY CLUSTERED ("FehlzeitId", "Mandant") ) GO
INSERT INTO USysCatalog ([Table], Revision) VALUES ('BPKProjektsteuerungMitarbeiterFehlzeiten', 1) GO
ALTER TABLE "BPKProjektsteuerungMitarbeiter" ADD "Firmenwagen" KHKBoolean NOT NULL DEFAULT 0, "Navigation" KHKBoolean NOT NULL DEFAULT 0, "Mitnahme" KHKBoolean NOT NULL DEFAULT 0, "Notebook" KHKBoolean NOT NULL DEFAULT 0, "StellvertreterProjektleitung" KHKBoolean NOT NULL DEFAULT 0, "ZugriffProjekt" KHKBoolean NOT NULL DEFAULT 0 GO`
Die Datenstruktur wurde angelegt, um eine 1:N:M-Beziehung darstellen zu können. Ferner geht es hier um die Anlage von Metadaten, nicht um Datenbankdesign oder Performance Optimierungen. Daher verzichten wir auf zusätzliche Indizes oder Löschweitergaben.
Das Beispiel beschreibt die Anlage einer 1:N-Beziehung. Der aktuelle Stand des Beispiels sieht so aus:
Zu einer Projektsteuerung können N-Mitarbeiter hinterlegt werden. Die Anlage der Metadaten werden in dem Beispiel beschrieben, hier kurz die Zusammenfassung:
"recProjektsteuerung" und "recProjektsteuerungMitarbeiter" auf Basis der zugehörigen SQL-Tabellen.
Die 1:N-Beziehung wird in der Eigenschaft "Detail-Datensätze" des Datensatzes "recProjektsteuerung" hinterlegt. Die Datensatz-Beziehung geht über die SteuerungId.
"ediProjektsteuerung" und "mdeProjektsteuerungMitarbeiter" auf Basis der Datensätze.
Die 1:N-Beziehung wird in "ediProjektsteuerung" durch die Hinterlegung eines Feldes mit Feldname = virtueller Name der Datensatz-Beziehung, sowie "Typ" des Feldes = "Unterelement" mit Zuweisung von "mdeProjektsteuerungMitarbeiter" definiert.
Legen Sie folgende Strings an:
|
Name
|
ID
|
Wert
| | --- | --- | --- | |
Fehlzeit
|
0
|
Frei
| |
Fehlzeit
|
1
|
bezahlter Urlaub
| |
Fehlzeit
|
2
|
Resturlaub
| |
Fehlzeit
|
3
|
Weiterbildung
| |
Fehlzeit
|
4
|
Krankheit
|
Legen Sie den Datensatz "recProjektsteuerungMitarbeiterFehlzeiten" mit Hilfe des Assistenten "Tabelle importieren" (BPKProjektsteuerungMitarbeiterFehlzeiten) an.
Ändern Sie "Primärschlüsseltyp 1" auf "TAN-basierend auf Tabelle 1"
Ändern Sie den "Titel" des Feldes "DatumVon" auf "Von"
Ändern Sie den "Titel" des Feldes "DatumBis" auf "Bis"
Ändern Sie den Datentyp der Felder "DatumVon" und "DatumBis" von "DateTime" auf "Date"
Ändern Sie den Datentyp des Feldes "Fehlzeit" von "Integer" auf "Indizierter String" und weisen Sie die angelegten Strings zu.
Hinterlegen Sie in der Eigenschaft "Detail-Datensätze" des Datensatzes "recProjektsteuerungMitarbeiter" folgende Daten:
"Virtueller Feldname" = "MitarbeiterFehlzeiten"
"Detail-Datensatz-Referenz" = "recProjektsteuerungMitarbeiterFehlzeiten.<partnerid>.<loesungid>"
"Datensatz-Beziehung" = "Schlüssel Master-Datensatz = SteuerungId", "Schlüssel Detail-Datensatz = SteurungId", "Schlüssel Master-Datensatz = Mitarbeiter", "Schlüssel Detail-Datensatz = Mitarbeiter"
Damit ist die 1:N:M-Beziehung auf Seiten der Datensätze definiert.
Die M-Beziehung muss einem Data-Edit-Element der N-Beziehung zugeordnet werden. In diesem Beispiel existiert kein "Bearbeiten-Dialog" für die Mitarbeiter, da die 1:N-Zuordnung nur aus der Hinterlegung von Mitarbeiternummern besteht. Für die Beschreibung der 1:N:M-Beziehung sind die nachfolgenden Änderungen an der Tabelle "recProjektsteuerungMitarbeiter" ohne Belang. Da aber dieses Beispiel auch für Beispiel für die Zusammenhänge der Metadatenobjekte verwendet werden soll, wollen wir zuerst die 1:N-Beziehung komplementieren.
Fügen Sie die neuen Felder in "recProjektsteuerungMitarbeiter" hinzu.
"Datentyp" für alle neuen Felder auf "Indizierter String" mit Index -1 und 0 und Ja/Nein-Strings aus Sage.System.Common
Anpassen der Titel entsprechend nachfolgender Tabelle:
|
Feldname
|
Titel
| | --- | --- | |
Firmenwagen
|
Hat Firmenwagen
| |
Navigation
|
Navi-Gerät vorhanden
| |
Mitnahme
|
Kollegen mitnehmen
| |
Notebook
|
Hat Notebook
| |
StellvertreterProjektleitung
|
stellv. Projektleitung
| |
ZugriffProjekt
|
Zugriff auf Projektdaten
|
Um diese Daten besser bearbeiten zu können, legen wir für die N-Beziehung einen "Bearbeiten-Dialog" (Data-Edit-Element) an.
Legen Sie das Data-Edit-Element "ediProjektsteuerungMitarbeiter" an.
"Titel" = "Mitarbeiter"
"Verwendungszweck" = "Stammdatendialog für einen Datensatz"
"Dialoggruppe" = "Stammdaten"
"Datensatz" = "recProjektsteuerungMitarbeiter.<partnerid>.<loesungid>"
"Primärschlüssel 1 für Datensatz" = "1"
"Primärschlüssel 2 für Datensatz" = "2"
Anlegen der Registerkarte "Mitarbeiter"
Der Aufruf des Dialoges erfolgt über einen Kontextmenüeintrag. Dem Multi-Data-Edit-Element "mdeProjektsteuerungMitarbeiter" ist bereit das Kontextmenü "ProjektsteuerungMitarbeiter" zugeordnet. Wir erweitern dieses Kontextmenü um den Eintrag "Bearbeiten" und verschieben dabei den bestehenden Eintrag "Löschen" auf Position 2 mit Aktivierung einer neuen Gruppe ("Gruppe beginnen?" = True).
Legen Sie den Kontextmenüeintrag "Bearbeiten" im Kontextmenü "ProjektsteuerungMitarbeiter" an.
"Funktionstitel" = "Bearbeiten"
"Funktionskurztitel" = "Bearbeiten"
"Position in Sortierung" = "1"
"Schaltflächenposition" = "1"
"Funktionsaufruf" = "DatensatzBearbeiten.Sage.System"
"Child-Element" = "ediProjektsteuerungMitarbeiter.<partnerid>.<loesungid>"
"für Wawi?" aktivieren
Damit haben wir den Bearbeiten-Dialog für die 1:N-Beziehung implementiert.
Open
Legen Sie das Kontextmenü "ProjektsteuerungMitarbeiterFehlzeiten" an.
Legen Sie das Multi-Data-Edit-Element "mdeProjektsteuerungMitarbeiterFehlzeiten" an.
"Titel" = "Fehlzeiten"
"Datensatz" = "recProjektsteuerungMitarbeiterFehlzeiten.<partnerid>.<loesungid>"
"Kontextmenü" = "ProjektsteuerungMitarbeiterFehlzeiten"
Legen Sie die Vorlage "Standard" an.
Legen Sie im Data-Edit-Element "ediProjektsteuerungMitarbeiter" im Register "Mitarbeiter" die Element-Feldgruppe "Fehlzeiten" an.
"Neue Zeile beginnen" aktivieren
"Feldgruppen-Rahmen?" aktivieren
Legen Sie das Feld "MitarbeiterFehlzeiten" (virtueller Feldname der N:M-Beziehung der Datensätze) in der Feldgruppe "Fehlzeiten" an.
"Typ" = "Unterelement"
"Unterelement" = "mdeProjektsteuerungMitarbeiterFehlzeiten.<partnerid>.<loesungid>"
"Zeilenanzahl" = "4"
Damit ist die M-Beziehung auch auf UI-Ebene definiert worden. Datensätze der M-Beziehung können angelegt und gelöscht werden.
Open
Auch für die M-Beziehung kann ein "Bearbeiten-Dialog" angelegt werden. Das Verfahren ist identisch zur N-Beziehung.
Legen Sie das Data-Edit-Element "ediProjektsteuerungMitarbeiterFehlzeiten" an.
"Titel" = "Fehlzeiten"
"Verwendungszweck" = "Stammdatendialog für einen Datensatz"
"Dialoggruppe" = "Stammdaten"
"Datensatz" = "recProjektsteuerungMitarbeiterFehlzeiten.<partnerid>.<loesungid>"
"Primärschlüssel 1 für Datensatz" = "1"
Anlegen der Registerkarte "Fehlzeiten"
Wir erweitern das Kontextmenü "ProjektsteuerungMitarbeiterFehlzeiten" um den Eintrag "Bearbeiten" und verschieben dabei den bestehenden Eintrag "Löschen" auf Position 2 mit Aktivierung einer neuen Gruppe ("Gruppe beginnen?" = True).
Legen Sie den Kontextmenüeintrag "Bearbeiten" im Kontextmenü "ProjektsteuerungMitarbeiterFehlzeiten" an.
"Funktionstitel" = "Bearbeiten"
"Funktionskurztitel" = "Bearbeiten"
"Position in Sortierung" = "1"
"Schaltflächenposition" = "1"
"Funktionsaufruf" = "DatensatzBearbeiten.Sage.System"
"Child-Element" = "ediProjektsteuerungMitarbeiterFehlzeiten.<partnerid>.<loesungid>"
"für Wawi?" aktivieren
Open
Zu einer Verkaufsposition können beliebig viele Zusatztexte und/oder Zusatzwerte erfasst werden. Eine weitere Tiefe soll dieses Beispiel aber nicht haben. Es werden noch das Laden, Speichern und eine Aktion auf einen Eintrag codiert.
Führen Sie dazu in einer Demodatenbank der Sage 100 diese SQL-Statements aus:
`CREATE TABLE "BPKVKBelegePositionenZusatz" ( "BelPosID" INTEGER NOT NULL DEFAULT 0, "ZusatzID" INTEGER NOT NULL DEFAULT 0, "Mandant" SMALLINT NOT NULL DEFAULT 0, "BelID" INTEGER NOT NULL DEFAULT 0, "Sortierung" INTEGER NOT NULL DEFAULT 0, "Zusatztext" VARCHAR(50) NULL, "Zusatzwert" MONEY NULL DEFAULT 0, "Timestamp" ROWVERSION, CONSTRAINT PK_BPKVKBelegePositionenZusatz PRIMARY KEY CLUSTERED ("BelPosID", "ZusatzID", "Mandant") ) GO
INSERT INTO USysCatalog ([Table],Revision) VALUES ('BPKVKBelegePositionenZusatz','1') GO`
Damit die Zusatzdaten pro Position erfasst werden können, sind folgende Metadaten anzulegen.
Legen Sie die Datenstruktur "strBPKVKBelegPositionZusatz" an.
"Titel" = "Zusatzdaten"
Legen Sie die Felder "BelPosiD", "ZusatzID", "Zusatztext" und "Zusatzwert" an (Datentyp entsprechend der Tabellendefinition).
Legen Sie die Datenstruktur "strVKBelegPosition" an.
"Anhängen an Datenstruktur der Partner-Kennung" = "Sage.Wawi"
"Detail-Datenstrukturen" = "Virtueller Feldname = PositionZusatz, Detail-Datenstruktur-Referenz = strBPKVKBelegPositionZusatz.<partnerid>.<loesungid>"
Legen Sie das Multi-Data-Edit-Element "mdeBPKVKBelegPositionenZusatz" an.
"Titel" = "Zusatzdaten"
"Datenstruktur" = "strBPKVKBelegPositionZusatz.<partnerid>.<loesungid>"
Legen Sie die Vorlage "Standard" an.
Legen Sie das Data-Edit-Element "ediBPKVKBelegPositionenZusatz" an.
"Titel" = "Zusatzdaten"
"Verwendungszweck" = "Erfassung"
"Dialoggruppe" = "Erfassungen"
"Datenstruktur" = "strBPKVKBelegPositionZusatz.<partnerid>.<loesungid>"
"Primärschlüssel 1 für Datensatz" = "1"
"Primärschlüssel 2 für Datensatz" = "2"
Legen Sie das Kontextmenü "VKBelegPositionenErfassung" an.
In der Belegerfassung können nun Zusatzdaten pro Position erfasst werden.
Open
Wenn Sie nun mehrere Positionen in der Erfassung haben und zu jeder Position andere Zusatztexte/Zusatzwerte, so werden diese Daten alle korrekt angezeigt, auch wenn die Selektion der Position sich ändert. Die Zuordnung zu einer Position ist also vorhanden. Wenn Sie allerdings bei einer Position z.B. die Menge ändern, dann sind die Zusatzdaten nach dem Ausführen des Daten-Service nicht mehr vorhanden. Für den Transfer der Daten muss durch Codierung selber gesorgt werden.
Die M-Beziehung kann nicht als Objekt in die DCMProperties-Property gesichert werden, da durch ein Sprung nach COM dieses Objekt nicht erhalten bleibt. Die Objekt-Items müssen also flach gesichert und gelesen werden. Dafür benutzen wir ein Hilfsfeld. Legen Sie zusätzlich in den Metadaten folgendes an:
Collapse action bar
View all comments
Open Details Panel
Create page
Open Rovo Chat
Add a comment
Add a reaction