Uniface

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche

Uniface ist eine Plattform für die Entwicklung und den Betrieb von unternehmensweiten Anwendungen, die auf einer Vielzahl von Laufzeitumgebungen ausgeführt werden können, einschließlich mobilen Geräten, Mainframes, Web, Service-orientierte Architektur (SOA), Windows, Java EE und .NET.

Uniface Anwendungen sind datenbank- und plattformunabhängig. Dafür stellt Uniface ein Integrationsframework bereit, das es Uniface-Anwendungen ermöglicht, mit allen namhaften DBMS- Produkten und einer großen Zahl weiterer Technologien wie mainframebasierten Produkten (CICS, IMS), Web Services, SMTP und POP Email, LDAP Verzeichnissen, .NET, ActiveX, Component Object Model (COM), C und C++ Programmen sowie Java zu integrieren. Uniface arbeitet unter Microsoft Windows, Windows Mobile, verschiedenen Unix- und Linuxsystemen, IBM iSeries/AS400, z/OS und VMS.

Uniface kann in komplexen Systemen verwendet werden, die unternehmenskritische Daten verwalten und vitale Geschäftsprozesse unterstützen wie etwa webbasiertes Onlineshopping, Finanztransaktionen, Gehaltsabrechnung oder Lagersteuerung. Zurzeit wird es von tausenden Firmen in mehr als 30 Ländern mit einer effektiv installierten Basis von einigen Millionen Benutzern verwendet. Uniface Anwendungen reichen von Client/Server bis Web, von Datenerfassung bis hin zu Workflow und Portalen, die lokal, über Intra- oder Internet eingesetzt werden.

Ursprünglich in den Niederlanden von Inside Automation, später Uniface B.V. entwickelt, wurden Produkt und Firma 1994 von der in Detroit angesiedelten Compuware Corporation übernommen. Uniface wurde jedoch weiterhin in Amsterdam entwickelt.

Anfang 2014 wurde der Uniface Geschäftsbereich an Marlin Equity Partners verkauft und wird seitdem wieder von Uniface B.V. und unabhängig von der Compuware Corporation weiterentwickelt und vertrieben.

Uniface-Produkte[Bearbeiten]

Die Uniface-Plattform bietet eine Auswahl von Werkzeugen für Entwicklung, Implementierung, Auslieferung und Betrieb von Uniface Anwendungen, von denen die meisten in der Uniface Application Platform Suite (APS) zusammengefasst sind. Diese APS beinhaltet:

  • Uniface-Entwicklungsumgebung — eine integrierte Suite mit Werkzeugen für Modellierung, Implementierung, Kompilieren, Debugging und Auslieferung von Anwendungen
  • Uniface Flow — eine Umgebung für Entwicklung, Implementierung und Betrieb von Geschäftsprozessen
  • Uniface View — ein Anwendungsintegrationsportal, das einen strukturierten Desktop von Webdokumenten, Datenbankreports, Geschäftsanwendungen und anderen unternehmensweiten Informationsquellen bietet

Uniface Anwendungen (inklusive Entwicklungsumgebung, Uniface Flow und Uniface View) verwenden eine einheitliche Laufzeitinfrastruktur, die aus folgenden Teilen besteht:

  • Uniface-Laufzeitumgebung — ein plattformspezifischer Prozess, der kompilierte Anwendungskomponenten und -bibliotheken ausführt
  • Uniface Router — ein multi-threaded Prozess, der für die Inter-Prozess-Kommunikation von Uniface-Anwendungen verantwortlich ist, Uniface Server-Prozesse startet und beendet, Lastverteilung steuert und Nachrichten zwischen verschiedenen Uniface Prozessen weiterleitet
  • Uniface Server – ein serverbasierter Prozess, der es Uniface Clients ermöglicht, über ein Netzwerk Komponenten auf anderen Rechnern auszuführen, oder auf, auf anderen Rechnern liegende Ressourcen zuzugreifen. Er agiert dabei als Anwendungs-, Daten- oder Fileserver.
  • Uniface Development Repository — alle während der Entwicklung festgelegten Definitionen und Eigenschaften von Entwicklungsobjekten, Prozessen, Organisationsmodellen, Portalen etc. werden von Uniface mittels eigener Datenbanktabellen verwaltet. Für diese Tabellen kann jede SQL-Datenbank, für die ein Konnektor existiert, verwendet werden.
  • Web Application Server – Der Uniface Web Application Server stellt im Zusammenwirken mit einem Web Server (HTTP Server) und einer Servlet Engine die Laufzeitumgebung für Uniface Web Anwendungen dar. Er besteht aus Uniface Server, Uniface Router und dem Web Request Dispatcher-Servlet.
  • Servlets — Java Servlets, die die Kommunikation zwischen einem Webserver und dem Uniface Server für Webanwendungen (Web Request Dispatcher) und Webservices (SOAP Request Dispatcher) bereitstellen
  • Webserver – die Uniface Development Suite wird mit einem vorinstallierten Apache Tomcat (HTTP Server und Servlet Engine) ausgeliefert, um Entwicklung und Test von Webanwendungen zu erleichtern. Für den produktiven Einsatz kann aber ein beliebiger Webserver verwendet werden
  • Datenbankkonnektoren — Treiber, die die Verbindung zwischen Uniface und einer Vielzahl von Datenbanken herstellen
  • Integrationswerkzeuge — Treiber, Komponenten und APIs, die die Kommunikation zwischen Uniface einerseits und Anwendungen und Technologien von Drittanbietern andererseits wie etwa Java, CICS, IMS, LDAP, SMTP, POP, Betriebssystemkommandos, COM und andere handhaben

Des Weiteren kann eine Uniface-Client-Server-Anwendung mittels Uniface JTi (Java Thin Client Interface) auf praktisch jedem, mit dem Internet verbundenen Computer ausgeführt werden.

Uniface verwendet eine eigene prozedurale Sprache, genannt Proc, um Anwendungslogik zu entwickeln. Außerdem automatisiert Uniface die meisten Ein-/Ausgabeoperationen durch seinen Kernel und vordefinierten Code, sodass grundlegende Basislogik nicht manuell codiert werden muss.

Uniface-Anwendungen[Bearbeiten]

Uniface Anwendungen sind komponentenbasierte, infrastrukturunabhängige Computerprogramme, die Daten in einer oder mehreren Datenbanken oder Dateisystemen erzeugen oder verwenden können. Das können zusammengesetzte Anwendungen sein, die auch Nicht-Uniface-Komponenten umfassen, die mit anderen Entwicklungswerkzeugen erstellt wurden. Sie können auch in verteilten Client-Server- oder Webumgebungen, als mobile Anwendungen, Webservices und auch in Mainframeumgebungen laufen.

Uniface verfügt über eine Reihe von Komponententypen, die zur Verwendung in unterschiedlichen Ebenen einer mehrschichtigen Anwendungsarchitektur bestimmt sind.

Komponenten für die Präsentationsschicht sind verantwortlich für die Benutzeroberfläche und beinhalten:

  • Forms — interaktive Bildschirme für Anzeige und Erfassung von Daten in einer Client / Server Umgebung
  • Server Pages — interaktive Seiten zur Anzeige und Erfassung von Daten in einer Webumgebung
  • Reports — Layouts zur Präsentation von Daten in einer Druckausgabe.

Komponenten für die Ebene der Geschäftslogik führen Geschäftsregeln und aufgabenspezifisches Laufzeitverhalten aus, haben aber keine Benutzeroberfläche:

  • Services — bieten Funktionalität für die Verarbeitung von Geschäftslogik und können von anderen Komponenten dafür entweder lokal oder auch nicht lokal aufgerufen werden
  • Session Services — verarbeiten zentrale, komplexe Geschäftslogik meist über mehrere Datenentitäten hinweg wie etwa aufgabenspezifisches Laufzeitverhalten, Transaktionen und referenzielle Integrität
  • Entity Services — verarbeiten zentrale einfache Geschäftsregeln für einzelne Datenentitäten

Die Datenzugriffsebene beinhaltet die physische Datenbankstruktur, die im Uniface Anwendungsmodell abgebildet ist. Uniface stellt den physischen Datenzugriff sicher, indem es SQL in seinen Datenbankkonnektoren kapselt. Netzwerk- und Middlewarezugriffe sind wiederum in Middleware-Konnektoren und im Uniface-Router gekapselt.

Die Uniface Laufzeitumgebung führt die Anwendungskomponenten aus. Mit Hilfe der jeweils geeigneten Oberflächenkonnektoren (entweder für grafische oder zeichenorientierte Oberflächen) zeigt sie Präsentationskomponenten an, sendet und empfängt Daten mittels Datenbankkonnektoren.

Anwendungsentwicklung[Bearbeiten]

Die Uniface-Entwicklungsumgebung arbeitet modellgetrieben und komponentenbasiert. Datenstrukturen, Geschäftsregeln und Standardverhalten der Anwendung werden im Anwendungsmodell abgebildet. Modelldefinitionen können von Komponenten wiederverwendet und geerbt werden, von diesen aber auch abgeändert und somit übersteuert werden, was wiederum zu komponentenspezifischen Verhaltensweisen und Charakteristika führt. Die Verwendung von Templates erhöht Produktivität und Konsistenz bei der Modelldefinition.

Anwendungsmodell[Bearbeiten]

Das Anwendungsmodell definiert Entitäten (Tabellen), Felder, Schlüssel (Indizes) und Beziehungen sowie referenzielle Integrität. Jede Entität und jedes Feld in diesem Model besitzt Eigenschaften und ein Set von Triggern. Geschäftsregeln werden im Modell einerseits deklarativ durch Setzen von Eigenschaften, andererseits prozedural durch Eintragen von Proc Code (prozedurale Sprache von Uniface) in Triggern definiert.

Trigger sind Container für Code. Einige Trigger repräsentieren Benutzer- oder Systemereignisse, beispielsweise Occurrence Gets Focus, Read oder Leave Field. Andere dienen der Validierung oder als Platzhalter für Methoden, die mit diesem Objekt verbunden sind.

Die Verwendung von Triggern auf Modellebene erlaubt es Uniface, Eigenschaften und Logik innerhalb von Geschäftsobjekten zu sammeln, wobei die logischen von den physischen Datenstrukturen getrennt werden. Es ermöglicht auch, Standardverhalten nur einmal zu definieren, es aber in der gesamten Anwendung wiederverwenden zu können und damit eine 3-Schicht-Anwendungsarchitektur zu erleichtern und die Entwicklung insgesamt zu beschleunigen.

Komponenten[Bearbeiten]

Objekte, die im Anwendungsmodell beschrieben wurden, werden in Komponenten wiederverwendet. Entwickler nutzen Modellobjekte, indem sie diese für Präsentationskomponenten in grafischer Form in ein Layout-Tableau platzieren, oder für andere Komponenten in deren Baumstruktur einfügen. Sie können auf Komponentenebene aber auch Objekte verwenden, die nicht im Anwendungsmodell definiert wurden, etwa Steuerungsfelder, Menüs und Komponentenvariablen.

Im Anwendungsmodell definierte Eigenschaften und Trigger werden den Komponenten vererbt, indem sie dorthin kopiert werden. Diese Definitionen können auf Komponentenebene abgeändert werden, um spezifische Funktionalität zu erzielen. Durch eine solche Änderung wird die Koppelung dieser Definitionen an das Anwendungsmodell beendet (es ist allerdings möglich, diese Koppelung wieder herzustellen). Wenn Code oder Eigenschaften eines Objekts auf Modellebene geändert werden, brauchen diejenigen Komponenten, die dieses Objekt enthalten, nur kompiliert zu werden, damit die neuen Definitionen dort wirksam werden. Das ergibt Vorteile bei der Wartung und gewährleistet, dass Geschäftsregeln, die mit einem Objekt verbunden sind, überall verfügbar sind, wo dieses Objekt verwendet wird.

Uniface Repository[Bearbeiten]

Uniface verwaltet eine Datenbank mit den eigenen Metadaten zum Zweck der Wiederverwendung von Anwendungsmodellen, Komponentendefinitionen, Komponentenlayouts, prozeduralem Code etc. Um seine Integrität zu gewährleisten, ist dieses Uniface eigene Repository nur für den Zugriff von der Uniface Entwicklungsumgebung aus vorgesehen. Jedoch ist die Struktur des Repositorys dokumentiert, wodurch es auch möglich wäre (allerdings nicht empfohlen wird), es beispielsweise für Auswertungen auch direkt anzusprechen.

Durch die Verwendung eines zentralen Repositorys kann die Anwendungserstellung auf Teams von Softwareentwicklern aufgeteilt werden. Uniface kann auch mit jedem Sourcecode Management System (SCM) integriert werden, das die Microsoft Common Source Code Control Interface Spezifikation unterstützt. Die innerhalb von Uniface verfügbare SCM Funktionalität hängt dabei vom tatsächlich verwendeten SCM System ab, weil Softwarehersteller das MS CSCC API unterschiedlich interpretieren. Als Folge davon können unterstützte Funktionalität und Verhalten je nach SCM-System unterschiedlich sein.

Auslieferung und Betrieb von Anwendungen[Bearbeiten]

Uniface Anwendungen können auf Plattformen von Mainframe bis Mobile betrieben werden, ohne den Code ändern zu müssen. Die Komponenten (und andere Objekte wie Startup Shells, Menüs, Toolbars, Panels, Glyphs, globale und included Procs) werden in Laufzeitobjekte kompiliert, die in Zip Dateien gepackt und so an jede Plattform ausgeliefert werden können. Die Laufzeitobjekte werden von einer Virtual Machine und einem plattformspezifischen Interpreter ausgeführt (Java und andere Sprachen folgten diesem Konzept erst später). Komponenten können auf einer Maschine kompiliert und auf einer anderen ausgeführt werden, solange die Uniface Virtual Machine dort vorhanden ist.

Datenbankkonnektivität[Bearbeiten]

Uniface kann auf so viele Datenbanken und Dateisysteme zugreifen, als es diese durch Datenbankkonnektoren (oder -treiber) unterstützt. Datenbankkonnektoren konvertieren die Uniface Datentypen des Anwendungsmodells auf das am besten passende Format des jeweiligen Speichermediums. Zur Laufzeit ist es zusätzlich möglich, Parameter zu setzen, um datenbankspezifische Erweiterungen und Eigenschaften zu aktivieren (oder zu deaktivieren). Vorausgesetzt, dass die betreffenden Datenbankkonnektoren lizenziert sind, kann auch zwischen verschiedenen Datenquellen konvertiert werden. Uniface bietet außerdem ein API, das Database Connector API, mit dessen Hilfe auch eigene Datenbankkonnektoren erstellt werden können.

Lizenzierung[Bearbeiten]

Die Lizenzierung wird vom Compuware Distributed License Manager (DLM) gehandhabt. DLM ist ein serverbasiertes System, das Lizenzen an Clients auf Anforderung vergibt und damit kein lokales Speichern der Lizenzen erfordert.

Geschichte von Uniface[Bearbeiten]

Ursprünglich UNIS genannt, entstand das Produkt 1984 in den Niederlanden bei Inside Automation, einer Firma mit Bodo Douque an der Spitze und Frits Kress als technischen Direktor. 1986 wurden sowohl der Name des Produkts als der Firma auf Uniface geändert.

Uniface wurde nach den Prinzipien der 3-Schema Architektur des American National Standards Institute (ANSI) entwickelt. Diese Architektur wurde erstmals 1975 vorgestellt und war die Standardvorgehensweise für die Erstellung von Datenbank Managementsystemen bestehend aus 3 Schemata (oder Metamodellen):

  • konzeptionelles Schema — Definition aller Datenstrukturen und der Beziehungen zwischen ihnen. Pro Datenbank gibt es nur ein konzeptionelles Schema. Uniface implementiert das konzeptionelle Schema als Anwendungsmodell (in verschiedenen Unifaceversionen auch als Business Object Model oder Application Object Model bekannt).
  • externes Schema — verschiedene externe Sichten auf die Daten. Pro Datenbank kann es viele externe Schemata geben.

Uniface implementiert externe Schemata als Komponenten. Im Lauf der Evolution von Uniface wurde das externe Schema zu Forms. Versteckte Forms, die im Hintergrund liefen, ohne sichtbar zu werden, wurden zu Services. Services teilten sich in Session Services für Objekte der Schicht für Geschäftslogik und Entityservices, die entweder in derselben oder in der Datenschicht angesiedelt sind. Forms, die Druckergebnisse lieferten anstatt angezeigt zu werden, wurden zu Reportkomponenten. Für Webanwendungen wurden die Serverpage (USP) und später die Dynamic Serverpage (DSP) eingeführt, um Web-2.0-Funktionalität unterstützen zu können.

  • internes Schema — Definition der physischen Abbildung der gespeicherten Daten. Uniface überlässt das interne Schema den vielen relationalen Datenbanksystemen zu denen es verbunden werden kann und wodurch es auch datenbankunabhängig ist.

Uniface wurde zunächst auf DEC-VAX Maschinen entwickelt und benutzte das VAX-eigene Dateimanagementsystem RMS. Eine Erinnerung daran ist auch im heutigen Produkt noch in Form der „GOLD“-Taste enthalten, die zum Umschalten von Funktionsmodi dient. DEC VT Terminals hatten tatsächlich eine goldfarbene bzw. gelbe Taste auf der Tastatur. Heute befindet sich die „GOLD“-Funktion auf der + Taste des numerischen Tastenblocks oder auf einer Funktionstaste.

Frühe Versionen des Produkts waren mit der Sybase RDBMS unter dem Namen FastBuild gebündelt, wobei keine Beschränkung auf diese Datenbank bestand.

Uniface wurde kontinuierlich weiterentwickelt, um neue Technologien und Anwendungsarchitekturen zu unterstützen. Das war immer entscheidend für seinen Erfolg, weil Uniface Anwendungen migriert, geändert und modernisiert werden können, ohne dass das Erstinvestment dabei verloren gehen würde.

Uniface Versionen[Bearbeiten]

Anleitung: Neutraler Standpunkt Die Neutralität dieses Artikels oder Abschnitts ist umstritten. Eine Begründung steht auf der Diskussionsseite. Weitere Informationen erhältst du hier.

Uniface Version 3 (1986) Uniface 3 war die erste veröffentlichte Version. Es bot Unterstützung für mehrere Datenbanken (RMS, Oracle, C-ISAM, Ingres und RDB), eine Virtual Machine für die Code-Interpretation sowie den Uniface Text- und Command Editor.

Uniface Version 4 (1988) Uniface 4 verbesserte den Text Editor (jetzt Form Editor), Anzeige- und Druckfunktionalität, führte die Unterstützung von MS-DOS ein und bot neu eine CASE-Tool-Schnittstelle.

Uniface Version 5 (1990) Uniface 5 ermöglichte Client-Server-Anwendungen mit Remote-Datenbankzugriff über Polyserver, und es führte graphische Benutzeroberfläche mittels Universal Presentation Interface (UPI) ein. Die Datenbankunterstützung wurde auf insgesamt 13 Datenbanken und Dateisysteme erweitert, und Uniface war jetzt auf den Plattformen DOS, Windows, VMS, OS/2, Stratus VOS und Unix verfügbar.

Uniface Six (1994) Uniface Six komplettierte die Unterstützung für voll grafische Entwicklungsumgebungen. Es beinhaltete den grafischen Form Painter und Application Model Editor, erleichterte Anwendungsauslieferung und -betrieb durch Dynamic Object Libraries, fügte die Unterstützung für Microsoft Object Linking and Embedding (OLE) hinzu, bot Unterstützung für Apple Macintosh, führte Berechtigungssystem, integrierte Versionskontrolle und das Personal Series Reportwerkzeug (das später wieder entfernt wurde, nachdem der Drittanbieter entschieden hatte, das Produkt nicht mehr weiterzuentwickeln) ein, die Plattformunterstützung wurde auch breiter.

Uniface Seven (1997) Uniface Seven konzentrierte sich auf die Integration von Komponenten, sowohl Uniface eigene als auch externe, mittels der neuen Uniface Request Broker (URB) Architektur. Der URB unterstützte bidirektionale, sowohl synchrone als auch asynchrone Kommunikation zwischen Komponenten. Ähnlich dem Remote Datenbankzugriff wurden jetzt auch verteilte Application Server und Messaging eingeführt. Uniface Seven lieferte des Weiteren die erste Web Entwicklungsumgebung und mit Web Application Server und Uniface Request Dispatcher auch Werkzeuge für den Betrieb von Webanwendungen.

Zu den weiteren Verbesserungen zählten neue Komponententypen (Services, Server Pages, Reports), Signature Editor und Assembly Workbench, Subsysteme, Operations, non-modale Forms, Komponenteninstanzen, verbesserte Editoren und Navigation, verbessertes Editor Plug-in, neuer Debugger, integrierte Online-Hilfe, Komponententemplates, verbesserte Validierung, Uniface Name Server und grafischer Partitioning Manager. Uniface Seven erlebte auch die Einführung folgender weiterer Werkzeuge:

  • Ein Werkzeug zu Modellierung, Integration und Management von Geschäftsprozessen. Aus dieser Funktionalität entstand in Uniface 8 dann Optimal Flow und später in Uniface 9 dann Uniface Flow.
  • Ein Anwendungsintegrationsportal, zunächst Optimal View und dann später Uniface View genannt.
  • Uniface JTI, eine serverbasierte, Thin-client-Lösung zum Betrieb von im Web über Internet oder Intranet verfügbar gemachte Anwendungen, die hohe Performanz auch über Netzwerkverbindungen mit niedriger Bandbreite brachte.

Uniface 8 (2001) Uniface 8 brachte große Änderungen auf dem Gebiet der Prozessintegration. Uniface Router und Uniface Server gewährleisteten skalierbaren, lastbalanzierten Anwendungsbetrieb. Der Web Request Dispatcher (WRD) ersetzte den URD und verbesserte die Performanz. Unterstützung für Webservices mit SOAP und XML wurde eingeführt. Konnektivität und Interoperabilität wurden verbessert und eine Methode zur Implementierung einer 3-Schicht-Architektur vorgestellt. Neue Konnektoren für SOAP, COM, CORBA und MQSeries wurden angeboten, Window- und Dateimanagement verbessert und ein neues Auslieferungswerkzeug zur besseren Anwendungsverteilung eingeführt. Neu waren auch Component Subtypes für die 3-Schicht-Architektur, Handles für Komponenteninstanzen und die automatische Garbage Collection.

Uniface 9 (2006) Die Version Uniface 9 hatte Verbesserungen an grafischer Benutzerschnittstelle und Handhabung als Schwerpunkt, ebenso Thin Deployment und Integration. Neu war auch die Unterstützung für Windows Mobile, außerdem wurden Konfiguration, Auslieferung und Betrieb durch die Verwendung von Zip-Archiven erleichtert. Die Unterstützung für Unicode verbesserte die ohnehin eindrucksvollen Möglichkeiten für mehrsprachige Anwendungen. Verbesserungen für Webentwicklung und XML-Handhabung machten Uniface noch kompatibler zu bestehenden Industriestandards. Weitere verbesserte Features waren Farbhandling, dynamische Menüs, ein XML API, ein Diagram Editor für das Anwendungsmodell und erweiterte Webservice-Funktionalität.

Uniface 9.4 (2010) Trotz der Tatsache, dass es sich nur um eine Punktversion handelte, brachte Uniface 9.4 genügend neue Funktionalität, um auch als Hauptversion gelten zu können. Der Schwerpunkt lag auf Funktionalität für Rich Internet Anwendungen (RIA), mit deren Hilfe Web 2.0 Anwendungen mit dem Benutzerkomfort von Client-Server-Anwendungen entwickelt werden können, wobei der Entwickler die gewohnten Werkzeuge und Methodologie verwendet, die er auch von der Erstellung klassischer Client-Server-Anwendungen her kennt. Sprach- und länderspezifische Einstellungen wurden ebenso wesentlich verbessert, wie auch die Unterstützung für HTML-E-Mail, Sicherheitsaspekte und Datenverschlüsselung.

Uniface 9.5 (2011) Mit Uniface 9.5 wurde die Integration des Produktes mit dem World Wide Web verbessert. Durch die Einführung einer JavaScript API, und einiger weiterer Verbesserungen wurden Möglichkeiten der Client-seitigen Verarbeitung geschaffen, die sich positiv auf Performance, Integration, Funktionalität und Benutzerfreundlichkeit auswirken. Erweiterungen beim Session-Management bieten eine verbesserte Sicherheit bei Web-Anwendungen. Und für die Verarbeitung von Web Services (sowohl SOAP als auch RESTfull) wird nun auch eine vollständige Unterstützung von komplexen Datentypen bereitgestellt. Außerdem wurden auch Verbesserungen für Kunden mit unternehmenskritischen Client/Server-Anwendungen, insbesondere im Bereich Grid-Widget implementiert.

Literatur[Bearbeiten]

  • Jeffrey S. Mann: Understanding Uniface:The Client/Server Development Environment. , International Thomson Computer Press, Boston 1997, ISBN 1-85032-284-8.

Weblinks[Bearbeiten]