Lade...
 

Listen und Berichte

Listen und Berichte

ClassiX bietet eine einheitliche Konzeption für die Anzeige und die Ausgabe von Listen, welche aus drei Teilen besteht. So gibt es zum einen das Modul, welches die Liste und die Suche definiert. Dann gibt es den Bericht, welchem eine eigene Spalten-Definition und Datenbasis zugrunde liegen kann. Als drittes gibt es das Reporting-Modul, welches die Schnittstelle zwischen dem Modul und dem Bericht herstellt. Eventuell könnte als viertes Puzzelteil noch die Modulvoreinstellung genannt werden, über welche die Standard Spalten-Definition einer Liste überschrieben werden kann.

Modulaufbau

Im folgenden werden die Elemente beschrieben, aus welchen das Modul aufgebaut ist.

Benötigte Widgets

Für das Anzeigen berichtsabhängiger Listen sind in einem Modul folgende Widgets notwendig :

  • Prompt für die Standardliste :
    Prompt(DefaultReportListBoxPmt, 10, 71, T("Standard Liste", "Default List"))
     
  • Prompt für die Berichtsabhängige Liste :
    Prompt(SpecifedReportListBoxPmt, HIDDEN, RED, 7, 30, T("Berichtsabhängige Liste", "Report specific List"))
     
  • ObjectListView für die Anzeige der Liste (Es müssen keine besonderen Flags gesetzt sein, dies ist nur ein Beispiel):
    ObjectListView(ListBox, SELECT_MULTIPLE, ACCEPT_DROP, AUTO_POSITION, 7, 60, 561, 120)
     
  • Toolbar Button für den Aufruf des Zwischenablage
    Button(CopyClipboardButton, TOOLTIP("Alle Kunden in die Zwischenablage kopieren", "Copy to clipboard"), 0, 0, "CopyClip.bmp")

     

Wenn in einem in einem Fenster oder Notebook mehrer Listen dargestellt und für jede Liste die Prompts definiert werden sollen. Können Sie wie folgt definieren :

  • Beim Aufruf der Message "PRINT_REPORT" wird der Berichtstyp z.B. "CX_EXAMPLE" übergeben. Wenn Sie mehrere Listen definieren wollen, müssen jeder Liste eine eigenen Berichtstyp. Um die Verbindung der Listen im Type klar zu machen, können Sie die Typen z.B. "CX_EXAMPLE_UP", "CX_EXAMPLE_DOWN" usw. benennen.
     
  • Für die Zuordnung der Prompts ist der String nach dem letzten "_" wichtig, d.h. der Prompt "DefaultReportListBoxPmt_UP" wird der Liste "CX_EXAMPLE_UP" zugeordnet usw.

Toolbar Button Zwischenablage

Über den Button copyclip.png wird das Reporting-Modul aufgerufen.

Als erstes wird "Null" auf den Stack gelegt. Dies ist aus Kompatibilitätsgründen notwendig

Anschließend wird das Reporting-Modul durch das folgende Interface aufgerufen:
SendMsg(PRINT_REPORT)

Button Zwischenablage

Button(CopyClipboardButton, TOOLTIP("Alle Kunden in die Zwischenablage kopieren", "Copy to clipboard"), 0, 0, "CopyClip.bmp")
[
SELECT: EndTXN BeginTXN(READ)
          // NULL is necessary for compatible call
         
NULL
          // set standard report variables first
          [
            cyberEnterprise
Copy(partner.Name(6))          // cxVar04
            user if { user Copy(partner.Name(6)) } else "" // cxVar03
          
 CreateTransObject(CX_TIME) String              // cxVar02
          
 CreateTransObject(CX_DATE) String              // cxVar01
          ]
          #
"CX_CUSTOMER" Widget(, ListBox) SendMsg(PRINT_REPORT)
]

Definition : ListView

Die Standardliste ist die in der Regel standardmäßig sichtbare Liste, welcher der User zum Arbeiten in ClassiX nutzt. Im Listen Fenster ist dies in der Regel die ListBox. Die Spalten-Definitionen werden im Makro SetListBox vorgenommen. Die Messages SAVE_FORMAT und RESET_FORMAT ermöglichen es unter MorphIT benutzerabhängige Formatierungen (Auswahl der Spalten, Sortierung) zu speichern. Diese werden im INITIALIZE über den Provideraufruf report::SetListboxByReport wieder geladen.

Definition Standardliste
ObjectListView(ListBox, HZ_SCROLL_BAR, DRAG_COPY, AUTO_POSITION, SELECT_MULTIPLE, 15, 11, 412, 110)
[ INITIALIZE: SetListBox
              "SHOPPING_CART_ITEM_LIST" NULL Widget report::SetListboxByReport Drop

  SAVE_FORMAT: user Copy(uniqueID) String("Default %s") user "SHOPPING_CART_ITEM_LIST" Widget report::SaveActiveFormatAsReport

  RESET_FORMAT: Widget report::SetListboxByDefault

  . . . . .

 

Das Makro SetListBox definiert das Standardformat und ggf. die Standardsortierung der Listbox.

Makro SetListBox
Define(SetListBox)
  ResetWindow
  [ Path(CX_LINK_TXN::TopTransaction().uniqueID) HEADER T("Warenkorb", "Shopping cart") ] SetFormat
  [ Path(CX_LINK_TXN::TopTransaction().shortName) HEADER T("Name", "Name") ] SetFormat

  . . . . . .

  [ "TopTransaction().uniqueID" ] SetSort
;

 

Definition : Benutzereinstellung Standard Darstellung

Aktuell ist die Verwendung benutzerdefinierter Listenformate nur unter MorphIT möglich. Das Burger-Menü rechts oben in der Liste bietet die Möglichkeit die angezeigten Spalten auszuwählen sowie das Listenformat und die Sortierung zurückzusetzen. Wenn diese Formatänderungen dauerhaft übernommen werden sollen, muss der Menüpunkt "Listenformat speichern" ausgewählt werden.

 

Definition : Abfrage Datenbasis

 

Es gibt Berichte, die müssen wiederkehrend aufgerufen werden. So könnte wöchentlich ein Bericht der gelieferten aber noch nicht fakturierten Aufträge erstellt werden. Dies kann automatisiert werden, damit man nicht jedes Mal die gleiche Liste aufrufen und die gleichen Auswahlkriterien auswählen muss. Hierzu gibt es im Module der Berichte die Funktion "Abfrage Datenbasis".

Aus der Sicht des Anwenders funktioniert die Funktion wie folgt. Man öffnet das Listenmodul und wählt die Suchkriterien aus. Anschließend öffnet man das Reporting Modul und wählt einen Bericht aus oder legt einen neuen Bericht an. Bei der Bearbeitung des Berichtes kann man die "Kommandos zur Abfrage der Datenbasis" automatisch erstellen. Der Bericht holt sich hierbei die Suchkriterien aus dem Listenmodul in Form von Kommandos, die später automatisch abgesetzt werden. Der Anwender ist so in der Lage den Bericht unter seinen Favoriten zu speichern und automatisch ausführen zu lassen.

Damit dies Funktioniert müssen beim Schreiben des Moduls folgende Makros definiert werden.

Die Berichtsabhängige Liste benötige die Message SELECT_EXECUTES_TO_CREATE_DATA_COLLECTION, welche das Makro SelectExecutesToCreateDataCollection aufruft.

Definition Berichtsabhängige Liste

 

ObjectListView(HiddenReportListBox, HIDDEN, SELECT_MULTIPLE, AUTO_POSITION, 7, , 79, 561, 120)
[
INITIALIZE : Widget SetHiddenReportListBox

  ...

  SELECT_EXECUTES_TO_CREATE_DATA_COLLECTION: SelectExecutesToCreateDataCollection
]

Zur Implementierung der Funktionalität empfiehlt es sich ein Makro SelectExecutesToCreateDataCollection_SetTestMsg zu benutzen, welches die auszuführenden Kommandos aufbereitet und die Test-Massage definiert.

Im Hauptmakro SelectExecutesToCreateDataCollection sind dann folgende Absätze einzufügen:

  • Öffnen des Listenfensters, wenn dieses noch nicht offen ist.
  • Leeren der Suchmakse
  • Auslesen der Suchargumente um umwandeln dies in Execute Kommandos
  • Öffnen des Reporting Moduls
  • Selektieren des Berichts im Reporting Modul
Makros zur Abfrage der Datenbasis

 

Define(SelectExecutesToCreateDataCollection_SetTestMsg)
  Substitute("\"", "\\\"") "\"" Swap + "\" SendMsg(TEST_PRODUCT)" +
;

 

Define(SelectExecutesToCreateDataCollection)
  -> sender
  [] -> executeVector

 

  CreateTransObject(CX_TRANSACTION) Dup -> tmpExecuteTxn executeVector Insert
  T("Listenfenster öffnen") tmpExecuteTxn Put(mlShortName)
  "Widget(SelectWin) Call(IsOpen) ifnot { NULL SendMsg(LIST_PRODUCT) }" SelectExecutesToCreateDataCollection_SetTestMsg tmpExecuteTxn Put(system.comment)

 

  CreateTransObject(CX_TRANSACTION) Dup -> tmpExecuteTxn executeVector Insert
  T("Suchmaske leeren") tmpExecuteTxn Put(mlShortName)
  "ClearWindow(SelectWin, ListBoxHeaderGroup)" SelectExecutesToCreateDataCollection_SetTestMsg tmpExecuteTxn Put(system.comment)

  GetValue(, UniqueIDStr) Truncate Cardinality if
  {
    CreateTransObject(CX_TRANSACTION) Dup -> tmpExecuteTxn executeVector Insert
    T("Filter Nummer") tmpExecuteTxn Put(mlShortName)
    "\"" GetValue(, UniqueIDStr) + "\" PutValue(SelectWin, UniqueIDStr) Widget(SelectWin, UniqueIDStr) SendMsg(SELECT,DIRECT)" +
    SelectExecutesToCreateDataCollection_SetTestMsg tmpExecuteTxn Put(system.comment)

  }

 

  CreateTransObject(CX_TRANSACTION) Dup -> tmpExecuteTxn executeVector Insert
  T("Reporting Fenster öffnen") tmpExecuteTxn Put(mlShortName)
  "\"Widget(SelectWin,CopyClipboardButton) SendMsg(SELECT, DIRECT)\" SendMsg(TEST_PRODUCT)" tmpExecuteTxn Put(system.comment)

 

  CreateTransObject(CX_TRANSACTION) Dup -> tmpExecuteTxn executeVector Insert
  T("Report selektieren") tmpExecuteTxn Put(mlShortName)
  "Var(tmpReport) Module \"reprtedt\" StringFind if { tmpReport
\"Select(EditWin, Reports) Widget(EditWin, SwitchDataBaseBtn) SendMsg(SELECT, DIRECT)\" SendMsg(TEST_PRINT_REPORT) }"

  tmpExecuteTxn Put(system.comment)

  executeVector sender SendMsg(EXECUTES_TO_CREATE_DATA_COLLECTION_SELECTED, DIRECT)
;

Definition: Filterung Datenbasis

Beim Aufruf des Bericht Dialogs werden die aktuellen Daten der Liste als Datenbasis verwendet bzw. durch die Schritte in "Abfrage Datenbasis" zusammen gestellt. Anschließend können. Diese Daten werden vor der Ausführung der Filterung in das "ObjectListView" Objekt geschrieben. Mit den Befehlen in der Filterung können Sie diese Daten manipulieren. Es besteht dabei die Möglichkeit über die Variablen objectList ( = ObjectListView) und parentWindow  ( = Fenster) direkt auf die Daten der Listbox zu zugreifen.

Beispiele:

Beschreibung Code
Laden der Collection der Liste auf den Stack objectList parentWindow GetCollection(STACK, STACK)
Die Liste Löschen und den ersten Eintrag zurück schreiben objectList parentWindow ClearObox(STACK, STACK) 0 Swap GetElement objectList parentWindow UpdateObox(STACK, STACK)

 

 

 

 

 

 

InstantView®