nlOUG Visie Voorjaar editie 2020

Page 1

ViSIE VOORJAAR 2020 - JAARGANG 26 - NUMMER 1

ZO WERKT APEX MET JE DATA

AUTONOMOUS DATABASE-SERVICES NU OOK ON-PREMISE BESCHIKBAAR

THE WIZARD OF ORDS


SMART4Solutions

The Oracle APEX family of the Netherlands • • • •

PREMIUM MOBILE & APP DEVELOPMENT ORACLE FORMS MODERNISATION TAILOR MADE SOFTWARE (AS A SERVICE)

The knowledge of Oracle APEX solutions is in our DNA. For over 15 years. As the Oracle APEX family of the Netherlands, we help organisations in various industries through an optimal customer-oriented approach. To achieve optimum success, business, business processes and IT must go hand in hand. With our flexible development team, you get up-to-date APEX low-code knowledge and strong soft skills. Qualities to help build your success. Are you curious on how we can support you with your challenges? Call Sergei Martens +31 85 400 80 80 or visit www.smart4solutions.nl.

IT’s in our nature •


INHOUD

VOORWOORD

Geachte lezer,

Luc Bors Voorzitter Nederlandse Oracle User Group - nlOUG

|

3

H

et schrijven van dit voorwoord valt me zwaar deze keer. Het kost me moeite om de juiste toonzetting te vinden. Teleurstelling in verband met het cancelen van APEX World 2020, geschokt over de impact die COVID-19 heeft op de samenleving, verbazing over de onderschatting van de risico’s, maar ook trots op de toenemende saamhorigheid tijdens deze wereldwijde crisis. Op maandag 9 maart hebben wij als bestuur van de nlOUG, in samenspraak met het organisatiecomité van APEX World 2020 besloten om de stekker uit dit event te trekken. Misschien leek dat enigszins voorbarig, maar wat wij toen nog niet wisten is dat inmiddels het openbare leven in Nederland, Europa en inmiddels ook in de rest van de wereld vrijwel volledig tot stilstand is gekomen. Niet meer naar kantoor, niet meer naar school, niet meer sporten en in sommige landen zelfs niet meer naar buiten. Hoe lang dit gaat duren weet niemand. Wij als bestuur blijven voor jullie aan het werk. De digitale middelen om op afstand te vergaderen stellen ons gelukkig in staat om de nlOUG te blijven besturen. Vanzelfsprekend hadden wij jullie graag gezien op SS Rotterdam voor APEX World, of bij Oracle voor een van de geplande meet-ups. Terecht zijn deze bijeenkomsten allemaal gecanceld. Wij zoeken met onze leden en sprekers naar alternatieve oplossingen om jullie toch van dienst te kunnen zijn. We denken hierbij bijvoorbeeld aan virtuele meet-ups. Wij houden jullie op de hoogte. Tijdens de opening van APEX World hadden wij onze nieuwe website willen lanceren. We bekijken de komende weken met het bestuur hoe wij deze lancering op een andere manier vorm kunnen geven. Ook daarover zullen we jullie informeren. Zoals gebruikelijk op deze plek had ik willen vermelden welke plannen we hebben voor de toekomst, maar ook dat staat momenteel even stil. Zodra we die plannen ook daadwerkelijk kunnen uitvoeren, brengen we jullie op de hoogte. Wat ik wel kan doen op deze plek is iedereen bedanken voor het begrip voor de genomen beslissingen en voor de ondersteuning tijdens deze uitzonderlijke situatie. Hierbij denk ik met name aan de bezoekers, sprekers en sponsoren van APEX World 2020, die op het allerlaatste moment geconfronteerd werden met de afzegging van dit event. Bedankt voor jullie begrip en jullie kunnen er op rekenen dat we al bezig zijn met de volgende editie. Ten slotte wil ik onze leden, partners, sponsoren en alle anderen die op een of andere manier betrokken zijn bij de nlOUG veel succes en gezondheid wensen in deze moeilijke tijd en laten we er vanuit gaan dat we er samen sterker dan ooit weer uit zullen komen. Ik hoop jullie allemaal snel weer te kunnen ontmoeten bij een van onze evenementen.

Autonomous Database-services nu ook on-premise beschikbaar 4 Column Sandor Nieuwenhuijs

On-premises of in de cloud - That’s the question! Of niet?

7

Zo werkt Oracle APEX met je data

8

The power of No Template

13

The wizard of ORDS

18

COLOFON COLOFON REDACTIE Hans Gerritse (hoofdredacteur) Learco Brizzi (Itium BV) Luc Bors (eProseed) Ise Douwes, Qlouded) REDACTIEADRES/ SECRETARIAAT / ADVERTENTIEEXPLOITATIE Nederlandse Oracle User Group Emmaplein 10 1075 AW Amsterdam T +31 30 6997065 E secretariaat@nloug.nl REALISATIE MAT ONTWERP, BNO, Den Haag E maya.timmer@gmail.com ORGANISATIE / NLOUG-SECRETARIAAT/ advertentie-exploitatie BMO b.v., Amsterdam T +31 30 6997070 E info@bmowerkt.nl BESTUUR NLOUG Luc Bors (voorzitter) eProseed E l.bors@nloug.nl Theo Veltman (penningmeester)Ciber Nederland E t.veltman@nloug.nl Ise Douwes (secretaris) Qlouded E i.douwes@nloug.nl Daan Bakboord E d.bakboord@nloug.nl nlOUG VISIE is een uitgave van de Nederlandse Oracle User Group (nlOUG) en wordt verzonden aan al haar leden en overige abonnees. AANMELDEN voor een abonnement kan via www.nloug.nl. © 2020 nlOUG


4

|

ORACLE CLOUD

DOOR HANS GERRITSE

SPECIALE VERSIE BRENGT ORACLE CLOUD NAAR HET DATACENTER

AUTONOMOUS DATABASE-SERVICES NU OOK ON-PREMISE BESCHIKBAAR Sinds de lancering van de Autonomous Database Services leeft de vraag of deze Oracle Cloud-diensten ook beschikbaar komen voor on-premises implementatie. Gezien de grote verschillen tussen Autonomous Database als specifieke databaseservice en de traditionele database zou het antwoord logischerwijs ontkennend moeten zijn. Oracle komt nu echter onder de naam Oracle Gen 2 Exadata at Customer met een versie van Autonomous DatabaseService die klanten in hun eigen datacenter en netwerk en achter de eigen firewall kunnen hosten. Oracle maakt hierbij wel een strikt voorbehoud: Autonomous Database komt niet beschikbaar als traditionele on-premise database.

ViSIE


ORACLE CLOUD

|

5

O

racle Product Manager Robert Greene legt in zijn recente blog uit wat het grote verschil is tussen een database-service en een database en verklaart waarom implementatie van Autonomous Database niet mogelijk is in een traditionele database-omgeving. “Autonomous Database is een dienst, het is veel meer dan een database.” DATABASE

Een database is softwaretechnologie in een gebundelde set binaries die door een klant zijn gelicentieerd en geïnstalleerd op een vooraf bepaalde set infrastructuur (rekenkracht, opslag en netwerk). Eenmaal geïnstalleerd, is de klant verantwoordelijk voor alle aspecten van de werking van de database, inclusief het omgaan met een optimale configuratie van de workload, de beschikbaarheid en uitbreiding van fysieke resources zoals opslag voor gegevens, het maken van back-ups van de database voor regelgevingen recovery doeleinden, de beschikbaarheid van de database in het geval van storingen op hardware- en softwareniveau, het updaten van de software om nieuwe functies toe te voegen of softwarefouten te patchen, of het aanpakken van beveiligingsproblemen zoals het beschermen van de toegang tot de gegevens.

mogelijkheden die verder gaan dan database operations, ze kunnen oplossingscomponenten bevatten zoals identiteitsbeheer, resourcebeheer en operationele meldingsdiensten, om er maar een paar te noemen. Bij de Oracle Autonomous Database Services zijn ook aanvullende data management-functies ingebouwd, zoals deep monitoring, data modeling tools, datavisualisatie, low code-ontwikkelomgevingen, kortom een reeks van extra toegevoegde waarde rondom ‘de database’. De vraag is wat nu een database autonoom maakt: een database-service die self-driving, self-securing en self-repairing is? Het antwoord is dat een Autonomous Database een extra kunstmatige intelligentie (AI)-softwarelaag bevat. Deze AI-laag maakt gebruik van Machine Learning-algoritmen en besluitvorming om de automatisering van software te verbeteren, en is dus eerder proactief dan reactief en het beheer van de database wordt steeds meer softwarematig uitgevoerd.

DATABASE-SERVICE

Een database-service is niet alleen database-softwaretechnologie, maar een reeks geïntegreerde mogelijkheden die zijn ontworpen om automatisering toe te passen om de klantervaring van het gebruik van een database in een totaaloplossing te verbeteren. Een databaseservice draagt veel verantwoordelijkheden met betrekking tot het beheer van de database over aan de serviceprovider. Een duidelijk voorbeeld is dat niet elke klant een database hoeft te installeren (of zelfs hoeft aan te maken), maar dat de serviceprovider geautomatiseerde toegang geeft zodat nieuwe databases binnen enkele minuten in plaats van uren of zelfs dagen beschikbaar kunnen zijn. Een ander voorbeeld is dat een klant niet langer software-updates hoeft te downloaden en te installeren, maar dat ze eenvoudigweg op aanvraag kunnen worden gepland of geïnitieerd en dat de automatisering van de serviceprovider al het ‘vuile werk’ voor zijn rekening neemt om de update te voltooien. Database Services bieden

AUTONOME DATABASE-SERVICE MEER DAN EEN DATABASE

Mensen zijn vooral goed in abstraheren. In tegenstelling tot een computer zijn mensen echter niet goed in het scannen van grote hoeveelheden gegevens terwijl ze op zoek zijn naar uiteenlopende patronen. De AI-laag is een speciaal computerproces, efficiënt en in staat naar grote hoeveelheden gegevens te kijken op een manier die voor mensen onmogelijk is. De AI-laag vergelijkt wat hij ziet met patronen (gewoonlijk modellen genoemd) in die gegevens, en is dan in staat om snelle beslissingen te nemen op basis van patronen uit het verleden van succesvolle werking en antipatronen, gegevens en patronen die tot mislukking leiden. De gegevens en patronen die worden onderzocht door de AI-lagen in een autonome database gaan veel verder dan de operationele logs van de database en strekken zich uit over elk aspect van de service. Bovendien kan een ViSIE


6

|

ORACLE CLOUD

Autonomous Database niet beschikbaar voor traditionele omgevingen beslissing van de AI-laag nogal complexe activiteiten omvatten, zoals de beslissing om een computerserver buiten gebruik te stellen, een vervangende server inschakelen om de activiteiten van de oude server af te handelen, de softwareprocessen naar de nieuwe server te verplaatsen, netwerklagen bij te werken om de nieuwe server in de service call routing op te nemen etc. Dit wordt mogelijk gemaakt doordat de Autonomous Database-service in de Cloud werkt, waar een in feite onbeperkte hoeveeladvertentie

Looking for a...

01101010 01101111 01100010? ARE YOU SMART ENOUGH TO TRANSFER?

maak jij ons team leuker & slimmer? TRANSFER-SOLUTIONS.COM/WORK

ViSIE

heid infrastructuur beschikbaar is, en waar een API het mogelijk maakt een software defined infrastructuur op te zetten. Ook kunnen on demand nieuwe resources worden ingezet om proactief eventuele op handen zijnde storingen te beperken. MEER DAN EEN DATABASE

Vanuit het perspectief van de traditionele database-implementatie mag duidelijk zijn dat Autonomous Database Service veel meer is dan een database. Veel van de toegevoegde waarde die bij de service wordt geleverd, is niet beschikbaar in een on-premise form factor. Er is on-premise geen sprake van een self-service software-gedefinieerde infrastructuur, een gecentraliseerde logging-service, een resource-governance en operationele notificatie-service, noch van een complete set van high available tooling die de functionaliteiten rondom de database ondersteunen. En tot slot, het systeem als geheel is meer dan tooling en de AI-laag hangt af van zowel de toegankelijkheid tot een vrijwel onbeperkte infrastructuur-set die on-demand kan worden ingezet, als van een reeks machine learning-patronen (modellen) die afhankelijk zijn van een dataset die specifiek is voor de configuratie die draait binnen de Oracle Cloud: van de ondersteunende softwarebibliotheken tot de leverancier-specifieke hardware die draait in de Oracle Infrastructure-as-a-Service (IaaS)-laag. EXADATA CLOUD TO CUSTOMER

Oracle komt nu met een versie van Autonomous Database voor een zogeheten Oracle Gen 2 Exadata Cloud at Customer Service-implementatie. Dit is een representatief deel van de Oracle Cloud dat klanten kunnen hosten in hun eigen datacenter, in hun netwerkinfrastructuur en achter hun eigen firewall. De Oracle Gen 2 Exadata Cloud at Customer heeft een lichtgewicht ontwerp om de AI-laag van Autonomous Database en alle ondersteunende aanvullende servicemogelijkheden in de Oracle Cloud te laten draaien, terwijl de AI en Autonomous Database-automatisering worden gebruikt om de database te bedienen die draait op de locatie van de klant. Met dus de restrictie dat het alleen in deze gespecialiseerde uitbreiding van de Oracle Cloud naar het datacenter op de klantlocatie mogelijk is om on-premise over een Autonomous Database te beschikken. n


COLUMN

|

7

ON-PREMISES OF IN DE CLOUD – THAT IS THE QUESTION! OF NIET?

T

e midden van alle verontrustende berichtgeving over het Coronavirus, een dag na de televisietoespraak van premier Rutte, probeer ik mij te concentreren op het schrijven over de ontwikkelingen rondom Oracle. Na een paar jaar afwezigheid weer terug op het honk

bij Oracle, kijk ik nog even terug op mijn laatste bijdrage aan OGh Visie van Zomer 2015 met als titel ‘terugkijken en vooruitblikken’. Natuurlijk was het belangrijkste thema de ontwikkelingen rondom de Cloud - alle leveranciers en zeker ook Oracle rolden rond die tijd in hoog tempo de een na de andere clouddienst uit. En mijn kanttekeningen hieromtrent blijken zeer zeker nog actueel: regie over clouddiensten, data migratie, portfolioplanning en DevOps.

Sandor Nieuwenhuijs

Maar draaien bijna vijf jaar later nu alle bedrijven volledig in de Cloud? En zijn die toepassingen die ze in de Cloud draaien wel echt ‘Born in the Cloud’ of ‘Cloud Native’ zoals we dit veelal noemen? Of zijn dit eenvoudigweg dezelfde toepassingen van 10 jaar geleden, via ‘Lift & Shift’ naar een hele grote server bij een grote Cloud leverancier verplaatst? En is dat slecht? Gelukkig heb ik hierover in de zomer van 2015 geen voorspelling trachten te doen.

De meeste bedrijven hebben zichzelf (nog) niet helemaal aan de Cloud overgeleverd en een deel zal dat ook voorlopig niet doen

Feit is dat de meeste bedrijven zichzelf (nog) niet helemaal aan de Cloud hebben overgeleverd en een deel dat ook voorlopig niet zal doen, vaak beperkt door wet- en regelgeving, soms door technische beperkingen. Tevens zien we dat feitelijk elke organisatie gebruik maakt, of zal maken van meerdere Cloud-leveranciers. Cruciaal hierbij is dus de mogelijkheid om producten zowel on-premises als in de Cloud te kunnen gebruiken, en dat heeft niet alleen betrekking op de beschikbaarheid van producten, maar ook de flexibiliteit om te kunnen schuiven. Gelukkig heeft Oracle dit ook onderkend: Bring Your Own License (BYOL) van bestaande licenties niet alleen naar de Oracle Cloud, maar ook naar een aantal ‘Approved’ Clouds, maakt het mogelijk met behoud van investeringen licenties te hergebruiken, te migreren naar de Cloud en eventueel weer terug mocht dat noodzakelijk zijn. Een speciale variant hiervan is ‘BYOL to PaaS’, wat inhoudt dat de bestaande licenties ingebracht worden in de overeenkomstige, volledige beheerde (‘License Included’) Clouddienst van Oracle, waarmee de kosten drastisch worden verlaagd. Zo kun je bijvoorbeeld je bestaande database licentie her-inzetten ten behoeve van de Database Cloud Service of zelfs de nieuwe Autonomous Database services. Op deze manier is de weg naar de Cloud niet onherroepelijk en tegelijkertijd behouden de investeringen in licenties en support hun waarde. Een tweede recent initiatief van Oracle is ‘Cloud at Customer’, voor diegenen die hun data absoluut niet mogen toevertrouwen aan een andere (buitenlandse) organisatie. Ze krijgen hiervoor de beschikking over Oracle-hardware, die in hun eigen rekencentrum geplaatst wordt en waarop ze een palet van Oracle Cloud-diensten kunnen gebruiken, exact op dezelfde manier en met hetzelfde ‘Pay-as-you-Go’-afrekenmodel, alsof het in de Public Cloud staat. Dit geldt dus ook voor de Autonomous Database-dienst, zoals te lezen valt in het artikel op pagina 4. Als laatste wil ik toch nog een opmerkelijk feit vermelden, misschien een begint van een trend, hoewel ik dit niet durf te voorspellen. Toen Oracle de Analytics Cloud beschikbaar maakte, was deze – zoals de naam al doet vermoeden – slechts beschikbaar als Cloud-dienst. Niet alleen is dit product sinds begin 2020 beschikbaar als on-premises-product (nu genoemd: Oracle Analytics Server) maar het is ook een natuurlijke upgrade geworden voor de OBIEE-klanten. Met andere woorden: een Oracle-product kwam eerst alleen als Cloud-dienst uit en is nu ook beschikbaar on-premises. Maar zoals ik al zei: ik doe geen voorspellingen. Sandor Nieuwenhuijs is licentie adviseur binnen het recent opgericht SIA (Software Investment Advisory) team van Oracle wereldwijd.

ViSIE


8

|

ORACLE APEX

DOOR MENNO HOOGENDIJK

ZO WERKT ORACLE APEX MET JE DATA Wie bekend is met Oracle APEX heeft vast wel eens een Classic Report, Interactive Report of Interactive Grid gebruikt. Dit zijn rapportage-componenten die je op een pagina kunt toevoegen en data tonen van een zelf gekozen bron.

D

e afgelopen jaren is veel tijd en energie gestoken in de manier waarop APEX met je data omgaat. Zo is de data-importmodule compleet vernieuwd. Er is een centrale architectuur opgezet waar alle datacomponenten gebruik van maken. Via de wizards wordt data vooraf geanalyseerd om kant en klare pagina’s te leveren. En tenslotte worden de data-exportopties uitgebreid. Misschien ben je nog niet zo bekend met de achterliggende PL/SQL API’s die hieraan ten grondslag liggen. Dat is zonde want ze zijn erg krachtig, zelfs wanneer je geen APEX gebruikt. Low code-gedachte

De visie van Oracle is dat APEX een product moet zijn dat allesomvattend is als het gaat om de applicatieontwikkeling. Dit is van groot belang in een Cloud omgeving. Met een klik maak je een database aan en daarna kun je inloggen in de APEX Application Builder. Vanaf daar heb je in principe geen andere tools meer nodig om een complete applicatie te ontwikkelen. Een tweede speerpunt is eenvoud. Uiteraard ligt hierin de low code-gedachte ten grondslag, waarbij APEX je veel werk uit handen neemt. Alle toevoegingen aan het product zijn ontwikkeld vanuit dit low code-denkbeeld. Data - De bron

VAN BESTAND NAAR TABEL

ViSIE

Menno Hoogendijk

Stel je hebt data in een bestand die je graag in een tabel zou willen zien, dan heeft APEX daar een upload module voor: de Data Workshop. Deze module is sterk verbeterd sinds APEX 19.1. Naast CSV kun je nu ook kiezen voor XSLX, TXT, XML of JSON. En vooral XSLX is interessant, omdat er mogelijkheden ontstaan: als het formaat uitgelezen kan worden, kan het ook aangemaakt worden. Hierover later meer. Je kunt in APEX 19.2 zelfs kiezen voor een import in een nieuwe of bestaande tabel. Voor dit alles wordt de nieuwe PL/SQL-package APEX_DATA_PARSER gebruikt. Onderdeel van deze package is een functie genaamd PARSE die jouw bestand omzet in een tabelstructuur. Vervolgens kun zelf kiezen wat je met deze data gaat doen. Voor APEX 20.1 wil Oracle de Data Workshop-module verder uitbreiden met ondersteuning van data uit Cloud Object Stores. Waarschijnlijk komt deze functionaliteit alleen ter beschikking voor de Autonomous Database omdat dit de package DBMS_CLOUD vereist. Een andere mogelijke toevoeging is ondersteuning voor SODA-collecties in de Object Browser module. Externe databronnen

Vanaf APEX 18.1 kan voor componenten als een Classic Report of Interactive Report de bron worden gebaseerd op een externe REST-service. Hiervoor maak je een Web Source module aan in de Shared Components van de Application Builder. Je geeft alleen de locatie van de service op en eventueel de authenticatie-gegevens. Dit vereiste een ingrijpende verandering in de onderliggende APEX-architectuur. Alle componenten waar je een bron kunt opgeven, communiceren nu via de APEX_EXEC API.


ORACLE APEX

Centraal staat een object genaamd QUERY_CONTEXT. Je kunt dit het beste vergelijken met een PL/SQL-cursor-object, maar dan een speciale variant die ook overweg kan met bijvoorbeeld REST-bronnen. Hiermee ontstaat een abstractie tussen de databron en de APEX-component. Met deze onderliggende architectuur is APEX goed voorbereid op de toekomst. Er zijn vele protocollen en standaarden voor digitale communicatie tussen systemen. Het enige dat nodig is in APEX om daarop aan te sluiten, is een eenmalige implementatie in APEX_EXEC. Ook als je zelf een APEX plug-in wilt ontwikkelen die een databron heeft, dien je gebruik te maken van deze nieuwe architectuur. Debugging en Performance

Soms heb je een pagina met performance problemen en ben je op zoek naar de oorzaak. Begin dan met het activeren van Debug via de Developer Toolbar. Je krijgt dan een overzicht van alles wat op de achtergrond is uitgevoerd om de pagina te tonen, inclusief een tijdsmeting per onderdeel. Een kleine maar heel handige toevoeging in APEX 19.2 is dat het debug-niveau kan worden aangepast via de Developer Toolbar. Activeer je Debug op het Full Trace-niveau dan krijg je het daadwerkelijke executieplan van de queries op de pagina.

DATA – WEERGAVE & ANALYSE FACETED SEARCH

|

9

De allersnelste manier om een applicatie te maken is via de verschillende wizards. Je kunt je applicatie baseren op één van de Sample Datasets, een bestand, tabel of leeg beginnen en later de keuze maken. Als je vanaf APEX 19.2 een applicatie maakt via de wizard, dan krijg je in veel gevallen ook een Faceted Search pagina. Faceted Search is een techniek die vooral wordt gebruikt in webwinkels om de resultaten te beperken totdat je een dataset hebt waarmee je aan de slag kunt. In APEX krijg je een pagina met een Classic Report met aan de linkerzijde een Faceted Search Region. De twee componenten zijn aan elkaar gekoppeld. Een individueel facet is gekoppeld aan een kolom. Eindgebruikers zullen er direct mee aan de slag kunnen. Voor APEX 20.1 zijn de plannen voor conditionele facets een belangrijke toevoeging. Voor webwinkels betekent dit dat een facet voor een kledingmaat alleen zinvol is indien je binnen kleding zoekt. Facets worden dus alleen zichtbaar als er aan bepaalde condities wordt voldaan. Data Dictionary Cache

Het aardige van de wizards is dat ze voor Faceted Search een analyse van de data doen. Je krijgt daardoor alleen facets die zinvol zijn. Deze analyse vindt plaats in de Data Dictionary Cache. Elke kolom uit de tabel krijgt een score op basis van een complex algoritme. Hoe hoger de score, hoe meer kans dat de kolom een zinvol facet is. Als ontwikkelaar kan je deze informatie raadplegen en indien nodig een nieuwe analyse uitvoeren. De cirkel is rond als we de data kunnen exporteren in een formaat waar we tevreden mee zijn. Tot nu toe kon je data van componenten exporteren als CSV, XML en HTML. Voor de overige data was een externe printserver nodig. Via ORDS kun je bijvoorbeeld PDF downloaden. Met BI Publisher zijn naast PDF ook XLS en RTF als formaat toegevoegd. Helaas is de ondersteuning voor PDF met ORDS gestopt sinds ORDS 19.2. Dit betekent dat het APEXteam op zoek moet naar een nieuwe oplossing om geen functionaliteit te verliezen. In APEX 20.1 komt waarschijnlijk de eerste implementatie hiervan. Het idee is dat je een Interactive Grid kunt exporteren als PDF, inViSIE


Next level Oracle solutions Met grenzeloze passie voor technologie en scherpe kennis van de markt bouwen wij jouw next-level webapplicaties.

De behoefte aan geautomatiseerde bedrijfsprocessen en kwalitatieve cloud oplossingen wordt alsmaar groter. Bij iAdvise kennen we de kunst van applicatie ontwikkeling en cloud enablement. Daarom bouwen wij samen met jou graag aan jouw digitale onderneming van morgen. Een team van 45 enthousiaste consultants helpt jou om je IT-projecten volledig te ontzorgen. Hierbij heb je de keuze voor ons flexibele Team as a Service of voor onze consultancy op locatie.

NEXT LEVEL ORACLE SOLUTIONS

ORACLE PLATINUM CLOUD PARTNER

WIJ ZOEKEN NOG COLLEGA’S MET

Nr. 1 in Oracle APEX

Cloud Enablement

Oracle Database kennis

Low Code Ontwikkeling

Managed Services

Affiniteit met web development

Team as a Service

Cloud Migratie

Ervaring met Scrum & Agile

Oracle Consultancy

System Health Check

Proactieve houding

Training & Support

Licentie Optimalisatie

Teamspirit

+31 76 711 54 00 | www.iadvise.nl


ORACLE APEX

|

11

DATA – DE OUTPUT

clusief actieve Filters, Highlights, Aggregates, Control Breaks en Column Groups. Dit alles zonder een externe printserver. Mogelijk sluiten later ook componenten als Classic Reports en Interactive Reports hierop aan. Eerder zagen we dat APEX in staat is om XSLX-bestanden uit te lezen en dat het aanmaken van XSLX-bestanden een nieuwe mogelijkheid zou zijn. Er zijn plannen om XSLX als extra exportformaat aan te bieden in een release na APEX 20.1.

Het algemene idee is ook hier: één architectuur voor alle data exports. Samengevat: APEX stelt zich steeds meer open voor allerlei verschillende databronnen. APEX is dé ontwikkelomgeving voor de Autonomous Cloud. De nieuwe architectuur staat als een huis. Kortom, APEX heeft een glansrijke toekomst. n Menno Hoogendijk is lid van het Oracle APEX Development Team.

is de vereniging van in het Nederlands taalgebied gevestigde Oracle-gebruikers. De nlOUG is zowel financieel als organisatorisch onafhankelijk van Oracle. PARTNERS

ViSIE


Leuk maakt alles beter!


APEX

DOOR RICHARD MARTENS

|

13

EEN VERHANDELING OVER EEN KLASSIEKE COMPONENT

THE POWER OF NO TEMPLATE Als APEX fan van het eerste uur vind ik het geweldig hoe deze Oracle ontwikkeltool ons in staat stelt razendsnel applicaties te bouwen. Zo snel, dat gebruikers de kans niet krijgen hun wensen tussentijds te wijzigen. Echter, deze snelheid kan alleen gerealiseerd worden als we ons zo goed mogelijk aan het raamwerk houden. Daarom heeft SMART4Solutions vorig jaar de APEX-poster uitgebracht, waarmee je in een oogopslag inzicht krijgt in de template-mogelijkheden die het Universal-Theme ons biedt.

D

it artikel wil inzicht geven in een component die al aanwezig was in de eerste versies van APEX, het ons zo dierbare gereedschap.

HET CLASSIC REPORT

Een Classic Report toont het resultaat van een query, veelal in een tabel-formaat. Een HTML-tabel wel te verstaan. Inclusief sorteerbare kolomkoppen, paginering etc. Om tot een rapport te komen zijn er legio mogelijkheden; ik ga ervan uit dat je die weet te vinden. Ik wil me in eerste instantie richten op de verschillende templates die voorhanden zijn. Standaard wordt een Classic Report weergegeven als HTML-tabel, maar er zijn veel meer mogelijkheden, verdeeld over twee typen: “predefined” en “themed”. De “predefined” optie is de meest eenvoudige: het geeft drie vervolgkeuzes onder template: HTML, Vertical, CSV en XML. Interessanter zijn de “themed” templates.

de achtergrondkleur. Met een beetje uitvogelen komen we dan tot de query, die er als volgt uit kan zien: select e.EMPNO as ALERT_ACTION, e.ENAME as ALERT_TITLE, m.ename as ALERT_DESC, case e.job when ‘CLERK’

then ‘info’

when ‘MANAGER’

then ‘success’

when ‘PRESIDENT’ then ‘danger’ else ‘warning’ end

as ALERT_TYPE

THEMED TEMPLATES

from EMP

e

Een van de eenvoudigste themed templates is het “Alert” report-template, bedoeld om een soort kaartweergave te tonen van de gegevens uit de query. Zoals hieronder te zien is dit een zogenaamd “Named Column template” hetgeen inhoudt dat de kolomnamen die door het template gebruikt worden voorgedefinieerd zijn. Uit het voorbeeld hieronder blijkt dat we kolommen aan het template moeten toevoegen met de namen “ALERT_TITLE”, “ALERT_DESC” en “ALERT_ACTION”, maar als we in de template-definitie kijken (en dat raad ik in dit geval zeker aan), dan blijkt er nog een verborgen kolomverwijzing te zijn: ALERT_TYPE. Deze beinvloedt het icoon en

left join emp m on m.empno = e.mgr

ViSIE


Organisaties werken effectiever met de slimme oplossingen van Qualogy Wij combineren standaardsoftware en

Quality in information

bewezen technologieën – zoals Oracle en Java

technology

– met de laatste technologische inzichten.

• Oracle

Bijvoorbeeld op het gebied van Data Science,

• Java & Web

Machine Learning en Cloud Computing. Al

• Mendix

meer dan 20 jaar zorgen we dat onze relaties

• Data Science

vooroplopen. En we leveren elk project

• Managed Services

succesvol op. Kom met ons in contact en

• Security & Privacy

laat u inspireren.

• Education & Training

De Bruyn Kopsstraat 9 | 2288 EC Rijswijk (ZH) 070 319 50 00 | info@qualogy.com

Q UA LO GY.CO M


APEX

|

15

Voor deze kleurrijke (en wellicht betekenisvolle) weergave van onze gegevens hebben we alleen een template gekozen en onze query aangepast aan wat het template verwacht aangeleverd te krijgen. Alle andere themed templates werken op eenzelfde manier. • Gebruik een standaard query met een voorspelbaar resultaat, • Wijzig het template naar het gewenste template, • Bekijk de template-definitie om de benodigde kolomnamen te achterhalen, • Raadpleeg https://apex.oracle.com/ut voor meer informatie.

Dit betekent dat we dus willekeurige HTML kunnen invoegen in het standaard APEX-template. Dat geeft ongekende mogelijkheden!

DYNAMIC TEMPLATES

Hier krijgen we dus de mogelijkheid een eigen template te definiëren binnen het interactieve report. De mogelijkheden zijn legio. Voor een klant van ons hebben we met deze standaard APEX-functionaliteit een overzicht kunnen realiseren dat in één oogopslag een ongekende schat aan informatie biedt:

Zoals hierboven gedemonstreerd, kan een template dus rechtstreeks verwijzen naar de kolomnamen van een query. APEX geeft de mogelijkheid dit ook te doen bij standaard rapporten. We kunnen dan refereren aan kolommen binnen andere kolommen. We breiden de bovenstaande query uit met de job-kolom uit de emp tabel:

DYNAMIC INTERACTIVE REPORTS

Wie houdt er niet van het Interactive Report. Boordevol functionaliteit voor filteren, sorteren, kolommen tonen, of juist niet. Maar er is nog een fantastische mogelijkheid, de detail-weergave. Zet je die “aan” (onder attributes – Detail View) dan verschijnen er drie nieuwe attributen: • Before Rows • For Each Row • After Rows

select e.EMPNO as ALERT_ACTION, e.ENAME as ALERT_TITLE, m.ename as ALERT_DESC, e.job

as JOB,

case e.job when ‘CLERK’ then ‘info’ when ‘MANAGER’ then ‘success’ when ‘PRESIDENT’ then ‘danger’ else ‘warning’ end as ALERT_TYPE from EMP e join dept d on d.deptno = e.deptno left join emp m on m.empno = e.mgr

We kunnen nu bij een specifieke kolom weer refereren aan de job kolom. In het voorbeeld heb ik dat bij de ALERT_TITLE-kolom gedaan. Het resultaat laat zich voorspellen:

In de afbeelding hierboven zien we een standaard Interactive Report lopend over een view. Het rapport laat zogenaamde visits zien van schepen op de olieterminal van de klant. De kleur van het schip-icoon links geeft de status van de visit weer, het icoon zelf geeft ook aan of het een barge (een groot schip) of een vessel (een heel groot schip betreft. Er wordt dus niet gewerkt met “kleine” schepen. Het rapport bevat links naar detail-pagina’s zoals schip en visit-details. Maar er wordt ook de voortgang van de verwerking van de visit getoond: Is het schip gearriveerd, aangekoppeld, zijn de werkzaamheden gestart, wanneer zal naar verwachting de volgende status bereikt worden etc. Alle functionaliteit van het Interactive Report blijven beschikbaar: sorteren, filteren, voor-geViSIE


16

|

APEX WORLD 2019

EXPERTS IN ORACLE APEX

WHERE BUSINESS MEETS IT Connecting the world by technology

MEET THE DOC WWW.THEDOC.NL


APEX

definieerde rapporten, downloaden van het rapport, printen naar APEX Office Print etc. Hiermee is dit Interactive Report een soort planningsheet voor de klant geworden. De eerlijkheid gebiedt te vermelden dat we hiervoor niet alleen HTML, maar ook het nodige CSS gebruikt hebben, maar dat mag in deze de pret niet drukken. De standaardview die we allemaal van het Interactive Report kennen wordt door de klant op deze pagina eigenlijk helemaal niet meer gebruikt!

|

17

Hier is het waar ik de HTML voor één record definieer. Binnen deze HTML kan ik met de #KOLOMNAAM# notatie aan de verborgen kolommen refereren. Je kunt dan met een beetje puzzelen komen tot iets als:

CLASSIC REPORT – NO TEMPLATE

Uitgaande van de bovenstaande technieken zijn we eens gaan kijken of er geen “all-purpose” template te maken is voor deze situaties. En dat blijkt te kunnen. Hiervoor is een nieuw template gedefinieerd: Template class: “Custom 1” Template type: “Generic Columns” (column template) Vervolgens openen we het nieuwe template en vullen de volgende gegevens in: Before Row: <div class=”#COMPONENT_ CSS_CLASSES#” #REPORT_ATTRIBUTES#> Hiermee kunnen we later in de page editor op report-niveau klassen en overige attributen zetten.

Je zie hier een modal window, met twee classic-reports. “Links” en “Rechts” zullen we ze voor het gemak noemen. Voor het linker report wordt de volgende HTML gebruikt <div class=”lettertext draggable draghandle” data-slttid=”#SLTT_ID#”>#SLTT_CODE#</div> Voor het rechter rapport: <div class=”declaratietekst” data-sltt-id=”#SLTT_ID#”> <div class=”dett_code draghandle”> #CODE# <a data-delete-sltt-id=”#SLTT_ID#”> <i class=”fa fa-trash-o” title=”Delete” aria-hidden=”true”></i> </a> </div>

Column Heading Template: “OMIT” Heel belangrijk, we willen geen kolom-headers. We willen immers eigenlijk helemaal geen template en later alles in de kolom attributen definiëren Column Template 1: #COLUMN_VALUE# Tja ,de kolom moet natuurlijk wel opgenomen worden. After Rows: </div> De div die bij “Before Row” is geopend, wordt hier weer gesloten. Alle overige opties kunnen leeg blijven. Eventueel kun je nog wat HTML ten behoeve van de paginering opnemen. Deze zou je van het standaard template kunnen “lenen” cq. “stelen”. We zijn nu klaar om ons eerste report op basis van “No Template” te definiëren. Gebruik hiervoor een normale query met een arbitraire hoeveelheid kolommen. Alle kolommen worden nu op “hidden” gezet, behalve de laatste.

<div class=”eltt_tekst” contenteditable=”true” onkeypress=”return (this.innerText.length <= 2000)” title=”#CODE#”> #BRIEFTEKST# </div>

</div> Zoals je ziet kun je ook aan kolommen refereren zonder dat deze getoond worden op de pagina. Denk hierbij aan de data-attributen die hierboven gebruikt worden. Dit geeft ons nu de mogelijkheid met JavaScript functionaliteit toe te voegen voor drag-n-drop, inline editing, sortering etc. Op het blog van smart4solutions (https://smart4solutions.nl/blog) kan je de volledige applicatie downloaden, zodat je deze in je eigen workspace kunt installeren. n

Richard Martens is Oracle APEX Consultant en mede-eigenaar van SMART4Solutions.

ViSIE


18

|

ORDS

DOOR ROEL HARTMAN

THE WIZARD OF ORDS ORDS, Oracle Rest Data Services, is best known as the interface between a browser running an APEX application and the Oracle database. But nowadays it can do much more than just transform a request that comes from the APEX application into a database procedure and transfer the result of that call back to the browser. That’s probably the main reason why Oracle rebranded it from APEX Listener to ORDS.

C

urrently all programming languages understand the concept of web services and modern application architectures rely heavily on that concept. And while at first glance the Oracle database might look as a huge monolithic object that doesn’t fit it in such an environment, the opposite is true. Using web services is just a way to move data around and the database is the ideal place to store that data. So they are a perfect match. And in this article we’ll see how easy it is to create web services for your database objects and making your database the center of your application architecture. ENABLE YOUR SCHEMA

Using web services means granting access to your database. So before you even start you have to think about security. Because a web service will use a database user to connect, that database user should have very limited privileges. You don’t want to be the person that granted an evil hacker system access! Therefore you should create a separate user that doesn’t hold the real tables and data that you want to expose to the outside world, but just offers a view on that data. So logged in as that low privileged database user, the first thing you have to do is enable your schema for ORDS, while passing in a mapping pattern. The mapping pattern will become a part of the URL of the web service. As it is a good practice to reveal as little as possible, the mapping pattern should not include your schema name. begin ords.enable_schema ( p_url_mapping_pattern => 'api' -- Obfuscate your real schema name ); commit; end; /

Now you can query one of the user_ords_schema view to inspect the results of this action. ENABLE YOUR FIRST OBJECT

Assuming you have already created the view that you would like to expose in the web service, one more PL/SQL call will do. Just as when enabling the schema, you should not reveal the real table or view name, but obfuscate it by specifying another “alias” than the real object name.

ViSIE


ORDS

begin ords.enable_object ( p_object , p_object_type , p_object_alias ); commit; end; /

|

19

=> 'CUSTOMERS_VW' => 'VIEW' => 'customers'

Now you’re ready to call your first web service by pointing your browser to this URL : https://<your-machine>/ords/api/customers. You should retrieve a JSON document showing all the data from the view. But this is not the only service we just created. If you query the user_ords_services view, you’ll see we just created seven services! Apart from the “GET” we created a “GET” for just one record - using a /<id> extension at the end of the URL. And some other services to insert, update and delete either one or more records from the view. And that just needed two lines of PL/SQL! ENABLING PL/SQL OBJECTS

Identical to enabling views (and tables) you can enable PL/SQL objects as well. Thus you can create procedures, functions and packages that can be part of your web services architecture. First thing you have to be aware of is that a PL/SQL object is always exposed using a POST method. That means you can’t call it directly from the browser’s URL but you either need to code (in PL/ SQL, JavaScript, Java or whatever your favourite language is) or use a tool like Postman to inspect the results. Let’s create a simple procedure with two in-parameters and two out-parameters: create or replace procedure add_something ( p_number1 number , p_number2 number , p_result out number , the_answer_is out number ) is begin p_result := p_number1 + p_number2; the_answer_is := 42; end; /

And enable that procedure as a web service: begin ords.enable_object ( p_object , p_object_type , p_object_alias ); commit; end; /

=> 'ADD_SOMETHING' => 'PROCEDURE' => 'add'

If we would now create some JavaScript / jQuery code to call that URL, passing in the inparameters: var settings = { "url": “https://<your-machine>/ords/api/add/“, "method": "POST", "timeout": 0, "headers": {

ViSIE


20

|

ORDS

"Content-Type": "application/json" }, "data": JSON.stringify({"p_number1":4,"p_number2":5}), }; $.ajax(settings).done(function (response) { console.log(response); });

We would see this result:

{ "p_result": 9, "the_answer_is": 42 }

Something very similar applies to functions, but functions can only have one result and that’s named “~ret”. So in this case the outcome would be : {“~ret”:9}. While this is a very simple example, it gets more interesting when you enable a procedure that returns a sys_refcursor or even a nested sys_refcursor like below. If you call this as a web service then a nested JSON object is returned, exactly the way the modern JavaScript developer likes it! create or replace procedure all_sales

( sales out sys_refcursor ) is begin open sales for select cust.customer_id , cust.cust_first_name , cust.cust_last_name , cursor( select ord.order_id , ord.order_total , cursor ( select itm.order_item_id , itm.unit_price , itm.quantity , prod.product_name from demo_order_items itm join demo_product_info prod on itm.product_id = prod.product_id ) orderlines from demo_orders ord where customer_id = cust.customer_id ) orders from my_customers_vw cust; end; /

If this is not enough and you need full control or need to pass in or out header variables, then you can also defined a PL/SQL block as part of a service. The downside of that approach is that the PL/SQL block is just a stored text block. Thus while a change in your model, like dropping a column, could invalidate a PL/SQL procedure - and you are notified about that and can fix it - the PL/SQL text block will fail on run time. REST ENABLED SQL

If you want to make it even more exciting, you can also open up your database to running any SQL via a URL call. There are a few prerequisites to make that possible. First you have to add one line in your ORDS defaults.xml file :

ViSIE


ORDS

|

21

<entry key=“restEnabledSql.active">true</entry>

This is already enabled in Oracle’s Always Free Autonomous Database environment. One caveat: You will enable SQL for all REST enabled schema’s! Secondly you have to use HTTPS, because you need to send over usernames and passwords. So these better be encrypted. Third, the content-type should be “application/sql”. Now you can execute a SQL statement like “select sysdate from dual” from JavaScript over REST: var settings = { "url": "https://<your-machine>/ords/api/_/sql", "method": "POST", "timeout": 0, "headers": { "Content-Type": "application/sql", "Authorization": "Basic <encrypted username/password>” }, "data": "select sysdate from dual;", }; $.ajax(settings).done(function (response) { console.log(response); });

You’re not limited to executing just one SQL statement. You can also pass in a SQL file or a JSON file containing multiple statements. PROTECT YOUR SERVICE

Apart from the SQL-over-REST the calls to our views and procedures were open to the general public. So if you do this on something else than your laptop, other people might get access to your data. So how can we protect that? The answer is simple. By just passing in an extra parameter - p_auto_rest_auth - when we enable our object! begin ords.enable_object ( p_object => 'THIS_IS_SECRET' , p_object_type => 'PROCEDURE' , p_object_alias => 'secret' , p_auto_rest_auth => true ); commit; end; /

If we now try to access that service, we’ll receive a “401 Unauthorized” response. There are more ways to enable access to trusted users, but the current de facto standard is t use OAuth2. To enable that we need to execute a few steps. First we need to create a client: begin oauth.create_client ( p_name , p_grant_type , p_owner , p_description , p_support_email , p_privilege_names ject-name>' ); commit; end; /

=> => => => => =>

'secret client' 'client_credentials' 'Wizardry Ltd.' 'A client for the Wizard' 'the.wizard@gmail.com' 'oracle.dbtools.autorest.privilege.<schema-name>.<ob-

ViSIE


22

|

ORDS

The “privilege_name” is generated when you enabled the object - either with or with our “auto_ rest_auth” switched on. You can see these when you query the user_ords_client_privileges view. And just like that there are client roles created as you can see in the user_ords_client_roles view. Now we need to grant that role to the client we just created. begin oauth.grant_client_role ( p_client_name => 'secret client' , p_role_name => 'oracle.dbtools.role.autorest.<schema-name>.<object-name>' ); commit; end; /

Once we’ve done that we can retrieve the client-id and client-secret from the user_ords_clients view: select name, client_id, client_secret from user_ords_clients /

Using id and secret we can obtain an OAuth access token (this time using cUrl as an example): curl -i -k --user <client-id>:<client-secret> \ --data "grant_type=client_credentials" \ https://<your-machine>/ords/api/oauth/token

The result is an access token that is valid for one hour: {"access_token":"sWyms9Tx_4L8UnKB4XON3w","token_type":"bearer","expires_in":3600}

Finally we can use that OAuth access token to access our protected service : curl --location --request POST 'https://<your-machine>/ords/api/secret/' \ --header 'Authorization: Bearer sWyms9Tx_4L8UnKB4XON3w' CONCLUSION

The Oracle database can and should play an important role in an web service architecture. And ORDS facilitates that. By using relatively simple and familiar PL/SQL code and constructs you can enable this while keeping your database secure! n Oracle ACE Director Roel Hartman is Director & Senior APEX Developer bij APEX Consulting.

ViSIE


MEDEDELINGEN

OOK

|

23

ViSIE ONTVANGEN?

Wilt u ook op de hoogte blijven van actuele ontwikkelingen en nieuws en achtergronden over Oracle en Oracle-producten, de Oracle-community en de activiteiten van de Nederlandse Oracle User Group?

Abonneer u dan op het gratis e-magazine

ViSIE Inschrijving via de website www.nloug.nl

advertentie

APEX OFFICE PRINT “We make reporting easy!” Dimitri Gielis - CEO APEX Office Print (AOP) is the most integrated, easiest to use, and flexible printing and reporting solution for Oracle

APEX MEDIA EXTENSION Transform multimedia in the Oracle Database and Oracle APEX AME makes it easy to process or convert media before or after it is stored in the Oracle Database. Using our APEX plug-in, PL/SQL API, and REST API you can: •

resize images,

rotate and flip images,

crop images,

get image information (width, height, mime type, ...),

read media metadata (Exif, IPTC and XMP),

and much more…

Try it out for FREE at apexmediaextension.com

Application Express (APEX). Export your reports exactly as they are shown on the screen! We make it easy by providing a REST API, PL/SQL API, and an APEX plug-in. You can be up-andrunning in minutes!

FREE Cloud Account

apexofficeprint.com

FREE Development Reports Licences

UNLIMITED

Cloud and On-premises

Look for more great products from the same great team, coming soon in 2020!

“We combine passion with experience and we love what we do”

apexofficeprint.com

www.apexofficeprint.com APEX R&D Kapeldreef 60, 3001 Heverlee - Leuven, Belgium