!RAW
! ListDialog.obas (c) Andre Koppel Software 2013
! Das folgende Programm zeigt, wie mit Hilfe der
! Listenfunktionen ein eigener Dialog aufgebaut
! werden kann.
! Zuerst wird eine Liste erzeugt, die das Aussehen
! und die Funktionen des Dialogs definiert.
! Danach wird die Listen-Dialog-Funktion aufgerufen.
! Das Ergebnis der Listen-Dialog-Funktion ist eine
! Liste, die für jedes definierte Element einen
! Rückgabewert entwählt.
! Wir benutzen den Dialog, um mit dem Gesamtergebnis
! ein XML-Tag zu erzeugen, das wir ausgeben.
! Wenn man dieses Programm als INVEP-BASIC-Makro
! speichert, so kann man dadurch menügeführte Makros
! erzeugen
! Die erste Zeile mit dem Eintrag !RAW weist die
! Makro-Verarbeitung an, dass dieses Programm nicht
! vorverarbeitet werden soll, also keine Verarbeitung
! der Escape-Zeichen erfolgt
INIT VARSPACE
DIM D$[2000]; r$[2000]

! Wir erstellen den zu erzeugenden Dialog in Form einer Liste.
! Zuerst definieren wir den Dialog an sich. Die Option "Verbose"
! gibt an, dass das Layouting des erzeugten Dialogs in
! Die Protokolldatei geschrieben wird. Die Option timeout gibt
! an, dass der Dialog nach 60 Sekunden ohne Tastendruck beendet,
! d.h. abgebrochen wird.
d$="{ DialogName -> \"Anfechtungs-Tags\"; Timeout -> 60000; Verbose; XOffset -> 5; "
! Jetzt erstellen wir die einzelnen Widgets. Aus Lesbarkeits-
! gründen ein Widget pro Zeile Jedes Widget wird als eigenstän-
! dige Liste erzeugt. Die Variablen, die den Feldbezeichnern
! zugeordnet werden, müssen nur dann in Anführungszeichen
! gesetzt werden, wenn Sonderzeichen enthalten sind.
! zuerst zwei Datumseingabefelder (Type DATE)
d$=d$&"{ Typ -> DATE ; Label -> Datum; QHELP -> \"Datum der Rechnung\" }; "
d$=d$&"{ Typ -> DATE ; Label -> \"Fälligkeit\" }; "
! jetzt ein Mittellanges Eingabefeld für Gleitkommazahlen
d$=d$&"{ Typ -> DOUBLE_M ; Label -> Betrag; QHELP -> \"Höhe der Rechnung\" }; "
! jetzt ein mittellanges Feld für die Eingabe von Text
d$=d$&"{ Typ -> TEXT_M ; Label -> Rechnungsgrund }; "
! damit der Dialog etwas übersichtlicher wird, machen wir in
! der nächsten Zeile weiter dafür die es das Pseudowidget
! "NEWLINE"
d$=d$&"{ Typ -> NEWLINE }; "
! Es folgt die Definition eines Check-Box-Widgets (ein/aus)
d$=d$&"{ Typ -> TBUTTON_S; Label -> Titel; QHELP -> \"Ist die Forderung tituliert?\" }; "
! jetzt kommt wieder ein Text-Eingabefeld
d$=d$&"{ Typ -> TEXT_M ; Label -> Titel; QHELP -> \"z.B. VB vom 02.05.2013\" }; "
! Eine Selection-Box wäre auch möglich, brauchen wir hier nicht,
! bleibt daher auskommentiert
! d$=d$&"{ Typ -> CBUTTON_S; Label -> Auswahl; Widgets -> { \"Ja\" ; \"Nein\" ; \"Weißnich\" } }; "
! jetzt definieren wir noch zwei Buttons für Ende und Abbruch
d$=d$&"{ Typ -> BUTTON_S ; Action -> EXIT };"
d$=d$&"{ Typ -> BUTTON_S ; Action -> ABORT } }"
! Falls in der Eingabe eine Rechnung durchgeführt wird,
! so würde das Ergebnis hier ausgegeben werden
! Diese Ausgabe schalten wir mit DISCARD OUTPUT aus
DISCARD OUTPUT ON
r$=LIST DIALOG$(d$)
DISCARD OUTPUT OFF
DROP PENDING OUTPUT
! unser Ergebnis wird in Form einer Liste geliefert, deren
! Elemente in der gleichen Reihenfolge wie die Widgets
! vorliegen.
! Wenn wir als Ergebnis keine Liste bekommen haben, wurde die
! Eingabe abgebrochen. Daher schauen wir erstmal, ob überhaupt
! eine Liste vorliegt
IF LIST TEST(r$) THEN
  ! Hura, der Anwender hat etwas eingegeben. Der Code-Lesbar-
  ! keit halber weisen wir die Listenelemente selbsterklärenden
  ! Variablen zu
  datum$=LIST GET$(r$;1)
  faellig$=LIST GET$(r$;2)
  betrag$=LIST GET$(r$;3)
  grund$=LIST GET$(r$;4)
  ! Ob ein Titel vorliegt, ist eine Ja/Nein-Thematik, das
  ! Listenergebnis liegt jedoch in Form einer Zeichenkette vor,
  ! also nehmen wir eine numerische Umwandlung vor
  isttitel=IVAL(LIST GET$(r$;5))
  titeltext$=LIST GET$(r$;6)
  ! jetzt haben wir alles zusammengesammelt und können Stück für
  ! Stück das Tag bauen
  DISP ""
  ! Ist der Grund der Forderung angegeben worden, wenn ja, dann
  ! geben wir ihn aus
  IF SLEN(grund$) THEN DISP "\"" grund$ "\""
  ! jetzt beenden wir unser Tag
  DISP ""
  DISP "\n"
END IF

Das ist interessant

INVEP enthält umfangreiche Möglichkeiten, um verschiedene Einträge mit speziellen Markierungen zu versehen. Im Rahmen des Auswert- und Analysesystems kann gezielt nach markierten Einträgen gesucht und ausgewertet werden. Ein Anwendungsfall hierfür ist zum Beispiel die Markierung von Forderungsanmeldungen mit Anfechtungsmerkmalen. Um eine maximale Flexibilität zu ermöglichen, werden die Markierungen in Form von XML-Tags eingegeben.

XML-Tags können zwar einfach eingegeben werden und sind auch für den Menschen leicht lesbar, noch einfacher ist es jedoch, wenn man einen Dialog erzeugt, in dem der Anwender menügeführt seine Eingaben vornimmt, ohne dass er sich mit der zugrunde liegenden Technik auseinandersetzen muss.

Hier kommen die Dialog-Funktionen des INVEP-BASIC-Interpreters zum Einsatz. Mit Hilfe des INVEP-BASIC kann ein Administrator kleine Dialoge erstellen, die sich vollkommen in INVEP integrieren, so dass der Anwender sämtliche Eingaben menügeführt vornehmen kann, so als wäre dieser Dialog integraler Bestandetil von INVEP. Noch komfortabler geht dies, indem das Miniprogramm als intelligentes Textmakro erfasst wird. Wenn der Anwender dann wähend der Eingabe ein Makrokürzel eingibt, so wird automatisch das BASIC-Makro abgearbeitet, dass wiederum einen individuellen Dialog erzeugt, der den Anwender bei der Erfassung unterstützt.
Zusätzlich interessant an diesem kleinen Programm ist, dass hier wiederum umfangreich die Funktionen der Listenverarbeitung in INVEP Anwendung finden. Die Dialoge werden in Form von Listen erstellt und das Ergebnis der Dialog-Funktion ist auch eine Liste.

Beispiel in INVEP laden

Sie können dieses Beispielprogramm in den INVEP-OBAS-Interpreter laden, indem Sie im Interpreter über den Button "Neu/laden" die Option OBAS-Web auswählen. Geben Sie als Nummer für das Beispiel die 11 ein.
Wenn Sie das Programm als Textmakro automatisch während einer Eingabe aufrufen möchten, so kopieren Sie das Programm in den Makroeditor und geben dem Makro eine sinnvolle Kurzbezeichnung. Im Makroeditor muss vor dem Programm eine öffnende eckige Klammer '[' und am Ende des Makros eine schließende eckige Klammer ']' eingegeben werden, um das Makro als BASIC-Makro und nicht einfach als einzusetzenden Text zu markieren.



Schatten