Deel een
EasyList
Van SQL-query naar volwaardige Synergy-pagina: kolomkoppen, opmaak per datatype,
doorklik-links, sorteren, bladeren, Excel-export, JSON en een dashboard-widget. Je legt de query
vast in een Synergy-verzoek — geen code, geen deploy, geen SDK.
De kern: de query is de lijst, en de alias van elke
kolom bepaalt de kolomkop én het gedrag van die kolom.
01Het menu
Alles zit onder Menu: Easy by DataKings
(Menu.aspx?Layout=CSEasyMenu), verdeeld over de drie standaard Synergy-tabbladen.
Gebruikers met de Exact add-on-rol zien dit menu; gebruikers zonder menu kunnen de pagina's als
favoriet opnemen.
| Tabblad | Menu-item | Wat |
| Invoer | Easy List → Lijst | een nieuwe EasyList |
| Invoer | Easy List → Importeren | lijsten uit een exportbestand inlezen (hoofdstuk 10) |
| Overzichten | Easy List → Overzicht | alle lijsten, met filters |
| Inrichting | Easy List → Instellingen | het verzoektype van EasyList (Installatie → Per module) |
| Inrichting | Easy List → Importeren / Exporteren | hoofdstuk 10 |
| Inrichting | Easy Menu → Instellingen, Licentie | connecties en licentie (Easy Menu) |
| Inrichting | Termen → Initialiseren / Zoeken | term-ID's opzoeken (Easy Menu → Termen) |
CSEasyList.aspx zelf staat niet in het menu — dat is de lijstpagina die je
vanuit het verzoek, een link, een favoriet of een widget aanroept.
02Je eerste lijst
Voorwaarde: het EasyList-verzoektype is eenmalig ingericht en gekoppeld (zie
Installatie → Per module).
- Easy by DataKings → Invoer → Easy List → Lijst. Er opent een nieuw verzoek van het ingestelde type.
- Vul Omschrijving in (verplicht) en eventueel Aangepaste paginatitel.
- Loop de werkstroom door tot minimaal EasyList goedgekeurd.
- Kies bij Connectie de datasource en typ je query in SQL Query.
- Bewaar en druk op Lijst genereren, of Lijst genereren in nieuw venster.
De knoppen in het verzoek roepen CSEasyList.aspx?id=<verzoek-GUID> aan. Je kunt
de lijst ook zelf aanroepen:
CSEasyList.aspx?ID=<GUID van het verzoek>
CSEasyList.aspx?HID=<verzoeknummer, bv. 00.029.131 of 29131>
Statuseis
De lijst draait alléén als het verzoek de status Goedgekeurd (1),
Gerealiseerd (4) of Verwerkt (3) heeft — in de meegeleverde definitie:
EasyList goedgekeurd, EasyList in gebruik en
Verwerkt. Zolang het verzoek EasyList aangemaakt (Open) of
Concept is, geeft de pagina geen gegevens.
03Algemene werking van de query
- Elke kolom in je
SELECT wordt een kolom in de lijst, in dezelfde volgorde.
- De alias is de kolomkop. Geen alias betekent geen bruikbare kop.
- De alias bepaalt óók het gedrag: aliassen met
URL, HTML,
TermID of HID worden speciaal behandeld.
- De opmaak van de wáárden volgt het datatype uit SQL, niet de alias. Cast dus
bewust:
convert(decimal(18,2), …) levert een rechts uitgelijnd bedrag met 2
decimalen, varchar levert platte tekst.
- De hele query wordt uitgevoerd en volledig in het geheugen gelezen; bladeren en sorteren
gebeuren daarna in het geheugen. Filter dus in SQL — niet met een groot resultaat en
Bladeren aan.
- Bij een
Synergy- of Globe-connectie draait de query binnen de
lopende Exact-transactie.
- Een query die
commit gevolgd door tran bevat wordt geweigerd
(melding Not supported).
- Een stored procedure mag ook:
exec dbo.spMijnLijst of
exec dbo.spMijnLijst @P1.
Voorbeeld
select 'WflRequest.aspx?BCAction=1&ID=' + convert(varchar(50), a.ID) as URLNverzoek,
a.HID as VerzoekHID,
a.Description as Omschrijving,
rs.DescriptionTermID as TermIDStatus,
rs.Description as Status,
a.Sysmodified as Gewijzigd
from Absences a (nolock)
join RequestTypeStatus rs (nolock)
on rs.AbsenceTypesID = a.Type
and rs.StatusID = a.Status
where a.EmpID = @userid
order by a.Sysmodified desc
Op het scherm zie je hiervan vier kolommen — Verzoek,
Omschrijving, Status en Gewijzigd:
URLNverzoek is onzichtbaar en maakt van de kolom erna een link die in een nieuw
venster opent.
VerzoekHID wordt geformatteerd als 00.029.131; de kop
wordt Verzoek, want het achtervoegsel HID verdwijnt.
TermIDStatus is onzichtbaar en vertaalt de statuswaarde in de kolom erna.
Gewijzigd is een datetime en wordt automatisch als datum + tijd
opgemaakt.
Wil je vertaalde kolomkoppen, zet dan het term-ID achter de kop — zoek het op via
Termen → Zoeken:
a.HID as [VerzoekHID, <termid>],
a.Description as [Omschrijving, <termid>],
Connecties
In het verzoekveld Connectie kies je waar de query tegen draait:
| Keuze | Betekenis |
| Synergy | de Synergy-database, binnen de lopende Exact-transactie |
| Globe<nr> | een Globe back-office-administratie — alleen actieve administraties met back-office aan |
| eigen naam | een van de max. 5 connecties uit Easy Menu → Instellingen |
Met een eigen connectie kun je cross-database queries doen en zelfs lijsten maken over gegevens
uit andere applicaties.
04Aliassen: de harde features
Alle prefixen zijn niet case-sensitive: urln…,
URLN… en UrlN… werken alle drie.
- <naam>zichtbaar
- kolomkop is
<naam>
- [<naam>, <termid>]zichtbaar
- kolomkop uit term
<termid>, met <naam> als fallback.
Bijv. as [Medewerkersnummer, 281818]
- [<naam>, <termid>, <breedte>]zichtbaar
- idem, plus een vaste kolombreedte met eenheid:
20%,
150px, 8em. Bijv. as [Omschrijving, 4243, 20%]; zonder
term-ID: as [Omschrijving,, 20%]. Zonder breedte bepaalt EasyList hem op het
kolomtype (hoofdstuk 05). Een los getal zonder eenheid blijft een term-ID
- URL…onzichtbaar
- de waarde wordt de hyperlink van de direct volgende kolom. Zelfde venster
- URLN…onzichtbaar
- idem, nieuw venster —
target="_blank"
- URLT…onzichtbaar
- idem,
target="_top"
- URLP…onzichtbaar
- idem,
target="_parent"
- URLM…onzichtbaar
- idem,
target="MainWindow"
- URLW…onzichtbaar
- idem, opent in een modale pop-up binnen Synergy
- HTML…zichtbaar
- de waarde wordt níet ge-escaped: je eigen HTML/opmaak wordt gerenderd. Het voorvoegsel
HTML verdwijnt uit de kolomkop
- TermID…onzichtbaar
- de waarde is een term-ID waarmee de waarde van de direct volgende kolom
vertaald wordt
- HID · HID… · …HIDzichtbaar
- de waarde wordt geformatteerd als Synergy-nummer 00.029.131,
kolombreedte 80px, en het achtervoegsel
HID verdwijnt uit de kop
Details en valkuilen
URL-kolommen horen vóór hun doelkolom
Eén URL…-kolom werkt op precies één volgende kolom; daarna is de link weer weg.
Twee URL…-kolommen achter elkaar: alleen de laatste geldt.
De vierde letter bepaalt het target — ook als je dat niet bedoelde
Er wordt alleen gekeken naar de eerste vier letters; de rest van de alias is vrije naamgeving.
Noem je je linkkolom naar het ding waar hij naartoe wijst, dan krijg je er ongemerkt een target
bij:
| Alias | Gelezen als | Resultaat |
| URLMedewerker | URLM | opent in MainWindow |
| URLProject | URLP | opent in _parent |
| URLTaak | URLT | opent in _top |
| URLNieuweRelatie | URLN | opent in een nieuw venster |
| URLWerkstroom | URLW | opent in een modale pop-up |
Wil je bewust hetzelfde venster, zorg dan dat de vierde letter géén N,
T, P, M of W is — bijvoorbeeld
URL_medewerker, URLrelatie of URLklant. Andersom geldt
hetzelfde: begin een normale gegevenskolom nooit met URL, want die wordt onzichtbaar
en gaat als hyperlink op de kolom erna zitten.
URLW en pop-ups
Zet Actualiseren na sluiten pop-up op Ja als de lijst na het sluiten
van de pop-up herladen moet worden. Draait de lijst zelf in een modale pop-up
(&IsModal=1), dan wordt &IsModal=1 aan elke link toegevoegd
— je link moet dan al een ? bevatten.
TermID werkt alleen op tekstkolommen
De kolom moet direct vóór de te vertalen kolom staan. Is de waarde leeg of niet numeriek, dan
wordt term-ID 0 gebruikt en blijft de oorspronkelijke tekst staan.
Term-ID's opzoeken
Via Termen → Zoeken. Die pagina zoekt in de tabel die
Termen → Initialiseren vult (per taal, alleen voor een administrator) —
is die tabel leeg, dan levert zoeken niets op en moet je eerst initialiseren. Vind je geen bestaande
term, gebruik dan [Naam, 0] of laat het term-ID weg; de fallbacktekst wordt dan
gebruikt.
De komma-notatie
Alleen het deel ná de láátste komma wordt als term-ID gelezen, en alleen als het een
niet-negatief geheel getal is. as [Omzet, netto, 1234] geeft dus kop
Omzet, netto met term 1234. Is het laatste deel geen getal, dan hoort het gewoon bij de
tekst. Een breedte herkent EasyList aan de eenheid: staat er achteraan 20% of
150px, dan is dat de breedte en is het deel ervoor het term-ID. Laat geen spatie staan
direct vóór de komma bij een …HID-alias — anders wordt de HID-formattering niet
herkend.
Combineren mag
as [HTMLOmschrijving, <termid>] geeft een HTML-kolom met een vertaalde kop en
Omschrijving als fallback. Een URL…-kolom vóór een HTML…-kolom
levert een link om je eigen HTML.
05Automatische opmaak per datatype
| SQL-type | Weergave | Breedte | Uitlijning |
| int, bigint, smallint | geheel getal in gebruikersnotatie | 100px | rechts |
| decimal, numeric, float, real | 2 decimalen in gebruikersnotatie | 100px | rechts |
| bit, tinyint | vinkje; met een URL… ervoor: Check.svg / Cross.svg | 100px | links |
| datetime, date | jaar 1899 → alleen tijd; 00:00 → alleen datum; anders datum + tijd | 125px | links |
| uniqueidentifier | GUID met accolades, {…} | 150px | links |
| varbinary, image | Not supported | 100px | rechts |
| overig (tekst) | platte tekst, HTML-ge-escaped tenzij HTML… | auto | links |
| alias eindigt op HID | Synergy-nummer 00.029.131 | 80px | links |
De breedte in deze tabel is de standaard; een breedte in de alias (hoofdstuk 04) gaat voor.
Rechtse uitlijning wordt via gegenereerde CSS
(#col<n> { text-align: right; }) toegepast en werkt dus ook in een widget en in
een via JavaScript ingesloten lijst.
06Parameters
Dynamische waarden
Deze tokens worden vóór uitvoering tekstueel vervangen (niet case-sensitive). Handig voor
“mijn”-lijsten en voor periodes zonder dat de gebruiker iets hoeft in te vullen:
where a.EmpID = @userid and a.StartDate >= @STARTOFYEAR
| Token | Waarde |
@USERID, @ME | resource-ID van de ingelogde gebruiker |
@REALUSERID | resource-ID van de échte gebruiker (bij delegatie) |
@USERNAME | inlognaam |
@DIVISION, @DIVISIONGROUP, @COSTCENTER | divisie, divisiegroep, kostenplaats van de gebruiker |
@SECURITYLEVEL | beveiligingsniveau van de gebruiker |
@TODAY, @NOW | vandaag (zonder tijd) en nu (met tijd) |
@STARTOFWEEK, @ENDOFWEEK | maandag en zondag van deze week |
@STARTOFMONTH, @ENDOFMONTH | eerste en laatste dag van deze maand |
@STARTOFYEAR, @ENDOFYEAR | 1 januari en 31 december van dit jaar |
Achter een datumtoken mag een verschuiving: @TODAY-30 (30 dagen terug),
@TODAY+1M (een maand vooruit), @STARTOFYEAR-1Y (begin vorig jaar).
Zonder letter zijn het dagen; M is maanden en Y is jaren.
- Getallen komen er kaal in, tekst en datums tussen quotes. Zet je zelf al quotes om het token
(
'@USERNAME'), dan komen er geen dubbele omheen.
- Datums komen als
yyyy-MM-ddTHH:mm:ss in de query: die vorm leest SQL Server
altijd hetzelfde, ongeacht de taalinstelling van de verbinding.
@P1 … @P99 blijven met rust, en woorden die met een token
beginnen maar doorlopen (@MEMO, @USERIDX) ook.
- Bij Exporteren blijven de tokens staan; er gaat dus geen naam of ID van
jouw omgeving mee in het exportbestand.
- Dezelfde tokens werken in Browser extra criteria / SQL Query van een parameter en
in de standaardwaarde van een parameter.
@P1 … @P99
Echte SQL-parameters. De waarden komen mee in de URL:
CSEasyList.aspx?ID={guid}&P1={GUID van relatie}&P2=2026
-- in de query:
where cmp_wwn = @P1
- EasyList kijkt of de query de tekst
@p1 bevat. Zonder @P1
worden er geen parameters doorgegeven, ook niet als je @P2 gebruikt. Nummer
dus altijd vanaf @P1.
- Een lege waarde wordt
NULL. Vang dat op met bijv.
(@P1 is null or cmp_wwn = @P1).
- Ontbreken verplichte parameters, dan wordt de lijst niet uitgevoerd — melding
Missing: Parameters, of doorsturen naar de parameterpagina.
De gebruiker de parameters laten invullen
| Parameters opvragen? | Gedrag |
| 0 — geen | parameters komen alleen uit de URL |
| 1 — boven EasyList | invoervelden boven de lijst op dezelfde pagina |
| 2 — aparte pagina | knop Parameters, invoer op een aparte pagina |
Daarnaast: Aantal kolommen (1 of 2) voor de indeling van het invoerscherm, en
Toon filter sectie titel (Ja/Nee).
In het grid Parameter details definieer je per parameter:
| Kolom | Betekenis |
| Parameter | het nummer n van @Pn. Leeg = deze regel is een sectiekop |
| Type | 0 Bladeraar · 1 ComboBox · 2 Datum · 3 Bedrag · 4 Geheel getal · 7 Tekst · 5/6 Checkbox horizontaal/verticaal · 8/9 Radiobutton horizontaal/verticaal · -1 Sectie |
| Label | het label voor de gebruiker |
| Term | term-ID voor een vertaald label; 0 = het Label gebruiken |
| Browser | naam van de te gebruiken standaardbladeraar |
| Browser extra criteria / SQL Query | bij een bladeraar het extra where-criterium, bijv. res_id > 0. Bij ComboBox / checkbox / radiobutton een query select Waarde, Description, TermID from Tabel |
| Mandatory | is de parameter verplicht |
| Default value | voorvulwaarde; mag een dynamische waarde of een query zijn |
Valkuilen
- De volgorde van de rijen bepaalt de volgorde op het scherm; de binding
aan
@P1, @P2, … gaat op het Parameter-nummer. Voor
de leesbaarheid houd je ze natuurlijk gelijk.
- ComboBox, checkbox en radiobutton zonder query worden stilzwijgend
genegeerd.
- Twee rijen met hetzelfde parameternummer: de tweede wordt genegeerd.
- Sectierijen (leeg parameternummer) tellen niet mee in de binding.
Een parameter die van een andere afhangt
Zet @P<nummer> in Browser extra criteria / SQL Query en de
parameter volgt die andere parameter. Bij een bladeraar in het criterium, bij een keuzelijst in
de query:
Parameter 1 Bladeraar Relatie CSEasyListParamsCustomers
Parameter 2 Bladeraar Project CSEasyListParamsProjects p.IDCustomer = @P1
Parameter 3 ComboBox Contact select cnt_id, fullname, 0 from cicmpy_person where cmp_wwn = @P1
- Zolang de relatie leeg is, staat de projectparameter uit: geen zoekknop,
een lege keuzelijst en geen “Verplicht”-melding.
- Zodra je een relatie kiest, werkt het scherm zichzelf bij en zie je alleen de projecten van
die relatie.
- Kies je daarna een andere relatie, dan wordt het gekozen project
leeggemaakt. Dat werkt door: hangt 3 aan 2 en 2 aan 1, dan vallen ze allebei weg.
- Je mag alleen naar een lager parameternummer verwijzen. Daarmee is een
kringetje onmogelijk. Verwijs je naar een gelijk of hoger nummer, of naar een parameter die niet
bestaat, dan zegt het parameterscherm dat.
- De waarde komt met de juiste quotes in de query, en een datum in de vorm
yyyy-MM-ddTHH:mm:ss.
- Worden alle parameters via de URL meegegeven, dan komt het parameterscherm er niet aan te pas
en verandert er niets.
Een standaardwaarde die zichzelf bepaalt
In Default value mag naast een vaste tekst ook een dynamische waarde
(@TODAY-30, @STARTOFMONTH, @USERID, …) of een
query, als de waarde met @SELECT begint:
@SELECT top 1 cast(dateadd(month, -1, getdate()) as date) from humres where res_id = @USERID
De query levert één waarde, draait op de Synergy-verbinding en mag zelf ook tokens gebruiken.
Gaat er iets mis, dan blijft het veld leeg en komt er een regel in het Synergy-log: een verkeerde
query legt nooit het scherm plat.
07Instellingen in het verzoek
De meegeleverde verzoekdefinitie is gelabeld; de kolom Vrij veld staat erbij voor het
geval de klant de definitie zelf heeft aangepast. Wijzig de definitie alleen in
overleg — deze velden bepalen de werking.
| Sectie | Label | Vrij veld | Effect |
| Algemeen | Omschrijving | Description | naam van de lijst; onderdeel van de standaardtitel |
| Algemeen | Aangepaste paginatitel | Vrij: Tekst 6 | titel van de lijstpagina; leeg → Easy Lists: <HID> - <omschrijving> |
| Algemeen | Beschrijving van de EasyList | Opm.: Werkstroom | alleen documentatie, wordt niet gebruikt |
| Beveiliging | Medewerker | EmpID | ingevuld → alleen deze medewerker mag de lijst zien |
| Beveiliging | Project | ProjectNumber | ingevuld → alleen projectleden |
| Beveiliging | HR Rol | Vrij: Tekst 1 | ingevuld (≠ -1) → alleen gebruikers met deze rol |
| Beveiliging | Beveiligingsniveau | SecurityLevel | moet ≤ het niveau van de gebruiker zijn |
| Gedrag | Open 1e URL indien 1 record | Vrij: Ja/Nee 2 | bij precies 1 rij direct doorsturen naar de eerste URL…-waarde |
| Gedrag | Bladeren ja/nee | Vrij: Ja/Nee 3 | paging aan |
| Gedrag | Standaard aantal per pagina | Vrij: Nummer 3 | regels per pagina; leeg of 0 → 50 |
| Gedrag | Toon kolomkopjes | Vrij: Nummer 1 | 1 = Ja (standaard), 0 = Nee. Nee verbergt ook de titelregel boven de lijst, en dus het aantal gevonden records |
| Gedrag | Actualiseren na sluiten pop-up | Vrij: Nummer 2 | 1 = Ja: lijst herladen na het sluiten van een URLW…-pop-up |
| Gedrag | Bulkacties toestaan | Vrij: Ja/Nee 1 | vinkjeskolom en actieknoppen aan (hoofdstuk 12); een lijst met bulkacties is niet als widget te kiezen |
| Aantal gevonden | Toon aantal records | Vrij: Ja/Nee 4 | aantal boven de lijst tonen |
| Aantal gevonden | Tekst voor aantal | Vrij: Tekst 4 | eigen tekst; leeg → Totaal aantal records |
| Sorteren | Sorteren toestaan | Vrij: Tekst 5 | N = Nee · JA = oplopend · JD = aflopend |
| Sorteren | Standaard sorteren op kolomnummer | Vrij: Nummer 5 | kolomnummer, van links naar rechts geteld over de zichtbare kolommen |
| Geen gegevens | Toon ‘Geen gegevens gevonden’ | Vrij: Tekst 7 | Y = Ja · N = Nee · C = Aangepast |
| Geen gegevens | Toon in resultaat-lijst | Vrij: Ja/Nee 5 | melding in het grid i.p.v. erboven |
| Geen gegevens | Aangepaste melding | Vrij: Tekst 8 | eigen melding bij C; leeg → geen melding |
| SQL | Connectie | Vrij: Tekst 3 | naam van de connectie |
| SQL | SQL Query | Opm.: Verzoek | de query |
| Parameters | Parameters opvragen? | Vrij: Tekst 9 | 0 / 1 / 2 |
| Parameters | Aantal kolommen | Vrij: Nummer 4 | 1 of 2 |
| Parameters | Toon filter sectie titel | Vrij: Tekst 10 | Y / N |
| Parameters | Parameter details | XMLData | het parametergrid |
| Algemeen | Categorie | Vrij: Tekst 11 | optioneel; het ID van een categorie (zie hieronder) |
Niet meer in gebruik, maar nog aanwezig in oudere definities: Globe administratie
(oud) Vrij: Tekst 2. Gebruik in plaats daarvan de keuze Globe<nr> in
Connectie.
Onder de velden staan twee knoppen die EasyList zelf op het verzoek zet:
Acties (de bulkacties, hoofdstuk 12) en Totalen (totalen en
subtotalen, hoofdstuk 13).
Tellen van het kolomnummer
URL…- en TermID…-kolommen zijn onzichtbaar en tellen dus niet mee.
Tel van links naar rechts alleen de kolommen die de gebruiker daadwerkelijk ziet.
Categorie
In Vrij: Tekst 11 zet je het ID van een categorie. De categorieën
zijn van de hele Easy-suite — Easy Script en Easy Verify gebruiken dezelfde lijst — en
worden onderhouden onder Overzichten → Easy Menu → Categorieën (zie
Easy Menu). Hoe je het veld op het verzoektype inricht, bepaal je zelf; EasyList
leest het ID en zoekt de omschrijving erbij.
Schrijf het ID zonder accolades
Het veld is tekst, dus de vorm die erin staat moet precies de vorm zijn die jouw keuzelijst
teruggeeft: 13c0d4ee-f2d5-4e30-aec0-56fd4805e759, niet {13c0d4ee-…}.
Let daarop in de query achter het veld — geef je de kolom ID ruw terug, dan
maakt Synergy er in een keuzelijst {…} van en herkent het veld zijn eigen waarde niet
meer. Casten naar tekst levert de goede vorm, zoals in de selectie hieronder; de import schrijft
dezelfde vorm.
Bij het lezen van de categorie (kolom, filter, export) maakt het niet uit of er
accolades omheen staan; het is puur het veld op het verzoek dat exact moet matchen.
Selectie voor Vrij: Tekst 11
select '' as ID, '' as Description
union all
select cast(ID as varchar(36)) as ID, Description
from CSEasyMenuCategories
order by Description
Een categorie heeft geen invloed op de werking van de lijst. Hij dient om te groeperen: in het
overzicht staat hij als kolom en als filter, en op de exportpagina
kun je er op filteren. Staat er iets in het veld dat geen bestaand categorie-ID is, dan blijft de
kolom gewoon leeg. Bij het exporteren gaan het ID én de omschrijving mee; bij het
importeren wordt eerst op ID gezocht, dan op een precies gelijke omschrijving, en
anders wordt de categorie aangemaakt.
08Parameters in de URL
| Parameter | Effect |
| ID=<guid> | de EasyList, op verzoek-GUID |
| HID=<nummer> | de EasyList op verzoeknummer — 00.029.131 of 29131 |
| P1=… P2=… | waarden voor @P1, @P2, … |
| Title=… | alternatieve paginatitel; gaat vóór Aangepaste paginatitel |
| noheader=1 | verbergt de paginakop én de knoppenbalk |
| notitle=1 | verbergt de paginakop en de knop Sluiten, maar houdt de knoppenbalk; de lijst wordt net als bij js=1 niet als 'laatst bezochte pagina' onthouden |
| nocaption=1 | verbergt de kolomkoppen én de titelregel boven de lijst, en dus het aantal records |
| noparam=1 | vraagt geen parameters, ook als het verzoek dat wel wil |
| js=1 | markeert de aanroep als script-aanroep: de lijst wordt niet als ‘laatst bezochte pagina’ onthouden en komt dus niet ongewenst terug na het sluiten van een pagina |
| inscript=1 jquery=1 | idem, voor insluiting via EasyScript / jQuery |
| IsModal=1 | de lijst draait in een modale pop-up; wordt doorgegeven aan alle links in de lijst |
| JSON=1 | uitvoer als JSON in plaats van HTML |
| Excel=1 | uitvoer als .xlsx-download |
09Andere uitvoervormen
De paginakop van een lijst heeft de knoppen Definitie (naar het onderliggende
verzoek), Exporteren: Excel, Afdrukbaar, widget toevoegen aan
de workspace en Favorieten.
Excel. Levert een .xlsx met titel, administratie, gebruiker en de
gebruikte parameters in de kop. Paging wordt genegeerd: alle rijen gaan mee. Het werkblad toont
dezelfde kolommen als het scherm: het label uit de alias als kop, vertaald als er een term-ID bij
staat en zonder het achtervoegsel HID. De hulpkolommen URL… en
TermID… en de selectiekolom CHKKEY… gaan niet mee; een
TermID…-kolom vertaalt wel eerst de tekstwaarde van de kolom erachter, net als op het
scherm. Zijn er totalen ingericht (hoofdstuk 13), dan staan de groepstotalen en het totaal generaal als extra
regels in het werkblad — vet met een lijn erboven, met een witregel na het totaal van het buitenste
niveau, precies als op het scherm. Transportregels komen er niet in, Excel heeft geen pagina's.
Afdrukken. Afdrukbaar rendert alle rijen zonder paging.
JSON. &JSON=1 geeft een JSON-array van objecten. Ook hier
gelden de ruwe aliassen als property-namen, zonder opmaak; datums komen als
yyyy-MM-ddTHH:mm:ss. Bij een fout of leeg resultaat komt er een object met een
error-tekst terug. Totaalregels zitten er nooit in: JSON is voor afnemers die regels
als data lezen.
Favoriet. Bewaart de lijst inclusief de actuele parameters en sortering.
Widget. Via Widget toevoegen op de lijstpagina, of op het dashboard
onder categorie Easy: kies EasyList, geef de widget een titel, selecteer de
EasyList, vul eventueel de parameters, kies een icoon en de lay-outopties.
Waarde uit. Heeft de lijst parameters, dan staat er in de parameterpopup van
de widget per parameter een keuze:
| Waarde uit | Betekenis |
| Waarde | de waarde die je hier invult (het gedrag van vroeger) |
| URL parameter | P<nummer> uit de URL van de pagina waar de widget op staat |
| Standaardwaarde | de standaardwaarde uit de definitie, inclusief @TODAY-achtige waarden |
Bij URL parameter en Standaardwaarde hoef je in de widget niets in te vullen:
het invoerveld staat uit en de parameter is daar niet verplicht. Zo maak je een workspace waarop
meerdere EasyList-widgets hun waarde uit dezelfde URL halen, bijvoorbeeld
Home.aspx?ID=1057&P1=PROJ-0042. Let op: dit gaat op nummer.
Staan er twee lijsten op één workspace waarvan @P1 bij de een een project en bij de
ander een relatie is, dan krijgen ze allebei dezelfde waarde. Ontbreekt de parameter in de URL,
dan meldt de widget Ontbrekend: Parameters: P1.
Heeft de lijst helemaal geen parameterregels — de query gebruikt
@P1 maar in Parameter details staat niets, omdat de waarden altijd uit de
URL komen — dan vraagt de widget ook niets meer. Je kiest de Easy List, bewaart, en de widget
leest P1, P2, … uit de URL van de pagina waar hij op staat. Er valt dan
immers niets te kiezen bij Waarde uit. Staat de waarde niet in de URL, dan blijft de
widget niet stil leeg maar meldt hij Ontbrekend: Parameters.
10Importeren en exporteren
Met Exporteren kies je één of meer EasyLists en download je ze als XML-bestand;
met Importeren lees je dat bestand weer in. Zo zet je een op ontwikkel of test
gemaakte lijst over naar de live-omgeving met behoud van hetzelfde ID, zodat bestaande links,
favorieten en widgets blijven werken. De bulkacties met hun parameters (hoofdstuk 12) en de totalen (hoofdstuk 13)
gaan mee.
Bij het importeren worden de bulkacties en de totalen van de doellijst eerst helemaal
verwijderd en daarna opnieuw aangemaakt uit het bestand, met nieuwe ID's. De ID's uit het
bestand worden dus niet hergebruikt. Dat is met opzet: pas je in het XML-bestand het ID van de lijst
aan om er een kopie van te maken, dan zouden de acties en totalen anders van de oorspronkelijke
lijst náár de kopie verhuizen, en was je ze bij de bronlijst kwijt. Gevolg van dit vervangen: een
bestand zonder acties of totalen maakt de doellijst ook leeg op die punten.
11Een EasyList in een ander verzoektype
Bij het bewerken van een ander verzoektype
(Verzoeken → Inrichting → Verzoektypen) staat onder de veldenlijst een knop
Toevoegen: EasyList. Die opent de EasyScript-sectiewizard en voegt een sectieveld
toe met de JavaScript die de gekozen EasyList in dat verzoek insluit; de sectiekop krijgt
automatisch de titel van de EasyList. Deze functie vereist dat EasyScript geïnstalleerd is.
12Bulkacties
Met bulkacties zet je knoppen boven de lijst waarmee de gebruiker één bewerking op alle
aangevinkte regels uitvoert: verzoeken goedkeuren, een status zetten, een veld bijwerken. De
bewerking zelf loopt via EasyVerify: per aangevinkte regel wordt een stored
procedure aangeroepen die de _CSEasy…-tabellen vult, en daarna voert EasyVerify die
tabellen uit — precies zoals bij de EasyVerify-actie Tabel(len) uitvoeren. Een
procedure die voor EasyVerify is geschreven, werkt hier zonder aanpassing. Bulkacties vereisen
daarom de module EasyVerify in de licentie (hoofdstuk 14).
Inrichten in vier stappen
- Bulkacties toestaan aanzetten op de lijstdefinitie (
Vrij: Ja/Nee 1, hoofdstuk 07).
- Sleutelkolom in de query. Geef de kolom met de sleutel van de regel een alias die
begint met
CHKKEY, bijvoorbeeld a.ID as CHKKEYID. Die kolom wordt de
vinkjeskolom, met in de kop een vinkje voor alles-selecteren. De waarde is wat de actie als sleutel
meekrijgt; toon hem elders nog een keer als de gebruiker hem moet zien. De vinkjeskolom telt mee als
zichtbare kolom bij het kolomnummer voor sorteren en totalen.
- Acties inrichten via de knop Acties op de lijstdefinitie.
- Testen op de lijstpagina: regels aanvinken, knop, bevestigen.
Een actie
| Veld | Betekenis |
| Knoptekst, Term:ID, Achtervoegsel | de knoptekst, desgewenst uit een term |
| Volgorde | volgorde van de knoppen boven de lijst |
| Geactiveerd | uit = knop wordt niet getoond |
| Rol | alleen gebruikers met een van deze rollen zien de knop; leeg = iedereen die de lijst mag zien |
| Bevestigingsvraag (+ Term ID) | de vraag vóór het uitvoeren; leeg = standaardvraag met het aantal aangevinkte regels |
| Resultaatmelding | sjabloon voor de melding na afloop; {{successcount}} en {{errorcount}} worden vervangen door de aantallen, bijv. {{successcount}} verzoek(en) goedgekeurd. Leeg = x gelukt, y niet gelukt |
| Fouten tonen | aan = de foutteksten van de mislukte regels worden aan de gebruiker getoond; uit = alleen de aantallen, de details staan in het Synergy-foutenlog |
| Stored procedure | keuzelijst met alle procedures in de database |
| Tabel 1 … 5 | de _CSEasy…-tabellen die na de procedure in volgorde worden uitgevoerd |
| Parameters | verschijnen automatisch zodra je een procedure kiest, met een voorstel per parameter |
Per parameter vul je een vaste waarde in of een van de specials. Een special mag ook in een langere
tekst staan; dan wordt hij daarin vervangen.
| Special | Waarde |
| @_Key | de aangevinkte sleutel (de CHKKEY…-kolom) |
| @_SessionID | de sessie-GUID waarmee de procedure de _CSEasy…-tabellen vult |
| @_CurrentUser | het resource-ID van de gebruiker die de actie uitvoert |
Let op
@_SessionID en @_CurrentUser heten in EasyVerify precies zo. Maar
@ID werkt hier niet als sleutel — dat is een EasyVerify-conventie voor de
kaartpagina's; gebruik @_Key. Een verkeerde special levert een SQL-conversiefout op die
alleen in het foutenlog staat (of op het scherm met Fouten tonen).
Voorbeeld: aangevinkte verzoeken goedkeuren
create procedure dbo.spCSEasyList_Actions_GoedkeurenVerzoeken(@ID uniqueidentifier, @SessionID uniqueidentifier)
as
begin
insert into _CSEasy_Request (_BCAction, _Session, ID, Status)
values (1, @SessionID, @ID, 1) -- 1 = bewerken; Status 1 = goedgekeurd
end
Actie: procedure dbo.spCSEasyList_Actions_GoedkeurenVerzoeken, parameters
@ID = @_Key en @SessionID = @_SessionID, Tabel 1 = _CSEasy_Request.
EasyVerify werkt de verzoeken bij en bouwt de workflow opnieuw op. De _CSEasy…-tabellen en
hun kolommen staan beschreven in de EasyVerify-quickstart.
Wat de gebruiker ziet
De gebruiker vinkt regels aan en klikt op de knop. Na de bevestigingsvraag wordt de actie per regel
uitgevoerd, elke regel in een eigen EasyVerify-sessie: een regel die mislukt, houdt de andere niet
tegen. Daarna volgt de resultaatmelding en wordt de lijst herladen. Bulkacties werken alleen op de
volledige lijstpagina, niet in de widget, bij de Excel-export, bij afdrukken of in de JSON-uitvoer.
13Totalen en subtotalen
Een lijst kan een totaal generaal krijgen en subtotalen per groep,
tot drie niveaus diep (bijvoorbeeld per debiteur, daarbinnen per medewerker). Je richt het in via de
knop Totalen op de lijstdefinitie; de configuratie staat los van de query, op
kolomnummer.
Kolomnummers tel je van links naar rechts over de zichtbare kolommen, precies zoals
bij de standaard sorteerkolom (hoofdstuk 07): URL…- en TermID…-kolommen tellen niet mee,
een CHKKEY…-kolom wel. Op de onderhoudspagina's kies je de kolom uit een lijst met nummer,
kop en type, dus tellen hoeft alleen als de query niet zonder verplichte parameters kan draaien.
Totaalkolommen
| Veld | Betekenis |
| Kolom | de kolom die getotaliseerd wordt; één regel per kolom |
| Aggregaat | Som, Aantal, Gemiddelde, Minimum, Maximum. Som en gemiddelde alleen op getalkolommen |
| Meetellen | of lege waarden (NULL) meetellen, zie hieronder |
| Decimalen | leeg = afgeleid van de kolom: geheel getal 0, decimaal 2, gemiddelde 2, aantal 0 |
| Aggregaat | Meetellen uit (standaard, zoals SQL) | Meetellen aan |
| Som | NULL telt niet mee | idem, vinkje doet niets |
| Aantal | telt de regels met een waarde | telt alle regels |
| Gemiddelde | som / regels met een waarde | som / alle regels |
| Minimum, Maximum | NULL wordt genegeerd | idem, vinkje doet niets |
Tien regels, negen met 10 en één leeg: gemiddelde 10 met meetellen uit, 9 met meetellen aan.
De keuzelijst toont alleen kolommen die nog géén totaal hebben. Bewaar je een totaalkolom terwijl
er nog geen enkel niveau is, dan maakt EasyList niveau 0 (totaal generaal) er vanzelf
bij: zonder niveau levert een totaalkolom namelijk geen enkele totaalregel op.
Niveaus
| Veld | Betekenis |
| Niveau | 0 = totaal generaal (zonder kolom); 1 t/m 3 = subtotalen, van buiten naar binnen |
| Kolom | de groepeerkolom: elke andere waarde begint een nieuwe groep |
| Kopje (+ Term ID) | de tekst van de totaalregel, met placeholders |
| Aantal tonen | het aantal regels van de groep tussen haakjes achter het kopje |
Placeholders in het kopje: {value} = de waarde van de groepeerkolom, {4} =
de waarde van kolom 4 uit de eerste regel van de groep (opgemaakt zoals in de lijst),
{count} = het aantal regels. Een term mag dezelfde placeholders bevatten. Voorbeelden:
Totaal voor debiteur {4}:, Overall totaal:.
Elk niveau kan maar één keer voorkomen en op dezelfde kolom groeperen als een ander niveau heeft
geen zin: de keuzelijsten laten daarom alleen de vrije niveaus en kolommen zien. Zijn alle vier de
niveaus in gebruik, dan zegt de pagina dat.
Werking
- Alle totalen worden berekend over de volledige resultaatset, na parameters, niet
alleen over de getoonde pagina.
- Een groepering dwingt de sortering: eerst op de groepeerkolommen, daarbinnen op
wat de gebruiker aanklikt. Anders zouden groepen versnipperd raken. Dat gebeurt ook als
sorteren op de lijst uitstaat; die instelling gaat alleen over de sorteerknoppen in de
kolomkoppen.
- Totaalregels staan vet met een lijn erboven, en na het totaal van het buitenste
groepsniveau komt een witregel, zodat de groepen los van elkaar staan. Dat geldt op
het scherm én in de Excel-export. Transport- en subtotaalregels op een paginagrens krijgen die
witregel niet.
- Het groepstotaal staat na de laatste regel van de groep. Loopt een groep door over een
paginagrens, dan komt onderaan de pagina Subtotaal: met de stand tot en met die
pagina, en bovenaan de volgende pagina hetzelfde bedrag als Transport:. Het totaal
generaal staat op elke pagina onderaan.
- In Excel komen de groepstotalen en het totaal generaal als regels mee (hoofdstuk 09); in JSON niet; in de
widget en in een ingesloten lijst (
js=1, inscript=1, jquery=1)
wel. De opmaak van de totaalregels zit in de regel zelf, dus die blijft ook in een vreemde pagina
staan. In demomodus worden de totalen over de getoonde regels berekend.
- Een
URL…-kolom vóór een getotaliseerde kolom wordt in totaalregels genegeerd;
totaalregels hebben in deze versie geen links.
- Klopt de configuratie niet (kolomnummer bestaat niet, som op een tekstkolom), dan wordt dat totaal
overgeslagen en ziet een beheerder een notificatie boven de lijst; de lijst zelf blijft werken.
Voorbeeld
Query met kolommen ID, Bedrag, Relatie,
Debiteurnummer (kolom 1 t/m 4):
| Totaalkolommen | Niveaus |
| kolom 1 · Aantal | 0 · Overall totaal: |
| kolom 2 · Som | 1 · kolom 3 (Relatie) · Totaal voor debiteur {4}: |
Resultaat: na elke relatie een vetgedrukte regel Totaal voor debiteur 12345: met het aantal
onder ID en de som onder Bedrag, en onderaan Overall totaal:. Ook de totalen
gaan mee bij im-/export (hoofdstuk 10).
14Demo en licentie
Zonder geldige EasyList-licentie draait de tool in demomodus: maximaal 10 rijen (bij minder dan
10 rijen de helft), met rode meldingen onder de lijst en het werkelijke aantal records. De lijst
blijft verder volledig werken, zodat je alles kunt uitproberen. Loopt de licentie bijna af, dan
komt er een notificatie boven de lijst.
Bulkacties en de licentie
Bulkacties (hoofdstuk 12) vallen onder de licentie van EasyVerify. Zit die
module niet in de licentie, dan toont de lijst de actieknoppen niet en meldt de pagina
Bulkacties dat de functionaliteit niet werkt; inrichten blijft mogelijk. Een net
geïnstalleerde licentie is na opnieuw inloggen actief.
15Als het niet werkt
| Symptoom | Oorzaak |
| Je wordt doorgestuurd naar Instellingen | er is geen verzoektype ingesteld (Installatie → Per module) |
| Lege pagina of Geen toegang | het verzoek staat nog op EasyList aangemaakt of Concept, of de beveiligingsvelden sluiten je uit |
| The following data is missing: SQL Query | het veld SQL Query is leeg |
| … missing: Connection String | Connectie is leeg of verwijst naar een niet-bestaande connectie |
| Not supported: commit tran | de query bevat commit … tran |
| Missing: Parameters | verplichte parameters ontbreken en Parameters opvragen? staat op 0 |
| Een kolom is onzichtbaar | de alias begint met URL of TermID |
| Een link opent in het verkeerde venster | de vierde letter van de URL…-alias |
| Getal toont als 29131 i.p.v. 00.029.131 | de alias eindigt niet op HID |
| HTML wordt letterlijk getoond | de alias begint niet met HTML, of de kolom is geen tekstkolom |
| Geen actieknoppen boven de lijst | Bulkacties toestaan staat uit, de query heeft geen CHKKEY…-kolom, de actie is niet geactiveerd of niet voor jouw rol, EasyVerify zit niet in de licentie, of je kijkt in een widget/export |
| Bulkactie: x gelukt, y niet gelukt zonder details | zet Fouten tonen aan op de actie, of kijk in het Synergy-foutenlog; vaak een verkeerde special (@ID in plaats van @_Key) of een parametertype dat niet past |
| Melding Totalen: kolom n bestaat niet | de query is gewijzigd en het kolomnummer verschoven; kies de kolom opnieuw op de pagina Totalen |
| Totalen staan er niet | er is geen totaalkolom ingericht, of je kijkt in de JSON-uitvoer |
Deel twee
EasyScript
Je eigen HTML en JavaScript op de standaardpagina's van Synergy: een extra sectie
op de relatiekaart, een tabblad met vier onderliggende secties, een knop in de knoppenbalk, een
EasyList in een iframe op de medewerkerkaart. Zonder Synergy-code aan te passen en zonder
deploy.
De kern: een sectie = een pagina + een stuk script, en dat
script mag placeholders gebruiken die EasyScript vult met de gegevens van het record dat op de
pagina staat.
01Het menu
Alles zit onder Menu: Easy by DataKings (Menu.aspx?Layout=CSEasyMenu).
| Tabblad | Menu-item | Wat |
| Invoer | Easy Script → Sectie | een nieuwe sectie |
| Invoer | Easy Script → Importeren | secties uit een exportbestand inlezen (hoofdstuk 09) |
| Overzichten | Easy Script → Overzicht | alle secties, met filters |
| Inrichting | Easy Script → Importeren / Exporteren | hoofdstuk 09 |
| Inrichting | Easy Menu → Licentie | Easy Menu → Licentie |
Gebruikers zonder menu kunnen deze pagina's als favoriet opnemen. Er is geen instellingenpagina
voor EasyScript zelf — alles zit in de sectie. Secties aanmaken, bewerken, vertalen, im- en
exporteren kan alleen een beheerder; anderen zien de onderhoudspagina's
read-only.
02Je eerste sectie
- Easy by DataKings → Invoer → Easy Script → Sectie.
- Kies bij Pagina de Synergy-pagina waar de sectie moet komen (hoofdstuk 03).
- Vul een Titel in en kies Type (hoofdstuk 04).
- Zet je HTML/JavaScript in het veld Script, of laat het schrijven met een van de Toevoegen-knoppen (hoofdstuk 06).
- Zet Geactiveerd aan en bewaar.
- Open de betreffende Synergy-pagina en controleer het resultaat.
Staat de sectie op de verkeerde plek op de kaart? De positie en zichtbaarheid van de
gegenereerde sectie regel je met de standaard onderhoudsfunctie van de kaart
(Aanpassen / Customize) in Synergy zelf, niet in EasyScript.
03Ondersteunde pagina's
25 pagina's. Dit is de complete lijst — een pagina die er niet in staat kan niet gebruikt
worden. De kolom Business component is de naam waarmee
{{Property}}-placeholders worden opgelost en waarop de property-criteria (hoofdstuk 07)
in EasyVerify worden gezocht.
| Keuze bij Pagina | ASPX | Soort | Business component |
| Relatie | CRMAccountCard.aspx | kaart | Associates |
| Relatie (Bewerken) | CRMAccountMaint.aspx | bewerken | Associates |
| Contactpersoon | CRMContactCard.aspx | kaart | Contact |
| Contactpersoon (Bewerken) | CRMContactMaint.aspx | bewerken | Contact |
| Persoon | CRMPersonAccountCard.aspx | kaart | Associates |
| Persoon (Bewerken) | CRMPersonAccountMaint.aspx | bewerken | Associates |
| Medewerker | HRMResourceCard.aspx | kaart | Employee |
| Medewerker (Bewerken) | HRMResource.aspx | bewerken | Employee |
| Project | ProCard.aspx | kaart | PRProject |
| Project (Bewerken) | ProEdit.aspx | bewerken | PRProject |
| Artikel | LogItemCard.aspx | kaart | Item |
| Artikel (Bewerken) | LogItem.aspx | bewerken | Item |
| Serienummer | LogItemNumber.aspx | kaart | ItemNumber |
| Verkoopkanskaart | CRMOpportunityCard.aspx | kaart | Opportunities |
| Verkoopkanskaart (Bewerken) | CRMOpportunityMaint.aspx | bewerken | Opportunities |
| Rol - Lid | SysRoleMember.aspx | bewerken | HRRole |
| Verzoek | WflRequest.aspx | kaart (gedraagt zich als zoekpagina) | Request |
| Relaties zoeken (Zoeken) | CRMSearch.aspx | zoeken | Associates |
| Zoeken medewerkers (Zoeken) | HRMResourceSearch.aspx | zoeken | Employee |
| Artikelen zoeken (Zoeken) | LogSearch.aspx | zoeken | Item |
| Documenten zoeken (Zoeken) | DocSearch.aspx | zoeken | BDDocument |
| Projecten (Zoeken) | ProSearch.aspx | zoeken | PRProject |
| Verzoeken zoeken (Zoeken) | WflSearch.aspx | zoeken | Request |
| Workspace (Workspace) | Home.aspx | workspace | Workspaces |
| Easy List | CSEasyList.aspx | kaart (gedraagt zich als zoekpagina) | Request |
Het achtervoegsel zegt wat voor soort pagina het is:
- geen achtervoegsel — de kaart, weergavemodus
- (Bewerken) — de onderhoudspagina; je script is actief in de bewerkmodus
- (Zoeken) — een zoekpagina; alleen type Script, criteria niet beschikbaar
- (Workspace) — de workspace/homepage; alleen Script of Widget
Kaart en onderhoudspagina zijn losse regels: wil je een sectie in beide modi, dan maak je twee
secties aan.
Twee uitzonderingen
Verzoek (WflRequest.aspx) en Easy List
(CSEasyList.aspx) hebben geen achtervoegsel maar gedragen zich als zoekpagina: ook
daar is alleen type Script beschikbaar — je plaatst dus ruw script, geen
kaartsectie. Criteria zijn er wél.
04Types
| Type | Code | Wat het doet | Beschikbaar op |
| Sectie | S | een echte kaartsectie, met titel, zoals Synergy ze zelf ook heeft | kaart- en bewerkpagina's |
| Tab | T | een sectie met tabbladen; de tabbladen zijn secties die je aan deze tab koppelt | kaart- en bewerkpagina's |
| Script | J | ruw script, direct in het formulier geplaatst, zonder sectie eromheen | alle pagina's |
| Widget | W | als Script, maar bedoeld voor de workspace | alleen Workspace |
Welke types de dropdown aanbiedt hangt af van de gekozen pagina:
| Pagina | Beschikbare types |
| kaart en (Bewerken) | Sectie, Tab, Script |
| Verzoek, Easy List, alle (Zoeken) | alleen Script |
| Workspace | Script, Widget |
Tabbladen ordenen. Maak eerst een sectie van type Tab. Maak daarna
secties van type Sectie en zet bij Moeder: Tab de tab waaronder ze moeten
hangen. In de tab-sectie staat een lijstje met pijltjes om de volgorde te bepalen. Een tab zonder
zichtbare onderliggende secties wordt helemaal niet gerenderd.
Rij: Volledig zet de sectie in een eigen kaartrij over de volle breedte, in
plaats van in de standaardkolom. Alleen beschikbaar voor een losse sectie (geen tabblad) op een
kaart- of bewerkpagina.
Toon titel bepaalt of de kop van een tab-sectie getoond wordt.
Volgorde op de kaart. Eerst worden alle tabs gerenderd, daarna de losse secties,
alfabetisch op titel; de kolom Volgorde geldt alleen voor de tabbladen binnen een tab. Een
uitgeschakelde tab verbergt al zijn onderliggende secties. Een tab met onderliggende secties kan niet
verwijderd worden (de knop staat uit); in het lijstje op de tab kun je per tabblad
Geactiveerd omschakelen.
05Het script en de placeholders
Het scriptveld is vrije HTML/JavaScript. jQuery en de scriptfuncties van EasyList (de pop-up voor
URLW…-links en het ophalen van lijsten, hoofdstuk 06) zet EasyScript zelf al op de
pagina, dus die kun je gebruiken.
Twee soorten placeholders worden vóór het renderen vervangen:
- {{KeyValue}}
- de sleutelwaarde van het record op de pagina — op de medewerkerkaart het
res_id, op de relatiekaart het cmp_wwn
- {{<PropertyName>}}
- de waarde van die property uit de business component van de pagina, bijv.
{{FullName}}, {{City}}, {{Status}}
{{KeyValue}} komt uit het sleutelveld van de pagina, of anders uit de URL. {{<PropertyName>}} wordt opgelost door de business component van de
pagina in editmodus te openen op de sleutelwaarde en die property uit te lezen. Waarden worden
geformatteerd naar het type:
| Type | Weergave |
| Boolean | 1 of 0 |
| Datum | in de notatie van de gebruiker |
| Guid | met accolades, {…} |
| Getal / percentage / seconden | 2 decimalen in gebruikersnotatie |
| Binary / Picture | leeg |
| overig | de tekstwaarde |
Quotes worden automatisch geëscaped als de placeholder tussen enkele of dubbele
quotes staat: '{{FullName}}' levert 'O\'Brien'. Het teken waartussen de
placeholder staat wordt geëscaped, net als backslashes en regeleindes in de waarde.
{{KeyValue}} wordt nooit geëscaped, en staat de placeholder niet tussen quotes, dan
gebeurt er niets. Dit is JavaScript-escaping: staat de placeholder in een HTML-attribuut
(title="{{Description}}"), dan hoort daar HTML-encoding; dat onderscheid maakt
EasyScript niet.
Een onbekende property levert stilzwijgend een lege waarde op — een typefout in een
propertynaam zie je dus niet als foutmelding, alleen als leeg resultaat. Kan de business component
zelf niet geopend worden op de sleutelwaarde, dan blijven alle {{…}}
letterlijk in de uitvoer staan.
Op een bewerkpagina zonder sleutelwaarde (dus bij een nieuw record) wordt
{{<PropertyName>}} niet vervangen door een waarde maar door een
SysGet('<PropertyName>')-aanroep, zodat je de actuele waarde uit het formulier
leest in plaats van uit de database.
06De generatoren
Onder het scriptveld staan Toevoegen-knoppen die het script voor je schrijven. Ze openen
een modaal scherm; na Genereren: Script staat het resultaat in je sectie en kun je
het daar nog aanpassen. Alle generatoren plakken hun code achter wat er al in het
scriptveld staat.
| Knop | Wat je krijgt | Waar |
| Toevoegen: Easy List | een EasyList in je sectie, in een iframe of een div | zie hieronder |
| Toevoegen: Knoppen | een eigen knoppenbalk in je sectie | type Sectie, Script en Widget |
| Toevoegen: Knoppen op knoppenbalk | extra knoppen op de bestaande knoppenbalk van de pagina | type Sectie, Script en Widget |
| Toevoegen: Monitor items | extra tegels in de monitor van de kaart | kaarten met een monitor |
| Toevoegen: Monitor (Vervangen) | een bestaande monitortegel een andere link of tekst geven | kaarten met een monitor |
Een sectie van type Tab heeft zelf geen script en dus ook geen generatoren. De knoppen
zijn er alleen voor beheerders.
Toevoegen: Easy List
Zet een EasyList in je sectie. Voorwaarde: de EasyList gebruikt @P1 voor de primaire
sleutel van de pagina — res_id bij medewerkers, cmp_wwn bij
relaties, enzovoort.
Je kiest de EasyList en het type: iframe of div.
Binnen tabbladen adviseren wij een iframe. De generator kijkt zelf welke
@P1…@P99 in de query voorkomen, vult @P1 met
{{KeyValue}} en zet voor de overige parameters een
/* TODO check parameter */ klaar. De parameterdetectie stopt bij het eerste gat:
@P1 en @P3 zonder @P2 levert alleen @P1 op.
Onder Easy List: Opties vink je aan:
| Optie | Effect |
| Verberg titel en knoppen | &noheader=1 in de URL |
| Verberg titel | ¬itle=1 |
| Geen parameters opvragen | &noparam=1 |
| Json uitvoer | &json=1 |
| Lazy loading | standaard aan: de lijst wordt pas opgehaald als de sectie in beeld komt, en lijsten op dezelfde pagina één voor één (zie hieronder) |
&js=1 wordt altijd meegegeven: EasyList weet dan dat de aanroep uit een script
komt en laat bijvoorbeeld de bulkactieknoppen weg.
Gegenereerd resultaat, met lazy loading
<script>
(function() {
var P1 = '{{KeyValue}}';
var Url = 'CSEasyList.aspx?ID={…}&js=1&noheader=1&P1=' + P1;
CSEasyListLoadFrame('iframeEL…', Url);
})();
</script>
<iframe STYLE="width: 99%; height: 300px;" id="iframeEL…" frameborder="0"></iframe>
Bij div staat er CSEasyListLoad('divEL…', Url); en krijgt de div een
minimale hoogte, zodat hij op de pagina een vlak heeft dat “in beeld” kan komen.
Lazy loading
- De lijst wordt pas opgehaald als de sectie in beeld komt — net ervoor, zodat hij er
meestal al staat als de gebruiker ernaartoe scrolt. Een sectie onder de vouw of op een tabblad dat
niet openstaat, kost niets tot de gebruiker er komt, en vaak dus nooit.
- Staan er meerdere lijsten op een kaart, dan worden ze één voor één opgehaald in plaats van
allemaal tegelijk. Synergy verwerkt de verzoeken van één gebruiker toch na elkaar; zo staat de
eerste lijst er meteen, in plaats van alles pas aan het eind. Ook de eigen secties van Synergy,
zoals Verzoeken en Documenten, hoeven dan niet achter een rij lijsten te wachten.
- Een oudere browser die dit niet ondersteunt, haalt de lijsten meteen op, maar nog steeds één
voor één.
- Vink je Lazy loading uit, dan krijg je het script van vroeger: de lijst wordt direct
bij het laden van de pagina opgehaald.
- Bestaande secties veranderen niet vanzelf. Wil je een oudere sectie ook zo laten laden,
genereer het script dan opnieuw, of vervang de regel die de lijst ophaalt door
CSEasyListLoadFrame('<id van de iframe>', Url); of
CSEasyListLoad('<id van de div>', Url);.
Waar de knop staat
Deze knop is alleen zichtbaar als het EasyList-verzoektype is ingesteld (EasyList →
Instellingen), en niet bij type Script op kaart-, bewerk- en workspacepagina's (daar alleen
bij Sectie en Widget; op Verzoek juist wel bij Script), niet op
de pagina Easy List zelf en niet op zoekpagina's. Op Verzoek en
Easy List laat de generator de <script>-tags weg en zet hij het iframe-
of div-element als commentaarregel klaar.
Toevoegen: Knoppen
Maakt een eigen knoppenbalk (<div class="exButtonBar">) in je sectie. Per
knop:
| Veld | Betekenis |
| Titel | de tekst op de knop, bijv. nieuw document |
| URL | de Synergy-pagina. Laat het stuk t/m …/docs/ weg. Met de knop Toevoegen: ID zet je de sleutel van de pagina erin, bijv. CSEasyList.aspx?id={081afff1-…}&P1={{KeyValue}} |
| Javascript | een JavaScript-functie die al op de pagina beschikbaar is. Ook hier kan {{KeyValue}} |
Je kiest per set knoppen de uitlijning, links of rechts.
Toevoegen: Knoppen op knoppenbalk
Zelfde invoer, ander resultaat: de knoppen worden met jQuery toegevoegd aan de
bestaande knoppenbalk van de pagina
($('.exButtonBar').first()), zodat ze naast Sluiten/Bewaren staan in plaats van in je
eigen sectie. Uitlijning is hier niet instelbaar. Deze generator levert alleen de jQuery, zónder
<script>-tags; zet die er zelf omheen als je sectie ze nog niet heeft.
Toevoegen: Monitor items
Zet extra tegels in de monitor van de kaart, naast die van Synergy zelf. Per
tegel:
| Veld | Betekenis |
| Titel | de tekst onder het icoon; verplicht |
| URL | waar de tegel naartoe gaat; verplicht. Met Toevoegen: ID zet je {{KeyValue}} erin, bijv. CSEasyList.aspx?ID={…}&P1={{KeyValue}} |
| Popup | aan = de pagina opent in een pop-up binnen Synergy in plaats van in hetzelfde venster |
| Afbeelding | een icoon uit de afbeeldingenmap van Synergy (alle .svg-bestanden), met een voorbeeld ernaast |
Met Toevoegen: Monitor items in de knoppenbalk van de wizard komt er een regel bij.
Regels zonder titel of URL worden overgeslagen. Het gegenereerde script bouwt de tegels op zoals
Synergy ze zelf maakt en laat Synergy daarna de indeling van de monitor opnieuw bepalen; het icoon
krijgt vanzelf de kleur van het thema van de gebruiker, net als de standaardtegels. Elke tegel krijgt
een vast ID op basis van de titel: staat hij er al, dan wordt hij niet nog eens toegevoegd.
Een eigen icoon kan ook: zet een .svg in de map
docs\images van de Synergy-installatie en hij staat in de keuzelijst. De themakleur
werkt voor vormen als path, g, circle en polygon;
een losse rect, line of ellipse direct onder de
svg houdt zijn eigen kleur.
Toevoegen: Monitor (Vervangen)
Hergebruikt een bestaande, ongebruikte tegel uit de monitor van de kaart. Je geeft het
<div>-ID van die tegel, plus een nieuwe URL en/of nieuwe tekst. Het ID
achterhaal je met rechtermuisklik → Inspecteren; bij de tegel Kalender is
dat bijvoorbeeld Mon_Calender.
Gegenereerd resultaat
<script>
$(document).ready(function() {
$('#Mon_Calender').find('a').attr('href', 'MijnPagina.aspx?ID={{KeyValue}}');
$('#Mon_Calender').find('span').html('Mijn eigen actie');
});
</script>
Beide monitorgeneratoren staan alleen op kaarten die een monitor hebben: Relatie, Persoon,
Contactpersoon, Medewerker, Project, Artikel, Serienummer en Verkoopkanskaart.
07Zichtbaarheid: rollen en criteria
Rol. Kies één of meer HR-rollen. De sectie wordt alleen gerenderd als de
gebruiker minimaal één van die rollen heeft. Geen rol gekozen = zichtbaar voor iedereen.
Geactiveerd. Staat dit uit, dan wordt de sectie helemaal niet ingelezen. Handig
om iets tijdelijk uit te zetten zonder het weg te gooien.
Criteria. Hiermee maak je een sectie voorwaardelijk, afhankelijk van het record
op de pagina. Er zijn twee varianten, te kiezen met de schakelaar Criteria: SQL.
SQL-criteria (standaard)
Je typt alleen het where-gedeelte, zonder where. EasyScript bouwt zelf:
select top 1 1 as Result
from <tabel van de pagina> (nolock)
where <sleutelkolom> = @P1 and (<jouw criteria>)
@P1 is de sleutelwaarde van het record; komt er een rij terug, dan wordt de sectie
getoond. Een voorbeeld voor de relatiekaart: cmp_status = 'C', of
cmp_wwn in (select cmp_wwn from … ). @userid wordt vervangen door het
resource-ID van de ingelogde gebruiker. Het veld Tabelnaam laat zien tegen welke
tabel je criteria draaien; dat veld is read-only.
Property-criteria
Zet Criteria: SQL uit en je kunt in plaats van kolomnamen de properties van de
business component gebruiken (@PropertyName); er komt een dropdown met de beschikbare
properties en een knop om er één in je criteria te plakken. Dit leunt op de paginadefinities van
EasyVerify: EasyVerify moet voor dezelfde business component een
onderhoudspagina kennen. Is die er niet, dan springt de schakelaar terug naar SQL en verdwijnt de
dropdown; ook bij bewaren wordt SQL afgedwongen, zodat de sectie niet stil verdwijnt. Bij het renderen op een kaart (niet-bewerk) zoekt EasyScript de
EasyVerify-paginadefinitie op de ASPX-naam; heeft EasyVerify geen definitie voor die kaart, dan wordt
een sectie met property-criteria niet getoond.
Verbinding. Criteria kunnen tegen een andere database draaien:
Synergy, Globe<nr> of een van de connectiestrings uit Easy Menu
→ Instellingen. Dezelfde query (select top 1 1 from <tabel> where
<sleutelkolom> = @P1 and (…)) draait dan in die database, dus tabel en sleutelkolom van
de pagina moeten daar bestaan.
Let op
- SQL-criteria zonder sleutelwaarde tonen de sectie niet. Op een nieuw record
is er geen
KeyValue. Property-criteria op een bewerkpagina worden tegen de waarden
op het scherm geëvalueerd en werken daar wél.
- Een fout in je criteria verbergt de sectie, zonder melding op de kaart. Er
komt wel een regel in het Synergy-foutenlog: EasyScript: criteria van een sectie
op <pagina> konden niet worden uitgevoerd (…), met de foutmelding en de criteria. Test
criteria dus met een record waarvan je weet dat het moet matchen, en kijk bij twijfel in het
log.
- Criteria zijn niet beschikbaar op zoek- en workspacepagina's.
08Titels en vertalingen
| Veld | Betekenis |
| Titel | de sectiekop |
| Term: ID | term-ID voor een vertaalde kop; 0 = de Titel gebruiken |
| Titel: Vertaald | eigen vertalingen per taal, via het bewerkicoon in dit veld; een vinkje erachter betekent dat er vertalingen zijn |
De volgorde is: is er een eigen vertaling voor de taal van de gebruiker, dan wint die; anders het
term-ID; anders de Titel. Bewaar je Titel: Vertaald, dan gaat Term: ID op 0 en
wordt Titel overschreven met de tekst in jouw taal; de talen worden vooringevuld vanuit de
term. Verwijderen in de vertaalpopup wist alle vertalingen.
09Overzicht, importeren en exporteren
Overzicht toont alle secties met
kolommen Titel, Omschrijving, Pagina, Categorie, Type, Moeder-tab, Criteria,
Geactiveerd, Rij: Volledig en Gewijzigd (standaardsortering, aflopend). Filteren kan op Geactiveerd,
Titel (begint met / bevat / gelijk aan), Gewijzigd, Type, Moeder-tab, Pagina en
Categorie. De kop toont het versienummer.
Een sectie kan een optionele Categorie krijgen. Die heeft geen invloed op de
werking, maar met tientallen secties maakt het je overzicht, export en import een stuk
hanteerbaarder. De categorieën zijn van de hele suite (Overzichten → Easy Menu →
Categorieën); Easy List en Easy Verify gebruiken dezelfde lijst. Verwijder je een categorie,
dan blijven de secties bestaan, zonder categorie.
Exporteren / Importeren zet secties over binnen je OTAP-straat of haalt ze uit
een andere omgeving. Op de exportpagina filter je ook op Categorie. Secties worden
geëxporteerd naar een XML-bestand dat je op de doelomgeving weer
inleest; een sectie met hetzelfde ID wordt overschreven, tabs gaan vóór hun tabbladen, en per sectie
moet een Verbinding gekozen zijn (anders Missing: Connection). De categorie
gaat mee met ID én omschrijving: bij het importeren wordt eerst op ID gezocht, dan op een precies
gelijke omschrijving, en anders wordt de categorie aangemaakt. De pagina van een sectie gaat mee op
ID; de ondersteunde pagina's hebben in elke omgeving hetzelfde ID.
Widget. Op de workspace kun je een EasyScript-widget plaatsen (galerij-categorie
Easy, widget EasyScript): je geeft de widget een titel en kiest de
sectie die hij moet uitvoeren. De keuzelijst toont alleen geactiveerde secties van type
Widget op pagina Workspace. Een Widget-sectie draait uitsluitend in die widget;
een Script-sectie op Workspace draait voor iedereen bij elke workspace-load.
10Demo en licentie
Zonder geldige EasyScript-licentie draait de tool in demomodus: het renderen stopt na de
eerste tab (met één tabblad) of de eerste sectie, met
DEMO MODUS - <titel> - DEMO MODUS als kop. Tabs worden eerst ingelezen, dus met
een tab op de pagina zie je alleen die tab en geen losse secties. Secties van type Script
en Widget worden niet begrensd. In demomodus krijgt de sectie bovendien per aanroep een
nieuw control-ID, waardoor de kaartaanpassing de positie niet kan onthouden. De licentiestatus
wordt per sessie gecached, dus na het invoeren van een licentie moet je opnieuw inloggen om het
effect te zien. De onderhoudspagina's tonen zonder licentie Demo license met de reden.
11Als het niet werkt
| Symptoom | Oorzaak |
| De sectie verschijnt niet | Geactiveerd staat uit, of de gekozen Rol sluit je uit |
| De sectie verschijnt niet, en er zijn criteria | de criteria matchen niet, er is geen sleutelwaarde (nieuw record, SQL-criteria), de criteria-query gooit een fout (kijk in het Synergy-foutenlog), of EasyVerify heeft geen paginadefinitie voor deze kaart (property-criteria) |
| Maar één sectie zichtbaar, met DEMO MODUS in de kop | geen geldige licentie |
Een {{Property}} blijft leeg | typefout in de propertynaam, of het type is Binary/Picture — er komt geen foutmelding |
| Een tab-sectie is helemaal weg | geen enkele onderliggende sectie is zichtbaar (rol of criteria) |
| Sectie staat op de verkeerde plek | positie regel je via de onderhoudsfunctie van de kaart in Synergy, niet in EasyScript |
| EasyList in een tabblad rendert scheef | gebruik iframe in plaats van div |
| Knop Toevoegen: Easy List ontbreekt | het EasyList-verzoektype is niet ingesteld, je zit op een zoekpagina of op Easy List zelf, het type is Script op een kaart-/bewerk-/workspacepagina, of je bent geen beheerder |
| Knoppen voor de monitor ontbreken | de pagina heeft geen monitor (alleen de acht kaarten uit hoofdstuk 06), of het type is Tab |
| Een EasyList in een sectie laadt pas als je ernaartoe scrolt | zo werkt Lazy loading (hoofdstuk 06); genereer het script zonder dat vinkje als de lijst direct geladen moet worden |
{{Property}} blijft letterlijk staan | de business component kon niet geopend worden op de sleutelwaarde (hoofdstuk 05) |
| Fout in het Synergy-log over “… not found” | de kaart of kaartkolom van de pagina is niet gevonden; meestal een Synergy-versieverschil in de paginadefinitie |
Deel drie
EasyVerify
Controles en acties op de standaardpagina's van Synergy zonder code: een melding op
de relatiekaart als een veld niet klopt, een blokkade bij het bewaren van een medewerker die niet
aan een voorwaarde voldoet, een stored procedure die na het opslaan van een verzoek draait, of een
reeks mutaties via de executietabellen, of een n8n-workflow die wordt aangeroepen.
De kern: een verificatie = pagina + criteria
(@Property in SQL) + actie, op het moment van tonen of van bewaren.
01Het menu
Alles zit onder Menu: Easy by DataKings.
| Tabblad | Menu-item | Wat |
| Invoer | Easy Verify → Verificatie | een nieuwe verificatie |
| Invoer | Easy Verify → Importeren | verificaties uit een exportbestand inlezen (hoofdstuk 11) |
| Overzichten | Easy Verify → Overzicht | alle verificaties, met filters |
| Overzichten | Easy Menu → Categorieën | gedeeld met EasyList en EasyScript (Easy Menu → Categorieën) |
| Inrichting | Easy Verify → Instellingen | hoofdstuk 09 |
| Inrichting | Easy Verify → Tabellen | de executietabellen (hoofdstuk 08) |
| Inrichting | Easy Verify → Importeren, Exporteren | hoofdstuk 11 |
Rechten. Alles wat muteert is voor beheerders
(Synergy-beheerdersrol). Niet-beheerders zien de overzichten en bestaande verificaties, categorieën
en tabellen read-only; Exporteren, Importeren en het aanmaken van een nieuwe
verificatie, categorie of tabel geven Geen toegang.
In het Overzicht zet een beheerder een verificatie aan of uit door op het vinkje
in de kolom Actief te klikken; de knop Categorieën staat er ook. De lijstfilters
worden als algemene instelling onthouden, dus voor alle gebruikers dezelfde.
02De pagina's waarop EasyVerify werkt
EasyVerify hangt aan een vaste lijst Synergy-pagina's. Er is geen onderhoudsscherm voor; een
pagina toevoegen is maatwerk. De ID's van de pagina's zijn in alle omgevingen gelijk, zodat im- en
export ertussen werkt.
| Keuze in het veld Pagina | ASPX | Soort | Business component |
| Artikel | LogItemCard.aspx | kaart | Item |
| Artikel (Bewerken) | LogItem.aspx | onderhoud | Item |
| Contactpersoon | CRMContactCard.aspx | kaart | Contact |
| Contactpersoon (Bewerken) | CRMContactMaint.aspx | onderhoud | Contact |
| Crediteurencode | CRMDivCreditor.aspx | kaart | DivisionCreditor |
| Crediteurencode (Bewerken) | CRMDivCreditorMaint.aspx | onderhoud | DivisionCreditor |
| Debiteurencode | CRMDivDebtor.aspx | kaart | DivisionDebtor |
| Debiteurencode (Bewerken) | CRMDivDebtorMaint.aspx | onderhoud | DivisionDebtor |
| Document | DocView.aspx | kaart | BDDocument |
| Document (Bewerken) | DocDocumentEdit.aspx | onderhoud | BDDocument |
| Medewerker | HRMResourceCard.aspx | kaart | Employee |
| Medewerker (Bewerken) | HRMResource.aspx | onderhoud | Employee |
| Persoon | CRMPersonAccountCard.aspx | kaart | Associates |
| Persoon (Bewerken) | CRMPersonAccountMaint.aspx | onderhoud | Associates |
| Project | ProCard.aspx | kaart | PRProject |
| Project (Bewerken) | ProEdit.aspx | onderhoud | PRProject |
| Relatie | CRMAccountCard.aspx | kaart | Associates |
| Relatie (Bewerken) | CRMAccountMaint.aspx | onderhoud | Associates |
| Rol - Lid (Bewerken) | SysRoleMember.aspx | onderhoud | HRRole |
| Serienummer (Bewerken) | LogItemNumber.aspx | onderhoud | ItemNumber |
| Verkoopkans | CRMOpportunityCard.aspx | kaart | Opportunities |
| Verkoopkans (Bewerken) | CRMOpportunityMaint.aspx | onderhoud | Opportunities |
| Verzoek (Bewerken) | WflRequest.aspx | onderhoud | Request |
Daarnaast staat er een verborgen regel voor CSEasyList.aspx (business component
Request), die EasyList en EasyScript gebruiken; die is niet te kiezen.
Kaart = de weergavepagina: verificaties worden geëvalueerd bij het laden, met het
record uit de database. Onderhoud (achtervoegsel Bewerken) = de
bewerkpagina: verificaties lopen bij het laden én, met timing Bewaren, bij het opslaan, met
de waarden zoals ze op het scherm staan. Alleen op onderhoudspagina's zijn de timing
Bewaren, de gewijzigde waarden en de vorige waarden beschikbaar (hoofdstuk 05).
Twee kanttekeningen bij deze lijst
- Vorige waarden (
@Prev_…) bestaan niet voor Verkoopkans en
Serienummer; voor Rol - Lid alleen @Prev_Level. De keuzelijst laat zien wat er per
pagina is.
- Relatie en Persoon delen de business component Associates. Bij het bewaren
kijkt EasyVerify naar de eerste onderhoudspagina van die component; verificaties met timing
Bewaren op Persoon (Bewerken) vuren daardoor nooit, en het bewaren van een
persoon triggert de Bewaren-verificaties van Relatie (Bewerken). Zet een
Bewaren-verificatie voor personen dus op Relatie (Bewerken) en onderscheid ze in de
criteria (bijvoorbeeld op
@Type).
03Je eerste verificatie
- Easy by DataKings → Invoer → Easy Verify → Verificatie.
- Kies de Pagina. Die keuze ligt daarna vast: een verificatie kun je niet naar een andere pagina verhuizen.
- Geef een unieke Omschrijving en eventueel een Categorie.
- Vul de Criteria in: het
where-gedeelte zonder where, met @Property-placeholders uit de keuzelijst ernaast (knop Toevoegen). Leeg = altijd raak.
- Kies Actie en Weergave-opties (tonen of bewaren), en vul het Bericht in.
- Zet Actief aan, bewaar, en open de betreffende Synergy-pagina met een record dat aan de criteria voldoet.
De knop Kopiëren op een bestaande verificatie maakt een inactieve kopie met
dezelfde instellingen (Omschrijving (Kopie), bij dubbelen (Copy 1),
(Copy 2) …) en opent die meteen.
04De velden van een verificatie
| Sectie | Veld | Betekenis |
| Algemeen | Categorie | groepering voor het overzicht en de export; geen invloed op de werking |
| Omschrijving | verplicht en uniek |
| Opmerkingen | vrije toelichting |
| Pagina | de Synergy-pagina (hoofdstuk 02); na aanmaken niet meer te wijzigen |
| Verbinding | de database waarop de criteria draaien: Synergy, Globe<nr> per actieve backoffice-divisie, of een connectie uit Easy Menu → Instellingen. Standaard Synergy. Geldt niet voor de actie |
| Criteria | SQL-voorwaarde met placeholders (hoofdstuk 05) |
| Actie | Bericht, BPA Platform (Orbis) Task, Stored Procedure, Tabel uitvoeren, Geen toegang., Easy WordMerge - Definitie, n8n (hoofdstuk 07) |
| Opties | Actief | alleen actieve verificaties worden geëvalueerd |
| Weergave-opties (Uitvoeren bij een actie) | Tonen = bij het laden van de pagina; Bewaren = bij het opslaan, alleen op onderhoudspagina's |
| Formaat | Tekst of HTML voor het bericht |
| Type | Informatie (notificatie), Fout (rode melding) of Pop-up (alert) |
| Validatie | Bericht | de tekst, met dezelfde placeholders als de criteria; verplicht bij actie Bericht |
| Stored Procedure / BPA Platform (Orbis) Task / Easy WordMerge | de keuzelijst die bij de actie hoort |
| n8n: Verbinding / Pad / JSON | bij actie n8n: de n8n-omgeving uit de instellingen, het pad achter de basis-URL en de JSON die verstuurd wordt (hoofdstuk 07) |
| Prioriteit | volgorde van evalueren en tonen; 0 = als laatste, bij gelijke prioriteit alfabetisch op Omschrijving |
| Tabel(len) uitvoeren 1–5 | bij actie Tabel uitvoeren (hoofdstuk 08) |
| Parameters | per parameter | de waarde die naar de procedure, taak of definitie gaat; het icoontje bij een parameter opent een popup met de propertylijst en plakt @Property achteraan het veld |
Wat kan waar. Op een onderhoudspagina met timing Bewaren: Type alleen
Fout, Formaat alleen Tekst, en de acties Bericht, Orbis, Stored Procedure, Tabel
uitvoeren, Easy WordMerge en n8n. Met timing Tonen op een onderhoudspagina: Bericht, Orbis,
Stored Procedure en Geen toegang. Op een kaart alleen timing Tonen, met Bericht, Orbis,
Stored Procedure, Tabel uitvoeren en Geen toegang. Orbis en WordMerge verschijnen alleen als de
integratie aan staat.
De keuzelijst met properties (naast Criteria en Bericht) heeft de groepen
Eigenschappen, Gewijzigd, Vorige waarden, Modus en Vaste
waarde, en toont precies wat op deze pagina en timing beschikbaar is; Modus biedt
_Action = 0 (nieuw) en _Action = 1 (bewerken). Properties van het type
Binary, Picture en Seconds ontbreken. De knop Toevoegen plakt @Naam op de
cursorpositie. De popup bij de parameters toont Gewijzigd en Vorige waarden ook
bij timing Tonen, waar ze niet werken; kies daar alleen uit Eigenschappen en
Vaste waarde.
Parametervoorstellen. Bij Stored Procedure en Tabel uitvoeren
vult EasyVerify lege parametervelden voor met een voorstel: een parameter waarvan de naam eindigt op
sessionid, session_id of session krijgt
@_SessionID (alleen de eerste); een parameter met dezelfde naam als een property krijgt
die property; @RequestID wordt @ID; @CustomerID wordt op
Verzoek @CustomerID, op Document @Associate en elders @ID;
@Project, @ProjectNr en @ProjectNumber worden op Verzoek
@ProjectNumber, op Document en Project @ProjectNr en blijven elders leeg.
Orbis- en WordMerge-parameters krijgen geen voorstel.
05Criteria en placeholders
EasyVerify vervangt elke @Property in de criteria door de SQL-literal
van de waarde van het record (met quotes, in de juiste notatie) en voert dan uit:
select 1 where <criteria>
Komt er minstens één rij terug, dan is de verificatie raak. Voorbeelden:
@Status = 'C' and @Country <> 'NL'
@Amount > 10000 or @Amount is null
dbo.fnCSEasyIsValidEmail(@Email) = 0
De query draait op de gekozen Verbinding; met Globe<nr> of
een eigen connectie kun je dus voorwaarden op een andere database leggen
(@CustomerCode in (select debnr from cicmpy where …)).
| Placeholder | Waarde | Beschikbaar |
@<Property> | de waarde van die property van de business component van de pagina | altijd |
@_Action | bij Tonen op een onderhoudspagina 0 = nieuw, 1 = bewerken, 3 = verwijderen; bij Bewaren 0 = nieuw en 1 = alles anders (ook verwijderen); op een kaart -1 | altijd; de groep Modus biedt alleen 0 en 1 |
@_CurrentUser | resource-ID van de ingelogde gebruiker | altijd |
@_SessionID | één GUID per paginalading of bewaaractie, gedeeld door alle verificaties in die run | bedoeld als parameter (alle vier de acties); in criteria geeft hij een SQL-fout (GUID zonder quotes) en telt dus als raak, in een bericht toont hij de GUID. De keuzelijst biedt hem alleen bij Tabel uitvoeren |
@_<Property>_Changed | 1 als de property in deze bewaaractie gewijzigd is, anders 0 | alleen onderhoud + Bewaren, en alleen voor de properties in de groep Gewijzigd; een andere property levert null of een SQL-fout op |
@Prev_<Property> | de waarde vóór de wijziging | alleen onderhoud + Bewaren, en alleen voor de properties in de groep Vorige waarden. Met timing Tonen is hij leeg: null in de criteria |
Lege waarden worden letterlijk null: @Prop = 'x' is dan
onwaar, @Prop is null werkt. Placeholders zijn hoofdletterongevoelig en gelden altijd
voor de hele naam: @IDCustomer wordt niet door @ID geraakt, en een naam die
geen property is (@StatusText naast @Status) blijft letterlijk staan en
geeft dus een SQL-fout. Gebruik alleen namen uit de keuzelijst.
Let op: een fout in de criteria telt als raak
Levert de SQL een fout op (typefout, onbekende kolom, een @x die geen property is,
een property die na het inloggen is toegevoegd), dan wordt dat in het Synergy-foutenlog gezet als
Error executing validation criteria for validation <omschrijving>: <fout> en
behandelt EasyVerify de verificatie alsof ze matcht: het bericht verschijnt, de actie wordt
uitgevoerd, het bewaren wordt geblokkeerd. Zie je een verificatie “altijd” afgaan, kijk
dan eerst in het foutenlog. Ben je beheerder, dan zet EasyVerify de SQL-fout er
als extra notificatie bij op de pagina zelf: Easy Verify: Error executing validation criteria
for validation …. Bij het bewaren verschijnt die alleen als er toch al een melding komt.
06Berichten
| Type | Hoe het verschijnt |
| Informatie | blauwe notificatie boven de pagina |
| Fout | rode foutmelding boven de pagina |
| Pop-up | JavaScript-alert bij het laden; meerdere pop-ups worden samengevoegd |
Het bericht mag dezelfde placeholders bevatten als de criteria; de waarden worden dan opgemaakt
zoals de gebruiker ze kent (datum en tijd in gebruikersnotatie, Ja/Nee, getallen
met de decimalen van de property, percentages met twee decimalen, GUID's met accolades). Met Formaat
HTML wordt de tekst rauw gerenderd, met Tekst ge-encodeerd.
Timing. Tonen evalueert bij elke aanroep van de pagina, dus ook na elke
postback. Bewaren evalueert in de repository-hook bij het opslaan van de business component
(dus in principe ook bij opslaan via een webservice of import) en blokkeert het
bewaren: een raak bericht komt als foutmelding terug op het formulier en er wordt niets
opgeslagen. Is bij Bewaren één Bericht-verificatie raak, dan worden de acties (procedure,
tabel, Orbis, WordMerge) van diezelfde bewaaractie overgeslagen. Ook een mislukte stored procedure,
executietabel of WordMerge blokkeert het bewaren; Orbis-fouten worden alleen gelogd.
De meldingen worden op een vaste plek in de pagina gezet: op het verzoek boven het werkstroomblok,
op de medewerkerkaart boven de foto, op de documentpagina's boven de inhoud, elders bovenin de
scrollbare inhoud. Lukt dat niet, dan staat Error adding controls on page … in het
foutenlog.
07Acties
Bericht. Alleen de melding (hoofdstuk 06).
Geen toegang. De gebruiker krijgt de standaard Geen toegang-pagina van
Synergy en de evaluatie stopt daar: berichten en acties van andere verificaties op dezelfde lading
vervallen. Alleen met timing Tonen. Combineer met een rol of eigenschap in de criteria,
bijvoorbeeld @_CurrentUser not in (select res_id from …).
Stored Procedure. Keuzelijst met alle procedures in de database die parameters
hebben, als schema.naam; per parameter een veld. Een parameterwaarde die met
@ begint wordt vervangen door één getypeerde waarde: een property als
datum, getal of GUID, @_SessionID als GUID, @_CurrentUser als getal,
@_Action en @_X_Changed als tekst, @Prev_X als opgemaakte
tekst. Een parameter is dus óf een vaste tekst óf één placeholder, niet een combinatie; een
@… die geen placeholder is gaat letterlijk mee, een leeg veld als NULL. De
aanroep is exec <schema.naam> @Param = …, altijd op de Synergy-database (het veld
Verbinding geldt alleen voor de criteria), met een time-out van 300 seconden. Een fout in de
procedure wordt gelogd als Error executing Stored Procedure <naam>: …, als
Fout getoond en blokkeert bij Bewaren het opslaan.
Tabel uitvoeren. Een stored procedure vult één of meer executietabellen met de
sessie-GUID, waarna EasyVerify die tabellen in volgorde verwerkt (hoofdstuk 08). Vereist altijd een
procedure én minimaal één tabel; geef de procedure de parameter @_SessionID mee. Een
fout in de verwerking wordt gelogd als Error executing table <tabel>: … en blokkeert
bij Bewaren.
BPA Platform (Orbis) Task. Zet een TaskCentre-taak in de wachtrij met de
parameters als taakvariabelen (alleen invoervariabelen; de map System wordt overgeslagen).
Alleen zichtbaar als Orbis aan staat. Uitgeschakelde taken staan gemarkeerd met
(Gedeactiveerd !) en zijn wel te kiezen, maar bewaren geeft dan een fout. Fouten bij het
uitvoeren worden alleen gelogd en blokkeren niets.
n8n. Roept een n8n-webhook aan met een POST. Je kiest de
n8n-verbinding (de omgeving uit de instellingen) en vult het pad in
dat daarachter komt, bijvoorbeeld webhook/4fb3a1e3-115f-4434-99df-fd6f5f03b72d. In de
JSON gebruik je @Property-placeholders:
{
"RequestID": "@ID",
"Bedrag": @Amount,
"Sessie": "@_SessionID"
}
De waarden gaan er machineleesbaar in, niet in jouw notatie: een datum als
2026-09-14T10:30:00, getallen met een punt, ja/nee als true/false,
een GUID zonder accolades en een lege waarde als null. Tekst wordt JSON-geëscaped, dus een
naam met een aanhalingsteken breekt de JSON niet.
De aanhalingstekens hoef je zelf niet goed te zetten: het type van de property
bepaalt ze. Een getal, een ja/nee en een lege waarde komen zonder quotes in de JSON, ook als je
"@Bedrag" schreef; tekst, datums en GUID's komen er altijd mét quotes in, ook als je ze
vergeten bent. Staat de placeholder midden in een zin ("Beste @FullName,"), dan blijft
het gewoon tekst en komt alleen de waarde ervoor in de plaats — een lege waarde wordt daar niets in
plaats van null. Een placeholder die als sleutel gebruikt wordt
("@Naam": 1) blijft altijd tekst tussen quotes.
De specials in de JSON. @_SessionID komt als tekst (de GUID tussen
quotes), @_CurrentUser en @_Action komen als getal. Let op:
@_Action is hier dus 1 en niet "1", ook als je hem tussen quotes
schreef. Een n8n-workflow die op === "1" vergelijkt, ziet niets — vergelijk op
=== 1. Bij de actie Stored Procedure gaat @_Action wél als tekst mee.
Een @Naam die geen property is blijft letterlijk staan, dus controleer je namen met de
keuzelijst.
Alleen op onderhoudspagina's met timing Bewaren, en alleen als n8n aan staat. EasyVerify
wacht op het antwoord: alles buiten 2xx is een fout, net als een n8n die niet bereikbaar is, en dat
blokkeert het bewaren. Duurt een workflow lang, zet die in n8n dan op Respond
immediately. Het antwoord zelf wordt niet gebruikt.
Easy WordMerge - Definitie. Genereert documenten met een vrijgegeven
WordMerge-definitie met selectievelden (Dev-, Test- en Archief-definities ontbreken in de lijst); de
parameters zijn die selectievelden. Alleen op onderhoudspagina's met timing Bewaren en
alleen met de module EasyWordMerge in de licentie. Geen definitie, geen gegevens
en fouten blokkeren het bewaren.
08Executietabellen (_CSEasy_<BusinessComponent>)
Een executietabel is een kopie van de kolommen van een business component, plus systeemkolommen.
Een stored procedure zet er regels in; EasyVerify voert die regels uit via de business component,
met alle validaties en workflow van Synergy. Dezelfde tabellen en dezelfde engine gebruiken de
bulkacties van EasyList.
Aanmaken: Inrichting → Easy Verify → Tabellen →
Nieuw: kies de business component en bewaar; de tabel
_CSEasy_<Component> wordt gegenereerd met een kolom per property van de
hoofdgegevensbron (maximaal 1024; tekst als nvarchar, getallen als
int/float, datums als datetime, ja/nee als
tinyint, GUID's als uniqueidentifier, binair als
varbinary(max)). Let op: een bestaande tabel met die naam wordt daarbij
eerst verwijderd, inclusief inhoud.
| Systeemkolom | Standaard | Betekenis |
_ID | identity | regelnummer |
_Session | (verplicht) | de sessie: alleen regels met _Session = @_SessionID en _Status = 0 worden verwerkt |
_BCAction | 0 | 0 nieuw, 1 bewerken, 2 verwijderen, 3 nieuw-of-bewerken (nieuw als de sleutelkolom leeg is) |
_BCComponent | de component van de tabel | mag per regel verschillen |
_Status | 0 | 0 nieuw, 1 gelukt, 2 fout (met _ErrorMessage) |
_SortOrder | 0 | verwerkingsvolgorde binnen de sessie, daarna op _SysCreated |
_SkipAllNulls | 1 | 1 = lege kolommen worden niet naar de property geschreven (property blijft zoals hij was); 0 = leeg wordt echt leeg gemaakt, behalve de kolommen in _SkipNulls |
_SkipNulls | leeg | kommalijst kolommen die bij leeg toch overgeslagen worden |
_AddNewProps | leeg | kommalijst properties die bij nieuw al bij het aanmaken meegegeven moeten worden (bijvoorbeeld Type bij een verzoek) |
_UpdateColumns | leeg | kommalijst properties waarvan de waarde ná het opslaan teruggeschreven wordt in de regel (bijvoorbeeld het gegenereerde ID of HID) |
_RebuildWorkflow | 0 | alleen bij Request: 1 = na het opslaan het type rechtstreeks in Absences zetten en de werkstroom opnieuw opbouwen; fouten daarin worden alleen gelogd |
_SysCreated, _SysModified | getdate() | aanmaak- en verwerkingstijdstip (_SysModified wordt bij succes bijgewerkt) |
_ErrorMessage | leeg | de fout bij _Status = 2 |
Verwerking. Per regel: nieuw/bewerken/verwijderen op de business component, alle
kolommen zonder _ naar de gelijknamige property (een kolom die geen property is geeft
een fout), opslaan, _Status op 1. Bij een fout krijgt die regel
_Status = 2 met de melding en stopt de verwerking: de volgende regels en
tabellen van die sessie blijven op _Status = 0 staan. Verwijderregels blijven ook na
succes op _Status = 0 staan.
Voorbeeld: een procedure die verzoeken goedkeurt
create procedure dbo.spCSEasy_GoedkeurenVerzoek(@ID uniqueidentifier, @SessionID uniqueidentifier)
as
begin
insert into _CSEasy_Request (_BCAction, _Session, ID, Status, _RebuildWorkflow)
values (1, @SessionID, @ID, 1, 1)
end
09Instellingen
Inrichting → Easy Verify → Instellingen. Bewerken kan alleen een
beheerder; anderen zien de pagina read-only. De kop toont het versienummer; zonder geldige licentie
staat bovenaan Demo licentie met de reden.
| Sectie | Veld | Effect |
| Algemeen | Actief | uit = de hele oplossing staat stil: geen meldingen, geen acties, en de overzichtspagina meldt De oplossing is uitgeschakeld. Handig bij een storing |
| BPA Platform (Orbis) | Actief | aan = de actie BPA Platform (Orbis) Task verschijnt en Orbis-verificaties worden uitgevoerd; toont de drie velden eronder |
| Server, Inlognaam, Wachtwoord | de TaskCentre-verbinding. Alle drie versleuteld opgeslagen, inlognaam en wachtwoord gemaskeerd in de weergave; bij bewaren wordt de verbinding direct getest. Orbis uitzetten wist de drie waarden |
| n8n | Actief | aan = de actie n8n verschijnt en n8n-verificaties worden uitgevoerd; toont de velden eronder |
| Time-out (sec.) | hoe lang EasyVerify op n8n wacht, standaard 30 |
| Verbinding 1…5 | per n8n-omgeving een naam en de basis-URL, en optioneel een headernaam en -waarde voor authenticatie. De headerwaarde wordt versleuteld opgeslagen en nooit getoond |
| SQL Functies | (script) | een kant-en-klaar installatiescript voor de SQL-functies, zie hieronder. De pagina voert het niet zelf uit |
Er is geen instelling voor EasyWordMerge: die integratie staat aan zodra de module EasyWordMerge
in de licentie zit. Bewaren van de instellingen leegt de sessie en daarmee alle caches (hoofdstuk
12). De integratie met BPA Platform (Orbis) gebruikt de TaskCentre-client op de webserver; die wordt
pas aangesproken als Orbis aan staat en een verificatie hem gebruikt.
Van een n8n-verbinding onthoudt de verificatie alleen de naam. Zo wijst dezelfde
verificatie in elke omgeving naar de n8n van die omgeving: je legt in acceptatie en productie een
verbinding met dezelfde naam vast, met een andere URL.
Omdat de verificatie alleen die naam onthoudt, is de naam van een verbinding die in gebruik
is niet te wijzigen: dat veld staat vast en de hulptekst zegt welke verbindingen in gebruik
zijn en door hoeveel verificaties. De URL en de header pas je wél gewoon aan; leegmaken kan niet zolang
de verbinding gebruikt wordt.
SQL-functies voor criteria
De sectie SQL Functies toont een script waarmee je vier functies voor reguliere expressies
en e-mailcontrole in SQL Server installeert. Je voert het zelf uit in SQL Server Management Studio.
Het zet CLR aan (sp_configure 'clr enabled'), zet TRUSTWORTHY ON op de
database, verwijdert bestaande functies, leest de meegeleverde CSEasyVerify.SQL.dll uit
de bin-map van de webserver in, registreert die als vertrouwde assembly
met PERMISSION_SET = SAFE, maakt de vier functies en sluit af met test-selects. SQL Server
moet dat pad dus kunnen lezen (zelfde machine of een share) en de uitvoerder heeft serverrechten
nodig: laat het door de DBA doen.
| Functie | Doet |
dbo.fnCSEasyRegexMatch(tekst, patroon) | 1 als het patroon matcht, 0 als niet, NULL als tekst of patroon NULL is |
dbo.fnCSEasyRegexMatches(tekst, patroon) | tabel met alle matches (kolom MatchValue) |
dbo.fnCSEasyRegexReplace(tekst, patroon, vervanging) | vervangt |
dbo.fnCSEasyIsValidEmail(tekst) | 1 bij een geldig e-mailadres, 0 bij ongeldig, NULL of leeg |
10Categorieën
Alleen een omschrijving (uniek). Ze groeperen het overzicht en de export; verwijder je een
categorie, dan blijven de verificaties bestaan zonder categorie. De categorieën zijn van de hele
Easy-suite — Easy List en Easy Script gebruiken dezelfde lijst — en staan onder
Overzichten → Easy Menu → Categorieën (zie Easy
Menu).
11Importeren en exporteren
Exporteren filtert op actief, categorie, gewijzigd sinds, type, weergave-opties,
pagina en actie; je vinkt de verificaties aan en krijgt EasyVerify - Export.xml met de
verificaties en de gebruikte categorieën.
Importeren: kies het bestand (Easy Verify export file), klik
Tonen voor de controlelijst (per verificatie Actie, Type, Weergave-opties,
of ze al bestaat, en de connectie in gebruik en in het bestand) en kies per regel de
Verbinding (voorgevuld met de connectie uit het bestand als die hier bestaat;
verplicht). Bij een verificatie met actie n8n staat er een tweede keuzelijst voor de
n8n-verbinding, op dezelfde manier voorgevuld en eveneens verplicht. Dan
Importeren. Bestaande verificaties (op ID) worden overschreven, nieuwe
krijgen hetzelfde ID als in de bron; de omschrijving wordt uniek gemaakt met (n).
De categorie wordt zo gekoppeld: bestaat de ID uit het bestand hier, dan die;
bestaat hij niet maar is er een categorie met precies dezelfde omschrijving, dan wordt daaraan
gekoppeld (zo komen dezelfde categorieën uit twee omgevingen weer samen); anders wordt de categorie
uit het bestand aangemaakt met zijn eigen ID. Een bestaande verificatie zonder
categorie in het bestand houdt haar huidige categorie. Actief komt één-op-één uit het
bestand; er is geen goedkeurstap. Elke verificatie wordt in een eigen transactie verwerkt: een
mislukte regel wordt gemeld en de rest gaat door.
Pagina's worden op ID gematcht; omdat de scripts vaste ID's gebruiken, werkt dat tussen
omgevingen. Een verificatie met Tabel uitvoeren importeert alleen als die tabellen (met de
Easy-kolommen) in de doeldatabase bestaan. Een stored procedure wordt bij het uitvoeren op naam
aangeroepen, maar in de verificatie staat ook het object-ID van de bron-database; na import is de
procedure op de bewerkpagina niet voorgeselecteerd en kun je de verificatie pas weer bewaren als je
hem opnieuw kiest.
12Demo en licentie
Zonder geldige EasyVerify-licentie draait de tool in demomodus: per paginalading of opslag wordt
alleen de eerste verificatie (op prioriteit) geëvalueerd, berichten krijgen het
voorvoegsel Easy Verify Demo Mode -, en er wordt hoogstens één actie uitgevoerd.
Per sessie worden gecachet: de licentiestatus van EasyVerify en EasyWordMerge, de vervanglijsten
van de engine per business component, en de keuzelijsten van stored procedures, Orbis-taken en
WordMerge-definities. Het openen van het Overzicht ververst de drie keuzelijsten; het
bewaren van de instellingen en een import legen de hele sessie. Na het invoeren van een licentie of
het toevoegen van een property dus even de instellingen bewaren of opnieuw inloggen.
13Als het niet werkt
| Symptoom | Oorzaak |
| Het bericht verschijnt altijd, ook als het niet zou moeten | een fout in de criteria telt als raak (hoofdstuk 05); als beheerder zie je de SQL-fout eronder op de pagina, anders staat hij in het Synergy-foutenlog bij Error executing validation criteria. Ook een property die na het inloggen is toegevoegd geeft dit: de vervanglijst is gecachet (hoofdstuk 12) |
| Het bericht verschijnt nooit | Actief uit, de oplossing staat uit, demomodus toont alleen de eerste verificatie, of de pagina heeft geen sleutelwaarde (log: Supposed to check for page … but no key value.) |
| Het bewaren wordt geblokkeerd zonder dat je een verificatie herkent | een verificatie met timing Bewaren is raak, of een stored procedure/tabel/WordMerge faalde; de melding staat op het formulier en in het log |
| Een Bewaren-verificatie op Persoon (Bewerken) doet niets | bij het bewaren kijkt EasyVerify voor Associates naar de pagina Relatie (Bewerken) (hoofdstuk 02) |
| Tabel uitvoeren doet niets | de procedure vult _Session niet met @_SessionID, of _Status staat niet op 0 |
| Verwerking stopt halverwege | een regel met _Status = 2; lees _ErrorMessage |
| Een property staat niet in de keuzelijst | het type is Binary, Picture of Seconds |
| Na import staat de stored procedure niet geselecteerd | het opgeslagen ID is van de bron-database; kies de procedure opnieuw en bewaar |
| Orbis-taak start niet | Orbis staat uit, de taak is gedeactiveerd in TaskCentre, of de verbinding faalt (log) |
| Het bewaren wordt geblokkeerd met Error calling n8n … | n8n antwoordde niet met 2xx of is niet bereikbaar. Een beheerder ziet de volledige URL en de statuscode; een gewone gebruiker krijgt alleen De n8n-taak kon niet uitgevoerd worden. Neem contact op met uw Exact-beheerder. Het volledige bericht staat in het foutenlog |
| Unknown n8n connection … | de verbinding uit de verificatie staat niet meer in de instellingen. Hernoemen is geblokkeerd zolang ze in gebruik is, dus dit komt van een import of een handmatige wijziging |
n8n krijgt @Naam letterlijk binnen | die naam is geen property van deze pagina; kies hem uit de keuzelijst |
| Geen melding op een pagina, log zegt Card … not found of missing both Card and ErrorMessages control | de pagina-opbouw van Synergy wijkt af (versieverschil); de melding kan niet geplaatst worden |
Deel vier
Easy WordMerge
Documenten uit je Synergy-gegevens: een brief aan elke relatie, een projectplanning
vanaf de projectkaart, certificaten voor alle deelnemers in één keer. Je legt een query en een
Word-sjabloon vast in een definitie; EasyWordMerge voegt ze samen tot Word, PDF of HTML, bewaart de
documenten in Synergy en kan daarna een e-mail sturen of een verzoek aanmaken.
De kern: een definitie = een query + een Word-sjabloon, en de
alias van elke kolom is de naam van het samenvoegveld in dat sjabloon.
01Het menu
Alles zit onder Menu: Easy by DataKings.
| Tabblad | Menu-item | Wat |
| Invoer | Easy WordMerge → WordMerge | een nieuwe definitie |
| Invoer | Easy WordMerge → Importeren | definities inlezen uit een exportbestand |
| Overzichten | Easy WordMerge → Overzicht | alle definities, met filter op status en groep |
| Overzichten | Easy WordMerge → Templates | de sjabloondocumenten |
| Overzichten | Easy WordMerge → Basis templates | de huisstijldocumenten voor Word sjabloon genereren (hoofdstuk 05) |
| Overzichten | Easy WordMerge → Groepen | definities groeperen (hoofdstuk 14) |
| Overzichten | Easy WordMerge → Integratie | knoppen op Synergy-pagina's (hoofdstuk 13) |
| Overzichten | Easy WordMerge → Genereren | alle vrijgegeven definities, per groep, om te starten |
| Inrichting | Easy WordMerge → Instellingen | hoofdstuk 16 |
| Inrichting | Easy WordMerge → Importeren / Exporteren | definities overzetten tussen omgevingen (hoofdstuk 17) |
Definities onderhouden mag een beheerder en iedereen met de rol die in de instellingen bij
Onderhouden: Definities staat; anderen zien een definitie read-only. Genereren mag iedereen die
de definitie mag starten (hoofdstuk 12).
02Je eerste document
Voorwaarde: in de instellingen staat minimaal één documenttype dat sjablonen bevat (zie
Installatie → Per module).
- Easy by DataKings → Invoer → Easy WordMerge → WordMerge. Er opent een nieuwe definitie in status Ontwikkeling; alleen de Titel is verplicht.
- Kies bij Verbinding de database en vul de query in, in vier delen: de SELECT-, FROM-, WHERE- en ORDER BY-clausule, elk met het sleutelwoord erbij. Geef elke kolom een alias: dat wordt de naam van het veld in het sjabloon. Bewaar.
- Klik in de kop op Word sjabloon genereren en kies een basis template. Je krijgt een Word-document in je huisstijl met alle velden van de definitie. Vink je Als document in Synergy aanmaken en koppelen aan deze definitie aan, dan staat het sjabloon meteen bij Template.
- Zet de velden op hun plek in Word, gooi de pagina met tags weg en bewaar het document weer in Synergy (hoofdstuk 05).
- Op het tabblad Uitvoerformaten staat al Docx klaar. Moeten de documenten in Synergy bewaard worden, zet dan Bewaar gegenereerd document aan (hoofdstuk 09).
- Klik Wijzig status naar Test modus en daarna Genereren (Voorbeeld): je krijgt één verzameldocument om te downloaden. Er wordt niets bewaard en er gaan geen acties af.
- Klopt het, klik dan Geef definitie vrij. Nu kan iedereen met rechten genereren: via het menu, vanaf de definitie of met een knop op een Synergy-pagina.
03De definitie en de statussen
| Sectie | Veld | Betekenis |
| Definitie | Titel | naam van de definitie; verplicht |
| Status | alleen te wijzigen met de knoppen in de knoppenbalk (hieronder) |
| Omschrijving | vrije toelichting, bijvoorbeeld het doel |
| Template | het Synergy-document met het sjabloon: een .docx of .docm, van een documenttype dat sjablonen bevat. Heeft het document meer bijlagen, dan kiest de gebruiker bij het genereren welke |
| Genereren | Nieuwe pagina per record | aan = elk record begint op een nieuwe pagina; uit = alles achter elkaar, bijvoorbeeld voor etiketten |
| Uitvoeren via achtergrond proces | de definitie mag door de achtergrondtaak worden gegenereerd (hoofdstuk 15) |
| Genereren: Overslaan | Voorbeeld | de knop Voorbeeld in de laatste stap vervalt |
| Resultaat | na het genereren geen resultaatpagina, maar terug naar waar de gebruiker vandaan kwam (hoofdstuk 14) |
| Query | Verbinding | Synergy, Globe<nr> of een connectie uit Easy Menu → Instellingen |
| SELECT- t/m ORDER BY-clausule | de query, in vier delen (hoofdstuk 04) |
In de kop staan Word sjabloon genereren, Genereer VBScript module
voor MS Word (hoofdstuk 05) en Exporteren. In de knoppenbalk staan de
statusknoppen, Kopiëren (een kopie met (Kopie) achter de titel, inclusief lijsten
en sjabloon) en Genereren. De tabbladen onderaan — Kolommen, Lijsten, Grafieken,
Uitvoerformaten, Vaste bijlagen, Acties, Beveiliging, Integratie en Selectie velden — komen in de
volgende hoofdstukken aan bod.
Statussen
| Status | Wijzigen | Genereren |
| Ontwikkeling | ja; weinig is verplicht | nee |
| Test modus | ja | alleen als voorbeeld, door wie definities mag onderhouden: één verzameldocument om te downloaden, niets bewaard, geen acties |
| Vrijgegeven | nee, de definitie is read-only | ja, door iedereen met rechten; documenten worden bewaard en acties uitgevoerd |
| Gearchiveerd | nee | nee |
Wil je een vrijgegeven definitie aanpassen, zet hem dan terug naar Ontwikkeling; dat kan
altijd. Naar Test modus of Vrijgegeven kan pas als de query kolommen oplevert, er
minimaal één uitvoerformaat is, er een sjabloon gekoppeld is en elke lijst kolommen heeft; anders
meldt de pagina Kan de status niet wijzigen omdat: met wat er ontbreekt.
04De query en de kolommen
De query schrijf je in vier delen, elk mét het sleutelwoord: SELECT …,
FROM … (inclusief joins), WHERE … en ORDER BY …. De WHERE-clausule
bepaalt de basisset, bijvoorbeeld “alle verzoeken van type 40”. Dat je bij het
genereren op één project wilt filteren, regel je níét in de WHERE maar met een selectieveld of een
integratie (hoofdstuk 08 en 13): die vullen de WHERE aan met kolom = gekozen waarde.
SELECT c.cmp_name AS Relatienaam,
c.cmp_fadd1 AS Adres,
a.HID AS VerzoekHID,
a.Description AS Omschrijving,
a.StartDate AS Datum
FROM Absences a
INNER JOIN cicmpy c ON c.cmp_wwn = a.CustomerID
WHERE a.Type = 40 AND a.Status = 1
ORDER BY c.cmp_name
- Eén SELECT-opdracht. Meerdere opdrachten,
UNION en muterende opdrachten zoals
DELETE worden geweigerd, net als ---commentaar in de FROM-, WHERE- en
ORDER BY-clausule.
- Elke kolom heeft een alias nodig die met een letter begint, uniek is en maximaal 128 tekens
telt. De alias is de veldnaam in het sjabloon, dus kies herkenbare namen:
Relatienaam
zegt meer dan cmp_name.
- Valideren controleert de query zonder te bewaren; bij bewaren gebeurt dat ook.
Kopiëren zet de hele query in één tekstvak, om te testen in SQL Server Management
Studio. Maak SELECT-clausule vult de SELECT met alle kolommen van de FROM.
Kolommen
Na het bewaren leest EasyWordMerge de kolommen uit de query. Het tabblad Kolommen
toont per kolom de Alias (de veldnaam in het sjabloon), de Kolomnaam
(de oorspronkelijke naam, bruikbaar in een WHERE, bijvoorbeeld a.ProjectNumber), de
Gegevenssoort en de Weergave-opties. Klik op een kolom om de
weergave in te stellen:
| Gegevenssoort | Weergave-opties |
| Geheel getal | 0 · 0.000 (met duizendtalscheiding) · 00.000.000 (als verzoek- of documentnummer). Type Gebruik waarde of Document actie (hoofdstuk 09) |
| Getal (decimaal) | 0,00 · 0.000,00 |
| Datum/tijd | dd-mm-yyyy · dd-mm-yyyy HH:mm · dd mmmm yyyy (3 september 2026) · HH:mm |
| Tekst | Hoofdletters · Kleine letters · Eerste letter hoofdletter; plus Voorkom dubbele spatie: staan voornaam, tussenvoegsel en achternaam naast elkaar en is het tussenvoegsel leeg, dan komt er geen dubbele spatie |
| Ja/Nee | 0 of 1 · Ja of Nee · ja of nee |
| Binair | Type Afbeelding (bijvoorbeeld een productfoto) of Document: een Word-document dat op die plek wordt ingevoegd |
| GUID | Type Document (Samenvoegbare bijlage) of Document (Bestaand document) (hoofdstuk 10 en 09) |
Datums en getallen worden opgemaakt volgens de instellingen van de gebruiker die genereert. Zonder
weergave-optie komt de waarde zoals hij uit de database komt. Een kolom die ergens in gebruik is
(als lijstparameter, selectieveld of integratie) kun je niet uit de query halen; de melding zegt waar
hij gebruikt wordt.
05Het sjabloon in Word
Het sjabloon is een gewoon Word-document (.docx of .docm) met
samenvoegvelden, dezelfde velden die Word zelf gebruikt bij afdruk samenvoegen. De
naam van elk veld is een alias uit de definitie. Daarnaast kent EasyWordMerge een paar vaste
velden:
| Veld | Betekenis |
| TableStart:Main | begin van het deel dat per record herhaald wordt (Begin van document) |
| TableEnd:Main | einde daarvan (Eind van document). Ontbreken ze, dan zet EasyWordMerge ze zelf aan het begin en eind van het document |
| <Alias> | de waarde van die kolom |
| Image:<Alias> | een afbeelding uit een binaire kolom |
| Document:<Alias> | een Word-document uit een binaire kolom, ingevoegd op die plek |
| TableStart:<Lijst> … TableEnd:<Lijst> | een herhalende lijst (hoofdstuk 06) |
| Chart:<Naam> | een grafiek (hoofdstuk 07) |
| env_hr_… | gegevens van de medewerker die genereert, bijvoorbeeld env_hr_fullname (hoofdstuk 12) |
Staat in de instellingen Niet-merge velden kunnen gebruiken ({{tag}}) aan, dan mag je in
plaats van een veld ook gewoon {{Alias}} als tekst typen.
Velden in het sjabloon zetten
Word sjabloon genereren (in de kop van de definitie) is de snelste weg. Je kiest
een basis template: een huisstijldocument van een documenttype dat in de instellingen als
Bevat WordMerge basis templates staat. Je krijgt een .docx met de naam van de
definitie: de huisstijl blijft staan, omsloten door begin en einde van het document, en op een aparte
pagina erachter staan alle tags — per lijst al een kant-en-klare tabel met de kolomnamen als
koprij. Knip de velden naar hun plek en gooi de tagpagina daarna weg. Met het vinkje Als document
in Synergy aanmaken en koppelen aan deze definitie en een Documenttype voor het sjabloon
staat het resultaat direct als sjabloon bij de definitie.
Genereer VBScript module voor MS Word levert een .bas-bestand met per
veld een macro. Handig om later een veld toe te voegen aan een bestaand sjabloon:
- Klik in de kop op Genereer VBScript module voor MS Word en bewaar het bestand.
- Open het sjabloon in Word en ga met Alt + F11 naar de Visual Basic-editor.
- Klik met rechts op ThisDocument van jouw document en kies Bestand importeren. Het
.bas-bestand mag daarna weg.
- Zet de cursor waar een veld moet komen, kies Beeld → Macro's en voer de macro van dat veld uit.
Een bestaande module verwijder je eerst (in de editor: Module1 met rechts
verwijderen). Wil je de macro's in het document houden, bewaar het dan als .docm.
Met de hand kan ook: in Word Invoegen → Snelonderdelen → Veld
→ MergeField, met de alias als veldnaam. Dat is ook de plek om de mogelijkheden van Word
zelf te gebruiken, zoals tekst die alleen verschijnt als een veld gevuld is.
Tips
- Kop- en voettekst. Velden werken daar ook; zet daar dan ook
TableStart:Main en TableEnd:Main omheen.
- Begin- en eindcodes klein maken. De codes verdwijnen bij het samenvoegen. Maak
ze in het sjabloon een heel kleine letter, dan zie je beter hoe het resultaat eruit komt te
zien.
- Hyperlinks. Een link naar een verzoek maak je met een veld in de URL:
…/WflRequest.aspx?BCAction=1&ID={«VerzoekID»}. Een GUID hoort tussen
{ en }; een project- of artikelcode niet. Moet de tekst van de link zelf ook
een veld zijn, bewerk de link dan met Alt + F9 in de veldcodeweergave.
- Sjabloon aanpassen na een wijziging in de query. Tekstuele wijzigingen doe je
gewoon in Word. Komt er een kolom bij, genereer dan de macro's opnieuw of maak het sjabloon opnieuw
met Word sjabloon genereren.
06Lijsten
Een lijst is een tweede query die binnen het document herhaald wordt, bijvoorbeeld de openstaande
verzoeken van de relatie of de leden van een project. Je voegt hem toe op het tabblad
Lijsten.
| Veld | Betekenis |
| Naam | het voorvoegsel van de lijst in het sjabloon: TableStart:<Naam> |
| Omschrijving | ter informatie |
| Gebruik 'Geen gegevens' tag | aan = je kunt in het sjabloon een tekst opnemen die verschijnt als de lijst leeg is |
| Verbinding | standaard die van de definitie |
| SELECT- t/m ORDER BY-clausule | de query van de lijst, met dezelfde regels als die van de definitie |
Na het eerste bewaren verschijnen twee tabbladen. Kolommen werkt als bij de
definitie. Bij Lijst parameters koppel je een kolom van de definitie aan een kolom van
de lijst (Definitie: kolom → Lijst: Kolom): de lijst toont dan per record alleen
de regels met dezelfde waarde. Koppel je ProjectNr aan ProjectNr, dan krijgt
elke projectbrief alleen de regels van zijn eigen project.
In Word
- Als tabel. Maak een tabel met een koprij en één datarij. Zet
TableStart:<Lijst> vóór het eerste veld in de eerste cel van de datarij en
TableEnd:<Lijst> ná het laatste veld in de laatste cel. Die rij wordt per regel
herhaald. Word sjabloon genereren zet deze tabel al voor je klaar.
- Als opsomming. Zet de start- en eindcode om de velden in één opsommingsregel.
- Geen gegevens. Zet de tekst tussen
TableStart:<Lijst>_NoData
en TableEnd:<Lijst>_NoData, bijvoorbeeld in een extra tabelrij met samengevoegde
cellen.
07Grafieken
Een grafiek is een lijst, anders getekend: de rijen van de lijst zijn de
categorieën, de kolommen die je kiest zijn de reeksen. De lijstquery levert de rijen
met een gewone GROUP BY; de volgorde is de ORDER BY van de lijst.
SELECT FORMAT(Datum, 'yyyy-MM') AS Maand,
SUM(Omzet) AS Omzet,
SUM(Begroting) AS Begroting
FROM …
WHERE Datum >= DATEADD(month, -12, GETDATE())
GROUP BY FORMAT(Datum, 'yyyy-MM')
ORDER BY 1
Op het tabblad Grafieken voeg je een grafiek toe:
| Veld | Betekenis |
| Naam | wordt de tag Chart:<Naam> in het sjabloon |
| Bronlijst | de lijst met de gegevens |
| Grafieksoort | Kolom, Kolom (gestapeld), Staaf, Staaf (gestapeld), Lijn, Vlak, Taart of Ring |
| Labelkolom | de kolom met de namen van de categorieën, hier Maand |
| Kleurkolom | optioneel: een kolom met per rij een kleur #RRGGBB |
| Maximaal aantal rijen | 0 = alle rijen |
| Weergave-opties | titel, legenda (tonen en positie), gegevenslabels (tonen en notatie), titels van de assen, breedte en hoogte |
| Reeksen | per reeks een getalkolom, een bijschrift voor de legenda, een volgorde en eventueel een kleur |
Kleur kent drie niveaus: niets opgeven (Word kiest volgens het thema van het
document), een kleur per reeks, of een kleur per rij uit de kleurkolom. Met die laatste bepaalt SQL de
kleur: CASE WHEN Status = 'Vervallen' THEN '#E15759' ELSE '#4E79A7' END AS Kleur. Bij
taart en ring is dat het zinnigste niveau; die tekenen bovendien maar één reeks. Een lege of
ongeldige kleur wordt overgeslagen.
Zet Chart:<Naam> als veld in het sjabloon, binnen de hoofdregio en buiten een
lijstregio. In Word wordt het een echte grafiek die de ontvanger nog kan bijstellen; in PDF en HTML
wordt hij meegetekend. Is de lijst leeg, dan komt er geen grafiek en verdwijnt het veld. Dezelfde lijst
mag daarnaast gewoon als tabel in het document staan.
08Selectievelden
Een selectieveld vraagt bij het genereren om een waarde en filtert daarop: de WHERE-clausule
van de definitie wordt aangevuld met Kolomnaam = gekozen waarde. Je gebruikt ze als de
definitie vanuit het menu of de definitie zelf gestart wordt; bij een integratie komt de waarde van
de pagina (hoofdstuk 13).
| Veld | Betekenis |
| Label (+ Term) | de tekst bij het invoerveld; wordt vanzelf gevuld als je een onderwerp kiest |
| Sortering | volgorde op het scherm |
| Geactiveerd | uit = het veld wordt niet gevraagd. Handig voor een veld waarmee je alleen test |
| Onderwerp | Project, Moederproject, Debiteur, Crediteur, Relatie, Contactpersoon, Assortiment, Artikel, Medewerker, Verkoopkans, Offerte, Verzoek, Datum, Datumtraject, Ja/Nee-veld, Tekst, Geheel getal of Double |
| Filter | bij een onderwerp met een bladeraar: een extra criterium voor die bladeraar, zoals bij een verzoekveld. Eronder staan de bladeraar, de tabel, het voorvoegsel en een voorbeeld. Het filter wordt bij bewaren gecontroleerd |
| Selectie | bij Tekst en Geheel getal: vaste keuzes, zoals bij een verzoekveld: Waarde1,Omschrijving1,TermID;Waarde2,Omschrijving2,TermID. Minimaal Waarde1;Waarde2; dan is de waarde ook de omschrijving. Bij Geheel getal moet elke waarde een geheel getal zijn. Staan er keuzes, dan kies je bij het genereren uit een keuzelijst; anders typ je de waarde zelf in |
| Gekoppeld: Selectie veld | bij Contactpersoon: een ander selectieveld (relatie, debiteur of crediteur) waarvan de contactpersonen getoond worden |
| Definitie: kolom, Kolomnaam | de kolom waarop gefilterd wordt. De keuzelijst vult de kolomnaam; je mag ook een kolom opgeven die niet in de SELECT staat, zoals a.ProjectNumber. Soort en bestaan worden gecontroleerd. Een kolomnaam kan maar één keer per definitie |
09Uitvoerformaten en bewaren
Op het tabblad Uitvoerformaten bepaal je in welk formaat de documenten komen:
Docx, PDF of Html. Een nieuwe definitie krijgt
Docx. Het formaat met Standaard staat bij het genereren voorgeselecteerd en wordt door de
achtergrondtaak gebruikt.
Staat Bewaar gegenereerd document uit, dan wordt er één document gemaakt met
alle brieven erin, om te downloaden — de pagina waarschuwt daar ook voor. Staat het aan, dan
wordt elk document als Synergy-document bewaard:
| Veld | Betekenis |
| Onderwerp, Bestandsnaam | mogen samenvoegcodes bevatten: [Alias], bijvoorbeeld Bevestiging [Relatienaam]. Het icoon ernaast zet een alias voor je achteraan |
| Type | het documenttype |
| Versie | hoe een nieuwe versie genummerd wordt |
| Document: Eigenschappen | Relatie, Contactpersoon, Project, Assortiment, Artikel, Verkoopkans, Beveiligingsniveau, Medewerker en Tags: per veld een kolom uit de query van dezelfde soort (een GUID bij Relatie, tekst bij Project). Verplichte velden van het documenttype zijn gemarkeerd |
| Rechten | Aanmaker Eigenaar, Divisie – Document, Divisie – Aanmaker, Rol, Kostenplaats, Kostenplaatsgroep of Project – Lid, met de bijbehorende waarde |
Een bestaand document bijwerken
Standaard wordt elk document nieuw aangemaakt. Wil je een document opnieuw genereren in hetzelfde
Synergy-document, zet dan in de query een GUID-kolom met het ID van dat document, met type
Document (Bestaand document), en een getalkolom met type Document actie:
| Waarde | Wat er met het bestaande document gebeurt |
0 | niets: er komt een nieuw document |
1 | er komt een nieuwe versie van het document |
2 | het gegenereerde bestand komt er als extra bijlage bij |
3 | de bestaande bijlage wordt vervangen |
10Bijlagen
Vaste bijlagen zijn Word-documenten (.doc, .docx,
.docm) uit Synergy die bij elk gegenereerd document komen, bijvoorbeeld de
leveringsvoorwaarden. Per bijlage kies je het Bijlage samenvoegtype:
- Samenvoegbare bijlage — de bijlage wordt achter het document geplakt,
als nieuwe pagina, en velden erin worden ook gevuld;
- Bestandsbijlage — de bijlage gaat als los bestand mee bij het bewaren en
bij een e-mail.
Een Synergy-document met meerdere bijlagen levert ze allemaal. Bijlagen uit de
query: een GUID-kolom met type Document (Samenvoegbare bijlage) plakt de bijlagen
van dát document achter het gegenereerde document, per record verschillend.
11Acties
Een actie draait nadat de documenten zijn gegenereerd en bewaard, alleen bij
Genereren (niet bij een voorbeeld of in test modus). Op het tabblad
Acties kies je de actie, de Volgorde en het Moment van
actie: Na losse document (per document) of Na genereren van alle
documenten (één keer, met het verzameldocument).
| Actie | Doet |
| Verzoek — Aanmaken | een nieuw verzoek, met het document als bijlage als je dat wilt |
| Verzoek — Aanmaken of bewerken | idem, of een bestaand verzoek bijwerken als het ID gevuld is |
| Verzoek — Bewerken | een bestaand verzoek bijwerken, bijvoorbeeld de status of een vrij veld |
| Verzoek — Verwijderen | een verzoek verwijderen |
| E-mail — E-mail versturen | het document mailen: afzender, geadresseerde, CC, BCC en onderwerp |
| Bestand — Opslaan | het document als bestand op de server zetten: pad en bestandsnaam |
| Documenten — Aanmaken | één Synergy-document met alle gegenereerde documenten achter elkaar, bijvoorbeeld om certificaten in één keer af te drukken: type, onderwerp en bestandsnaam |
Per parameter kies je waar de waarde vandaan komt: Veldcode (een kolom uit de
query), Vaste waarde (tekst, eventueel met samenvoegcodes) of
Omgevingsgegeven (de huidige datum, het gegenereerde document, of ID, naam of e-mail
van de gebruiker die genereert). Verplichte velden van het verzoektype worden pas bij het uitvoeren
gecontroleerd, niet bij het inrichten.
E-mail
E-mail versturen loopt via de SMTP-server die in Synergy is ingesteld. Werkt de organisatie met
Microsoft 365, dan is daar meestal een relay voor nodig, omdat gewone SMTP-aanmelding daar
uitstaat.
Een eigen actie kan als maatwerk worden toegevoegd; die verschijnt dan vanzelf in de keuzelijst.
12Beveiliging en medewerkergegevens
Op het tabblad Beveiliging geef je Rollen en
Functies op: wie genereert, moet alle opgegeven rollen en functies
hebben. Meestal is één rol genoeg. Zonder rollen en functies mag iedereen met toegang tot
EasyWordMerge de definitie starten. De controle geldt bij het starten én bij het tonen van knoppen en
lijsten via een integratie.
Onder Medewerker gegevens en Manager gegevens (tabblad
Kolommen, knop Bewerken) vink je aan welke gegevens van de medewerker die genereert, en van
diens manager, in het sjabloon beschikbaar zijn. De velden heten env_hr_… en voor de
manager env_hr_man_…:
| Veld | Inhoud |
env_hr_res_id, env_hr_usr_id | medewerkernummer en inlognaam |
env_hr_fullname, env_hr_initials, env_hr_firstname, env_hr_middlename, env_hr_lastname | naam, in delen |
env_hr_email, env_hr_phone | zakelijk e-mailadres en telefoonnummer |
env_hr_pred_description, env_hr_job_description | aanhef en functieomschrijving |
Image:env_hr_signature | de handtekening van de medewerkerkaart, als afbeelding |
env_hr_freefield1 t/m env_hr_freefield20 | de vrije velden van de medewerker |
env_hr_costcentre(_code), env_hr_costunit(_code) | kostenplaats en kostendrager |
env_hr_jobtitle_code, env_hr_focus, env_hr_room | functiecode, focus, kamer |
env_hr_physical_location(_code), env_hr_jobgroup(_code), env_hr_jobactivity(_code) | locatie, functiegroep, functieactiviteit |
Hoe minder je aanvinkt, hoe korter de macro-module. Let op bij de achtergrondtaak: daar is “de
medewerker die genereert” de gebruiker onder wie de taak draait (hoofdstuk 15).
13Integratie in Synergy
Met een integratie komt er een knop op een Synergy-pagina die een definitie start voor het record
dat op de pagina staat. Je richt hem in op het tabblad Integratie van de definitie
(voor één definitie), of via Overzichten → Easy WordMerge → Integratie (ook
voor een knop met meerdere definities).
| Veld | Betekenis |
| Pagina | de Synergy-pagina, zie de lijst hieronder |
| Label (+ Term), Sortering | de tekst op de knop en de volgorde van de knoppen |
| Button type | Definitie: de knop start één definitie. Definities: er hangen meerdere definities onder |
| Toon als buttons | bij Definities: aan = de definities verschijnen als extra knoppen; uit = een lijst op een nieuwe pagina |
| Actief | uit = de knop verschijnt niet |
| Criteria | een SQL-voorwaarde op de tabel van de pagina; de knop verschijnt alleen als het record eraan voldoet. Bijvoorbeeld op de relatiekaart alleen klanten met een open verzoek van type 40 |
| Mijn werkstroom | alleen op Verzoek: de knop verschijnt alleen als het verzoek in de werkstroom van de gebruiker staat |
| Eerst verzoek bewaren | alleen op Verzoek: het verzoek wordt bewaard voordat het genereren start, zodat net ingevulde velden meegaan |
| Definitie, Definitie: kolom, Kolomnaam | welke definitie, en op welke kolom de sleutel van de pagina gefilterd wordt: de WHERE wordt aangevuld met kolomnaam = sleutel. Het datatype moet passen: een GUID bij relaties en verzoeken, tekst bij projecten en artikelen |
| Type | op een zoekpagina: wat de gevonden sleutel is, bijvoorbeeld Relatie of Contactpersoon bij Relaties zoeken |
Pagina's: Relatie, Persoon, Contactpersoon, Medewerker, Project, Artikel,
Verkoopkanskaart en Verzoek, en de zoekpagina's Relaties zoeken, Zoeken medewerkers, Artikelen
zoeken, Projecten zoeken, Verkoopkansen zoeken en Verzoeken zoeken. Op een zoekpagina staan de knoppen
boven de resultaten en worden alle gevonden records gegenereerd.
Een knop verschijnt alleen als er minimaal één vrijgegeven definitie onder hangt. Wie definities
mag onderhouden, ziet ook definities in Test modus. Zonder licentie krijgt de knop
DEMO achter de tekst.
Een definitie maken vanuit een zoekopdracht. Op de zoekpagina's staat voor wie
definities mag onderhouden een icoon in de kop: Maak een Definitie op basis van deze
zoekopdracht. Dat opent een nieuwe definitie met de query van de zoekopdracht al ingevuld.
Standaard Word Merge van Synergy verbergen. Met Uitschakelen standaard Word
Merge in de instellingen verdwijnen de standaardknoppen voor brieven en e-mails van Synergy op de
pagina's en zoekpagina's, zodat gebruikers alleen EasyWordMerge zien.
14Genereren
Een definitie start je op vier manieren: via Overzichten → Easy WordMerge →
Genereren (alle vrijgegeven definities, per groep), vanaf de definitie zelf met
Genereren, met een knop op een Synergy-pagina, of automatisch: via de achtergrondtaak
(hoofdstuk 15) of een EasyVerify-actie bij het bewaren.
- Invoer. Afhankelijk van de definitie: welke bijlage van het sjabloon, de selectievelden en het uitvoerformaat. Vanaf een integratie is de sleutel al gevuld en wordt er niet om een selectie gevraagd.
- Bevestigen. Een overzicht van wat je gekozen hebt, met twee vinkjes: Bewerken in Word link (bij Docx: een link om het document direct in Word te openen) en Openen bij 1 document (bij bewaren: is er één document, dan ga je er direct naartoe). De standaard staat in de instellingen.
- Voorbeeld voegt samen en biedt het resultaat aan als download; er wordt niets bewaard en er gaan geen acties af. Genereren bewaart de documenten en voert de acties uit.
Heeft de definitie geen actieve selectievelden, één uitvoerformaat en een sjabloon met één
bijlage, dan begint het genereren direct bij Bevestigen. Na het genereren toont de
resultaatpagina de bewaarde documenten met een link, of komt het verzameldocument als download. Met
Overslaan: Resultaat op de definitie ga je direct terug naar waar je vandaan kwam, of naar het
document bij Openen bij 1 document. Samen met één sjabloon en geen selectievelden maakt dat
van een integratieknop een knop die met één klik een document maakt.
Groepen
Met groepen houd je de pagina Genereren overzichtelijk; de achtergrondtaak kan ook per
groep draaien. Een groep heeft een Titel (uniek, eventueel met term), een
Omschrijving en een Sortering. Met Bewerken vink je de
definities aan die erin horen en zet je ze met de pijltjes in volgorde. Definities zonder groep staan
los op de pagina Genereren.
15Achtergrondtaak
Een definitie kan op vaste tijden vanzelf draaien, bijvoorbeeld elke nacht de bevestigingen van
nieuwe inschrijvingen. De achtergrondtaak neemt alleen definities die Vrijgegeven
zijn en waarbij Uitvoeren via achtergrond proces aan staat. Bij het bewaren van zo'n
definitie wordt gecontroleerd dat:
- er een sjabloon is met precies één
.docx- of
.docm-bijlage;
- het uitvoerformaat met Standaard het document bewaart: een taak heeft
niemand om een download aan te geven.
Er is ook niemand om selectievelden in te vullen. De WHERE-clausule van de definitie moet dus
precies de records opleveren die gegenereerd moeten worden. Zorg dat een record de volgende keer niet
opnieuw meekomt, bijvoorbeeld met een actie die een verzoek bijwerkt en een WHERE die daarop
controleert. Vaste bijlagen gaan gewoon mee. “De gebruiker die genereert” — voor de
medewerkergegevens en de omgevingsgegevens van een actie — is de gebruiker onder wie de taak
draait, vaak een systeemgebruiker.
| Wat | Opdracht |
| alle definities voor de achtergrondtaak | /ASSEMBLY:CSEasyWM.Jobs /CLASS:GenerateDefinitions |
| één definitie | /ASSEMBLY:CSEasyWM.Jobs /CLASS:GenerateDefinition /HID:<nummer> — het nummer van de definitie, bijvoorbeeld 22 voor 00.000.022 |
| de definities van één groep | /ASSEMBLY:CSEasyWM.Jobs /CLASS:GenerateDefinitionGroup /HID:<nummer> — het nummer van de groep |
Voorbeeld: alle definities
cd "<installatiemap van Synergy>\bin"
Exact.Process.exe /DBCONFIG:<omgeving> /ASSEMBLY:CSEasyWM.Jobs /CLASS:GenerateDefinitions
Hoe je zo'n taak inplant, staat bij Installatie → Achtergrondtaken. Combineer
je de drie varianten, let dan op de tijden: een definitie die in een groep zit én onder
“alle” valt, kan anders twee keer draaien. Het verloop staat in het proceslog van Synergy
(Systeem → Overzichten → Log → Processen): start en einde per
definitie, het aantal gemaakte documenten, Geen gegevens gevonden of de fout.
16Instellingen
Inrichting → Easy WordMerge → Instellingen. Alleen een beheerder kan
bewerken; bewaren leegt de sessie.
| Sectie | Veld | Effect |
| Beveiliging | Onderhouden: Definities | de rol die definities mag onderhouden; verplicht. Beheerders mogen het altijd |
| Documenttypes | Bevat WordMerge sjablonen | de documenttypes waarin sjablonen staan; alleen documenten daarvan zijn te kiezen als sjabloon. Verplicht |
| Bevat WordMerge basis templates | de documenttypes met huisstijldocumenten voor Word sjabloon genereren; optioneel |
| Exact Synergy Enterprise | Uitschakelen standaard Word Merge | verbergt de standaardknoppen van Synergy voor brieven en e-mails (hoofdstuk 13) |
| Na het genereren | Bewerken in Word link, Openen bij 1 document | de standaardwaarde van de twee vinkjes bij Bevestigen |
| Genereren: Instellingen overslaan | Overslaan: Voorbeeld, Overslaan: Resultaat | de standaard voor een nieuwe definitie |
| OTAP Beheer | Verwijder niet-gebruikte velden | aan (standaard): velden in het sjabloon waarvoor geen kolom is, verdwijnen uit het resultaat. Uit: ze blijven staan, zodat je ziet welk veld niet gevuld wordt |
| Samenvoegopties | Niet-merge velden kunnen gebruiken ({{tag}}) | {{Alias}} als gewone tekst in het sjabloon wordt ook gevuld |
Of een documenttype sjablonen bevat, kun je ook bij het documenttype zelf aanvinken (tabblad
Meer eigenschappen). Is er geen enkel type met sjablonen, dan waarschuwt de definitie
daarvoor.
17Importeren en exporteren
Met Exporteren (ook via het icoon in de kop van een definitie) kies je, gefilterd op
status en groep, één of meer definities en download je ze als XML-bestand. Alles gaat mee: de query,
kolommen, lijsten, grafieken, selectievelden, uitvoerformaten, bijlagen, acties, beveiliging,
medewerkergegevens, integraties én het sjabloondocument.
Met Importeren kies je het bestand en het Documenttype voor de
sjablonen, en klik je Tonen. De controlelijst toont per definitie en per lijst de verbinding
die hier in gebruik is en die uit het bestand; kies per regel de verbinding (verplicht) en klik
Importeren. Een definitie met hetzelfde ID wordt overschreven en haar sjabloondocument
bijgewerkt; een nieuwe definitie krijgt een nieuw sjabloondocument van het gekozen type. De
documenttypes die bij de uitvoerformaten staan, moeten in de doelomgeving bestaan.
18Demo en licentie
Zonder geldige EasyWordMerge-licentie draait de tool in demomodus: alleen het eerste record wordt
gegenereerd, lijsten tonen maximaal twee regels, er staat een watermerk Easy WordMerge by
DataKings - DEMO MODE over het document en de integratieknoppen krijgen DEMO achter de
tekst. De pagina's melden Demo licentie met de reden.
19Als het niet werkt
| Symptoom | Oorzaak |
| Waarschuwing dat er geen documenttype met sjablonen is | in de instellingen staat geen type bij Bevat WordMerge sjablonen |
| Het sjabloon is niet te kiezen bij Template | het document is niet van een type met sjablonen, of heeft geen .docx/.docm-bijlage |
| Kan de status niet wijzigen omdat: | er ontbreken kolommen, een uitvoerformaat, het sjabloon of de kolommen van een lijst (hoofdstuk 03) |
| De query wordt geweigerd | UNION, meerdere opdrachten, een muterende opdracht, ---commentaar buiten de SELECT, of een kolom zonder bruikbare alias (hoofdstuk 04) |
| Een veld blijft leeg of staat er letterlijk | de veldnaam wijkt af van de alias; met Verwijder niet-gebruikte velden uit zie je welk veld het is |
| De hele brief staat er per record twee keer in | TableStart:Main staat dubbel in het sjabloon, bijvoorbeeld doordat de tagpagina van Word sjabloon genereren is blijven staan |
| Een lijst is leeg | de lijstparameters koppelen de verkeerde kolommen, of er zijn geen gegevens; gebruik de tag Geen gegevens |
| Geen grafiek in het document | er is geen grafiek met die naam, de lijst is leeg, of de tag staat in een lijstregio |
| De knop verschijnt niet op de pagina | de integratie staat niet op Actief, de definitie is niet vrijgegeven, de criteria matchen niet (of geven een fout), Mijn werkstroom staat aan terwijl het verzoek niet in jouw werkstroom staat, of je rol of functie ontbreekt |
| De e-mail komt niet aan | er is in Synergy geen SMTP-server ingesteld, of de server weigert (Microsoft 365 zonder relay) |
| De achtergrondtaak doet niets | de definitie is niet vrijgegeven, Uitvoeren via achtergrond proces staat uit, of de WHERE levert niets op; kijk in het proceslog |
| Watermerk DEMO MODE | geen geldige licentie |
Deel vijf
Easy Office 365
Synergy en Microsoft 365 in elkaars verlengde: verzoeken verschijnen als afspraak in
de Outlook-agenda van de medewerker, afspraken die in Outlook worden gemaakt of verschoven komen
terug als verzoek, en e-mails die een medewerker in een Outlook-map zet, worden als document in
Synergy bewaard, gekoppeld aan de juiste relatie.
De kern: Synergy en Outlook praten via achtergrondtaken met
elkaar. Wat er in Synergy gebeurt, zet een opdracht klaar; de taak voert hem uit en haalt tegelijk
op wat er in Outlook veranderd is.
01Het menu
Alles zit onder Menu: Easy by DataKings.
| Tabblad | Menu-item | Wat |
| Invoer | Easy Office365 → Synchroniseren aanzetten | medewerkers aan- of uitzetten en bestaande verzoeken klaarzetten (hoofdstuk 07) |
| Inrichting | Easy Office365 → Instellingen: Kalender | de agendakoppeling (hoofdstuk 03 en 04) |
| Inrichting | Easy Office365 → Instellingen: E-mail | de e-mailkoppeling en de mappen (hoofdstuk 09) |
| Inrichting | Easy Office365 → Synchroniseren aanzetten | zoals onder Invoer |
De instellingen kan alleen een beheerder wijzigen. Per verzoektype richt je de agendakoppeling in
op het verzoektype zelf (hoofdstuk 05).
02Hoe het werkt
De koppeling bestaat uit twee delen die los van elkaar aan en uit kunnen:
| Deel | Wat er gebeurt |
| Agenda | Verzoeken van de ingestelde verzoektypen komen als afspraak in de Outlook-agenda van de medewerker van het verzoek. Afspraken die de medewerker in Outlook maakt, verschuift of verwijdert, gaan terug naar Synergy als nieuw, bijgewerkt of afgekeurd verzoek. De Outlook-categorie van een afspraak bepaalt het verzoektype |
| E-mail | Onder de Inbox (en eventueel Verzonden items) van de medewerker staat een map, standaard Easy Synergy, met daaronder een map per configuratie. Een e-mail die de medewerker daarin zet, wordt een Synergy-document van het ingestelde type, gekoppeld aan de relatie en contactpersoon van de afzender of geadresseerde, en eventueel een verzoek |
Alleen medewerkers met het ingestelde ja/nee-veld op hun medewerkerkaart en een zakelijk
e-mailadres in het ingestelde domein doen mee. Het gesprek met Microsoft 365 loopt via Microsoft Graph,
met een eigen app-registratie van de klant. Niets hiervan gebeurt direct bij het bewaren: de
achtergrondtaken (hoofdstuk 11) doen het werk, dus zonder ingeplande taken gebeurt er
niets.
03Verbinding met Microsoft 365
Maak in Microsoft Entra ID (voorheen Azure AD) van de klant een app-registratie
met een clientgeheim. De koppeling werkt namens de organisatie, zonder dat
medewerkers inloggen, en heeft daarom toepassingsmachtigingen op Microsoft Graph
nodig, met toestemming van een beheerder:
| Machtiging | Waarvoor |
| User.Read.All | de verbindingstest bij het bewaren van de instellingen |
| Calendars.ReadWrite | afspraken lezen, maken, wijzigen en verwijderen |
| MailboxSettings.ReadWrite | de Outlook-categorieën per verzoektype bijhouden |
| Mail.ReadWrite | alleen voor e-mail: berichten lezen, de mappen aanmaken en berichten als gelezen markeren |
Vul de gegevens in op Instellingen: Kalender en Instellingen:
E-mail, sectie Verbinding:
| Veld | Betekenis |
| tenantId | de tenant (map-ID) van de organisatie |
| clientId | de toepassings-ID van de app-registratie |
| clientSecret | het clientgeheim; in de weergave staat er ********** |
| E-mail domein | het domein van de mailboxen, bijvoorbeeld @datakings.nl. Alleen medewerkers met een zakelijk e-mailadres in dit domein doen mee, en afspraken van een organisator in dit domein mogen in Synergy gewijzigd worden (hoofdstuk 06) |
Agenda en e-mail hebben elk hun eigen verbinding; dat mag dezelfde app-registratie zijn. Bij bewaren
wordt de verbinding getest; mislukt dat, dan wordt er niets bewaard. De gegevens worden versleuteld
opgeslagen. Verloopt het clientgeheim, vul dan een nieuw in; tot die tijd staat er een fout in het
log.
04Agenda: instellingen
Inrichting → Easy Office365 → Instellingen: Kalender.
| Sectie | Veld | Effect |
| Algemeen | Actief | uit = de agendataken doen niets; handig bij een storing |
| Log: Informatie | ook informatieve regels in het proceslog, niet alleen fouten |
| Log: Debug | per agenda-item een uitgebreide regel in het log, om een probleem uit te zoeken; niet laten aanstaan |
| Begindatum | verzoeken en afspraken van vóór deze datum doen niet mee. Te kiezen tussen twee maanden terug en vandaag |
| Verzoektype bestaande verzoeken niet wijzigen | aan = een andere categorie in Outlook verandert het type van een bestaand verzoek niet (behalve bij het standaardtype, hieronder) |
| Neem verzoek HID op in agenda-tekst | aan = het verzoeknummer komt onderaan de tekst van de afspraak |
| Gebruikers: Selectie - Vrije velden | welk vrij ja/nee-veld van de medewerker (vrij veld 16 t/m 20) aangeeft dat een medewerker meedoet. Dit veld zet je met Synchroniseren aanzetten (hoofdstuk 07) |
| Verbinding | tenantId, clientId, clientSecret, E-mail domein | hoofdstuk 03 |
| Verzoektype | Standaard | het verzoektype voor een afspraak in Outlook zonder herkenbare categorie |
| Wijzigen: Type | een vrij tekstveld van het standaardtype. Staat er een verzoektype in, dan wordt het verzoek bij bewaren omgezet naar dat type en de werkstroom opnieuw opgebouwd, ook voor alle verzoeken van dezelfde reeks. Op het verzoek wordt het veld een keuzelijst met de gekoppelde verzoektypen |
Onderaan staat de lijst Verzoektypes met alle verzoektypen waarvoor de agenda aan
staat en hun instellingen; een klik op het ID opent het verzoektype.
05Agenda: instellingen per verzoektype
Bij het bewerken van een verzoektype staat een sectie Easy Office365:
| Veld | Effect |
| Synchroniseren kalender | verzoeken van dit type doen mee |
| Weergeven als | hoe de afspraak in Outlook staat: Bezet, Elders aan het werk of Afwezig. Wordt ook gebruikt om bij een afspraak zonder categorie een type te kiezen |
| Direct uitnodigen: Contactpersoon | de contactpersoon van het verzoek wordt meteen als deelnemer uitgenodigd. Hij moet dan een e-mailadres hebben |
| Later kunnen uitnodigen: Deelnemers | op het verzoek staat een knop Deelnemers om later contactpersonen uit te nodigen (hoofdstuk 08) |
| Gebruiken: Prioriteit | de prioriteit van het verzoek en het urgentieniveau in Outlook volgen elkaar |
| Gebruiken: Herinnering | de afspraak krijgt in Outlook een herinnering; niet bij een hele dag |
| Enkel Synergy naar Outlook | Synergy is leidend: wijzigingen in Outlook worden niet overgenomen, en wijkt de afspraak af, dan zet de volgende run hem terug zoals het verzoek is |
| Omschrijving locatie | het verzoekveld waarin de locatie van een afspraak uit Outlook komt |
| Gebruiken: Kleur, Kleur | de kleur van de Outlook-categorie van dit type |
06Agenda: wat er gesynchroniseerd wordt
Van Synergy naar Outlook
Een verzoek wordt klaargezet voor Outlook als het nieuw is of als de begin- of einddatum, het type,
de omschrijving of de locatie wijzigt, mits de medewerker meedoet, het type is ingericht, de
begindatum na de Begindatum uit de instellingen ligt en het geen concept is. De medewerker
moet een zakelijk e-mailadres hebben. Wordt het verzoek afgekeurd, dan verdwijnt de afspraak (of wordt
hij afgewezen als het een uitnodiging was); krijgt het een andere medewerker, dan verhuist de
afspraak naar diens agenda.
| In Outlook | Komt uit |
| Onderwerp | de omschrijving van het verzoek |
| Tekst | de opmerkingen van het verzoek, eventueel met het verzoeknummer eronder |
| Begin en einde | de begin- en einddatum; van 00:00 tot 23:00 wordt een afspraak voor de hele dag |
| Categorie | <categorie van het verzoektype> | <verzoektype> |
| Weergeven als, urgentie, herinnering | de instellingen van het verzoektype |
| Privé | het vinkje Privé van het verzoek |
| Deelnemers | de contactpersonen bij Deelnemers |
| Bijlagen | de bijlagen van het verzoek, bij de eerste keer versturen |
Een locatie en een Teams-vergadering vanuit Synergy meesturen is maatwerk per klant.
Van Outlook naar Synergy
- Een nieuwe afspraak wordt een nieuw verzoek voor de medewerker. Het type volgt
uit de Outlook-categorie: die heet net als het verzoektype, <categorie> |
<verzoektype>, of alleen het deel na de
|. Zonder herkenbare categorie telt
Weergeven als, en anders wordt het het standaardtype uit de instellingen.
- De categorieën hoeft de medewerker niet zelf te maken: de agendataak zet ze
maximaal eens per uur klaar in elke mailbox, met de kleur van het verzoektype.
- Een gewijzigde afspraak werkt het verzoek bij: onderwerp, tekst, begin en
einde, privé, locatie en eventueel urgentie. Een andere categorie verandert het type als het
verzoek het standaardtype heeft, of als het in de werkstroom van de medewerker staat en
Verzoektype bestaande verzoeken niet wijzigen uit staat. De werkstroom wordt dan opnieuw
opgebouwd.
- Bijlagen: Outlook is leidend. Komt een afspraak binnen, dan worden de bijlagen
van het verzoek gelijkgemaakt aan die van de afspraak; een bijlage die alleen in Synergy aan het
verzoek hangt, verdwijnt daarbij. Een bijlage die je later in Synergy toevoegt, gaat niet vanzelf naar
Outlook.
- Een verwijderde of geannuleerde afspraak keurt het verzoek af.
- Een terugkerende afspraak wordt een verzoek per keer; op het verzoek staat een
icoon waarmee je alle verzoeken van de reeks opzoekt.
- Deelnemers van een afspraak worden bij het standaardtype en bij types met
Later kunnen uitnodigen opgezocht als contactpersoon, en vullen dan de relatie en
contactpersoon van het verzoek.
- Is de medewerker niet de organisator en is de organisator geen collega uit het
e-maildomein, dan zijn datum, tijd, medewerker en omschrijving in Synergy niet te wijzigen: dat moet
de organisator doen.
De eerste keer
Bij de eerste synchronisatie van een medewerker zoekt de taak bij elke afspraak een bestaand
verzoek van die medewerker met hetzelfde begin en einde (en zo nodig dezelfde omschrijving) en
koppelt die, in plaats van een dubbel verzoek te maken.
07Synchroniseren aanzetten
Invoer → Easy Office365 → Synchroniseren aanzetten. Deze pagina
synchroniseert zelf niets: hij zet klaar wat de achtergrondtaak daarna doet. Kies bij
Actie:
| Actie | Wat er gebeurt |
| Aanzetten van gebruikers | de lijst toont de medewerkers bij wie de agenda nog uit staat, met een e-mailadres in het domein, en per verzoektype het aantal verzoeken vanaf vandaag. Per medewerker vink je aan: Activeer Synch (het ja/nee-veld aanzetten), Verstuur verzoeken (de bestaande verzoeken naar Outlook sturen) en eventueel Vul ExchangeID |
| Uitzetten van gebruikers | het ja/nee-veld weer uit. Er worden geen koppelingen of afspraken verwijderd; wat al klaarstaat, wordt nog afgehandeld |
| Bijwerken verzoeken | voor een verzoektype dat later is aangezet: de verzoeken die er al waren, alsnog klaarzetten voor alle medewerkers die meedoen |
Klik daarna Synchroniseer voor geselecteerde medewerkers en voer de achtergrondtaak
uit. Afgekeurde verzoeken tellen niet mee.
Let op
Vink Vul ExchangeID alleen aan als er eerder al met dezelfde agenda gesynchroniseerd is,
bijvoorbeeld bij een overstap van een oudere koppeling. Anders kan de taak afspraken niet terugvinden
en ontstaan er dubbele.
08Op het verzoek
Bij een verzoek van een type met agendakoppeling staan extra knoppen:
| Knop | Doet |
| Deelnemers | een pop-up met de deelnemers: uitnodigen of niet, de contactpersoon, het e-mailadres, het soort deelnemer en de reactie uit Outlook (geaccepteerd, afgewezen) met het tijdstip. Alleen bij types met Later kunnen uitnodigen, niet bij afgekeurde verzoeken en concepten |
| Tonen: Kalender tekst | de tekst van de afspraak zoals die in Outlook staat; voor de medewerker van het verzoek en beheerders |
| Start Teams meeting | als de afspraak een Teams-vergadering is: direct deelnemen |
| icoon Easy Office365: Log in de kop | het log van dit verzoek: wanneer het is klaargezet, verstuurd en ontvangen, met de verstuurde en ontvangen gegevens. Voor de medewerker van het verzoek en beheerders |
Bij een nieuw verzoek van een type met Direct uitnodigen meldt de pagina dat
contactpersonen worden uitgenodigd zodra het verzoek bewaard is, en staat bij de opmerkingen dat die
tekst als uitnodiging wordt verzonden.
09E-mail: instellingen en mappen
Inrichting → Easy Office365 → Instellingen: E-mail.
| Sectie | Veld | Effect |
| Algemeen | Actief, Log: Informatie, Log: Debug | als bij de agenda |
| Gebruikers: Selectie - Vrije velden | het ja/nee-veld op de medewerkerkaart dat aangeeft wie meedoet; mag een ander veld zijn dan bij de agenda. Zet het per medewerker aan op de medewerkerkaart |
| Verbinding | tenantId, clientId, clientSecret, E-mail domein | hoofdstuk 03 |
| Map | Inkomende email | de naam van de hoofdmap onder de Inbox, standaard Easy Synergy |
| Uitgaande email: Actief, Uitgaande email | ook verzonden mail verwerken, uit een hoofdmap onder Verzonden items (standaard ook Easy Synergy) |
| Configuratie | (lijst) | per submap wat er met een e-mail gebeurt; Toevoegen: Configuratie maakt een nieuwe |
De hoofdmap en de submappen maakt de taak zelf aan in elke mailbox die meedoet. Een configuratie:
| Sectie | Veld | Effect |
| Algemeen | Omschrijving, Actief | naam en aan/uit |
| Map | de naam van de submap, bijvoorbeeld Offertes |
| Markeer als gelezen | het bericht wordt na verwerking in Outlook als gelezen gemarkeerd |
| Bewaren als | Documenttype | het type van het document dat van de e-mail gemaakt wordt |
| Verzoektype | optioneel: er komt ook een verzoek, met het document eraan |
| Document: Functies | Toestaan: Dubbel | uit = een e-mail die al als document bestaat, wordt overgeslagen |
| Gebruiken: Reacties | een antwoord op een eerder bewaarde e-mail komt als reactie onder dat document |
| Verzoek: Functies | Toestaan: Dubbel | uit = bij een antwoord wordt het bestaande openstaande verzoek van dat gesprek gebruikt in plaats van een nieuw; dat verzoek komt weer op ongelezen |
| Document: Bijwerken | het bestaande verzoek krijgt het nieuwe document als gekoppeld document |
| Aanmaken | bij inkomende mail, bij uitgaande mail of bij beide |
10E-mail: wat er bewaard wordt
Elke nieuwe e-mail in een submap wordt een Synergy-document van het ingestelde type, op naam van de
medewerker van de mailbox, als e-maildocument met onderwerp, tekst (inclusief ingesloten
afbeeldingen), afzender, geadresseerden, CC en verzenddatum. De bijlagen van de e-mail gaan mee. Bij
een inkomende e-mail zoekt de taak de afzender op als contactpersoon, bij een
verzonden e-mail de geadresseerden, en vult daarmee de relatie en contactpersoon van
het document. Staat scripting uit bij het documenttype, dan wordt de tekst van de e-mail op dezelfde
manier opgeschoond als Synergy dat zelf doet.
Is er een verzoektype ingesteld, dan komt er een verzoek bij met het onderwerp als omschrijving, de
ontvangstdatum als begindatum, het document eraan en dezelfde relatie en contactpersoon. Lukt dat niet
omdat er verplichte velden ontbreken, dan wordt het verzoek als concept bewaard. De taak leest per map
alleen wat er sinds de vorige keer bij is gekomen; een e-mail verplaatsen naar een andere submap is
dus een nieuwe verwerking.
11Achtergrondtaken
Er zijn vier taken. Plan ze in zoals bij Installatie → Achtergrondtaken
beschreven.
| Taak | Opdracht | Doet |
| Agenda | /ASSEMBLY:CSEasyO365.Jobs /CLASS:CalenderSynch | de klaargezette verzoeken naar Outlook sturen én de wijzigingen uit Outlook ophalen. Eens per uur ook de categorieën bijwerken. Dit is de gebruikelijke keuze |
| Agenda: alleen versturen | /ASSEMBLY:CSEasyO365.Jobs /CLASS:CalenderSynchSend | alleen van Synergy naar Outlook |
| Agenda: alleen ontvangen | /ASSEMBLY:CSEasyO365.Jobs /CLASS:CalenderSynchReceive | alleen van Outlook naar Synergy |
| E-mail | /ASSEMBLY:CSEasyO365.Jobs /CLASS:EmailSynch | de e-mailmappen verwerken |
Voorbeeld
cd "<installatiemap van Synergy>\bin"
Exact.Process.exe /DBCONFIG:<omgeving> /ASSEMBLY:CSEasyO365.Jobs /CLASS:CalenderSynch
Exact.Process.exe /DBCONFIG:<omgeving> /ASSEMBLY:CSEasyO365.Jobs /CLASS:EmailSynch
Hoe vaak is een keuze: zo vaak als je wilt dat een wijziging doorkomt, bijvoorbeeld elke vijf
minuten. Laat een taak niet overlappen met zichzelf. Gebruik voor de agenda óf
CalenderSynch, óf de twee losse taken. Staat de koppeling op Actief uit of is er
geen geldige licentie, dan doet de taak niets en staat dat in het log.
12Log en controle
- Het proceslog van Synergy (Systeem → Overzichten → Log →
Processen) toont per run fouten, en met Log: Informatie aan ook wat er gedaan is.
- Het log per verzoek (het icoon in de kop van het verzoek) toont wanneer het
verzoek is klaargezet, verstuurd en ontvangen, met de gegevens die heen en weer gingen.
- Voor een beheerder die een probleem uitzoekt, is er een handmatige run: open
CSEasyO365Run.aspx in de browser (hij staat niet in het menu). Die doet agenda en categorieën in één keer, met de meldingen op het
scherm; hij kan botsen met een achtergrondtaak die op hetzelfde moment draait.
13Demo en licentie
Zonder geldige licentie voor Easy Office365 zet Synergy geen verzoeken klaar voor Outlook en doen de
achtergrondtaken niets; ze melden dat in het proceslog. De instellingenpagina's tonen de reden.
14Als het niet werkt
| Symptoom | Oorzaak |
| Er gebeurt helemaal niets | de achtergrondtaak is niet ingepland of draait onder een account zonder rechten; kijk in het proceslog |
| Bewaren van de instellingen geeft Error validating the connection to Microsoft Graph | tenantId, clientId of clientSecret klopt niet, het geheim is verlopen, of de toepassingsmachtigingen hebben nog geen toestemming van een beheerder |
| Een verzoek komt niet in Outlook | de medewerker doet niet mee (ja/nee-veld, e-mailadres, domein), het type heeft Synchroniseren kalender uit, de begindatum ligt vóór de Begindatum, of het is een concept |
| Bewaren van het verzoek geeft Ontbrekend: Medewerker - E-mail | de medewerker van het verzoek heeft geen zakelijk e-mailadres |
| Bewaren geeft Ontbrekend: Contactpersoon - E-mail | het type nodigt de contactpersoon direct uit en die heeft geen e-mailadres |
| U bent niet de organisator van dit agenda item | de afspraak komt van iemand anders; die moet de datum wijzigen |
| Een afspraak uit Outlook krijgt het verkeerde type | de categorie ontbreekt of is anders gespeld dan het verzoektype; kies een van de categorieën die de taak klaarzet |
| Wijzigingen in Outlook komen niet terug | het type staat op Enkel Synergy naar Outlook, of alleen de verstuurtaak is ingepland |
| Dubbele verzoeken na het aanzetten | Vul ExchangeID is gebruikt terwijl er niet eerder gesynchroniseerd was, of afspraken hadden een andere tijd dan de verzoeken |
| De map Easy Synergy verschijnt niet in Outlook | de medewerker doet niet mee voor e-mail, de e-mailtaak draait niet, of Mail.ReadWrite ontbreekt |
| Een e-mail is niet aan de juiste relatie gekoppeld | het e-mailadres van de afzender of geadresseerde staat niet bij een contactpersoon |
Deel zes
Easy Act2Sign
Documenten digitaal laten ondertekenen vanuit Synergy, via het ondertekenplatform
Stiply. Je legt een dossier vast in een verzoek, met de documenten en per ondertekenaar een eigen
verzoek. Een achtergrondtaak stuurt het dossier naar Stiply, volgt de voortgang en zet de ondertekende
documenten terug bij het verzoek.
De kern: een dossier = een dossierverzoek met documenten + een
ondertekenaarsverzoek per persoon; Klaar om te verzenden aanvinken is het startsein.
01Het menu
Alles zit onder Menu: Easy by DataKings.
| Tabblad | Menu-item | Wat |
| Invoer | Easy Act2Sign → Aanmaken | een nieuw dossierverzoek |
| Overzichten | Easy Act2Sign → Verzenden | de dossiers die klaarstaan om verzonden te worden; per dossier direct versturen |
| Overzichten | Easy Act2Sign → Bijwerken | de verzonden dossiers met hun status; per dossier de status direct ophalen |
| Overzichten | Easy Act2Sign → Stuur herinneringen | per dossier een herinnering sturen aan wie nog moet ondertekenen |
| Overzichten | Easy Act2Sign → Verwijderen | lopende dossiers bij Stiply intrekken |
| Overzichten | Easy Act2Sign → Fouten | de openstaande foutverzoeken (hoofdstuk 09) |
| Overzichten | Easy Act2Sign → Logboek | alle verzonden dossiers met hun resultaat en aantallen (hoofdstuk 10) |
| Overzichten | Easy Act2Sign → Aanmaken, Bijwerken | het proceslog van de twee achtergrondtaken |
| Inrichting | Easy Act2Sign → Instellingen | hoofdstuk 03 |
De overzichtspagina's zijn voor beheerders die ook de rol hebben die op het dossierverzoektype
staat.
02Hoe het werkt
Act2Sign gebruikt drie verzoektypen, die als verzoektypebestand worden meegeleverd:
| Verzoektype | Rol |
| Act2Sign - Dossier | het dossier: titel, documenten, de e-mail aan de ondertekenaars, de volgorde en de termijn. Hier komt ook de status terug, met de ondertekende documenten |
| Act2Sign - Signee | één ondertekenaar, gekoppeld aan het dossier: wie, hoe hij zich identificeert, welke velden hij invult |
| Act2Sign - Error | wordt vanzelf aangemaakt als een dossier niet verstuurd kon worden (hoofdstuk 09) |
- Je maakt een dossierverzoek en de ondertekenaarsverzoeken, en vinkt Klaar om te verzenden aan. Bij het bewaren wordt het dossier gecontroleerd (hoofdstuk 07).
- De taak Dossiers aanmaken stuurt de dossiers die klaarstaan naar Stiply, zodra Verzenden op bereikt is. Het dossier en de ondertekenaars gaan naar Goedgekeurd en krijgen het ID van Stiply.
- Stiply mailt de ondertekenaars. Zij ondertekenen in hun browser.
- De taak Dossiers bijwerken haalt de voortgang op en zet die bij de verzoeken. Is alles ondertekend, dan komen de ondertekende documenten als bijlage bij het dossier en gaan dossier en ondertekenaars naar Gerealiseerd. Wordt het dossier geweigerd of verloopt het, dan gaat het naar Afgekeurd.
03Instellingen
Inrichting → Easy Act2Sign → Instellingen.
| Sectie | Veld | Betekenis |
| Verzoeken | Dossier, Signer, Fout | de drie verzoektypen. Fout is optioneel: zonder foutverzoektype staat een mislukte verzending alleen in het proceslog |
| Beveiliging | Omschrijving, Client ID, Secret | de API-gegevens van Stiply. Er kunnen meerdere verbindingen zijn, bijvoorbeeld per bedrijfsonderdeel; op het dossier kies je welke (veld Connectie). Bij bewaren wordt de verbinding getest. Van een verbinding die door een lopend dossier gebruikt wordt, kan alleen de omschrijving nog wijzigen |
| Proxy server settings | Use Proxy, Proxy server | als de webserver alleen via een proxy naar internet kan |
| Current user (background job), Gebruikersnaam, Wachtwoord | met het account van de achtergrondtaak, of met een eigen account; het wachtwoord wordt versleuteld opgeslagen |
04Een dossier aanmaken
- Easy by DataKings → Invoer → Easy Act2Sign → Aanmaken. Er opent een nieuw dossierverzoek.
- Vul de Titel in, kies de Connectie en het Document dat ondertekend moet worden, eventueel met bijlagen. Vul het onderwerp en de tekst van de e-mail aan de ondertekenaars in, de volgorde en de termijn (hoofdstuk 05). Bewaar.
- Voeg in de lijst Ondertekenaars met Nieuw per persoon een ondertekenaarsverzoek toe (hoofdstuk 06).
- Klik op het dossier Klaar om te verzenden. Klopt er iets niet, dan zegt de melding wat.
- De achtergrondtaak verstuurt het dossier; wil je niet wachten, verstuur het dan via Overzichten → Easy Act2Sign → Verzenden.
05Het dossierverzoek
| Sectie | Label | Vrij veld | Betekenis |
| Dossier | Verantwoordelijke | EmployeeID | de medewerker van het dossier |
| Titel | Description | de naam van het dossier bij Stiply; verplicht |
| Verzenden op, om | StartDate | niet eerder versturen dan dit moment |
| Klaar om te verzenden | Vrij: Ja/Nee 1 | het startsein; met de knop Klaar om te verzenden wordt het aangevinkt en bewaard |
| Connectie | Vrij: Nummer 5 | de Stiply-verbinding uit de instellingen |
| Documenten | Document | DocID | het Synergy-document met de te ondertekenen bestanden |
| Bijlage algemene voorwaarde, Bijlage 1 … 4 | Vrij: GUID 1 … 5 | documenten die ter informatie meegaan |
| E-Mail | Onderwerp, Message | Vrij: Tekst 1, Opm.: Verzoek | de e-mail die Stiply aan de ondertekenaars stuurt |
| Ondertekenaars | Volgorde | Vrij: Nummer 1 | Sequential (na elkaar) of Parallel (tegelijk) |
| Verloopt in, eenheid | Vrij: Nummer 2, Vrij: Tekst 2 | de termijn om te ondertekenen: 1 t/m 9 dagen, weken of maanden |
| Re-direct na ondertekenen | Vrij: Tekst 3 | de pagina waar de ondertekenaar daarna op uitkomt |
| Logging | Ondertekende documenten | Attachments | hier komen de ondertekende documenten |
| Dossier ID, Laatste status, Laatste status detail, Laatste status datum, Afgerond | Vrij: Tekst 15, 14 en 13, de werkelijke begin- en einddatum | worden door Act2Sign gevuld |
Alleen bestanden van het type .docx, .doc, .pdf en
.xlsx gaan mee, en alleen van een document dat in Synergy goedgekeurd is (geen concept);
samen maximaal ongeveer 18 MB. Op het dossier staan ook een lijst met de ondertekenaars en hun status, en het
log met de voortgang uit Stiply.
06Ondertekenaars
Per persoon een verzoek van type Act2Sign - Signee, gekoppeld aan het dossier (veld
Dossier).
| Sectie | Label | Betekenis |
| Ondertekenaar | Volgorde | de volgorde bij Sequential |
| relatie en contactpersoon, of medewerker, of Naam / E-mail / Mobiel nummer | wie het is. Een contactpersoon of medewerker levert naam, e-mail en mobiel nummer zelf; bij een medewerker kies je met Gebruik zakelijk adres tussen zakelijk en privé. Anders vul je de drie velden zelf in |
| Rol | Ondertekenaar, CC (krijgt een kopie), DC of Fiatteur (keurt eerst goed) |
| Authenticatie | hoe de ondertekenaar zich identificeert: Link in e-mail, SMS One-Time Password (vraagt een mobiel nummer), iDin of iDin Complete |
| Taal | Nederlands, Engels, Duits, Spaans of Frans |
| Re-direct na ondertekenen | afwijkend van het dossier |
| E-mail (overrule Dossier E-mail) | Onderwerp, (Afwijkende) message | een eigen e-mail voor deze ondertekenaar |
| Ondertekenvelden | Handtekening | Ja of Vrije positie (de ondertekenaar kiest zelf waar) |
| Initialen, Datum van ondertekenen, Naam van ondertekenaar | welke velden er nog meer bij komen |
| Te uploaden documenten | Verzoek documenten te uploaden, Begeleidende tekst, Upload document 1 … 3 (+ verplicht?) | de ondertekenaar vragen om documenten mee te sturen, zoals een kopie legitimatie |
| Extra invoervelden | (regels) | velden die de ondertekenaar invult: per regel een naam, het soort (tekst, datum, vinkje, keuzerondje), verplicht of niet en de groep bij keuzerondjes |
| Logging | Signee ID, Laatste status, Afgerond, Reden van afkeuren | worden door Act2Sign gevuld |
Een ondertekenaarsverzoek keur je niet los af en verwijder je niet los: dat gaat via het
dossier.
07Versturen en de controles
Bij het aanvinken van Klaar om te verzenden wordt het dossier gecontroleerd. Het moet
voldoen aan:
- een titel en minimaal één document met inhoud;
- minimaal één ondertekenaar met de rol Ondertekenaar, en hoogstens tien;
- elke ondertekenaar een e-mailadres, en alle e-mailadressen verschillend;
- elke ondertekenaar met rol Ondertekenaar een handtekeningveld (Ja of
Vrije positie);
- bij SMS One-Time Password een geldig mobiel nummer;
- met een Fiatteur of een handtekening op een vrije positie: de volgorde
Sequential.
De taak Dossiers aanmaken neemt daarna elk dossier dat Open is,
Klaar om te verzenden heeft en waarvan Verzenden op bereikt is, met de
ondertekenaarsverzoeken die open zijn. Stiply staat maximaal 300 aanroepen per minuut toe; de taak
houdt daar rekening mee.
08Voortgang, herinneringen en verlengen
- Voortgang. De taak Dossiers bijwerken leest de status van elk verzonden
dossier en elke ondertekenaar: Laatste status en de datum komen op de verzoeken, en het log op
het dossier toont alle stappen. Een ondertekenaar die weigert, krijgt de reden in Reden van
afkeuren.
- Klaar. Als alles ondertekend is, komen de ondertekende documenten als bijlage bij
het dossier en gaan dossier en ondertekenaars naar Gerealiseerd. Bij iDIN worden de
gegevens van de identificatie apart bewaard en op het ondertekenaarsverzoek getoond.
- Geweigerd of verlopen. Het dossier gaat naar Afgekeurd, met de reden.
- Herinnering. Met Stuur herinnering op het dossier, of via
Overzichten → Stuur herinneringen, krijgt wie nog niet getekend heeft een
herinnering. Het dossier zelf wordt niet opnieuw verstuurd.
- Termijn verlengen. Vul op het goedgekeurde dossier Nieuwe datum: 1 in
(of later Nieuwe datum: 2); de nieuwe uiterste datum ligt in de toekomst en hoogstens negen
maanden verder. Bij bewaren gaat de verlenging direct naar Stiply en krijgen de ondertekenaars
bericht. Originele uiterste ondertekendatum houdt de eerste datum vast. Deze drie
datumvelden staan niet in elke versie van het verzoektype; voeg ze zo nodig toe (vrije datumvelden 5,
1 en 2).
- Intrekken. Keur je het dossier af, dan wordt het bij Stiply verwijderd en worden
de ondertekenaars afgekeurd. Zet je het terug naar Open, dan gaan de ondertekenaars ook
weer open. Bij Verwerkt wordt het dossier bij Stiply opgeruimd; de ondertekende documenten
staan dan al in Synergy.
09Fouten
Lukt het versturen niet — Stiply weigert een document, een e-mailadres klopt niet — dan
maakt de taak een verzoek van het foutverzoektype, met het dossier erin, de fout in Opgetreden
fout en de maker van het dossier als medewerker. Zolang er een open foutverzoek is, wordt het
dossier niet opnieuw geprobeerd. Herstel de oorzaak, vink op het foutverzoek Dossier opnieuw
versturen aan en realiseer het; bij de volgende run gaat het dossier opnieuw, en de oude
foutverzoeken verdwijnen. Overzichten → Easy Act2Sign → Fouten toont de
openstaande fouten.
10Overzichten en logboek
Via de overzichten kan een beheerder de taken ook per dossier met de hand uitvoeren: versturen,
status bijwerken, een herinnering sturen of een lopend dossier verwijderen. Het
Logboek toont per verzonden dossier wanneer het verzonden en afgehandeld is, of het
ondertekend of geweigerd is, en de aantallen documenten, bijlagen, SMS'jes en iDIN-controles. Daarmee
blijft ook zichtbaar hoe vaak een dossier opnieuw is aangeboden, bijvoorbeeld na een afkeuring.
11Achtergrondtaken
Twee taken; plan ze in zoals bij Installatie → Achtergrondtaken
beschreven.
| Taak | Opdracht | Doet |
| Dossiers aanmaken | /ASSEMBLY:Act2Sign.Synergy.Jobs /CLASS:CreateDossiers | de dossiers die klaarstaan naar Stiply sturen |
| Dossiers bijwerken | /ASSEMBLY:Act2Sign.Synergy.Jobs /CLASS:UpdateDossiers | de voortgang ophalen en de ondertekende documenten binnenhalen |
Voorbeeld
cd "<installatiemap van Synergy>\bin"
Exact.Process.exe /DBCONFIG:<omgeving> /ASSEMBLY:Act2Sign.Synergy.Jobs /CLASS:CreateDossiers
Exact.Process.exe /DBCONFIG:<omgeving> /ASSEMBLY:Act2Sign.Synergy.Jobs /CLASS:UpdateDossiers
Het verloop staat in het proceslog; in het menu staan er twee directe links naar (Aanmaken
en Bijwerken onder Overzichten). Zonder geldige licentie doen de taken niets en melden ze dat
in het log.
12Licentie
Act2Sign vraagt de module Easy Act2Sign in de licentie. Zonder die module melden de pagina's
Demo licentie met de reden en versturen de achtergrondtaken niets.
13Als het niet werkt
| Symptoom | Oorzaak |
| Aanmaken opent de instellingen | het dossierverzoektype is niet ingesteld |
| Bij Klaar om te verzenden een melding Validatiefout | het dossier voldoet niet aan de controles uit hoofdstuk 07; de melding noemt wat er ontbreekt |
| Het dossier wordt niet verstuurd | de achtergrondtaak draait niet, Verzenden op ligt in de toekomst, het dossier is niet meer Open, of er staat een open foutverzoek |
| Er verschijnt een foutverzoek | Stiply weigerde het dossier; de fout staat in Opgetreden fout (hoofdstuk 09) |
| Een document ontbreekt bij Stiply | het bestand is geen .docx, .doc, .pdf of .xlsx, of het document staat in Synergy nog in concept |
| De status blijft staan | de taak Dossiers bijwerken draait niet; haal hem per dossier op via Overzichten → Bijwerken |
| Een ondertekenaar afkeuren of verwijderen lukt niet | dat gaat via het dossier |
| Bewaren van de instellingen geeft Invalid key and/or secret | de Client ID of het Secret van Stiply klopt niet, of de proxy staat in de weg |
Deel acht
Installatie
De hele suite komt in één pakket: EasyList, EasyScript, EasyVerify, Easy WordMerge,
Easy Office 365, Easy Act2Sign en Easy Menu. Je installeert het in één keer; welke modules je mag
gebruiken, bepaalt de licentie.
De kern: pakket over de Synergy-installatie kopiëren, Synergy laten
initialiseren, licentie inlezen — daarna per module alleen nog de eigen inrichting.
01De software plaatsen
Het pakket bevat vier mappen, met dezelfde namen als in de installatiemap van Synergy:
| Map | Inhoud |
| bin | de programmabestanden |
| docs | de pagina's, met in docs\images de afbeeldingen |
| sql | de scripts die de tabellen aanmaken en bijwerken |
| xml | het menu en de beschrijving van de modules voor Synergy |
Los in de hoofdmap staan de verzoektypen die je zelf importeert (hoofdstuk 03).
- Maak een back-up van de Synergy-database én van de installatiemap van Synergy.
- Waarschuw de gebruikers dat Synergy even niet beschikbaar is, en stop eventueel de application pool van Synergy in IIS.
- Hef de blokkering van de bestanden op: rechtermuisklik → Eigenschappen → Blokkering opheffen. Doe dat het makkelijkst op het zip-bestand, vóór het uitpakken; dan hoeft het niet per bestand.
- Kopieer de mappen
bin, docs, sql en xml over de installatiemap van Synergy. Bestaande bestanden van een vorige release worden overschreven.
- Start de application pool weer en open Synergy. Je komt op de initialisatiepagina; start de initialisatie. Die maakt de tabellen aan of werkt ze bij.
- Alleen als een Easy-pagina daarna meldt dat een business component of een eigenschap onbekend is: Systeem → Repository heropbouwen.
Kopieer altijd het hele pakket, ook als je niet alle modules gebruikt: de modules gebruiken
onderdelen van elkaar.
02Licentie en menu
- Lees de licentie in: Easy by DataKings → Inrichting → Easy Menu → Licentie (Easy Menu → Licentie). Log daarna opnieuw in. Zonder licentie draaien de modules in demomodus.
- Het menu Easy by DataKings zien gebruikers met de Exact add-on-rol. Wie de module Easy in het modulemenu wil hebben, voegt die toe via de voorkeuren en bewaart.
- Aanbevolen: initialiseer de termen (Easy Menu → Termen), zodat je term-ID's kunt opzoeken.
03Per module
Wat er na de installatie per module nog ingericht moet worden. Een module die je niet gebruikt,
laat je gewoon staan.
EasyList
- EasyList werkt met een eigen verzoektype. Het bestand
RequestType_EasyList.xml in de hoofdmap van het pakket gebruikt nummer 9015. Kijk bij Verzoeken → Inrichting → Verzoektypen of dat nummer vrij is. Is het bezet, maak dan een nieuw verzoektype aan en vervang in het bestand 9015 door dat nummer.
- Importeer het bestand: Verzoeken → Inrichting → Importeren.
- Koppel het verzoektype: Easy List → Instellingen. EasyList werkt uitsluitend met dít type; zolang er geen is ingesteld, stuurt elke EasyList-pagina je door naar de instellingen.
EasyScript
Niets extra: na de licentie kun je secties maken (EasyScript → Je eerste
sectie).
EasyVerify
- Controleer Easy Verify → Instellingen: Actief moet aan staan
(EasyVerify → Instellingen).
- Optioneel: de koppelingen met BPA Platform (Orbis) en n8n, op dezelfde pagina.
- Optioneel: de SQL-functies. Het script staat op de instellingenpagina; laat het uitvoeren door
de beheerder van de database.
Easy WordMerge
- Easy WordMerge → Instellingen: de rol die definities mag onderhouden en de
documenttypes met sjablonen; optioneel die met basis templates (WordMerge →
Instellingen).
- Voor documenten op vaste tijden: de achtergrondtaak (hoofdstuk 04 en WordMerge
→ Achtergrondtaak).
- Voor de actie E-mail versturen: een SMTP-server in Synergy.
Easy Office 365
- Een app-registratie in Microsoft Entra ID met de juiste machtigingen (Office 365 → Verbinding).
- Instellingen: Kalender en, als je e-mail gebruikt, Instellingen: E-mail.
- De instellingen per verzoektype, en daarna Synchroniseren aanzetten (Office 365 → Synchroniseren aanzetten).
- De achtergrondtaken (hoofdstuk 04).
Easy Act2Sign
- Importeer
RequestTypes_Act2Sign.xml uit de hoofdmap van het pakket via Verzoeken → Inrichting → Importeren: de verzoektypen voor het dossier, de ondertekenaar en de fout. Het bestand gebruikt de nummers 9050, 9051 en 9052; zijn die bezet, pas ze dan eerst aan in het bestand.
- Koppel de drie verzoektypen en leg de verbinding met Stiply vast: Easy Act2Sign → Instellingen (Act2Sign → Instellingen).
- De achtergrondtaken (hoofdstuk 04).
Easy Menu
Alles optioneel: connecties naar andere databases, een bericht bovenin Synergy en het overnemen van
medewerkers (Easy Menu).
04Achtergrondtaken
Easy WordMerge, Easy Office 365 en Easy Act2Sign doen een deel van hun werk op de achtergrond. Dat
gaat zoals bij de achtergrondtaken van Synergy zelf: een geplande taak in Windows op de server van
Synergy start het programma Exact.Process.exe uit de map bin, met de taak als
parameters.
cd "<installatiemap van Synergy>\bin"
Exact.Process.exe /DBCONFIG:<omgeving> /ASSEMBLY:<onderdeel> /CLASS:<taak>
| Parameter | Betekenis |
| /DBCONFIG | de naam van de virtuele map van de Synergy-omgeving in IIS; daarmee vindt het programma de juiste database |
| /ASSEMBLY | het onderdeel met de taak, zie de tabel hieronder |
| /CLASS | de taak zelf |
| /HID | alleen bij de WordMerge-taken voor één definitie of één groep: het nummer |
Alle taken
| Module en /ASSEMBLY | /CLASS | Taak |
Easy WordMerge
CSEasyWM.Jobs | GenerateDefinitions | alle definities voor de achtergrondtaak |
| GenerateDefinition + /HID:<nummer> | één definitie |
| GenerateDefinitionGroup + /HID:<nummer> | de definities van één groep |
Easy Office 365
CSEasyO365.Jobs | CalenderSynch | agenda, beide richtingen |
| CalenderSynchSend | agenda, alleen versturen* |
| CalenderSynchReceive | agenda, alleen ontvangen* |
| EmailSynch | e-mail |
Easy Act2Sign
Act2Sign.Synergy.Jobs | CreateDossiers | dossiers naar Stiply sturen |
| UpdateDossiers | voortgang en ondertekende documenten ophalen |
* Voor de agenda óf de taak voor beide richtingen, óf de twee losse taken samen.
Voorbeeld: één WordMerge-definitie
cd "<installatiemap van Synergy>\bin"
Exact.Process.exe /DBCONFIG:<omgeving> /ASSEMBLY:CSEasyWM.Jobs /CLASS:GenerateDefinition /HID:22
Hoe vaak. WordMerge op het moment dat de documenten klaar moeten zijn, bijvoorbeeld
's nachts. Office 365 vaak, bijvoorbeeld elke vijf minuten. Act2Sign regelmatig, zodat een dossier
kort na het klaarzetten vertrekt en de voortgang bijblijft.
Welke taken je nodig hebt en wat ze precies doen, staat bij de module:
WordMerge, Office 365 en Act2Sign. Plan
alleen taken in voor modules die je gebruikt.
Een taak inplannen
- Open op de server van Synergy de Taakplanner van Windows en kies Taak maken.
- Laat de taak draaien onder een Windows-account dat ook gebruiker in Synergy is, en kies Uitvoeren, ongeacht of de gebruiker is aangemeld. De taak werkt met de rechten van die gebruiker, en in de taak is dat “de huidige gebruiker”; vaak is het een aparte systeemgebruiker.
- Trigger: het schema, bijvoorbeeld dagelijks, met herhalen elke vijf minuten.
- Actie: Een programma starten. Programma:
<installatiemap van Synergy>\bin\Exact.Process.exe; argumenten: de parameters uit de tabel; Beginnen in: de map bin.
- Instellingen: kies bij Als de taak al wordt uitgevoerd voor Geen nieuw exemplaar starten, zodat een taak nooit met zichzelf overlapt.
Het verloop van elke run staat in het proceslog van Synergy: Systeem → Overzichten
→ Log → Processen. Daar zie je ook of een taak niets deed, bijvoorbeeld omdat de
licentie ontbreekt of de koppeling uit staat.
05Een nieuwe release
Een nieuwe release installeer je op dezelfde manier: stap 1 tot en met 6 van hoofdstuk 01. De
initialisatie werkt de tabellen bij; licentie, instellingen en alles wat je gemaakt hebt blijven
staan. Welke versie er per module draait, zie je bij Easy Menu → Licentie.
- Kijk in de releasenotes of er nieuwe instellingen zijn.
- Stop de achtergrondtaken zolang je de bestanden kopieert, en start ze daarna weer.
- Initialiseer de termen opnieuw na een update van Synergy zelf, of als er verzoekvelden of eigen
termen bij zijn gekomen.