OutSystems Notify message

data structuren (auteur: Menno Hoogsteen)

inSystems datacenter

Om in OutSystems vanuit een popup window (of webblock) data te retourneren kun je gebruik maken van de system server actions Notify en NotifyGetMessage. Via Notify stuur je het bericht vanuit een action in het popup scherm. Met de NotiftyGetMessage kun je het vervolgens ontvangen in het webscherm, waar de aanroep naar de popup plaats vond.

In de volgende afbeelding is deze flow schematisch weergegeven:

inSystems OutSystems Notify Message

Parameter

Je hebt één parameter tot je beschikking. Het bericht dat je stuurt/ontvangt dient van het datatype Text te zijn. Een enkelvoudige string als bericht is vaak niet zo’n probleem. Maar als je meer data en eventueel van verschillende datatypen wilt terug sturen, dan blijkt een enkele Text parameter niet zo handig.
Vaak krijg je dan ad hoc constructies waarin variabelen aan elkaar geregen worden met scheidingstekens. Zoiets als:

inSystems OutSystems Notify Message

De action die de notify ontvangt wil je deze tekst weer ontleden. Hiervoor komt de system String_Split action om de hoek kijken:

inSystems OutSystems Notify Message

De String_Split levert een lijst op met in dit geval drie rijen:

inSystems OutSystems Notify Message

Wil je naar de inhoud verwijzen, dan ben je genoodzaakt om hard te verwijzen naar de rijen. Als je dit in een conditie gebruikt, komt dit de leesbaarheid en begrip niet ten goede:

inSystems OutSystems Notify Message

Gelukkig is er ook een betere manier voor bovenstaande constructie. Om het retourneren te structuren en het gebruik van de data te vereenvoudigen, hebben we twee andere built-in actions tot onze beschikking, namelijk JSONSerialize en JSONDeserialize.

JSONSerialize en JSONDeserialize

Met JSONSerialize kun je een Record of List of Records datatypen converteren naar tekst. Dit kunnen bijvoorbeeld entiteiten/structures of lijsten hiervan zijn. Vervolgens gebruik je JSONDeserialize om de tekst weer terug te vertalen naar het oorspronkelijke data type.
Als we de vorige ad hoc constructie vervangen met een implementatie met de zojuist genoemde actions, zien we een duidelijk verschil. De notify bevat nu alleen de uitkomst van het serialiseren van een record variabele:

inSystems OutSystems Notify Message

Hieronder zien we het resultaat van de JSONSerialize action:

inSystems OutSystems Notify Message

De String_Split wordt vervangen door de JSONDeserialize, om de tekst weer om te zetten naar een record:

inSystems OutSystems Notify Message

Herschrijven we de conditie van hierboven, dan krijgen we:

inSystems OutSystems Notify Message

Een stuk duidelijker en geen harde verwijzingen naar posities in een lijst.

Is de JSONSerialize/Deserialize manier feilloos? Nee, je zal goed moeten opletten dat je in beide actions steeds hetzelfde datatype gebruikt. Anders kan het als nog runtime fouten opleveren. Als je bijvoorbeeld de inhoud van een text datatype naar een integer datatype serialiseert, dan levert dit een foutmelding op:

inSystems OutSystems Notify Message

Als je geluk hebt levert het een foutmelding op, zodat je in ieder geval weet dat er iets fout gaat. In het slechtste geval levert het onverklaarbare functionele fouten op, als gevolg van onverwachte data.

Ik ben van mening dat deze manier meer voordelen dan nadelen heeft. Het is een goed gebruik om het elke keer toe te passen.

Share this

Contact

Heb je vragen of opmerkingen? Aarzel niet om contact op te nemen. Dat kan via de algemene contactgegevens, rechtstreeks met de genoemde contactpersoon op een van de detailpagina’s, of via onderstaande knop.

25 maart 2024

APEX World 2024 – ’n impressie

APEX World, iets wat je als Oracle APEX developer wilt meemaken. Dit is voor Ab Rahou de 2e keer dat hij APEX World bezocht, de eerste keer in het KNVB sportcentrum en nu in de Eenhoorn Amersfoort. In deze blog post geeft Ab een impressie van zijn bezoek.

13 december 2024

Start Edwin Vielvoije

Ons Oracle team groeit verder. Begin 2025 start Edwin Vielvoije bij inSystems. Edwin werkt nu ruim 16 jaar met en bij Oracle, met name rond het Oracle Health Insurance platform. Naast zijn technische bagage heeft hij ook diverse andere rollen vervuld binnen Oracle Nederland.

Opdrachten uitgevoerd voor

WVDB Adviseurs Accountants
Oracle University
Politie
Rechtspraak
Cannock
VION Food Group
Greenchoice
Gemeente Den Haag
TenneT
Ministerie van Economische Zaken, Landbouw & Innovatie
Van Iperen Groeispecialisten
Stedin
Rendo
Alphabet
ING Bank
JUVA
Provincie Utrecht
SVB
Multi Tank Card
Altran
BMW
Allianz
DICTU
CBR
IBM
Eneco
MN Services
Ziggo
Bank Mendes Gans
RIGD LOXIA
inSystems KLM
UBR Uitvoeringsorganisatie Bedrijfsvoering Rijk
Telegraaf Media Groep
ASR Nederland
VTTI
RAVU
Thales
Gemeente Gouda
CB Logistics
Universiteit Tilburg
Leaseplan
PC Uitvaart
Syntrus Achmea Real Estate & Finance
Fokker
TU Eindhoven
Rabobank
GVB
Ahold
Gemeente Apeldoorn
VAA ICT Consultancy
Darling
Arval BNP Paribas
Nederlandse Spoorwegen