Die Makroprogrammiersprache DOCUcontrol von GSD

Eines der Softwareprodukte der Firma GSD trägt den Namen „DOCUframe“. DOCUframe ist eine Softwarelösung, mit der die Geschäftsprozesse von kleinen und mittelständischen Unternehmens gesteuert werden können.

Dies ist ein hoher Anspruch, erfordert er doch eine extrem hohe Flexibiltät und Anpassbarkeit der Softwarelösung. Dies wird erreicht durch DOCUcontrol, eine von GSD selbstentwickelte Makro-Programmiersprache, die eine Anpassung von DOCUframe an die jeweiligen Anforderungen des Unternehmens ermöglicht. Ja, mit DOCUcontrol können sogar Applikationen geschaffen werden, die komplett neue Einsatzgebiete abdecken und über den Kern von DOCUframe als Enterprise-Dokumentenmanagement-, Groupware- und Workflow-System hinausgehen. Ein Beispiel ist der Einsatz von DOCUframe als Customer Relation Management-System (CRM) oder als kleines Enterprise Ressource Planning-System (ERP).

DOCUcontrol ist wie bereits erwähnt eine eigenständige (Makro-)Programmiersprache, vom Ansatz her vergleichbar mit ABAP/4 von SAP. Die Anwendungslogik wird komplett mittels DOCUcontrol-Makros abgebildet. Die dadurch erzielte Abstraktion vom Kernsystem und der Datenbank erlaubt eine Releasefähigkeit der Applikationen. Dieses Merkmal der Unabhängigkeit der Business-Logik vom darunterliegenden „Kernel“ ist wiederum vergleichbar mit dem entsprechenden Architekturmerkmal eines SAP-Systems.


Noch ein Hinweis zur verwendeten Datenbank. DOCUframe setzt für die Datenpersistenz eine objektorientierte Datenbank ein. Die Datenbank trägt den FastObjects und stammt von der Fa. Versant, einem Spezialisten für objektorientierte Datenbanken. Ursprünglich wurde FastObjects von dem Hamburger Softwareunternehmen Poet entwickelt.

DOCUcontrol ist eine prozedurale Programmiersprache und verfügt neben den obligatorischen Elementen einer Programmiersprache wie Datentypen, Variablen, Operatoren, Anweisungen und Kontrollstrukturen auch über einen reichen Schatz an „Builtin“-Makros, also Funktionen, die das Kernsystem zur Verfügung stellt. So gibt es Makros für den Umgang mit Objekten, für die Zeichenkettenverarbeitung, für mathematische Operationen, für den Datenaustausch mit anderen Systemen, inkl. Fremdsystemen oder auch für die Steuerung der Dialoge (Benutzeroberfläche).

Unterstützt wird die Anmwendungsentwicklung in DOCUcontrol durch eine Entwicklungs-Workbench, „Datenbank-Makro-Editor“ genannt. Ähnlich wie die ABAP-Workbench von SAP unterstützt der Datenbank-Makro-Editor die Fehlersuche in Programmen durch Breakpoints oder auch das schrittweise Ausführen der Makros mit Überwachung der verwendeten Variablen und deren Inhalte. Aber auch Syntax-Highlighting oder Versionierung für die Programmtexte werden geboten.

Um nur mal einen kleinen Einblick zu geben, wie in DOCUcontrol-Makro aussieht, nachfolgend das Beispiel für das Füllen einer Baumstruktur für das Abbilden einer Gerätehierachie aus einem SAP-ERP-System in einem DOCUframe-basierten CRM-System:

///////////////////////////////////////////////////////////////////////////////////////////////////
// BOOL OFLOEquiHierAdd( HANDLE Tree, STRING ItemID, _Geraet Equi, _Geraet EquiSel, STRING Icon )
// ------------------------------------------------------------------------------------------------
// Baut die Equipmenthierarchie zu einem Gerät in Form eines Treeviews auf 
//
// Parameter: Tree          : Treeview
//            ItemID        : Mit diesem Knoten beginnen
//            Equi          : Um welches Gerät handelt es sich
//            EquiSel       : Gerät, das im gerätebrowser selektiert ist
//            Icon          : Anzuzeigendes Symbol für den Knoten
//
// Result   : TRUE : Alles ok
//            FALSE: Fehler ist aufgetreten (kann aktuell nicht vorkommen)
//
// Start of implementation       : 23.01.2012  OF
// Last change                   : 14.04.2012
//
////////////////////////////////////////////////////////////////////////////////////////////////////

BOOL OFLOEquiHierAdd( HANDLE Tree, STRING ItemID, _Geraet Equi, _Geraet EquiSel, STRING Icon )

  BOOL Ok = TRUE; // Es gibt eigentlich nur Ok = TRUE

  STRING ItemIDNew;
  INT i;

  //Trace( Equi._SAPNummer );

  FOR( i = 1 ; i <= DBObSetGetCount( Equi._UntergeordneteGeraete ); i++ )
    IF( Equi._UntergeordneteGeraete[ i ] == EquiSel ) // Gerät ist das im Browser selektierte, dann Fett anzeigen
      ItemIDNew = TreeInsertTreeItem( Tree, Equi._UntergeordneteGeraete[ i ]._SAPNummer + " (" +
                                            Equi._UntergeordneteGeraete[ i ].Name + ")", Icon, FALSE, ItemID, TVIS_EXPANDED | TVIS_BOLD, "", FALSE, DBOGetOID( Equi._UntergeordneteGeraete[ i ] ));
    ELSE
      ItemIDNew = TreeInsertTreeItem( Tree, Equi._UntergeordneteGeraete[ i ]._SAPNummer + " (" +
                                            Equi._UntergeordneteGeraete[ i ].Name + ")" , Icon, FALSE, ItemID, TVIS_EXPANDED, "", FALSE, DBOGetOID( Equi._UntergeordneteGeraete[ i ] ) );
    ENDIF
    // Trace( "Insert: " + Equi._UntergeordneteGeraete[ i ]._SAPNummer + "ItemID: " + ItemIDNew );

    // Hierarchie rekursiv für ein untergeordentes Gerät aufbauen
    Ok = OFLOEquiHierAdd( Tree, ItemIDNew, Equi._UntergeordneteGeraete[ i ], EquiSel, Icon );
  NEXT

RETURN( Ok );

Das Beispiel zeigt auch, dass DOCUcontrol auch rekursive Programmierung unterstützt.
So kann dann das Ergebnis in einem Anwender-Dialog unter Verwendung eines Dialogelements vom Typ „Baumstruktur“ (Tree) aussehen:

Baumstruktur in Anwenderdialog

Das Makro dafür sieht folgendermaßen aus:

VOID Dlg( HANDLE Dialog, _Geraet Object ) 

// Aufbau des Baums aus der Equipmenthierachie zum Gerät
// 
// 23.01.2012   OF
// -----------------------------------------------------

HANDLE Tree;
STRING ItemID, ItemID2, ItemIDRoot;

_Geraet Equi;

INT i;

Tree = GetDialogFieldWnd( Dialog, "GeraeteHierarchie" );
TreeDeleteAllItems( Tree );

ItemID = ItemIDRoot;

// Finde Wurzel

Equi = Object;

WHILE( !DBOIsEmpty( Equi._UebergeordnetesGeraet ) )
  Equi = Equi._UebergeordnetesGeraet;
ENDWHILE

IF( Equi == Object )
  ItemIDRoot = TreeInsertTreeItem( Tree, Equi._SAPNummer + " (" + Equi.Name + ")", "IDR_FLOWCHART", FALSE, "", TVIS_EXPANDED | TVIS_BOLD, "", FALSE, DBOGetOID( Equi ) );
ELSE
  ItemIDRoot = TreeInsertTreeItem( Tree, Equi._SAPNummer + " (" + Equi.Name + ")", "IDR_FLOWCHART", FALSE, "", TVIS_EXPANDED, "", FALSE,DBOGetOID( Equi ) );
ENDIF

// Rekursiver Aufbau dse Baumes

OFLOEquiHierAdd( Tree, ItemIDRoot, Equi, Object, "IDI_GOTOBUTTON" );

RETURN();

Wer sich über die DOCUframe aund die anderen Softwareprodukte informieren möchte, hier der Link zur Firmenwebsite von GSD.


[of_autor]

2 Kommentare:

  1. Hallo Herr Fischer,

    ich habe in einem Partnerunternehmen der GSD neu angefangen und hatte auch geplant an der Schulung Docucontrol für Anfänger teilzunehmen, wegen der aktuellen Situation wurde die Schulung auf unbestimmte Zeit verschoben. Gibt es eine Möglichkeit sich privat besser in Docucontrol einzuarbeiten?

    Vielleicht ein Handbuch(gerne auch käuflich zum erwerben) mit Beispielaufgaben, sodass ich Vorgänge in meiner Arbeit auch effektiv anwenden kann.

    Beste Grüße und gute Gesundheit.

  2. Oliver Fischer

    Hallo Herr Omar,

    leider gibt es kein Buch zur Makro-Programmiersprache DOCUcontrol. Da Sie aber bei einem GSD-Partnerunternehmen arbeiten, würde ich Ihnen empfehlen sich über Ihren Arbeitgeber direkt an GSD zu wenden mit der Bitte Ihnen die Schulungsunterlagen vorab zuzusenden.

    Viel Erfolg und bleiben Sie gesund!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert