| Version 43 (modified by henk, 5 years ago) (diff) |
|---|
TOC(heading=Mailmerge variabelen)? TOC(heading=Procedures, sectionindex, compact, depth=3, allactive, Documentatie/Ontwikkelaar/Procedures/)? TOC(heading=Ontwikkelaar, sectionindex, compact, depth=2, allactive, Documentatie/Ontwikkelaar/)? TOC(heading=Documentatie, sectionindex, compact, depth=1, allactive, Documentatie/)?
Mailmerge variabelen
Quote uit Wikipedia: "Mailmerge is een techniek om vanuit een sjabloonbrief een veelvoud aan documenten te genereren waarin enkele gegevens verschillen.". OpenAC gebruikt mailmerge om documenten te maken waarin automatisch gegevens uit het dossier worden opgenomen zoals naam, adres, woonplaats van de patiënt. Het gaat hierbij meestal om Word-documenten maar mailmerge wordt ook gebruikt voor Excel, labels, e-mails etc.
MailMerge module
Als het secretariaat een uitnodigingsbrief wil versturen dan moet het gekozen sjabloon worden gevuld met mailmerge-variabelen die nodig zijn om de brief te completeren. Denk hierbij aan de datum van de afspraak, het type onderzoek, locatie etc. De MailMerge module is een framework voor het definiëren en beschikbaar maken van mailmerge-variabelen.
Voordat we mailmerge-variabelen voor een afspraak kunnen definiëren moeten we eerst alle gerelateerde gegevens ophalen. Het gaat hierbij niet alleen om gegevens over de afspraak zelf, maar ook om gegevens over het zorgtraject waar de afspraak bij hoort en gegevens over de patiënt.
In OpenAC kunnen alle gegevenselementen worden geadresseerd met een pad. Het pad voor een afspraak heeft de vorm patient(x)/behandelingen(y)/plandagen(z). In dit voorbeeld zijn x, y en z database keys. De MailMerge module haalt automatisch de gegevens op van patient x, behandeling y en plandag z. Deze gegevens vormen de basis van de mailmerge-variabelen voor dit pad.
Terminologie
Enkelvoudige en samengestelde mailmerge-variabelen
- Enkelvoudige mailmerge-variabelen zijn gelijk aan de gegevens uit de database. De MailMerge module haalt deze automatisch op voor de entiteiten uit het pad. In een enkel geval zal de module variabelen nabewerken. Datumvelden bijvoorbeeld komen uit de database in formaat jjjj-mm-dd. De !Mailmerge module zet dit om tot dd-mm-jjjj.
- Samengestelde of afgeleide mailmerge-variabelen worden afgeleid uit enkelvoudige variabelen. Denk bijvoorbeeld aan de volledige naam van een patiënt die is samengesteld uit de voorletters of voornaam, achternaam, voorvoegsel, naam partner etc. Soms zijn samengestelde variabelen conditioneel bijvoorbeeld in het geval van de aanhef "Dhr" (man, > 16) of "ouders van" (< 16). In andere gevallen moeten query's worden uitgevoerd, bijvoorbeeld voor het bepalen van het eerste of laatste bezoek in een zorgtraject. Het is de taak van "MergeValue getters" om samengestelde mailmerge-variabelen te definiëren voor een pad.
MergeGlobals en MergeRecords
Deze termen zijn overgenomen uit OpenAC 2.
- MergeGlobals zijn key/value-paren met gegevens die in een sjabloon moeten worden ingevuld. De key is gelijk aan de naam van het samenvoegveld en de value is de waarde. OpenAC zal alle bookmarks uit een sjabloon inlezen en deze vervangen door de waarde van de MergeGlobal met dezelfde naam.
- MergeRecords bevatten herhalende gegevens. Denk bijvoorbeeld aan een nota met een x-aantal notaregels. Enkelvoudige notagegevens zoals datum, notanummer etc. worden gevuld met MergeGlobals. Voor herhalende notaregels gebruikt OpenAC MergeRecords. Elk record is een verzameling key/value-paren waarbij de key gelijk is aan een "mergefield" in het sjabloon. OpenAC zoekt in het sjabloon naar een tabel met mergefields en zal voor elke record uit de MergeRecords en nieuwe rij aanmaken in de tabel waarbij de mergefields worden vervangen door de inhoud van het gelijknamige key uit de MergeRecords. MergeRecords worden ook gebruikt voor wat in OpenAC "multi-brieven" heet. Hierbij maakt OpenAC voor elk sjabloon meerdere brieven aan, afhankelijk van het aantal geadresseerden. Voor elke geadresseerde is er een MergeRecord.
MergeValues en MergeValue getters
Met een "MergeValue getter" kunnen we mailmerge-variabelen definiëren voor een entiteit. Een MergeValue getter is een klasse die interface IMergeValueGetter implementeert.
MergeValue getter implementatie
Je vindt de MailMerge module in OpenACLogica/Modules/MailMerge. Je implementeert een getter door een nieuwe klasse toe te voegen aan de map MergeValueGetters. De klasse moet een subclass zijn van MergeValueGetterBase en interface IMergeValueGetter implementeren:
namespace OpenACLogica.Modules.MailMerge.MergeValueGetters
{
public class BezoekMergeValues : MergeValueGetterBase, IMergeValueGetter
{
public BezoekMergeValues(ITabelRepo<Tabel> tabelRepo): base(tabelRepo)
{
}
Interface IMergeValueGetter bevat 6 methods:
public interface IMergeValueGetter
{
IEnumerable<string> RegisterFor { get; }
Task<MergeGlobalContainer> GetMergeGlobals(IMergeValues mergeValues, PathElement path, MergeGlobalContainer container, Dictionary<string, object> data);
Task<MergeRecords> GetMergeRecords(IMergeValues mergeValues, PathElement path, List<string> relatiesoorten, Dictionary<string, object> data);
void Init(string pad);
string Prefix { get; }
Task<Dictionary<string, object>> GetData(PathElement path);
MergeGlobalContainer VulStandaardvelden(Dictionary<string, object> data, MergeGlobalContainer values);
}
Je hoeft alleen de eerste 3 methods te implementeren, de overige methods zijn geïmplementeerd door MergeValueGetterBase.
RegisterFor
public IEnumerable<string> RegisterFor
{
get { return new List<string> { "patient/behandelingen/behandeldagen" }; }
}
Met RegisterFor geef je aan voor welk(e) pad(en) de getter wordt geregistreerd. MergeValue getters worden geregistreerd voor één of meer ACL-paden. Een ACL-pad is de generieke vorm van het pad naar een entiteit. Als patient(x)/behandeling(y)/plandagen(z) het pad is naar afspraak z, dan is patient/behandeling/plandagen het ACL-pad voor alle afspraken.
GetMergeGlobals
GetMergeGlobals definieert MergeGlobals voor een entiteit en geeft een instantie van MergeGlobalContainer terug.
parameter mergeValues
Dit is een implementatie van interface !IMergeValues en bevat de verzameling van alle MergeGlobals en MergeRecords die in de huidige run zijn opgehaald. Soms nodig om getters van subentry's aan te roepen. Zie MergeValue getter aanroepen
parameter path
path bevat het volledige pad naar de entiteit waarvoor MergeGlobals moeten worden gedefinieerd. Je kunt het pad o.a. gebruiken om gegevens op te halen als deze niet zijn meegegeven in parameter data
parameter container
In GetmergeGlobals definieer je alleen samengestelde of afgeleide MergeGlobals. De standaard recordgegevens zijn al door OpenAC opgehaald en meegegeven in parameter container. Gebruik method Set om MergeGlobals toe te voegen:
container.Set("agb_audioloog", verwijzing.Verwijzer.Agbcode);
Voeg nooit een tabelprefix toe aan de naam van een MergeGlobal, dit doe het systeem zelf. Een MergeGlobal met de volledige samengestelde naam van een patiënt noem je dus "volledige_naam" en niet "patient_volledige_naam". Om backwards compatibiliteitsredenen publiceert OpenAC deze variabele onder zowel "volledige_naam" als "patient_volledige_naam".
parameter data
data bevat de data van de entiteit in de vorm van een Dictionary<string, object>.
GetMergeRecords
GetMergeRecords definieert MergeRecords voor een entiteit en geeft een instantie van MergeRecords terug.
parameter mergeValues
Dit is een implementatie van interface !IMergeValues en bevat de verzameling van alle MergeGlobals en MergeRecords die in de huidige run zijn opgehaald. Soms nodig om getters van subentry's aan te roepen. Zie MergeValue getter aanroepen
parameter path
path bevat het volledige pad naar de entiteit waarvoor MergeRecords moeten worden gedefinieerd. Je kunt het pad o.a. gebruiken om gegevens op te halen als deze niet zijn meegegeven in parameter data
parameter relatiesoorten
Deze parameter wordt voornamelijk gebruikt door GetMergeRecords voor patiënt. relatiesoorten bevat een lijst met strings. Deze lijst komt uit property relaties van entiteit sjabloon. Elke element is een relatiesoort waar een mergerecord voor moet worden aangemaakt. Als de parameter leeg is dan maakt OpenAC voor patiënten standaard mergerecords aan voor relatiesoort "huisarts", "verzekeraar" en "verwijzer". Als relatiesoorten niet leeg is dan worden alleen met de parameter overeenkomende mergerecords aangemaakt.
parameter data
data bevat de data van de entiteit in de vorm van een Dictionary<string, object>.
MergeValue getter aanroepen
Normaal gesproken worden geregistreerde getters automatisch aangeroepen door de mailmerge module van OpenAC.Soms is het nodig om zelf het aanroepen van getters te triggeren, bijvoorbeeld om mailmerge-variabelen van subentry's toe te voegen. Dit kan door de statische functie MergeValues.Create aan te roepen met als argumenten het pad van de subentry en de data die de getter verwacht. Hieronder een voorbeeld uit PatientMergeValues:
foreach (var verwijzing in verwijzingen)
{
var verwijzingPad = $"patient({mergeValues.Path.Key})/behandelingen({verwijzing.ZorgtrajectKey})/verwijzingen({verwijzing.Key})";
mergeValues.Data.TryGetValue(verwijzingPad, out Dictionary<string, object> verwijzingData);
mergeValues.Add(await MergeValues.Create(verwijzingPad, data: verwijzingData));
}
Dit voorbeeld zorgt er voor dat alle voor "patient/behandelingen/verwijzingen" geregistreerde getters worden aangeroepen met het meegeven pad en de meegegeven data. De MergeValues die dit oplevert worden toegevoegd aan de eigen MergeValues.