# Uniface

Uniface is een ontwikkel- en deploymentomgeving voor bedrijfskritische software-applicaties die kunnen draaien in een groot assortiment van verschillende platformen, waaronder mobile, mainframe, Web, SOA, Windows, J2EE en .NET.
Unifaceapplicaties zijn database- en platformonafhankelijk. Uniface is een framework dat de integratie mogelijk maakt met alle belangrijkste DBMS-producten, met een groot scala aan andere technologieën, zoals op mainframe gebaseerde producten (CICS, IMS), webservices, SMTP en POP e-mail, LDAP directory's, .NET, C en C++ programma’s en Java. Uniface draait onder Windows, Windows Mobile, Unix en Linux, IBM iSeries/AS400, z/OS en VMS.
Uniface kan gebruikt worden voor complexe systemen, die bedrijfskritische data onderhouden en essentiële bedrijfsprocessen moeten ondersteunen, zoals web-based online winkelen, financiële transacties, salaris administraties en inventaris beheer. Op dit moment wordt Uniface gebruikt door duizenden klanten in meer dan 30 landen, met miljoenen effectieve installaties. Uniface-applicaties beslaan client/server tot Web en van data entry tot workflow, zowel als portals, die lokaal toegang verschaffen, als via intranet en internet.
Oorspronkelijk ontwikkeld in Nederland door Inside Automation, later Uniface B.V., werden het product en het bedrijf geacquireerd door het in Detroit gevestigde Compuware Corporation in 1994. Het product wordt nog steeds verder ontwikkeld in Amsterdam. Begin 2014 is Uniface B.V. door Compuware verkocht aan Marlin Equity Partners en opereert het weer als een zelfstandig bedrijf.

## Uniface applications

Uniface applicaties zijn component-based, infrastructuur onafhankelijke software programma’s die data kunnen creëren of gebruiken die opgeslagen is in een of meerdere databases of filesystems. Het kunnen samengestelde applicaties zijn, inclusief non-Uniface componenten, die gemaakt zijn met andere ontwikkel tools. Deployment kan plaatsvinden in een gedistribueerde client/server of web omgeving, zowel als in mobile applicaties en in mainframes.
Uniface onderscheidt een variëteit aan componenten, waarvan de bedoeling is dat zij gebruikt worden in de verschillende lagen (tiers) binnen een multi-tiered software architecture.
Componenten voor de presentatielaag zijn verantwoordelijk voor de user-interface en zijn:
* Forms—interactieve schermen voor het weergeven en updaten van data in een client/server omgeving.
* Dynamic Server pages — interactieve pages voor het weergeven en updaten van data in een web omgeving.
* Reports—rapportages om data te presenteren als geprinte output.
Componenten voor de business logic tier zijn verantwoordelijk voor de business logica en taak-specifiek gedrag. Zij hebben geen user-interface.
* Services—verzorgen processing en business logic functionaliteit wanneer ze gebruikt worden door andere componenten. Dit kan zowel remote als lokaal gebeuren.
* Session Services — centraliseren complexe business rules die meerdere datasets beïnvloeden, zoals taak-specifiek gedrag, transacties en referentiële integriteit.
* Entity Services — centraliseren relatief eenvoudige business rules voor enkelvoudige datasets (entities)
De data access tier bevat de fysieke databasestructuur, die weergegeven wordt in het Uniface application model. Uniface garandeert toegang tot fysieke data door middel van SQL dat is geïntegreerd in DBMS connectors. Toegang tot een network of tot middleware wordt verschaft door middleware drivers en de Uniface Router.
De runtime engine zorgt voor de executie van de application components. Het geeft de presentatie componenten weer door gebruik te maken van de juiste interface connector (GUI of character-based) en het zendt en ontvangt data via een DBMS connector.

## Application development

Uniface development is model-driven en component-based. De data structuur en het standaard gedrag van de applicatie worden “gevangen” in het Applicatie Model. Applicatie Model definities kunnen hergebruikt worden en overerfd worden door componenten, die de overerfde definities kunnen overschrijven en karakteristieke eigenschappen voor bepaalde componenten kunnen afdwingen. Het toepassen van templates verhoogt de productie en dwingt consistency af voor de definitie van het model.

### Applicatie Model

In het Applicatie Model worden entiteiten (tabellen), velden, sleutels (indexen) en relaties samen met referentiële integriteit gedefinieerd. Elke entiteit en veld in het model heeft eigenschappen en een set triggers. Business regels worden op een declaratieve wijze toegevoegd door de eigenschappen (“properties” ) vast te leggen en procedureel door het gebruik van Proc (Uniface’s procedurele 4GL programmeertaal) in triggers.
Triggers zijn containers voor de code. Sommige triggers representeren gebruikers of systeem events, zoals bijvoorbeeld de Occurrence gets Focus, Read of Leave Field trigger. Weer andere triggers bestrijken gebieden zoals validatie of het zijn plekken die speciaal geassocieerd worden met bepaalde objecten.
Het toepassen van triggers op modelniveau is het mogelijk om binnen Uniface eigenschappen en gedrag binnen objecten vast te leggen, waarbij een onderscheid wordt gemaakt tussen fysieke en logische datastructuur. Het maakt het mogelijk om standaard gedrag op één plaats te definiëren om het vervolgens door de hele applicatie te (her)gebruiken. Op deze wijze wordt het ontwikkelproces versneld en wordt 3-tier architecture gefaciliteerd.

### Components

De objecten, die beschreven zijn in het Applicatie Model worden hergebruikt door componenten. Ontwikkelaars embedden objecten van het Applicatie Model op de componenten door hen te tekenen op het een lay-out canvas (voor presentatie componenten), of door hen in te voegen in de tree structure van de component. Ontwikkelaars kunnen ook component-level objecten invoegen, die niet gedefinieerd zijn in het Applicatie Model, zoals controle velden, menu’s en component variabelen. De eigenschappen en triggers, gedefinieerd in het Applicatie Model, worden overerfd doordat ze gekopieerd worden naar de component. De definities kunnen aangepast worden op component niveau om specifieke functionaliteit te creëren. Dit verbreekt wel de link tussen Applicatie Model en component (het is zeer wel mogelijk om deze link te herstellen). Als er code of properties worden gewijzigd op model niveau dan dienen alle componenten met de objecten uit dat Applicatie Model, slechts opnieuw gecompileerd te worden. Dit geeft voordelen voor het onderhoud en zorgt ervoor dat regels die geassocieerd zijn met het object, beschikbaar zijn op die plaatsen waar ze noodzakelijk zijn.

### Uniface Repository

Uniface onderhoudt een database met zijn eigen metadata, zodat deze metadata hergebruikt kunnen worden—Applicatie Modellen, component definities, component lay-outs, procedurele code, en dergelijke. Deze repository is “proprietary” en uitsluitend bedoeld voor de Uniface Ontwikkelomgeving om zeker te zijn van referentiële integriteit. Omdat de repository structuur gedocumenteerd is, is directe toegang ook mogelijk (hoewel dit afgeraden wordt!), bijvoorbeeld voor rapportages. Door gebruik te maken van een gecentraliseerde repository, kan er software development plaatsvinden door hele development teams. Uniface kan geïntegreerd worden met elk Source Control System (SCCS) die de Microsoft Common Source Code Control Interface Specificaties ondersteunt. De SCCI-functionaliteit, die beschikbaar is binnen Uniface, is afhankelijk van de SCCS die gebruikt wordt, omdat de MS CSCC API op verschillende wijze geïnterpreteerd en geïmplementeerd wordt door verschillende software verkopers. Als gevolg hiervan kan de ondersteunde functionaliteit en het gedrag verschillen, afhankelijk van het gebruikte SCCS.

## Application deployment

Uniface applicaties kunnen gedeployed worden op platforms van mainframe tot mobile, zonder dat men code hoeft te wijzigen. De componenten (en andere objecten zoals startup shells, menu's, toolbars (panels), glyphs, global en include Proc entries) worden gecompileerd tot runtime objecten, die ingepakt kunnen worden tot zip files en gedeployed op elk willekeurig platform. De runtime objecten worden geëxecuteerd met gebruik van een virtual machine en een platform-specifieke interpreter. (Java en andere talen zijn Uniface daarin later gevolgd). Componenten kunnen op de ene machine gecompileerd worden en op een andere machine gedeployed, zo lang er maar de beschikking is over een Uniface Virtual machine.

### Database Connectivity

Uniface heeft toegang tot vele databases en filesystems, die ondersteund worden door database connectors (of database drivers). DBMS connectors zetten Uniface datatypes om tot het meest toepasbare formaat van het bepaalde opslag medium. Gedurende runtime is het mogelijk om parameters te gebruiken om bepaalde database uitbreidingen te gebruiken (of uit te schakelen). Bij een gelicenseerde database connector is het mogelijk om data te converteren naar verschillende data bronnen. Uniface voorziet ook in een API, de Database Connector Interface, die gebruikt kan worden om aangepaste database connectors te ontwikkelen.

### Licensering

Licensering wordt gemanaged door Uniface Distributed License Management (ULM), een server-based systeem van gedistribueerde licenties gebaseerd op client requests. Dit voorkomt de noodzakelijkheid van lokale licenties.
(Vanaf februari 2014 Uniface is niet langer eigendom van Compuware en is zelfstandig verdergegaan na een overname door een private Aquety Fund genaamd Marlin )

## Historie van Uniface

Oorspronkelijk heette Uniface UNIS. Uniface werd in 1984 in Nederland door Inside Automation gemaakt. Inside Automation werd geleid door Bodo Douque, met Frits Kres als technisch directeur. In 1986 werd de naam veranderd in Uniface. Uniface werd ontwikkeld naar de richtlijnen van de American National Standards Institute (ANSI), volgens een3 schema architecture. Dit was een standaard benadering uit 1975, om database management systemen te bouwen bestaande uit 3 schema’s (of metamodellen):
* Conceptual schema—alle data definities en de relaties daartussen. Er is één conceptual schema per database. Het conceptual schema wordt door Uniface geïmplementeerd als het Application Model (in de verschillende Uniface versies ook bekend als Business Object Model en het Application Object Model).
* External schema—verschillende externe (gebruiker) views op de data. Er kunnen veel verschillende external schema’s zijn voor een database.
Met Uniface worden externe schema’s geïmplementeerd als componenten. Door de evolutie van Uniface werden de External Schema’s forms. Hidden forms, die in de achtergrond draaide zonder display voor de eindgebruiker, werden services; services werden onderscheidde in session services voor objecten van de business tier en entity services, die kunnen worden gepositioneerd in de business of data tier. Forms die geprint werden in plaats van gedisplayed werden report components. The server page (USP) werd geïntroduceerd voor web development en later werd ook de dynamic server page (DSP) geïntroduceerd om Web 2.0-functionaliteit te ondersteunen.
* Internal schema—definitie van de fysieke representatie van de opgeslagen data. Uniface laat dit over aan de vele relationele databases waar het mee kan communiceren, om zeker te zijn van database onafhankelijkheid.
Uniface was ontwikkeld op een DEC-VAX machine, met behulp van het VAX file-management system RMS. Het gebruik van een “GOLD” key om de positie van de cusor te bepalen of om lege record te creëren en dergelijke, stamt nog uit die tijd. (DEC VT terminals hadden een gouden of gele toets op het toetsenbord. Tegenwoordig wordt de GOLD key gemapped naar de numerieke + of naar een functietoets.) De eerste versies van Uniface werden gebundeld met Sybase RDBMS onder de naam FastBuild, er was echter geen beperking tot communicatie met Sybase alleen. Uniface is voortdurend verder geëvolueerd om nieuwe technologieën en architectures te blijven ondersteunen. Dit is essentieel geweest voor het succes van Uniface, omdat applicaties gebouwd met Uniface kunnen migreren, aangepast en gemoderniseerd worden zonder verlies van de oorspronkelijk investering in de ontwikkeling van de software.

### Uniface Version 3 (1986)

Uniface 3 was de eerste publieke release. Uniface 3 ondersteunde meerdere databases (RMS, Oracle, C_ISAM, Ingres, and RDB); virtual machine interpretation; de Structure editor, Uniface text en de command editor.

### Uniface Version 4 (1988)

Uniface 4 had een verbeterde de teksteditor (nu form editor), een verbeterde print- en display-ondersteuning, introduceerde ondersteuning voor MS-DOS en voegde een CASE tool interface toe.

### Uniface Version 5 (1990)

Uniface 5 maakte een client/server-implementatie mogelijk met de invoering van remote database access via Polyserver. De grafische user interface werd geïntroduceerd via de Universal Presentation Interface (UPI). Database ondersteuning werd uitgebreid tot een totaal van 13 databases en filesystems. Uniface was nu beschikbaar op DOS, VMS, OS/2, Stratus VOS en UNIX. Ondersteuning voor de Japanse taal werd geïntroduceerd.

### Uniface Six (1994)

Met Uniface Six werd de overgang naar een volledig grafische ontwikkelomgeving voltooid. Het omvatte de grafische form painter, application model editor; een verbeterde deployment door middel van Dynamic Object Libraries; ondersteuning voor Microsoft Object Linking and Embedding (OLE) werd toegevoegd; support voor Apple Macintosh werd geïntroduceerd; permission control; geïntegreerde version control; toegevoegd werd Personal Series reporting tools (hoewel deze later weer verwijderd werd toen de 3rd party besloot het product niet verder te ontwikkelen); een bredere platformondersteuning werd geïntroduceerd.

### Uniface Seven (1997)

Uniface Seven was gericht op de integratie van componenten voor zowel Uniface componenten als externe componenten, door middel van de introductie van de Uniface Request Broker (URB) architectuur. De URB ondersteunt bi-directionele en synchrone of asynchrone communicatie tussen componenten. Alsmede remote data access, partitioned Application Servers en messaging werden toegevoegd. Uniface Seven leverde ook de eerste Uniface web development en deployment tools met de Web Application Server en de Uniface Request Dispatcher.
Andere verbeteringen waren onder andere de nieuwe component types (Services, Server Pages, Reports); Signature Editor en de Assembly Workbench; subsystemen; operaties, non-modal forms; component instances, verbeterde editors en navigatie; verbeterde editor plug-in; nieuwe debugger; geïntegreerde online help; component templates; Web Application Server, verbeterde validatie; Uniface Name Server en graphical partitioning manager. Met Uniface Seven werden ook nog andere tools geïntroduceerd:
* Een tool voor het modelleren, integreren en managen van bedrijfsprocessen. Deze functionaliteit werd bekend als Optimal Flow onder Uniface 8, en later Uniface Flow onder Uniface 9.
* Een business integration portal, eerst onder de naam Optimal View en later Uniface View.
* Uniface JTi—een server-based, thin-client oplossing om web applicaties te leveren over Internet of Intranet, uitgaande van een high-performance en low-band-width connectivety.

### Uniface 8 (2001)

Uniface 8 heeft grote veranderingen teweeggebracht op het gebied van procesintegratie, dankzij de workflow component (Business Process Automation) die in deze versie van Uniface geïntroduceerd is. De Uniface Router en Uniface server voorzien in een schaalbare en evenwichtige inzet. De Web Request Dispatcher (WRD) verving de URD en verbeterde de performance aanzienlijk. Ondersteuning voor webservices, met SOAP en XML, werd geïntroduceerd. Connectiviteit en interoperabiliteit werden verbeterd en een methode voor de implementatie van een 3-tier applicatie architectuur werd ingevoerd. Connectors voor SOAP, COM, CORBA en MQSeries werden toegevoegd; window- en bestandsbeheer werd verbeterd, een nieuwe deployment utility werd geïntroduceerd voor het verbeteren van applicatie distributie; entity subtypes voor 3-tier architectuur werden toegevoegd; er werden handles voor component instances en automatische garbage collection toegevoegd.

### Uniface 9 (2009)

De Uniface 9 Release was gericht op GUI en usability verbeteringen, thin deployment en integratie. Ondersteuning voor Windows Mobile werd toegevoegd, en de configuratie en deployment werden vereenvoudigd met behulp van zipped archives. Ondersteuning voor Unicode werd verbeterd wat een nu al meertalige mogelijkheden biedt. Verbeteringen in web development en XML handling bracht Uniface verder in lijn met de industrie standaarden. Dynamisch field verplaatsing in de forms verwijderde enkele oude barrières met betrekking tot flexibiliteit.
Andere kenmerken zijn de verbeterde kleurafhandeling, dynamische menu's, een XML-API, een diagrameditor voor het Application Model; cross reference-functionaliteit om refactoring en deployment te ondersteunen en een verbeterde web services-functionaliteit.

### Uniface 9.4 (2010)

Hoewel Uniface 9.4 een point release is, is de introductie ervan belangrijk genoeg om het te beschouwen als een grote release, gezien de nieuwe functionaliteit. Het accent lag vooral op Rich Internet Application (RIA)-functionaliteit, waardoor het mogelijk werd om Web 2.0-applicaties te ontwikkelen met de rijke functionaliteit van client/server-applicaties, met dezelfde instrumenten en methoden voor de klassieke client/server development. Taal en lokale ondersteuning werd aanzienlijk verbeterd, zoals ondersteuning voor HTML e-mail en security en encryption.

### Uniface 9.5 (2011)

Voor Uniface 9.5 is de integratie met het Web aanzienlijk uitgebreid en verbeterd. De introductie van een JavaScript API maakt het mogelijk om veel winst te halen in performance, functionele mogelijkheden, integratie en gebruikersvriendelijkheid aan de client kant (browser). Sessionmanagement is uitgebreid zodat web security verbeterd is. Voor web servises ondersteunt Uniface 9.5 complexe datastructuren, voor zowel SOAP als RESTfull services. Voor client server is met name de functionaliteit voor de Grid widget uitgebreid.

### Uniface 9.6 (2012)

Er is een paging-mechanisme geïmplementeerd, dat het zoeken in een database versnelt. Uniface 9.6 heeft op een aantal belangrijke fronten een verbetering ondergaan met betrekking tot de user-experience mogelijkheden voor Client Server applicaties. Het PNG format voor images wordt nu ondersteund. De tab widget is uitgebreid met een "extended" tab widget, die zeer configureerbaar is met betrekking tot look and feel. Zowel kleuren, images als positie van tabs kunnen op een dynamische wijze worden geïmplementeerd. De command button kent meer variaties door de weergave eigenschappen, die te definiëren zijn afhankelijk van de staat van de command button. Voor de default weergave, de roll-over weergave, de weergave op het moment van een actieve klik en de focus weergave, kan een afzonderlijke eigenschap voor de display gedefinieerd worden. Met Uniface 9.6 worden ook images, kleuren en verschillende fonts ondersteund voor menu's en panels.

### Uniface 10 (2015)

Uniface 10 is een herschreven development-omgeving op basis van de kernconcepten van Integrated Development Environments (IDE). De initiële release, gepositioneerd als een preview voor early adopters, toonde een significante verandering van een 'proprietary' development-stijl naar een zeer productieve implementatie van een op industriestandaarden gebaseerde manier van ontwikkelen, waardoor de ontwikkeling van webapplicaties mogelijk werd.
In mei 2015 werd de eerste editie van Uniface 10 vrijgegeven aan early adopters om webapplicaties te testen en te ontwikkelen. De volledige enterprise-editie van Uniface 10 werd uitgebracht in september 2016 en biedt mobiele en client-serverontwikkeling en een migratiepad om het bestaande klantenbestand in staat te stellen hun applicaties naar Uniface 10 te verplaatsen.

### Uniface 10.4 (2021)

De belangrijkste wijziging ten opzichte van 10.3 is het gebruik van Sentinel License Manager waardoor gebruikers autonoom wijzigingen kunnen doorvoeren aan hun licentie. Hiernaast zijn verbeteringen doorgevoerd aan: de Rocket® Uniface Router Monitor, de API voor TLS en de Repository Updates voor IDE . Rocket® Uniface 10.3 is 32 bit en Rocket® Uniface 10.4 64 bit, Tomcat 9 heeft een upgrade gekregen, er zijn updates voor OpenSSL en CURL Libraries. Een OpenSSL executable is beschikbaar voor Rocket® Uniface op Windows en er is een nieuwe SLE 2.0 connector voor SQLite.