Changes between Version 20 and Version 21 of Documentatie/Ontwikkelaar/OpenAC3/Scriptfuncties


Ignore:
Timestamp:
07/14/20 13:55:23 (6 years ago)
Author:
henk
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Documentatie/Ontwikkelaar/OpenAC3/Scriptfuncties

    v20 v21  
    3636 
    3737== Uitvoeren van scriptfuncties == 
    38 Het uitvoeren van scriptfuncties wordt aangevraagd door een controller. Een controller hoeft hiervoor alleen de context op te geven waarbinnen scriptfuncties moeten worden uitgevoerd. De controller zegt in gewoon nederlands: 
     38Het uitvoeren van scriptfuncties wordt aangevraagd door een controller. Een controller geeft hiertoe de context op waarbinnen scriptfuncties moeten worden uitgevoerd. De controller zegt in gewoon nederlands: 
    39391. Voer alle scriptfuncties uit voor entiteit Bezoek. De actie is UPDATE en de actie is al uitgevoerd (AFTER) 
    40402. Voer alle scriptfuncties uit voor entiteit Bezoek. De actie is DELETE en de actie is nog niet uitgevoerd (BEFORE) 
     
    4646#!csharp 
    4747 
    48 var scriptRunner = new TabelScriptRunner (); 
     48var scriptRunner = new TabelScriptRunner(); 
    4949}}} 
    5050 
     
    6060 
    6161In echte code wordt de !PathElement instantie al eerder aangemaakt, met als argument een aan de controller meegegeven pad. !TabelScripts gebruikt !PathElement.ACLPath om alle scriptfuncties uit te voeren die zijn geregistreerd voor "patient/behandelingen" en AFTER UPDATE. Scriptfuncties gebruiken !PathElement.Key om zorgtraject ACH-H54321 op te halen als deze niet is meegegeven of door een eerder uitgevoerde scriptfunctie is opgehaald. 
    62  
    6362 
    6463== Een nieuwe scriptfunctie maken == 
     
    7776}}} 
    7877 
    79 Scriptfuncties die horen bij de kern van OpenAC staan in OpenACLogica\Modules\Tabellen\Scripts. Scriptfuncties specifiek voor module <x> staan in OpenACLogica\Modules\<x>\Scripts. Geef scriptfuncties een naam die past bij de entiteit waar ze betrekking op hebben met prefix Script, zoals !ZorgtrajectScript. 
     78Scriptfuncties die horen bij de kern van OpenAC staan in OpenACLogica\Modules\Tabellen\Scripts. Scriptfuncties specifiek voor module <x> horen thuis in OpenACLogica\Modules\<x>\Scripts. Geef scriptfuncties een naam die past bij de entiteit waar ze betrekking op hebben met suffix Script, zoals !ZorgtrajectScript. 
    8079 
    8180=== Te implementeren functies === 
    82 ==== RegisterFor ==== 
    83 Deze functie geeft één of meerdere contexten terug waarvoor het script moet worden geregistreerd: 
     81==== !RegisterFor ==== 
     82Deze functie geeft één of meerdere contexten terug waarvoor het script moet worden geregistreerd. Bijvoorbeeld: 
    8483 
    8584{{{ 
     
    9493}}} 
    9594 
     95Je hoeft de scriptfunctie niet zelf te registeren, dat gebeurt "automatisch". Zie [#Registratie Registratie] voor een technische beschrijving van dit proces. 
    9696 
     97==== !ExecuteAsync ==== 
     98{{{ ExecuteAsync }}} wordt aangeroepen als een controller voor een bepaalde context {{{ scriptRunner.ExecuteAsync }}} aanroept. Dit gebeurt voor alle scriptfuncties waarvoor de opgegeven context is geregistreerd. 
    9799 
    98 ==== ExecuteAsync ==== 
    99  
    100  
    101 == [=#Registratie Registratie] == 
    102 Alle klassen die interface {{{ ITabelScript }}} implementeren worden automatisch geregistreerd als de static constructor van {{{ TabelScripts }}} wordt uitgevoerd. Een static constructor wordt gegarandeerd maar één keer uitgevoerd, de eerste keer dat een reguliere constructor van die klasse wordt uitgevoerd. 
    103  
    104 Om scriptfuncties uit te kunnen voeren moet je eerst klasse {{{ TabelScripts }}} instantiëren: 
    105 {{{ 
    106 #!csharp 
    107  
    108 var tabelscripts = new TabelScripts(); 
    109 }}} 
    110  
    111  
    112 === Interface ITabelScript === 
    113 Interface {{{ ITabelScript }}} bevat twee functiedefinities: 
    114  
    115 {{{ 
    116 #!csharp 
    117  
    118 public interface ITabelScript 
    119 { 
    120     IEnumerable<TabelScriptRegistration> RegisterFor { get; } 
    121     Task<TabelScriptResult> ExecuteAsync(IServiceProvider serviceProvider, PathElement path, string command, TabelScriptWhen when, TabelScriptResult scriptResult); 
    122 } 
    123  
    124  
    125 }}} 
    126  
    127 Het is mogelijk om een tabelscript klasse te registreren voor meerdere events (combinatie van pad, actie en moment). Onderstaand een voorbeeld: 
    128  
    129 {{{ 
    130 #!csharp 
    131  
    132 public IEnumerable<TabelScriptContext > RegisterFor => new List<TabelScriptRegistration> { 
    133     new TabelScriptContext { Command = HubCommand.DELETE, When = TabelScriptWhen.BEFORE, Path = "patient/behandelingen/fin_trajecten" }, 
    134     new TabelScriptContext { Command = HubCommand.DELETE, When = TabelScriptWhen.AFTER, Path = "patient/behandelingen/fin_trajecten" }, 
    135     new TabelScriptContext { Command = HubCommand.UPDATE, When = TabelScriptWhen.AFTER, Path = "patient/behandelingen/fin_trajecten" }         
    136 }; 
    137  
    138 }}} 
    139  
    140 Voor elk van bovenstaande events zal method {{{ ExecuteAsync }}} van de klasse worden uitgevoerd. 
    141  
    142 == !ExecuteAsync == 
    143 Bij elk scriptfunctie event wordt de {{{ ExecuteAsync }}} method van alle geregistreerde klassen aangeroepen. Deze functie krijgt een {{{ TabelScriptResult }}} mee als argument en geeft ook een {{{ TabelelScriptResult }}} terug. Op die manier kunnen meerdere scriptfuncties iets toevoegen aan het uiteindelijke resultaat. 
     100De functie krijgt een {{{ TabelScriptResult }}} mee als argument en geeft ook een {{{ TabelelScriptResult }}} terug. Op die manier kunnen meerdere scriptfuncties iets toevoegen aan het uiteindelijke resultaat. 
    144101 
    145102=== Data en !ParentData === 
     
    164121 
    165122  
     123== [=#Registratie Registratie] == 
     124Alle scriptfuncties worden automatisch geregistreerd door {{{ TabelScriptRunner }}}. Dit gebeurt door de static constructor. Dit is een constructor die gegarandeerd maar één keer uitgevoerd, de eerste keer dat een reguliere constructor van die klasse wordt uitgevoerd. {{{ TabelScriptRunner }}} zoekt met behulp van reflectie alle klassen op die interface {{{ ITabelScript }}} implementeren en registreert deze voor de contexten die {{{ RegisterFor }}} teruggeeft. 
     125 
     126