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, salarisadministraties en inventarisbeheer. 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, infrastructuuronafhankelijke softwareprogramma’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 ontwikkeltools. Deployment kan plaatsvinden in een gedistribueerde client/server of webomgeving, zowel als in mobiele 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 webomgeving. Reports—rapportages om data te presenteren als geprinte output.
Componenten voor de business logic tier zijn verantwoordelijk voor de businesslogica en taak-specifiek gedrag. Zij hebben geen userinterface. 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 presentatiecomponenten weer door gebruik te maken van de juiste interfaceconnector (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 datastructuur en het standaardgedrag 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. Businessregels 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 systeemevents, zoals 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 standaardgedrag 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 presentatiecomponenten), 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 controlevelden, menu’s en componentvariabelen. De eigenschappen en triggers, gedefinieerd in het Applicatie Model, worden overerfd doordat ze gekopieerd worden naar de component. De definities kunnen aangepast worden op componentniveau 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 modelniveau, 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, componentdefinities, 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 softwaredevelopment plaatsvinden door hele developmentteams. 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 softwareverkopers. 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 zipfiles 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, zolang er maar de beschikking is over een Uniface Virtual Machine.
Database Connectivity Uniface heeft toegang tot vele databases en filesystems, die ondersteund worden door databaseconnectors (of databasedrivers). DBMS connectors zetten Uniface datatypes om tot het meest toepasbare formaat van het bepaalde opslagmedium. Gedurende runtime is het mogelijk om parameters te gebruiken om bepaalde database uitbreidingen te gebruiken (of uit te schakelen). Bij een gelicenseerde databaseconnector is het mogelijk om data te converteren naar verschillende databronnen. Uniface voorziet ook in een API, de Database Connector Interface, die gebruikt kan worden om aangepaste databaseconnectors 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 een schema architecture. Dit was een standaardbenadering uit 1975, om database managementsystemen te bouwen bestaande uit 3 schema’s (of metamodellen): Conceptual schema—alle datadefinites en de relaties daartussen. Er is een 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 externe 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 webdevelopment 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.