Inhoud

Generieke bulk import

Algemeen

De generieke bulk import functionaliteit van OpenWave is gemaakt met het idee om flexibiliteit te bieden aan de organisaties m.b.t. het kunnen inlezen van data in OpenWave. Het uitgangspunt van de functionaliteit is dat deze gebruikt kan worden voor bijvoorbeeld het periodiek aanmaken van de geplande controles bij inrichtingen, en overige toepassingen waarbij men een lijst met gegevens heeft die bij OpenWave ingelezen moeten worden. Vooralsnog is het alleen mogelijk om te kunnen inlezen: daarmee wordt bedoeld kaarten aanmaken in tabellen in OpenWave. In de toekomst zal de functionaliteit uitgebreid kunnen worden met andere mogelijkheden zoals updaten/wijzigen van bestaande kaarten in OpenWave.

De generieke bulk import gaat uit van een document (een Excel of CSV file) waarin de gegevens staan die men wilt inlezen met behulp van een importmatrijstabel in OpenWave. Hierin staat beschreven hoe EN waar de programmatuur van OpenWave de data uit de aangewezen file moet inlezen. Het definiëren van regels in de importmatrijstabel zal men zelf doen. Zo kan elke organisatie voor iedere benodigde importactie, eigen definities maken.

Waarschuwing

Niet te verwarren met de functionaliteit onder operations tegel Aanmaken inspecties/toezichtzaken in bulk (zie daarvoor pagina Bulk aanmaken van inspecties/toezichtzaken).

Deze (oude) functionaliteit blijft operationeel maar is niet flexibel: deze werkt alleen volgens gespecificeerde mallen/condities. De functionaliteit van de Generieke bulk import is wel flexibel en volledig naar eigen inrichting/wens te maken.

Alleen in bestaande OpenWave tabellen

Het is niet mogelijk om met deze functionaliteit nieuwe tabellen aan te maken.

De functionaliteit is bedoeld voor data inlezen in bestaande OpenWave tabellen.

Op deze pagina wordt in het algemeen uitgelegd hoe de generieke bulk importactie werkt en hoe deze acties ingericht kunnen worden. Tevens zijn er twee voorbeeldsituaties uitgeschreven op onderliggende pagina's in de dokuwiki: daar staat uitgeschreven hoe men in tbimportmatrijs, tbimportmatrijsregels en tbimportsleutel de inrichting moet maken om de voorbeeld bulk importactie te kunnen uitvoeren.
Zie voor deze voorbeelden:

Inrichten van bulk import proces

Een generieke bulk importactie zal eerst ingericht moeten worden alvorens deze gestart kan worden. Het inrichten vindt plaats in beheerportaal(nieuw) onder kolom Dieper beheer. Hiervoor zijn de tegels Import Matrijzen en Import sleutels benodigd. Deze zijn standaard toegewezen aan medewerkers met beheerniveau > 98. Voor tegeldefinities zie pagina's Import matrijzen en Import Sleutels.

Voordat men begint met het inrichten van een generieke bulk importactie moet men het proces van de gewenste importactie uitwerken:

Na het uitdenken van het proces kan men starten met het inrichten van de gewenste bulk importactie. Te beginnen met het bestand wat men wilt gaan uploaden bij deze importactie:

Bestand met de in te lezen data

Het bestand met daarin de in OpenWave in te lezen data mag in principe zo opgesteld zijn als men zelf wilt.
Het is wel belangrijk om te weten in welke (combinatie van) kolommen, welke data staat die men wilt inlezen. Dit is benodigd voor het correct inrichten van een bulk importactie in OpenWave.
Het zal in de praktijk voorkomen dat men de basis van het bestand blijft gebruiken voor gelijke importacties. Stel dat men een import heeft ingericht voor inspecties aanmaken bij inrichtingen, dan zal de opzet van het bestand wat men upload steeds gelijk zijn (in kolom1 staat bijv. altijd de waarde voor inspectieaanleiding) maar de daadwerkelijke waardes per kolom/regel zal wijzigen.
De inhoud van het bestand zal wel wijzigen voor iedere importactie: immers eenmaal ingelezen zal men niet opnieuw dezelfde data in willen lezen (m.u.v. opnieuw draaien van importactie indien men de importactie heeft teruggedraaid. Zie kopje Terugdraaien van import actie op deze pagina). Vandaar dat bij iedere importactie gevraagd wordt aan diegene die de actie start, om het juiste bestand aan te wijzen.

Voor het inrichten van iedere generieke bulk importactie zijn een aantal zaken van belang om te weten die met de file te maken hebben:

Met deze informatie kan men beginnen met het daadwerkelijk aanmaken van regels in de tabellen bedoelt voor inrichten van bulk importacties. Daarbij wordt gestart met het aanmaken van een regel in de tabel tbimportmatrijs:

Importmatrijs

Onder de tegel Import Matrijzen wordt ingericht in welke tabel(len) een importactie regels gaat inlezen en hoe de programmatuur de data moet gaan opslaan in deze tabel(len).
Afhankelijk van wat er gewenst is zal men voor een importactie, één hoofdactie inrichten EN eventueel vervolgacties. Zowel de hoofdactie als vervolgacties zijn aparte regels in de tabel tbimportmatrijs. Bij het definiëren van deze regels in tbimportmatrijs wordt de hoofd- en vervolgrelatie opgegeven. Samen vormen deze regels dan één generieke bulk importactie.
De regels in de tbimportmatrijs tabel worden aangemaakt via de plus-knop in de lijst van Import matrijzen.

Bij het aanmaken van een regel in de importmatrijstabel wordt aangegeven:

In de lijst met importmatrijsregels, zie blok Kolommen in het detailscherm van een importmatrijs, wordt vervolgens per veld benodigd voor de insert in de doeltabel een regel gemaakt om te definiëren hoe de waardes voor de insert opgehaald moeten worden.

Importmatrijsregels

In de lijst met importmatrijsregels wordt via de plus-knop een wizard gestart waarmee een importmatrijsregel wordt aangemaakt.
Er moeten evenzoveel importmatrijsregels worden aangemaakt als men velden benodigd heeft voor een insertactie.
Dus bijvoorbeeld als de doeltabel van de bovenliggende matrijs 4 verplichte velden heeft en 3 velden die men ook wilt meegeven, dan moeten er 7 regels worden aangemaakt in tbimpormatrijsregels.
Samen maken de importmatrijsregels onder één importmatrijs dan de definitie van één insert voor een regel in de doeltabel.
Indien er tijdens de daadwerkelijke importactie (dus tijdens het draaien van de generieke bulk import) in de vervolgactie(s) verwezen moet worden naar de net aangemaakte kaarten in de doeltabel, dan zal er ook een kaartje aangemaakt moeten worden in tbimportsleutels.
Dit gebeurd automatisch indien men één importmatrijsregel aanmaakt met als naam van het veld IkBenSleutelVeld. In de bron/kolombewerking schrijft men vervolgens uit hoe gerefereerd gaat worden naar het aangemaakte kaartje. Zie kopje Import sleutels voor een voorbeeld.

Iedere importmatrijsregel wordt als volgt gedefinieerd:

Geaccepteerde bron/kolombewerking definities

De programmatuur verwacht dat er in de bron/kolomverwerking van een importmatrijsregel een SQL definitie staat OF dat er direct verwezen wordt naar een kolom uit de in te lezen file. De volgende inhoud van veld Kolomnummers met bewerking wordt geaccepteerd:

  • {kolom:nummervandekolom}. Dus bijvoorbeeld als de waarde voor een veld in de eerste kolom van de in te lezen file staat dan is het veld Kolomnummers met bewerking gevuld met {kolom:1}
  • een gecombineerde waarde van kolommen waar GEEN spatie/scheidinsteken tussen verwacht wordt. Dus bijvoorbeeld als de waarde voor een veld is de eerste kolom van de in te lezen file plus de derde kolom, dan is het veld Kolomnummers met bewerking gevuld met {kolom:1} || {kolom:3}
  • een gecombineerde waarde van kolommen waar WEL een spatie/scheidinsteken tussen verwacht wordt. Dus bijvoorbeeld als de waarde voor een veld is de eerste drie kolommen van de in te lezen file, gescheiden door een dubbele punt: dan is het veld Kolomnummers met bewerking gevuld met {kolom:1} || ':' {kolom:2} || ':'|| {kolom:3}
  • een SQL statement. Eventueel met daarin verwijzingen naar kolommen uit het in te lezen bestand. Bijvoorbeeld select dnkey from tbinspaanleiding where upper(dvcode) = '{kolom:2}' . Let op: hier is het belangrijk dat de kolomverwijzing {kolom:2} omringd wordt door aanhalingstekentjes. Dus zoals men ook in SQL een stringwaarde zou opschrijven.

Klikken op een importmatrijsregel in de lijst geeft het openen van het detailscherm van de importmatrijsregel. Daar kan de definitie van de aangemaakte importmatrijsregel gewijzigd worden.
De min-knop in de lijst zal een wizard starten om een importmatrijsregel te verwijderen.

Import sleutels

Voor de inrichting kan het mogelijk zijn, afhankelijk van wat men wilt, om met vaste sleutelwaardes te werken. Deze sleutelwaardes worden of vooraf gedefinieerd bij de importsleuteltabel (via tegel Import sleutels), of ze worden ingelezen in de importsleuteltabel tijdens een generieke bulk importactie.
Hoe dit werkt wordt aan de hand van onderstaand voorbeeld uitgelegd:
Stel in het bestand met de in te lezen data staan gegevens van aan te maken inspecties en inspectiebezoeken en de inrichtingnummers waaronder deze inspecties aan te maken.
Voor het inlezen van de inspecties is het nodig om de corresponderende dnkey van de inrichting op te halen. Dit kan met een select statement in tbimportmatrijsregels. Maar kan ook door in de tabel voor import sleutels de dnkeys van de inrichtingen vast te leggen.
Dit doet men als volgt:

De importmatrijsregel voor de dnkeymilinrichtingen vullen bij tbinpspecties is dan als volgt gedefinieerd:

Dit zorgt ervoor dat bij het draaien van de generieke bulk import, regels worden aangemaakt in tbinspecties onder de inrichting van het opgegeven inrichtingnummer in het bestand.
Bovengenoemd voorbeeld is het vooraf vastleggen van vaste sleutelwaardes.
Het tijdens de bulk importactie vastleggen van nieuwe vaste sleutelwaardes is ook benodigd in ons voorbeeld. Want onder de aangemaakte inspecties, wil men graag bezoeken aanmaken.
Hiervoor zijn er rijtjes in tbimportsleutels nodig voor de net aangemaakte inspecties. Dit wordt geregeld, zoals hierboven al genoemd, door bij de importmatrijs voor tbinspecties, een importmatrijsregel aan te maken met als veldnaam IkBenSleutelVeld.
Zo'n importmatrijsregel ziet er dan als volgt uit:

Bij het draaien van de bulk importactie zal dan voor iedere aangemaakte rij in tbinspecties, ook een rij aangemaakt worden in de sleuteltabel met als tabelnaam tbinspecties, als pointer de dnkeywaarde van deze inspectie als zoeksleutel de verwijzing naar deze sleutelwaarde.
Voor de vervolgactie van het aanmaken van bezoeken, definieert men dan in tbimportmatrijsregels voor veld dnkeyinspecties dat deze gevuld wordt door ophalen van de juiste waarde uit de sleuteltabel.

Starten van Generieke bulk import

In het Operationsportaal is onder kolom Import nieuwe tegel Start generieke bulk import (Start generieke bulk import) zichtbaar. Deze tegel start de wizard voor het starten van een bulk importactie. De wizard zal vragen om een importmatrijs aan te wijzen waarvoor geldt dat dit een hoofdmatrijs is. Dit is de starttabel van de import. Daarnaast vraagt de wizard om het aanwijzen van een bestand. Dit moet zoals hierboven genoemd een CSV (.csv) of Excel (.xlsx)-file zijn met daarin de data die men wilt inlezen. Bij klikken op uitvoeren in de wizard wordt op de achtergrond de bulk importactie uitgevoerd. In de operationslog is de voortgang bij te houden.

Task scheduler

In de toekomst wordt het ook mogelijk om via de task scheduler een bulk importactie te starten (let op nooit herhaalbaar want altijd nieuwe data nodig) op gewenst tijdstip. Echter dit is nog niet mogelijk in versie 1.33 van OpenWave.

Werkwijze

De importactie zal beginnen met het controleren van een aantal zaken:

Daarna zal de programmatuur kijken bij de aangewezen hoofdmatrijs hoe het bestand verwerkt moet worden:

Vervolgens wordt er gekeken in de tabel tbimportmatrijsregels die horen bij de aangewezen importmatrijs, uit welke velden de insert actie bestaat voor iedere regel op de doeltabel. Plus hoe ieder veld gevuld moet worden: de selects/kolomverwijzingen die in de tbimportmatrijsregels staan worden door de programmatuur gecheckt met het geüploade bestand om zo de juiste waardes op te halen.

Voorbeeld

Stel er zijn 10 importmatrijsregels voor de hoofdimportmatrijs dan wordt de uiteindelijke insert actie voor 1 regel uit het geuploade bestand:
insert into doeltabel (importmatrijsregel1,importmatrijsregel2,importmatrijsregel3,importmatrijsregel4,importmatrijsregel5,importmatrijsregel6, importmatrijsregel17,importmatrijsregel8,importmatrijsregel9,importmatrijsregel10)
Values (waarde1,waarde2,waarde3,waarde4,waarde5,waarde6,waarde7,waarde8,waarde9,waarde10) ;

De programmatuur zal vervolgens voor iedere regel in het bestand, een insert actie (proberen te) uitvoeren. Indien er een importmatrijsregel bestaat met veldnaam IkBenSleutelVeld dan zal na iedere insert actie in de doeltabel ook een nieuwe regel aangemaakt worden in de sleuteltabel (tbimportsleutels).

Meer dan één keer voorkomen van veldnaam

Indien er meer dan één importmatrijsregel bestaat met dezelfde veldnaam, dan zal de programmatuur diegene kiezen met de laagste dnkey. Dit geldt ook voor als men twee keer een IkBenSleutelVeld importmatrijsregel aanmaakt: de programmatuur zal maar één keer een rijtje aanmaken in tbimportsleutels per insert in de doeltabel. En zal dan dus kiezen voor de IkBenSleutelVeld importmatrijsregel met de laagste dnkey.

Als de programmatuur klaar is met het verwerken van de importmatrijs waar deze mee bezig is, alle regels in het bestand (bij Excel: de regels van het werkblad) zijn doorlopen en de insert acties zijn uitgevoerd, dan wordt er gekeken of er nog een vervolgactie is.
Dit is het geval indien tbimportmatrijs.dnkeyvervolgmatrijs gevuld is.
De programmatuur gaat (indien aanwezig) de vervolgactie uitvoeren op dezelfde manier als de hoofdactie.
Er wordt niet opnieuw gekeken naar het bestandstype: voor 1 overall bulk importactie kan dus maar 1 bestand worden geüpload.
Maar er wordt gekeken in de importmatrijstabel van de vervolgactie op welk werkblad de gegevens staan voor de vervolgactie (indien Excel) en/of naar de beginregel (Excel en CSV).
Na uitvoeren van de vervolgactie wordt weer gekeken of er nog een vervolg is enz. enz. tot alle inleesacties in de bulk importactie zijn uitgevoerd.

Operationslog

De voortgang van het op de achtergrond draaien van een bulk importactie is in te zien via de operationslog. Er zal een regel worden aangemaakt met als code GeneriekeBulkImport.
Tevens is in de configuratietabel terug te zien of er al een bulk importactie draait: dit is het geval indien Getal1 = 1 bij instelling Sectie: Operations, Item: GeneriekeBulkImport (de instelling wordt automatisch aangemaakt bij eerste keer starten van de generieke bulk import).

De logging bij de regel in de operationslog is als volgt opgebouwd:

Bestand downloaden

Het bestand dat men geüpload heeft bij het starten van de bulk importactie (bestand met de in te lezen gegevens) kan men downloaden bij de operationslogregel.
Deze wordt (tijdelijk) bewaard op een map die automatisch wordt aangemaakt bij de eerste keer starten van de generieke bulk import (hiervoor bestaat instelling Sectie: OWV, Item: TussenMapBulkImportFiles, Tekst: /tmp/openwave/bulkimportfiles/).
Voor het downloaden klikt men in de operationslogregel op downloadknop linksonder met de hint Download bestand van tempmap.

Terugdraaien van importactie

Het kan natuurlijk voorkomen dat een gedraaide bulk importactie niet het gewenste resultaat geeft, bijvoorbeeld als de inrichting niet helemaal correct is of de data uit het inleesbestand niet juist bleek. Wat de aanleiding ook is, er is altijd de mogelijkheid in OpenWave om de via de bulk import aangemaakte regels te verwijderen.

Omwille van het mogelijk kunnen terugdraaien van een bulk importactie wordt er in OpenWave bijgehouden in welke tabellen, welke regels (primary key) worden aangemaakt tijdens een bulk importactie.
Dit werkt als volgt: tijdens het draaien van een generieke bulk importactie wordt voor iedere regel die in een tabel wordt aangemaakt, in tbaudit een regel aangemaakt met naam van de tabel, primary key van de nieuwe regel, dat het om een insert gaat, en veld dvbron krijgt waarde ‘I' om aan te geven dat de regel uit de bulk import komt.

Inzien aangemaakte regels in Audit

Los van of men de importactie wilt terugdraaien of niet: in de audit tabel van OpenWave wordt bijgehouden welke regels in welke tabellen zijn aangemaakt via de generieke bulk import.
Deze regels zijn te herkennen aan de letter 'I' in de kolom Bron in de Audit-lijst.

Werkwijze

In het lijstscherm van de Audit is linksonder een knop beschikbaar gekomen die een wizard start om de bulkactie ongedaan te maken. Vooralsnog zal deze wizard vragen om een vanaf datum en tijd, en een tot en met datum en tijd waarin men de regels die aangemaakt zijn weer wilt verwijderen. Zo kan men zelf bepalen welke regels die verkeerd zijn aangemaakt, ook weer verwijderd zullen worden.
Stel een bulk importactie heeft regels aangemaakt in tbmilinrichtingen, tbinspecties en tbinspbezoeken dan kan men d.m.v. tijdstip aanwijzen in de wizard zelf reguleren welke regels verwijderd zullen worden uit de tabellen.
De voortgang van de terugdraaiactie kan worden ingezien bij de operationslog. Daar zal men in de logging tevens kunnen vinden of het gelukt is om de regels te verwijderen.

Waarschuwing

De regels die in tbaudit zijn aangemaakt tijdens een bulk importactie zullen NIET verwijderd worden. Zo kan men nog terugzien welke regels ooit zijn aangemaakt.

Uitzonderingstabellen

Er zijn een paar tabellen die geen eigen primary key hebben, maar waarbij een combinatie van velden de unieke id vormen. De programmatuur voor het terugdraaien van de importactie kan dan niet de regels vinden die verwijderd moeten worden. Om deze reden worden deze tabellen uitgesloten van de terugdraaiactie. Het gaat om de volgende tabellen:

  • tbhandhcontactennn
  • tbmilvergcontactennn
  • tbovcontactennn
  • tbmilcontactennn
  • tbinfocontactennn
  • tbhorecacontactennn
  • tbomgvergcontactennn

Wat wel mogelijk is om de bovenliggende zaak/inrichting te verwijderen: dit leidt automatisch tot verwijderen van onderliggende regels uit bovengenoemde tabellen.

Operationslog

De terugdraaiactie is te volgen via de operationslog. Er zal een regel worden aangemaakt met als code GeneriekeBulkImportDeleteRegels.
Tevens is in de configuratietabel terug te zien of er al een proces draait voor terugdraaien van een bulk importactie: dit is het geval indien Getal1 = 1 bij instelling Sectie: Operations, Item: GeneriekeBulkImportDeleteRegels (de instelling wordt automatisch aangemaakt bij eerste keer starten van de terugdraaiactie).
In de logging bij de regel in de operationslog is terug te zien: