3.2 Definition der COBOL-Programme

Um nun zu dieser definierten Oberfläche ein COBOL-Programm schreiben zu können, muss man folgendes wissen:

Diese einzelnen Punkte werden in den folgenden Kapiteln erläutert.

3.2.1 Abbildung der Dialogdatentypen

Ausgehend von der Beschreibung des Dialogs können die dort verwendeten Datentypen auf in COBOL benutzbare Datentypen abgebildet werden. Diese Abbildung vom Dialog nach COBOL ist eindeutig und kann der nachfolgenden unvollständigen Tabelle entnommen werden.

Dialogdatentyp

COBOL-Datentyp

object

PIC 9(9) binary.

integer

PIC 9(9) binary.

string[??]

PIC X(??).

boolean

PIC 9(4) binary.

3.2.2 Zentrale Datenstrukturen

Im COBOL-Interface des Dialog Managers gibt es zwei zentrale Datenstrukturen, über die die Kommunikation zwischen Anwendung und Dialog Manager erfolgt.

Die wichtigste Datenstruktur ist eine Struktur mit Namen DM-StdArgs, die von der Anwendung an jede im COBOL-Interface aufgerufene Funktion mit übergeben werden muss. In dieser Struktur teilt der Dialog Manager der Anwendung mit, ob Fehler bei dem Funktionsaufruf aufgetreten sind. Zusätzlich kann die Anwendung dem Dialog Manager Optionen mitteilen, die bei der Ausführung einzelner Funktionen beachtet werden sollen. Die Felder für die Stringbehandlung DM-truncspaces, DM-getsep und DM-setsep sollten nur vor dem Aufruf der Initialisierungsfunktion gesetzt und damit global eingestellt werden, und nicht im Ablauf des Programms verändert werden. Siehe hierzu Kapitel „Behandlung von String-Parametern“.

Damit hat diese DM-StdArgs-Struktur folgendes Aussehen:

02 DM-StdArgs.
03 DM-version-type               pic X value "A".
03 DM-major-version              pic 9(4) binary value 6.
03 DM-minor-version              pic 9(4) binary value 3.
03 DM-patch-level                pic 9(4) binary value 2.
03 DM-patch-sublevel             pic 9(4) binary value 0.
03 DM-version-string             pic X(12) value "A.06.03.b".
03 DM-version                    pic 9(4) binary value 603.
03 DM-protocol-version           pic 9(4) binary value 1.
   03 DM-status                  pic 9(9) binary value 0.
   03 DM-options                 pic 9(9) binary value 0.
   03 DM-rescode                 pic 9(9) binary value 0.
   03 DM-setsep-S.
      04 DM-setsep               pic X value "@".
      04 filler                  pic X value low-value.
   03 DM-getsep-S.
      04 DM-getsep               pic X value space.
      04 filler                  pic X value low-value.
   03 DM-truncspaces             pic 9(4) binary value 1.
   03 DM-usercodepage-S.
      04 DM-usercodepage         pic X(32) value spaces.
      04 filler                  pic X(32) value low-values.

Die zweite wichtige Struktur ist die DM-Value-Struktur, denn in ihr werden die Werte vom COBOL-Programm an den Dialog Manager übergeben. Diese Struktur beinhaltet das Objekt, das Attribut und die Werte, die ein Attribut annehmen kann. In dem Beispiel wird diese Struktur zum Füllen des Tablefields benötigt und wird erst dort beschrieben.

3.2.3 Das Hauptprogramm

Bei Programmen, die mit dem Dialog Manager arbeiten sollen, sind spezielle Hauptprogramme notwendig, die vom Prinzip immer gleich sind und daher aus den mitgelieferten Beispielen kopiert werden können.

Beim Aufbau des Hauptprogramms muss man allerdings unterscheiden, ob man eine lokale Anwendung oder einen Server in einer verteilten Umgebung entwickelt. Bei einer lokalen Anwendung muss eine Funktion mit Namen COBOLMAIN, bei einer verteilten Anwendung müssen zwei Funktionen mit Namen COBOLAPPINIT und COBOLAPPFINISH bereitgestellt werden.

Diese Hauptprogramme müssen in ihrer WORKING-STORAGE-Section die vom Dialog Manager bereitgestellte COPY-Strecke "IDMcobws.cob" verwenden, damit auf die Definitionen des Dialog Manager zugegriffen werden kann.

3.2.3.1 Lokale Anwendungen

Der Aufbau der Funktion COBOLMAIN sieht dabei wie folgt aus:

Beispiel

    identification division.

    program-id. COBOLMAIN.

 

    data division.

    working-storage section.

   *Das ist die Copy-Strecke, die dafür sorgt, dass auf die

   *vom Dialog Manager definierten Werte zugegriffen werden

   *kann

    copy "IDMcobws.cob".

 

   *Definition einer Variablen zum Speichern der Dialog ID.

    77  DM-dialogid    pic 9(9) binary value 0.

 

   * Variable zum Zwischenspeichern der aktuellen Funktion

   * Dadurch wird die Fehlerausgabe erleichtert.

    77  func-name        pic X(30) value spaces.

 

    linkage section.

   * Definition der Parameter, die an das Hauptprogramm

   * übergeben werden.

    01  exit-status pic 9(4) binary.

 

    procedure division using exit-status.

    startup section.

 

   * Initialisierung des Dialog Managers

    initialize-IDM.

   * Hier kann noch der Separator gesetzt werden, mit

   * dem die Strings in COBOL beendet werden sollen

      move "@" to DM-setsep.

      call "DMcob_Initialize" using DM-StdArgs

            DM-Common-Data.

      perform error-check.

 

   * Laden des Dialogs, der zu der Anwendung gehört

    load-dialog.

      call "DMcob_LoadDialog" using DM-StdArgs DM-dialogid

             by content "table.dlg@"

      perform error-check.

 

   * Anbinden der Funktionen mit Records als Parameter

    bind-records.

      call "CobRecMInitCobolBeispiel" using DM-dialogid

                  by content 0

                  DM-StdArgs.

   * Anbindung der Funktionen ohne Records als Parameter

      call "BindFuncs" using DM-dialogID DM-StdArgs.

 

   * Starten des Dialogs

    start-dialog.

      call "DMcob_StartDialog" using DM-StdArgs DM-dialogid.

      perform error-check.

 

   * Starten der Verarbeitung in dem Dialog

    event-loop.

      call "DMcob_EventLoop" using DM-StdArgs.

      perform error-check.

 

   * Beenden der Anwendung

    dialog-done.

      display "Application finishes successfully.".

      goback.

 

   * Abfragen auf Fehler

    error-check.

      if DM-ErrorOccurred

        display "Error occurred in " func-name upon sysout

        display "Application terminates due to error."

        move 1 to exit-status

        goback.

3.2.3.2 Verteilte Anwendungen

Bei verteilten Anwendungen müssen zwei COBOL-Funktionen in der Anwendung bereitgestellt werden, die die Anwendung initialisieren bzw. beenden können. Die Initialisierungsfunktion heißt CobolAppInit, die Endefunktion CobolAppFinish.

Der Aufbau der Funktion CobolAppInit sieht dabei wie folgt aus:

In der Funktion CobolAppInit müssen dann die Aktionen durchgeführt werden, die ein kontrolliertes Beenden der Anwendung ausführen. Aufrufe an den Dialog Manager sind hierbei nicht notwendig, die Server-Anwendung wird automatisch nach der Rückkehr der Funktion beendet.

Beispiel

    identification division.

    program-id. COBOLAPPINIT.

 

    data division.

    working-storage section.

   * Verwenden der vom Dialog Manager bereitgestellten

   * Copy Strecke.

    copy "IDMcobws.cob".

 

    linkage section.

   * Deklaration der Parameter der Funktion

   * Im Exit-Status wird das Ergebnis zurückgeliefert,

   * in DM-appl-id wird die ApplikationsID und in

   * DM-dialogID wird die Dialog ID übergeben.

    01  exit-status    pic 9(4) binary.

    77  DM-appl-id    pic 9(9) binary.

    77  DM-dialogid    pic 9(9) binary.

 

    procedure division using exit-status dm-appl-id

        DM-dialog-id.

    startup section.

 

   * Initialisierung des COBOL-Interfaces

    initialize-IDM.

      call "DMcob_Initialize" using DM-StdArgs

        DM-Common-Data.

      PERFORM ERROR-CHECK.

 

   * Dynamische Anbindung der COBOL-Funktionen, nachdem die

   * Recordfunktionen angebunden worden sind.

    BIND-FUNCTIONS.

      call "CobRecMInitCobolBeispiel" using

                  DM-appl-id

                  by content 0

                  DM-StdArgs.

      call "DMufcob_BindThruLoader" using DM-StdArgs

                  DM-appl-id.

 

   * Setzen des Rückgabewertes.

      MOVE DM-SUCCESS TO EXIT-STATUS.

      GOBACK.

3.2.4 Hilfsmittel für die COBOL-Programmierung

Damit die im Dialog getroffenen Definitionen für Parameter der COBOL-Funktionen nicht zweimal eingegeben werden müssen, kann der Simulator des Dialog Managers aus einer Dialogdatei die für das COBOL-Programm notwendige Copy-Strecke generieren. Dieses erfolgt durch die Startoption

+writetrampolin <Basis-Name>

Dabei wird mit Basis-Name der Name einer Datei angegeben, an die die Endungen ".c", ".cob" und ".cpy" angehängt werden, um die für den Aufruf der COBOL-Funktionen notwendigen Dateien zu generieren.

Für das Beispiel sieht die Kommandozeile wie folgt aus:

pidm +writetrampolin tablec table.dlg

Durch diesen Aufruf entstehen die Dateien

Die generierten C und COBOL-Dateien müssen mit übersetzt und zu der Anwendung hinzu gelinkt werden. Die CPY-Datei sollte benutzt werden, um auf die im Dialog getroffenen Definitionen der Übergabestruktur zugreifen zu können.

Diese Datei hat für das Beispiel folgendes Aussehen:

01 RecAddress.

   05 NName      pic X(25).

   05 FirstName  pic X(15).

   05 City       pic X(25).

   05 Street     pic X(30).

Hinweis

Bei Micro Focus Visual COBOL können Texte auch in Unicode (National Character) formatiert sein. Um eine entsprechende Copy-Strecke zu erzeugen, muss folgende Kommandozeile verwendet werden:

pidm -mfviscob-u +writetrampolin tablec table.dlg

3.2.5 Die Funktionen für das Tablefield

Funktionen, die den Inhalt von Objekten mit Listencharakter füllen oder abfragen, sind in Bezug auf das Schichtenmodell eine Ausnahme, denn diese Funktionen können nur mit sehr weitreichenden Kenntnissen über den Dialog geschrieben werden. Dies ist notwendig, damit diese Funktionen performant ablaufen können. Das Füllen eines Tablefields muss mit Hilfe von sogenannten temporären Bereichen erfolgen. Diese temporären Bereiche werden im Dialog Manager angelegt, dann von der Anwendung gefüllt und anschließend einem Objekt zugewiesen. Durch diese Vorgehensweise wird bei lokalen Anwendungen das ständige Flackern des Tablefields beim Füllen verhindert und bei verteilten Anwendungen zusätzlich eine sehr hohe Performancesteigerung gegenüber der Einzelzuweisung erreicht. Im einzelnen sieht die Vorgehensweise wie folgt aus:

Das Auslesen von Werten läuft analog zum Füllen des Objektes:

3.2.5.1 Funktion FILLTAB

Diese Funktion übernimmt das initiale Füllen des Tablefields. Dazu wird dieser Funktion die ID des Tablefields und die Anzahl der zu füllenden Elemente übergeben.

Zunächst erfolgt in üblicherweise die Definition des Moduls (sollte genauso heißen wie die Funktion im Dialog).

*SET OSVS

    IDENTIFICATION DIVISION.

    PROGRAM-ID. FILLTAB.

    AUTHOR. "ISA-DEMO".

 

    ENVIRONMENT DIVISION.

    INPUT-OUTPUT SECTION.

    DATA DIVISION.

    FILE SECTION.

 

    WORKING-STORAGE SECTION.

    01  STR-TAB.

    05 STRFIELD PIC X OCCURS 80.

    01  INT-TAB.

    05 INTFIELD PIC 9 OCCURS 5.

 

    77  COUNTER PIC 9(4) VALUE 0.

    77  BASE PIC 9(4) VALUE 0.

    77  DM-POINTER  PIC 9(4) BINARY VALUE 0.

    77  ICOUNT  PIC 9(4) BINARY VALUE 0.

    77  IDUMMY  PIC 9(4) VALUE 0.

 

    77  I    PIC 99 VALUE ZERO.

    77  J    PIC 99 VALUE ZERO.

    77  KL      PIC 9(4) VALUE ZERO.

    77  DLG-NAME PIC X(80) value "Name ".

    77  DLG-VORNAME PIC X(80) value "Vorname ".

    77  DLG-WOHNORT PIC X(80) value "Ort  ".

In der Linkage-Section wird ein Copy auf die vom Dialog Manager bereitgestellte Datei IDMcobls.cob durchgeführt, damit auf diese Definitionen im COBOL-Programm zugegriffen werden kann.

    LINKAGE SECTION.

   *Über diese Copy-Strecke werden die Definitionen im

   * Dialog Manager

   *in diesem COBOL Modul verfügbar.

    COPY "IDMcobls.cob".

   *In diesem Parameter wird die Anzahl der Zeilen

   *Übergeben, die

   *initial gefüllt werden sollen.

    77  DLG-CNT PIC 9(9) binary.

   *In dieser Variablen wird die Tabelle übergeben

   *die gefüllt werden soll.

    77  DLG-OBJECT PIC 9(9) binary.

Bei der Definition der Procedure Division muss man beachten, dass diese einen Parameter mehr als im Dialog definiert hat. Der erste Parameter einer vom Dialog Manager aufgerufenen COBOL-Funktion ist immer die DM-Common-Data und diese wird im Dialog nicht definiert.

   *Diese COBOL-Funktion legt einen temporaeren Speicherbereich

   * im Dialog Manager an und weist diesen dann einem

   * Tablefield zu.

 

    PROCEDURE DIVISION USING DM-COMMON-DATA

        DLG-OBJECT DLG-CNT.

    ORGANIZE-IN SECTION.

      MOVE 0 TO BASE.

      MOVE DLG-CNT TO ICOUNT.

   *Initialisierung eines Speicherplatzes im DM

In dieser Funktion wird dann ein temporärer Bereich angelegt, gefüllt und dann dem Tablefield zugewiesen.

      CALL "DMcob_InitVector" USING DM-StdArgs DM-POINTER

        DT-String

        ICOUNT.

   *Initialisierung der DM-Value Struktur

      MOVE DT-STRING TO DM-DATATYPE.

   *Auffüllen des temporären Bereichs, der dann in der

   *Tabelle angezeigt werden soll.

    PREPARE-DATA SECTION.

   *Setzen der einzelnen Inhalte

      MOVE 0 TO COUNTER.

      MOVE 0 TO KL.

 

      PERFORM VARYING COUNTER FROM 1 BY 1

        UNTIL COUNTER > ICOUNT

            ADD 1 TO KL

        MOVE KL TO DM-INDEX

        MOVE DLG-NAME TO STR-TAB

   *Zunächst wird der Name gesetzt.

            COMPUTE IDUMMY = COUNTER + BASE

        MOVE IDUMMY TO INT-TAB

        MOVE 5 TO J

        MOVE SPACE TO STRFIELD(J)

        ADD 1 TO J

        PERFORM VARYING I FROM 1 BY 1 UNTIL I > 5

            MOVE INTFIELD(I) TO STRFIELD(J)

            ADD 1 TO J

        END-PERFORM

 

        MOVE STR-TAB TO DM-VALUE-STRING

        CALL "DMcob_SetVectorValue" USING DM-STDARGS

            DM-VALUE

            DM-POINTER

 

   *Danach wird der Vorname gesetzt.

            ADD 1 TO KL

        MOVE KL TO DM-INDEX

        MOVE DLG-VORNAME TO STR-TAB

   *Aufbereiten eines veraenderten Strings fuer die Anzeige

        COMPUTE IDUMMY = COUNTER + BASE

        MOVE IDUMMY TO INT-TAB

        MOVE 8 TO J

        MOVE SPACE TO STRFIELD(J)

        ADD 1 TO J

        PERFORM VARYING I FROM 1 BY 1 UNTIL I > 5

            MOVE INTFIELD(I) TO STRFIELD(J)

            ADD 1 TO J

        END-PERFORM

 

   *Zuletzt wir der Wohnort gesetzt.

        MOVE STR-TAB TO DM-VALUE-STRING

        CALL "DMcob_SetVectorValue" USING DM-STDARGS

            DM-VALUE

            DM-POINTER

 

        ADD 1 TO KL

        MOVE KL TO DM-INDEX

        MOVE DLG-WOHNORT TO STR-TAB

   *Aufbereiten eines veraenderten Strings fuer die Anzeige

        COMPUTE IDUMMY = COUNTER + BASE

        MOVE IDUMMY TO INT-TAB

        MOVE 4 TO J

        MOVE SPACE TO STRFIELD(J)

        ADD 1 TO J

        PERFORM VARYING I FROM 1 BY 1 UNTIL I > 5

            MOVE INTFIELD(I) TO STRFIELD(J)

            ADD 1 TO J

        END-PERFORM

 

        MOVE STR-TAB TO DM-VALUE-STRING

        CALL "DMcob_SetVectorValue" USING DM-STDARGS

            DM-VALUE

            DM-POINTER

   *Ende der Schleife zum Aufbereiten der Daten.

      END-PERFORM.

 

   *Uebergeben der gespeicherten Werte an die Anzeige

      MOVE DLG-OBJECT TO DM-OBJECT.

      MOVE AT-FIELD TO DM-ATTRIBUTE.

      MOVE 2 TO DM-INDEXCOUNT.

      MOVE 1 TO DM-index.

      MOVE 1 TO DM-second.

   * Es soll der gesamte Inhalt der Tabelle durch den

   * Inhalt des temporären Bereichs ersetzt werden.

   * Daher die letzten drei Parameter mit dem Wert 0.

      CALL "DMcob_SetVector" USING DM-StdArgs DM-Value

            DM-POINTER

            by content 0

            by content 0

            by content 0.

Abschließend wird dieser Bereich wieder im Dialog Manager freigegeben.

   *Freigeben des Speicherbereiches

      CALL "DMcob_FreeVector" USING DM-StdArgs DM-POINTER.

 

      GOBACK.

3.2.5.2 Funktion TABFUNC

Mit Hilfe dieser Funktion soll das Nachladen des Tablefields erreicht werden. Immer wenn der Benutzer in einen Bereich scrollt, der noch nicht gefüllt ist, wird vom Dialog Manager diese Funktion aufgerufen.

Die Parameter sind fest vom Dialog Manager definiert und können daher nicht geändert werden. Diese Nachladefunktionen erhalten eine Struktur DM-Content-Data als Parameter, in der die notwendigen Informationen gespeichert sind.

01  DM-Content-Data

    02  DM-CO-OBJECT     pic 9(9) binary.

    02  DM-CO-REASON     pic 9(4) binary.

    02  DM-CO-VISFIRST   pic 9(4) binary.

    02  DM-CO-VISLAST    pic 9(4) binary.

    02  DM-CO-LOADFIRST  pic 9(4) binary.

    02  DM-CO-LOADLAST   pic 9(4) binary.

    02  DM-CO-COUNT      pic 9(4) binary.

    02  DM-CO-HEADER     pic 9(4) binary.

In DM-Co-Object wird die ID des Tablefields übergeben. Die Felder DM-Co-Visfirst und DM-Co-Vislast enthalten die erste und letzte sichtbare Zeile, die Felder DM-Co-Loadfirst und DM-Co-Loadlast die erste und letzte zu ladende Zeile. Dieses sind jedoch nur die Minimalwerte, die Anwendung darf jederzeit mehr als die angegebenen Zeilen laden.

    IDENTIFICATION DIVISION.

    PROGRAM-ID. TABFUNC.

    AUTHOR. "ISA-DEMO".

 

    ENVIRONMENT DIVISION.

    INPUT-OUTPUT SECTION.

    DATA DIVISION.

    FILE SECTION.

 

    WORKING-STORAGE SECTION.

    01  STR-TAB.

    05 STRFIELD PIC X OCCURS 80.

    01  INT-TAB.

    05 INTFIELD PIC 9 OCCURS 5.

    77  COUNTER PIC 9(4) VALUE 0.

    77  BASE PIC 9(4) VALUE 0.

    77  DM-POINTER  PIC 9(4) BINARY VALUE 0.

    77  ICOUNT  PIC 9(4) BINARY VALUE 0.

    77  IROW    PIC 9(4) BINARY VALUE 0.

    77  ICOL    PIC 9(4) BINARY VALUE 3.

    77  IDUMMY  PIC 9(4) VALUE 0.

 

    77  I    PIC 99 VALUE ZERO.

    77  J    PIC 99 VALUE ZERO.

    77  KL      PIC 9(4) VALUE ZERO.

    77  DLG-NAME PIC X(80) value "Name ".

    77  DLG-VORNAME PIC X(80) value "Vorname ".

    77  DLG-WOHNORT PIC X(80) value "Ort  ".

    77  DLG-COUNT PIC 9(9) BINARY value 0.

Damit auf die DM-Content-Data Struktur zugegriffen werden kann, muss zusätzlich die Datei IDMcoboc.cob per COPY angezogen werden. Ansonsten läuft diese Funktion wie die Funktion FILLTAB ab.

    LINKAGE SECTION.

    COPY "IDMcobls.cob".

    COPY "IDMcoboc.cob".

 

   * Diese COBOL-Funktion legt einen temporaeren Speicher

   * bereich im Dialog Manager an und weist diesen dann

   * einem Tablefield zu.

 

    PROCEDURE DIVISION USING DM-COMMON-DATA DM-Content-Data.

    ORGANIZE-IN SECTION.

 

      COMPUTE ICOUNT =  DM-co-loadlast - DM-co-loadfirst.

      COMPUTE ICOUNT = ICOUNT + 1.

      COMPUTE ICOUNT = ICOUNT* 3.

      COMPUTE BASE = DM-co-loadfirst* 3.

      MOVE ICOUNT TO DLG-COUNT.

      MOVE DM-CO-OBJECT TO DM-OBJECT.

      MOVE DT-string TO DM-DATATYPE.

      MOVE DM-co-loadfirst TO BASE.

   *Initialisierung eines Speicherplatzes im DM

      CALL "DMcob_InitVector" USING DM-StdArgs DM-POINTER

        DT-String

        ICOUNT.

   *Initialisierung der DM-Value Struktur

      MOVE DT-STRING TO DM-DATATYPE.

      PERFORM FILLDATA.

 

   *Uebergeben der gespeicherten Werte an die Anzeige

      MOVE DM-CO-OBJECT TO DM-OBJECT.

      MOVE AT-FIELD TO DM-ATTRIBUTE.

      MOVE 2 TO DM-INDEXCOUNT.

      COMPUTE DM-INDEX =  DM-co-loadfirst - 1.

      MOVE 1 TO DM-second.

      CALL "DMcob_SetVector" USING DM-StdArgs DM-Value

            DM-POINTER by content 0

            by reference DM-co-loadlast ICOL.

 

   *Freigeben des Speicherbereiches

      CALL "DMcob_FreeVector" USING DM-StdArgs DM-POINTER.

      GOBACK.

 

    FILLDATA.

   *Setzen der einzelnen Inhalte

      MOVE 0 TO COUNTER.

      MOVE 0 TO KL.

        MOVE 256 TO DM-INDEXCOUNT.

      PERFORM VARYING COUNTER FROM 1 BY 1

        UNTIL KL > ICOUNT

        ADD 1 TO KL

        MOVE KL TO DM-INDEX

        MOVE DLG-NAME TO STR-TAB

   *Aufbereiten eines veraenderten Strings fuer die Anzeige

        COMPUTE IDUMMY = COUNTER + BASE

        MOVE IDUMMY TO INT-TAB

        MOVE 5 TO J

        MOVE SPACE TO STRFIELD(J)

        ADD 1 TO J

        PERFORM VARYING I FROM 1 BY 1 UNTIL I > 5

            MOVE INTFIELD(I) TO STRFIELD(J)

            ADD 1 TO J

        END-PERFORM

 

        MOVE STR-TAB TO DM-VALUE-STRING

        CALL "DMcob_SetVectorValue" USING DM-STDARGS

            DM-VALUE DM-POINTER

 

        ADD 1 TO KL

        MOVE KL TO DM-INDEX

        MOVE DLG-VORNAME TO STR-TAB

   *Aufbereiten eines veraenderten Strings fuer die Anzeige

        COMPUTE IDUMMY = COUNTER + BASE

        MOVE IDUMMY TO INT-TAB

        MOVE 8 TO J

        MOVE SPACE TO STRFIELD(J)

        ADD 1 TO J

        PERFORM VARYING I FROM 1 BY 1 UNTIL I > 5

            MOVE INTFIELD(I) TO STRFIELD(J)

            ADD 1 TO J

        END-PERFORM

 

        MOVE STR-TAB TO DM-VALUE-STRING

        CALL "DMcob_SetVectorValue" USING DM-STDARGS

            DM-VALUE DM-POINTER

        ADD 1 TO KL

        MOVE KL TO DM-INDEX

        MOVE DLG-WOHNORT TO STR-TAB

   *Aufbereiten eines veraenderten Strings fuer die Anzeige

        COMPUTE IDUMMY = COUNTER + BASE

        MOVE IDUMMY TO INT-TAB

        MOVE 4 TO J

        MOVE SPACE TO STRFIELD(J)

        ADD 1 TO J

        PERFORM VARYING I FROM 1 BY 1 UNTIL I > 5

            MOVE INTFIELD(I) TO STRFIELD(J)

            ADD 1 TO J

        END-PERFORM

        MOVE STR-TAB TO DM-VALUE-STRING

        CALL "DMcob_SetVectorValue" USING DM-STDARGS

            DM-VALUE DM-POINTER

      END-PERFORM.

3.2.6 Funktionen mit Records als Parameter

Im Gegensatz zu den Funktionen für das Tablefield können die nachfolgenden Funktionen ohne Wissen über den Dialog auskommen und sollten das auch. Diese Funktionen werden daher ohne jeglichen Aufruf an den Dialog Manager in Standard-COBOL geschrieben. Lediglich die Copy-Strecken zeigen, dass es sich um Funktionen handelt, die vom Dialog Manager aufgerufen werden.

3.2.6.1 Funktion GETADDR

Diese Funktion soll zu einem gegebenen Namen den restlichen Datensatz an die Oberfläche liefern. Damit auf die Definitionen des Dialog zugegriffen werden kann, wird ein Copy auf die vom Dialog Manager generierte Datei tablec.cpy eingefügt.

    IDENTIFICATION DIVISION.

    PROGRAM-ID. GETADDR.

    AUTHOR. "ISA-DEMO".

    DATA DIVISION.

    WORKING-STORAGE SECTION.

    LINKAGE SECTION.

 

    COPY "IDMcobls.cob".

   *Das nachfolgende Copy gehört zu dieser Anwendung. Es

   *wurde vom DM aus dem Dialog generiert und sollte in den

   *COBOL-Modulen da verwendet werden, wo auf die entsprechenden

   *Strukturen zugegriffen werden soll.

    COPY "tablec.cpy".

 

    PROCEDURE DIVISION USING DM-COMMON-DATA RECADDRESS.

 

    SEC-RECADDRESS SECTION.

   *Hier müssten jetzt die Werte für die einzelnen Einträge

   *aus der Datenbank geholt werden.

   *Das entfällt hier. Stattdessen werden hier Dummy-Werte

   *in die entsprechenden Strukurelemente zugewiesen.

        MOVE "NAME" TO NNAME.

        MOVE "VORNAME" TO FIRSTNAME.

        MOVE "STRASSE" TO STREET.

        MOVE 3 TO COUNTRY.

        GOBACK.

3.2.6.2 Funktion PUTADDR

Diese Funktion soll die vom Benutzer geänderten Daten wieder abspeichern. Damit auf die Definitionen des Dialogs zugegriffen werden kann, wird ein Copy auf die vom Dialog Manager generierte Datei tablec.cpy eingefügt.

    IDENTIFICATION DIVISION.

    PROGRAM-ID. PUTADDR.

    AUTHOR. "ISA-DEMO".

 

    DATA DIVISION.

 

    WORKING-STORAGE SECTION.

 

    LINKAGE SECTION.

 

    COPY "IDMcobls.cob".

   *Das nachfolgende Copy gehört zu dieser Anwendung. Es

   *wurde vom DM aus dem Dialog generiert und sollte in den

   *COBOL-Modulen da verwendet werden, wo auf die entsprechenden

   *Strukturen zugegriffen werden soll.

    COPY "tablec.cpy".

 

    PROCEDURE DIVISION USING DM-COMMON-DATA RECADDRESS.

 

    SEC-RECADDRESS SECTION.

 

   *Hier müssten jetzt die Werte für die einzelnen Einträge

   *in der Datenbank gespeichert werden.

   *Das entfällt hier. Stattdessen werden hier Dummy-Werte

   *in die entsprechenden Strukurelemente zugewiesen.

        MOVE "      " TO STREET.

        MOVE 0 TO COUNTRY.

        GOBACK.