Lade...
 

X-Ref Slots

Cross-Referenz der dynamischen Datenfelder

Die Cross-Referenz der dynamischen Datenfelder zeigt für jedes dynamische Datenfeld die Objekte, in denen dieses Datenfeld existiert.

Dies ist nur als Momentaufnahme der Datenbank möglich; jede folgende Updateoperation kann neue dynamische Datenfelder erzeugen; die Cross-Referenz wird dabei

nicht aktualisiert.

Die Information über die Verwendung der dynamischen Datenfelder wird in Objekten der Klasse CX_SLOT_XREF gehalten. Aufbau einer Cross-Rererenz bedeutet, dass für jedes dynamische Datenfeld ein CX_SLOT_XREF-Objekt erzeugt wird, und dieses Objekte verweist auf alle Objekte, in denen das Datenfeld vorkommt.

Es ist sinnvoll, die CX_SLOT_XREF-Objekte in einer separaten physischen Datenbank zu

halten - sie stellen ja nur eine Momentaufnahme dar, die bald ihre Aktualität verliert. CX_SLOT-XREF-Objekte verweisen auf "normale" Objekte - aber nicht umgekehrt. Die physische Teildatenbank für die Cross-Referenz kann deshalb jederzeit wieder gelöscht

werden,  ohne Auswirkung auf die "eigentliche" Datenbank.

Beschreibung einer Hilfsdatenbank für die Cross-Referenz:

MetaInfo
Database(3, CX_SLOTXREFDB)

Segment(slotXrefS, DB(3), EXTERN)

Class(CX_SLOT_XREF, 52, slotXref)

File(slotXref, slotXref, slotXref)

Storage(slotXref, DB(3), slotXrefS, EP(slotXrefL0), CSeg(slotXrefS), Garbage(slotXrefG0, slotXrefS))

Diese Beschreibung wird - solange man mit der Cross-Referenz arbeiten will - dem Initialisierungsfile CLASSIX.INI hinzugefügt.

Mit dem Programmaufruf

...

SET CX_SLOTXREFDB=mySlotXReferenceDB.cxd

cxgoso -U -I modifiziertesInitFile

wird die (leere) Hilfsdatenbank erzeugt.

Die Cross-Referenz wird mit dem Utility-Programm cxxosr.exe aufgebaut. Dabei ist es möglich, die Cross-Referenz der dynamischen Datenfelder zusammen mit der Cross-Referenz für Objekte in einem Durchlauf zu generieren.

Aufbau und Verwendung der Cross-Referenz mit InstantView®: (siehe auch das AppsWH-Modul zur Pflege dynamischer Datenfelder)

Window(win, 50, 50, 735, 150, "Slot XRef")
{
  Menu
  {
    Item("Slot X-Ref")
    {
      Item("show objects")
      [
        SELECT: OpenWindow(objWin, 1)
      ]
    }
  }

  ObjectList(slots, AUTO_POSITION, 1, 1, 1, 1) // show all dynamic data fields
  [
    INITIALIZE: [ "CX_SLOT_XREF::Name()", COLOR BLUE ] SetFormat

               

[ "CX_SLOT_XREF::slot", COLOR LIGHTRED, JUSTIFY_RIGHT ] SetFormat

                [ "CX_SLOT_XREF::Type()", COLOR CYAN ] SetFormat
                0 SetSort
                FindAll(CX_SLOT_XREF) FillObox
    SELECT: GetObject SendMsg(SHOW_SLOT_XREF)
  ]

  Attach(slots, LEFT, STRETCH, 5)
  Attach(slots, RIGHT, STRETCH, 5)
  Attach(slots, TOP, STRETCH, 5)
  Attach(slots, BOTTOM, STRETCH, 5)

}


Window(objWin, 50, 201, 735, 150, "Objects") 
[
  SHOW_SLOT_XREF: -> slot 
                  slot Copy(Name()) slot Copy(slot) String("Slot %s (%d)") PutValue
                  slot FillWindow
]
{
  // show objects with a specific dynamic datafield

  ObjectListView(CX_SLOT_XREF::objects, ENTIRE, AUTO_POSITION, 1, 1, 1, 1) 
  Attach(objects, LEFT, STRETCH, 5)
  Attach(objects, RIGHT, STRETCH, 5)
  Attach(objects, TOP, STRETCH, 5)
  Attach(objects, BOTTOM, STRETCH, 5)

}