[MegLookup  MultiLookup]
Bisher war in MEGAS die Koppelung eines (Lookup-)Datensatzes an seinen (Parent-)Datensatz vollständig durch die Koppelungsparameter (Datei VIEWPAR) und Einträge im jeweiligen CGW bestimmt. Durch Angabe eines oder mehrerer Felder des Parents, Konstanten und Globalvariablen wurde ein eindeutiger Schlüssel zum Auffinden eines Satzes im Lookup gebildet. Die MultiLookup-Technik ermöglicht es jetzt, einzelne Schlüsselfelder des Lookup (Filterfelder) wie bisher aus dem Parent oder einer Konstanten oder Globalvariablen festzulegen und die restlichen Schlüsselfelder (MultilOFields, siehe unten) aus einer Auswahlliste zu selektieren und mit dem so gebildeten kompletten eindeutigen Schlüssel einen (Lookup-)Datensatz zu adressieren. Dieser Lookup kann wie bisher Parent einer weitergehenden Koppelung sein. Die in der Auswahlliste angebotenen Sätze werden also mit den Filterfeldern aus allen Sätzen der Lookup-Table herausgefiltert, die MultilOFields komplettieren zusammen mit den Filterfeldern den vollständigen Schlüssel zum eindeutigen Zugriff auf einen Lookup-Satz. Zur Definition eines MultiLookups sind folgende Eintragungen zu machen.
Das nachfolgende Beispiel zeigt, wie in AUF411 (Kundenstamm bearbeiten) die Ansprechpartner an einen Kunden gekoppelt werden.
Hinweise:
Die für den MultiLookup-Mechanismus relevanten Einträge sind unterstrichen.
Mit der Delete-Angabe können alle Lookup-Sätze zusammen mit dem Leitsatz gelöscht werden. Im Standard wird dies bereits in "418 Ansprechpartner bearbeiten" oder "723 Ansprechpartner bearbeiten" beim Löschen der zu einem Ansprechpartner gehörigen Gesprächsnotizen genutzt (siehe Eintrag "Delete=Q" in Datei AUF418.SDF, Sektion [AUF418_APPLFRAME##MEGLOOKUP GSN] oder in Datei EKA723.SDF, Sektion [EKA723_APPLFRAME##MEGLOOKUP GSN]).
Wird ein Ansprechpartner-Stammsatz gelöscht, so werden damit nach einer Abfrage alle zugehörigen Gesprächsnotizen gelöscht. Die Daten aus Datei 99 für Gesprächsnotizen Verkauf bzw. Datei 120 für Gesprächsnotizen Einkauf werden samt den Textkonserven in der Textedatei 46 gelöscht.
Koppelungsschema (in VIEWPAR, Modul 9953)
Datei-Index:
041
(KUNDE)
Koppeldatei:
98
(AUF-ASP, Ansprechpartner AUF)
Pfadindex:
1
(Pfad besteht aus Feld 3=Kundennummer und Feld 4=lfd.Nummer)
lfd.Nr.
1
 
Koppeldateiangaben
Typ
Feldnummer
 
 
003
(Kundennummer aus KUNDE)
G
MIO1
(Globalvariable, siehe MultiIOFields)
Der Name dieses MultiIOFields ist mit folgenden Einschränkungen frei wählbar: er muss innerhalb der in dieser MEGAS-Applikation verwendeten Globalvariablen eindeutig sein und er muss in der (siehe später) Liste der MultiIOFields auftauchen. Inhalt wird in 'lfd.Nummer' aus KUNDE abgestellt.
Einträge in APPLFRAME
[MegLookup ASP]
Buffer=98
Table=98
Path=1
Parent=KND
Modify
MultiComboGID=ASPCOMBO
MultiIOFields=MIO1
MultiListFields=4,6
NewMulti=Y (kann fehlen, da Standard)
CurrentDateOnCreate=14,33,34
CurrentDateOnModify=34
CurrentSbkOnCreate=35
CurrentSbkOnModify=35
Die Einträge "Buffer", "Table", "Path", "Parent", "Required", "Modify", "ModifyDefault", "LowFieldsOnCreate", "CurrentDateOnCreate" und "CurrentDateOnModify" sind Standard.
MultiComboGID:
GRIT-ID der Auswahlliste, in der die zur Auswahl stehenden Sätze (bzw. Teile davon, siehe "MultiListFields"). Die Auswahlliste mit dieser GRIT-ID muss bestimmten Anforderungen genügen, die nachfolgend beschreiben werden.
MultiIOFields:
Namen von Globalvariablen, die diejenigen Schlüsselfelder zur Identifizierung des Lookup-Satzes bilden, die nicht von den Filterfeldern versorgt werden. Diese Globalvariablen müssen mit denen im Koppelungsschema (siehe Beispiel) übereinstimmen und müssen eindeutig sein. Die Globalvariablen werden automatisch erzeugt und mit den Werten des aktuell selektierten Satzes (in der Auswahlliste) versorgt. Die 'MultiIOFields' müssen alle im Koppelungsschema definiert sein. 'MultiIOFields' können nicht als Eingabepuffer verwendet werden, da sie nur aus den Feldern des aktuell selektierten Lookup-Satzes versorgt werden und kein Transfer in die andere Richtung, also aus den 'MultiIOFields' in den Lookup-Satz stattfindet.
MultiListFields:
Diese Felder (aus der Lookup-Table, hier Datei 98=AUF-ASP) werden in jeder Zeile der Auswahlliste durch senkrechte Striche '|' getrennt angezeigt. Sie dienen also lediglich der Information des Benutzers über die selektierbaren Lookup-Sätze und sollten auch keine Felder enthalten, die über den normalen Eingabemechanismus veränderbar sind, da keine sofortige Synchronisierung der Zeile mit Feldern des (Lookup-)Arbeitspuffers stattfindet.
NewMulti=N:
Bewirkt, dass <new> nicht in der Auswahlliste erscheint und somit auch keine neuen Sätze erfasst werden. Wenn 'NewMulti' nicht angegeben ist oder ungleich 'N', ist Erfassen erlaubt.
MultiReverse=Y
Mit dieser Einstellung kann die zugehörige Auswahlliste in umgekehrter Reihenfolge sortiert werden. Damit erscheinen die letzten (i.d.R. neuesten) Einträge vor allen anderen.
Einträge im Dialog "AUF411_5" - Auswahlliste
GwComboBox {
          Id = 'ASPCOMBO';
          .
          .
          CBCreate = SibDef;
          CBData =
'[GuiBuffer]
GlobVar=GVID(ASPCOMBO)
Format=C100
Pos=1
[GuiEdit]
Locked=Yes
[MegField]
MultiLookup=ASP
[GuiCombo]
CheckOnSelect=Yes';
Die nachfolgende Liste beschreibt nur die für den MultiLookup relevanten Einträge
ID:
Auf diese GRIT-ID wird im APPLFRAME, 'MultiComboGID' verwiesen
GlobVar:
Über diese Globalvariable wird die Ein-/Ausgabe für die Auswahlliste abgewickelt. Der Name ist zwingend derselbe wie die GRIT-ID.
Format:
Immer C-Format, muss groß genug sein, um die in APPLFRAME, 'MultiListFields' angegebenen Felder und die dazwischen ausgegebenen Trenner aufnehmen zu können.
MultiLookUp:
Rückverweis auf die APPLFRAME-Sektion [MegLookup ASP]
CheckOnSelect:
Wenn 'Yes' angegeben ist, wird sofort beim Blättern in der Auswahlliste der entsprechende Satz gelesen und gezeigt, ansonsten erst nach Verlassen der Auswahlliste mit geänderter Selektion.
Auslösendes Feld zur Aktualisierung der Anzeige der Auswahlliste
In der Auswahlliste wird im Allgemeinen eine Nummer und eine Bezeichnung ausgegeben, zum Beispiel bei den Ansprechpartnern im Kundenstamm die laufende Nummer und der Nachname des Ansprechpartners. Bei einer Änderung des Ansprechpartnernamens sollte dieser neue Name auch sofort in der Auswahlliste sichtbar sein.
Um dies zu erreichen, muss in der Sektion [MegField] des betreffenden Felds, zum Beispiel im Feld «Ansprechpartnername» (Feld AUF411_5_D98F6 im Dialogeditor), ein Eintrag "UpdCombo" stehen.
Zum Beispiel:
[MegField]
UpdCombo=ASP
Der Eintrag erzwingt die Aktualisierung der Anzeige einer MultiLookup-Auswahlliste. Dabei dient die Angabe 'ASP' der Identifizierung des MEGAS-Lookups, der sich im _APPLFRAME-Dialog des CGWs befindet, im obigen Beispiel die Auswahlliste zur Anzeige der Ansprechpartner.
Aktualisierung letzter Kontakt in Tabelle Ansprechpartner bei Auswahl einer neuen Gesprächsnotiz (Specials=411099000 oder 711120000)
GwComboBox {
          Id = 'GSNCOMBO';
          .
          .
          CBCreate = SibDef;
          CBData =
[GuiBuffer]
GlobVar=GVID(GSNCOMBO)
Format=C100
Pos=1
[GuiCombo]
CheckOnSelect=Yes
[MegField]
MultiLoookUp=GSN
FetchText=Notiz
Special=411099000
Beim Anlegen einer neuen Gesprächsnotiz zu einem Kunden (99=GPNOTKD) oder Lieferanten (120=GPNOTLF) wird im Ansprechpartner des Kunden (98=AUFASP) oder Lieferanten (102=ANSPRECH) das Feld «Letzter Kontakt» (98/14 bzw. 102/17) aus dem Erfassungsdatum (Feld 4) der entsprechenden Gesprächsnotiz versorgt, also mit dem aktuellen Datum.
Aktualisierung AV1/nächster Kontakt in Tabelle Ansprechpartner bei Auswahl eines neuen Auftragsverantwortlichen einer Gesprächsnotiz (Specials=411099007 oder 711120007)
GwComboBox {
          Id = 'AUF411_5_D99F7';
          .
          .
          CBCreate = SibDef;
          CBData =
[GuiHelp]
Hint=H099007
[GuiBuffer]
DDref=99,7
[MegField]
Special=411099007
Bei Auswahl eines anderen Auftragsverantwortlichen zu einer Gesprächsnotiz für Kunden (99/7) oder Lieferanten (120,7) wird im jeweiligen Ansprechpartner dieses Kunden (98) oder Lieferanten (102) der geänderte Auftragsverantwortliche (Feld 25 bzw. 34) übernommen und das Datum für den nächsten Kontakt (Feld 26 bzw. 35) auf "heute + 28Tage" gesetzt.