<?xml version="1.0" encoding="utf-8"?> <feed xmlns="http://www.w3.org/2005/Atom" xml:lang="nl"> <generator uri="https://jekyllrb.com/" version="4.3.3">Jekyll</generator> <link href="https://www.docugenerate.com/nl/feed.xml" rel="self" type="application/atom+xml"/> <link href="https://www.docugenerate.com/nl/blog/" rel="alternate" type="text/html" hreflang="nl"/> <updated>2026-09-14T08:28:20+00:00</updated> <id>https://www.docugenerate.com/nl/feed.xml</id> <title type="html">DocuGenerate</title> <subtitle>Generate PDF documents from Word templates and JSON data. DocuGenerate helps you generate PDF documents like invoices, letters, contracts, agreements, certificates and more with our API and web app. Start Generating for Free. </subtitle> <author> <name>DocuGenerate</name> <email>support@docugenerate.com</email> </author> <entry> <title type="html">Maak Salarisverhogingsbrieven met n8n en DocuGenerate</title> <link href="https://www.docugenerate.com/nl/blog/maak-salarisverhogingsbrieven-met-n8n-en-docugenerate/" rel="alternate" type="text/html" title="Maak Salarisverhogingsbrieven met n8n en DocuGenerate"/> <published>2026-08-18T00:00:00+00:00</published> <updated>2026-08-18T00:00:00+00:00</updated> <id>https://www.docugenerate.com/nl/blog/maak-salarisverhogingsbrieven-met-n8n-en-docugenerate</id> <content type="html" xml:base="https://www.docugenerate.com/nl/blog/maak-salarisverhogingsbrieven-met-n8n-en-docugenerate/"><![CDATA[<h2 id="introductie">Introductie</h2> <p>Salarisverhogingsbrieven behoren tot die documenten die tegelijkertijd naar alle betrokken werknemers moeten worden verstuurd, consistent geformuleerd en zonder copy-paste-fouten. Wanneer een herzieningscyclus tientallen werknemers omvat, wordt het met de hand schrijven van elke brief of het handmatig samenvoegen van een spreadsheet in een Word-document al snel een knelpunt voor HR-teams. In deze tutorial bouwen we een geautomatiseerde workflow met <a href="https://n8n.io/" target="_blank" rel="nofollow noopener">n8n</a> en <a href="https://www.docugenerate.com/">DocuGenerate</a> die een Google Sheets-spreadsheet met salarisherzieningsdata omzet in gepersonaliseerde PDF-brieven, zonder enige handmatige documentcreatie.</p> <p>De workflow bewaakt een Google Drive-map op een nieuwe spreadsheet. Zodra er een verschijnt, leest hij elke rij, en voor elke werknemer voegt hij de data van die rij samen met een Word-sjabloon, genereert een PDF, en uploadt de voltooide brief naar een specifieke uitvoermap in Drive. HR hoeft alleen de spreadsheet met de verhogingen van die cyclus voor te bereiden; de brieven worden automatisch gegenereerd en opgeslagen. Aan het einde van deze gids heeft u een volledig functionele n8n-workflow die u kunt importeren en aanpassen aan uw eigen salarisherzieningsproces.</p> <h2 id="het-sjabloon-instellen">Het Sjabloon voor Salarisverhogingsbrieven Instellen</h2> <p>Voordat we de n8n-workflow bouwen, hebben we een documentsjabloon in DocuGenerate nodig. We gebruiken het Word-sjabloon <a href="https://www.docugenerate.com/assets/posts/036-n8n-salary-increase-letters/Salary Increase Letter.docx">Salary Increase Letter</a>, een korte brief over de vergoedingsherziening die een werknemer informeert over zijn verhoging, het nieuwe totale salaris, en wie te contacteren bij vragen.</p> <p><img src="https://www.docugenerate.com/assets/posts/036-n8n-salary-increase-letters/docugenerate-template.png" alt="Salary Increase Letter-sjabloon met merge-tags"/></p> <p>Zodra u het sjabloon heeft <a href="https://www.docugenerate.com/nl/hulp/articles/hoe-maak-ik-een-nieuw-sjabloon-aan/">aangemaakt</a> in uw DocuGenerate-account, worden 13 merge-tags automatisch gedetecteerd: <code class="language-plaintext highlighter-rouge">Date</code>, <code class="language-plaintext highlighter-rouge">Employee First Name</code>, <code class="language-plaintext highlighter-rouge">Employee Last Name</code>, <code class="language-plaintext highlighter-rouge">Employee Address</code>, <code class="language-plaintext highlighter-rouge">Increase Amount</code>, <code class="language-plaintext highlighter-rouge">Remuneration Type</code>, <code class="language-plaintext highlighter-rouge">Total Sum</code>, <code class="language-plaintext highlighter-rouge">Increase Date</code>, <code class="language-plaintext highlighter-rouge">Contact Name</code>, <code class="language-plaintext highlighter-rouge">Contact Number</code>, <code class="language-plaintext highlighter-rouge">Company Name</code>, <code class="language-plaintext highlighter-rouge">Signatory Name</code>, en <code class="language-plaintext highlighter-rouge">Signatory Position</code>. Deze <a href="https://www.docugenerate.com/nl/hulp/articles/wat-zijn-merge-tags/">merge-tags</a> omvatten zowel de werknemerspecifieke details van de verhoging als de vaste details van het bedrijf en de ondertekenaar, die allemaal uit de spreadsheetrijen komen.</p> <h2 id="data-voorbereiden">De Data Voorbereiden in Google Sheets</h2> <p>De data voor deze workflow bevindt zich in Google Sheets. Voor deze tutorial gebruiken we het voorbeeld-Excelbestand <a href="https://www.docugenerate.com/assets/posts/036-n8n-salary-increase-letters/Salary Increase Data.xlsx">Salary Increase Data</a>, geïmporteerd in een Google Sheets-spreadsheet genaamd <strong>Salary Increase August 2026</strong>. Elk van de 10 rijen vertegenwoordigt de verhoging van één werknemer, met een kolom voor elke merge-tag in het sjabloon: naam, adres, verhogingsbedrag, vergoedingstype, totale som, en de verhogingsdatum, samen met de gedeelde contact- en ondertekenaargegevens die op elke rij worden herhaald.</p> <p><img src="https://www.docugenerate.com/assets/posts/036-n8n-salary-increase-letters/drive-drive-salary-increase-letter-sheet.png" alt="Salary Increase August 2026-spreadsheet in Google Sheets"/></p> <p>Deze spreadsheet bevindt zich in een map <strong>Salary Increase Letter</strong> in Google Drive, die ook de mappen bevat met brieven die zijn gegenereerd voor eerdere herzieningscycli. Elke nieuwe cyclus begint op dezelfde manier: een nieuwe spreadsheet met de data van die cyclus wordt toegevoegd aan deze map, precies de gebeurtenis waarop onze workflow zal wachten.</p> <p><img src="https://www.docugenerate.com/assets/posts/036-n8n-salary-increase-letters/drive-salary-increase-letter-folder.png" alt="Salary Increase Letter-map in Google Drive"/></p> <h2 id="overzicht-van-de-n8n-workflow">Overzicht van de n8n-Workflow</h2> <p>Nu het sjabloon en de gegevensbron klaar zijn, ziet de volledige workflow er in n8n als volgt uit. U kunt het <a href="https://www.docugenerate.com/assets/posts/036-n8n-salary-increase-letters/Salary Increase Letter Workflow.json" target="_blank">workflow-JSON-bestand</a> downloaden en rechtstreeks importeren in uw n8n-instantie, en vervolgens het DocuGenerate-sjabloon, uw Google-gegevens, en de Drive-map-ID bijwerken zodat ze overeenkomen met uw eigen configuratie.</p> <p><img src="https://www.docugenerate.com/assets/posts/036-n8n-salary-increase-letters/n8n-complete-workflow.png" alt="De volledige n8n-workflow"/></p> <p>De workflow begint met een trigger die de map <strong>Salary Increase Letter</strong> bewaakt op een nieuw Google Sheets-bestand. Wanneer er een verschijnt, maakt hij een bijpassende uitvoermap aan, leest elke rij uit de sheet, en doorloopt de rijen één voor één, waarbij voor elke werknemer een PDF-brief wordt gegenereerd en naar de nieuwe map wordt geüpload. Laten we elke node in detail doorlopen.</p> <h2 id="google-drive-trigger-bewaken">Nieuwe Spreadsheets Bewaken met de Google Drive Trigger</h2> <p>De node <a href="https://docs.n8n.io/integrations/builtin/trigger-nodes/n8n-nodes-base.googledrivetrigger/" target="_blank" rel="nofollow noopener">Google Drive Trigger</a> polt een specifieke Google Drive-map en start de workflow wanneer een overeenkomende wijziging plaatsvindt.</p> <p><img src="https://www.docugenerate.com/assets/posts/036-n8n-salary-increase-letters/n8n-google-drive-trigger.png" alt="Configuratie van de Google Drive Trigger-node"/></p> <p>De node is ingesteld om elke <strong>Every X</strong> <code class="language-plaintext highlighter-rouge">30</code> <strong>Minutes</strong> te polen, waarbij <strong>Trigger On</strong> is ingesteld op <strong>Changes Involving a Specific Folder</strong>. De parameter <strong>Folder</strong> accepteert de doelmap op drie manieren: <strong>From list</strong>, <strong>By URL</strong>, of <strong>By ID</strong>; hier is deze ingesteld op <strong>By ID</strong> met de ID van de map <strong>Salary Increase Letter</strong>.</p> <p>U vindt de ID van een map in de Google Drive-URL, het is de reeks tekens na <code class="language-plaintext highlighter-rouge">/folders/</code>. Bijvoorbeeld, de ID voor de URL <code class="language-plaintext highlighter-rouge">https://drive.google.com/drive/folders/1dcLLzfZaH38hDd0acfUru2ISOoTsbGPI</code> is <code class="language-plaintext highlighter-rouge">1dcLLzfZaH38hDd0acfUru2ISOoTsbGPI</code>.</p> <p>Tot slot is <strong>Watch For</strong> ingesteld op <strong>File Created</strong>, en de optie <strong>File Type</strong> onder <strong>Options</strong> is beperkt tot <strong>Google Spreadsheets</strong>, zodat de trigger alleen afgaat wanneer een nieuwe spreadsheet aan de map wordt toegevoegd.</p> <h2 id="uitvoermap-aanmaken">Een Uitvoermap Aanmaken</h2> <p>Zodra een nieuwe spreadsheet wordt gedetecteerd, heeft de workflow een plek nodig om de gegenereerde brieven op te slaan. De node <a href="https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googledrive/" target="_blank" rel="nofollow noopener">Google Drive</a> regelt dit met de operatie <strong>Create</strong> op de resource <strong>Folder</strong>.</p> <p><img src="https://www.docugenerate.com/assets/posts/036-n8n-salary-increase-letters/n8n-create-folder.png" alt="Configuratie van de Create folder-node"/></p> <p>De parameter <strong>Folder Name</strong> gebruikt de expressie <code class="language-plaintext highlighter-rouge">{{ $('Google Drive Trigger').item.json.name }}</code>, die wordt herleid tot <code class="language-plaintext highlighter-rouge">Salary Increase August 2026</code>, de naam van de spreadsheet die de workflow heeft geactiveerd. De <strong>Parent Folder</strong> is ingesteld op dezelfde map-ID die wordt gebruikt in de <a href="#google-drive-trigger-bewaken">trigger</a>, zodat de nieuwe uitvoermap wordt aangemaakt als een zustermap van de bron-spreadsheet binnen <strong>Salary Increase Letter</strong>. Door de map te vernoemen naar de bron-spreadsheet blijven de brieven van elke herzieningscyclus gegroepeerd met de data waaruit ze zijn voortgekomen.</p> <h2 id="werknemersdata-lezen">De Werknemersdata Lezen</h2> <p>Nu de doelmap klaar is, leest de node <a href="https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googlesheets/" target="_blank" rel="nofollow noopener">Google Sheets</a> de werknemersdata met de operatie <strong>Get Row(s)</strong> op de resource <strong>Sheet Within Document</strong>.</p> <p><img src="https://www.docugenerate.com/assets/posts/036-n8n-salary-increase-letters/n8n-get-rows-in-sheet.png" alt="Configuratie van de Get row(s) in sheet-node"/></p> <p><strong>Document</strong> is ingesteld op <strong>Salary Increase August 2026</strong> en <strong>Sheet</strong> op <strong>Salary Increase Data</strong>, beide gekozen uit de <strong>From list</strong>-dropdowns. De node retourneert alle 10 rijen als aparte items, elk met de volledige set velden die we zagen in de <a href="#data-voorbereiden">spreadsheet</a>: werknemersdetails, verhogingscijfers, en de gedeelde contact- en ondertekenaarinformatie.</p> <h2 id="door-elke-werknemer-lopen">Door Elke Werknemer Lopen</h2> <p>Om één brief per werknemer te genereren, moet de workflow de 10 rijen één voor één verwerken. De node <a href="https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.splitinbatches/" target="_blank" rel="nofollow noopener">Loop Over Items</a> regelt dit met een batchgrootte van 1.</p> <p><img src="https://www.docugenerate.com/assets/posts/036-n8n-salary-increase-letters/n8n-loop-over-items.png" alt="Configuratie van de Loop Over Items-node"/></p> <p>Elke doorloop van de lus draagt de rij van één werknemer, zoals de eerste voor James Mitchell met een verhoging van 4% die zijn jaarsalaris naar $87.500 brengt, door naar de volgende nodes. De lus gaat door totdat alle 10 rijen zijn verwerkt, waarbij telkens één brief wordt gegenereerd en opgeslagen voordat wordt doorgegaan naar de volgende.</p> <h2 id="de-brief-genereren">De Brief Genereren</h2> <p>De node <strong>Generate document</strong> gebruikt de <a href="https://n8n.io/integrations/docugenerate/" target="_blank" rel="noopener">DocuGenerate-integratie</a> voor n8n om de data van elke rij samen te voegen met het Word-sjabloon. Om deze node te gebruiken, installeert u DocuGenerate in uw n8n-instantie en <a href="https://www.docugenerate.com/nl/hulp/articles/documentgeneratie-automatiseren-met-n8n/#install-docugenerate">configureert u deze</a> met uw <a href="https://www.docugenerate.com/nl/hulp/articles/waar-vind-ik-mijn-api-sleutel/">API-sleutel</a>.</p> <p><img src="https://www.docugenerate.com/assets/posts/036-n8n-salary-increase-letters/n8n-generate-document.png" alt="Configuratie van de Generate document-node"/></p> <p>De node is geconfigureerd met de volgende parameters:</p> <ul> <li><strong>Template Name or ID</strong>: Het sjabloon <strong>Salary Increase Letter</strong> dat is aangemaakt in de stap <a href="#het-sjabloon-instellen">sjabloon instellen</a>.</li> <li><strong>Name</strong>: Een expressie, <code class="language-plaintext highlighter-rouge">Letter for {{ $json['Employee First Name'] }} {{ $json['Employee Last Name'] }}</code>, die voor de eerste rij een naam produceert zoals <code class="language-plaintext highlighter-rouge">Letter for James Mitchell</code>.</li> <li><strong>Format</strong>: Ingesteld op <code class="language-plaintext highlighter-rouge">PDF (.pdf)</code>.</li> <li><strong>Data</strong>: Ingesteld op <code class="language-plaintext highlighter-rouge">{{ $json }}</code>, waarmee de volledige huidige rij, met alle 13 merge-tag-waarden, rechtstreeks naar de API wordt doorgegeven.</li> </ul> <p>Voor de eerste rij levert dit de volgende respons op:</p> <div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">[</span><span class="w">
  </span><span class="p">{</span><span class="w">
    </span><span class="nl">"created"</span><span class="p">:</span><span class="w"> </span><span class="mi">1774348731006</span><span class="p">,</span><span class="w">
    </span><span class="nl">"template_id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ARnboMDE3zyzMrdTZJ2e"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Letter for James Mitchell"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"format"</span><span class="p">:</span><span class="w"> </span><span class="s2">".pdf"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"data_length"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w">
    </span><span class="nl">"filename"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Letter for James Mitchell.pdf"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"document_uri"</span><span class="p">:</span><span class="w"> </span><span class="s2">"https://firebasestorage.googleapis.com/v0/b/storage.us.docugenerate.com/o/documents%2FA1blGMwZETC4hrP5Zr2C%2FLetter%20for%20James%20Mitchell.pdf?alt=media&amp;token=6383b541-f2b9-4c79-8161-063d287a5887"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"A1blGMwZETC4hrP5Zr2C"</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">]</span><span class="w">
</span></code></pre></div></div> <p>U kunt het gegenereerde document hieronder bekijken, of de <a href="https://www.docugenerate.com/assets/posts/036-n8n-salary-increase-letters/Letter for James Mitchell.pdf">voorbeeld-PDF</a> direct downloaden.</p> <object data="/assets/posts/036-n8n-salary-increase-letters/Letter for James Mitchell.pdf" type="application/pdf" class="inline-pdf-blog"></object> <h2 id="de-gegenereerde-brief-downloaden">De Gegenereerde Brief Downloaden</h2> <p>DocuGenerate retourneert een <code class="language-plaintext highlighter-rouge">document_uri</code> die naar de gegenereerde PDF verwijst in plaats van naar het bestand zelf, dus de workflow moet het eerst ophalen voordat het elders kan worden geüpload. De node <a href="https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/" target="_blank" rel="nofollow noopener">HTTP Request</a> doet een <code class="language-plaintext highlighter-rouge">GET</code>-verzoek naar die URL.</p> <p><img src="https://www.docugenerate.com/assets/posts/036-n8n-salary-increase-letters/n8n-http-request.png" alt="Configuratie van de HTTP Request-node"/></p> <p>De parameter <strong>URL</strong> is ingesteld op <code class="language-plaintext highlighter-rouge">{{ $json.document_uri }}</code>, wat verwijst naar de respons van de node <a href="#de-brief-genereren">Generate document</a>. <strong>Authentication</strong> blijft op <code class="language-plaintext highlighter-rouge">None</code>, aangezien de document-URI al een toegangstoken bevat. De uitvoer van de node bevat de binaire inhoud van het bestand in een veld <code class="language-plaintext highlighter-rouge">data</code>, klaar voor de volgende stap.</p> <h2 id="de-brief-opslaan">De Brief Opslaan in Google Drive</h2> <p>De laatste node uploadt de PDF naar de uitvoermap die is aangemaakt bij de <a href="#uitvoermap-aanmaken">start van de run</a>, met behulp van de operatie <strong>Upload</strong> van de Google Drive-node op de resource <strong>File</strong>.</p> <p><img src="https://www.docugenerate.com/assets/posts/036-n8n-salary-increase-letters/n8n-upload-file.png" alt="Configuratie van de Upload file-node"/></p> <p><strong>Input Data Field Name</strong> is ingesteld op <code class="language-plaintext highlighter-rouge">data</code>, overeenkomend met het binaire veld dat wordt geproduceerd door de node <a href="#de-gegenereerde-brief-downloaden">HTTP Request</a>. Het veld <strong>File Name</strong> blijft leeg, zodat de upload de oorspronkelijke bestandsnaam behoudt die in de binaire data wordt meegedragen, voor deze rij <code class="language-plaintext highlighter-rouge">Letter for James Mitchell.pdf</code>. De <strong>Parent Folder</strong> gebruikt de expressie <code class="language-plaintext highlighter-rouge">{{ $('Create folder').item.json.id }}</code>, zodat elke brief terechtkomt in de map die voor deze herzieningscyclus is aangemaakt, in plaats van los in Drive.</p> <h2 id="de-workflow-uitvoeren">De Workflow Uitvoeren</h2> <p>Nu alle nodes zijn geconfigureerd, is het toevoegen van een nieuwe spreadsheet aan de map <strong>Salary Increase Letter</strong> alles wat nodig is om een volledige batch brieven te genereren. De animatie hieronder toont een volledige run: elke node wordt groen met een vinkje zodra hij is voltooid, en het segment <a href="#door-elke-werknemer-lopen">Loop Over Items</a> draait 10 keer achter elkaar, één keer voor elke werknemer in de spreadsheet.</p> <p><img src="https://www.docugenerate.com/assets/posts/036-n8n-salary-increase-letters/n8n-workflow-testing.gif" alt="n8n-workflow die van begin tot eind draait"/></p> <p>Zodra de run is voltooid, staan alle 10 brieven in de uitvoermap in Google Drive, elk genoemd naar de ontvanger.</p> <p><img src="https://www.docugenerate.com/assets/posts/036-n8n-salary-increase-letters/drive-generated-documents.png" alt="Gegenereerde brieven in de map Salary Increase August 2026"/></p> <h2 id="conclusie">Conclusie</h2> <p>In deze tutorial hebben we een n8n-workflow gebouwd die een Google Sheets-spreadsheet met salarisherzieningsdata omzet in een map met gepersonaliseerde PDF-brieven, zonder enige handmatige documentcreatie. De workflow bewaakt een Drive-map op een nieuwe spreadsheet, maakt een bijpassende uitvoermap aan, doorloopt elke rij, en genereert en archiveert een brief voor elke werknemer, alles geactiveerd door simpelweg een spreadsheet aan de juiste map toe te voegen.</p> <p>Hetzelfde patroon geldt voor elk HR-document dat aan een periodieke herziening is gekoppeld, van bonusbrieven tot verlengingsmeldingen. De trigger en gegevensbron zouden net zo goed een webhook van een Human Resources Information System (HRIS) of een databasequery kunnen zijn in plaats van een Drive-map, terwijl de stappen voor documentgeneratie en -bezorging hetzelfde blijven.</p> <h3 id="bronnen">Bronnen</h3> <ul> <li>Het in deze tutorial gebruikte Word-sjabloon <a href="https://www.docugenerate.com/assets/posts/036-n8n-salary-increase-letters/Salary Increase Letter.docx">Salary Increase Letter</a>.</li> <li>Het <a href="https://www.docugenerate.com/assets/posts/036-n8n-salary-increase-letters/Salary Increase Data.xlsx">voorbeeld-Excelbestand</a> met de verhogingsdata van de werknemers.</li> <li>Het <a href="https://www.docugenerate.com/assets/posts/036-n8n-salary-increase-letters/Salary Increase Letter Workflow.json" target="_blank">workflow-JSON-bestand</a> dat u kunt importeren in uw n8n-instantie.</li> <li>Een <a href="https://www.docugenerate.com/assets/posts/036-n8n-salary-increase-letters/Letter for James Mitchell.pdf" target="_blank">voorbeeld van een gegenereerde PDF</a> met het uiteindelijke resultaat.</li> <li>De DocuGenerate-<a href="https://www.docugenerate.com/nl/hulp/articles/documentgeneratie-automatiseren-met-n8n/">integratiegids</a> voor n8n.</li> </ul>]]></content> <author> <name>DocuGenerate</name> <email>support@docugenerate.com</email> </author> <category term="Letters"/> <category term="n8n"/> <category term="No-Code"/> <summary type="html"><![CDATA[Bouw een n8n-workflow die een Google Drive-map bewaakt op een nieuwe spreadsheet met salarisherzieningen en automatisch een gepersonaliseerde PDF-salarisverhogingsbrief genereert voor elke werknemer die erin vermeld staat. De voltooide brieven worden teruggeschreven naar Google Drive.]]></summary> <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.docugenerate.com/assets/posts/036-n8n-salary-increase-letters/cover-image.png"/> <media:content medium="image" url="https://www.docugenerate.com/assets/posts/036-n8n-salary-increase-letters/cover-image.png" xmlns:media="http://search.yahoo.com/mrss/"/> </entry> <entry> <title type="html">Genereer Formulier W-9 PDF’s met Power Automate en Smartsheet</title> <link href="https://www.docugenerate.com/nl/blog/genereer-formulier-w-9-pdfs-met-power-automate-en-smartsheet/" rel="alternate" type="text/html" title="Genereer Formulier W-9 PDF’s met Power Automate en Smartsheet"/> <published>2026-07-24T00:00:00+00:00</published> <updated>2026-07-24T00:00:00+00:00</updated> <id>https://www.docugenerate.com/nl/blog/genereer-formulier-w-9-pdfs-met-power-automate-en-smartsheet</id> <content type="html" xml:base="https://www.docugenerate.com/nl/blog/genereer-formulier-w-9-pdfs-met-power-automate-en-smartsheet/"><![CDATA[<h2 id="introductie">Introductie</h2> <p>Formulier W-9, “Request for Taxpayer Identification Number and Certification”, is een IRS-formulier dat bedrijven in de Verenigde Staten gebruiken om de wettelijke naam, het adres en het fiscaal identificatienummer van leveranciers, freelancers en zelfstandige contractanten te verzamelen voordat ze hen betalen. De op een W-9 vermelde informatie wordt later gebruikt om 1099-formulieren op te stellen bij de belastingaangifte, waardoor correcte en consistent opgemaakte W-9-gegevens een belangrijk onderdeel zijn van elk onboardingproces voor leveranciers. Bedrijven die voortdurend nieuwe contractanten aannemen, beheren deze gegevens vaak in een spreadsheet of een tool zoals <a href="https://www.smartsheet.com/" target="_blank" rel="nofollow noopener">Smartsheet</a>, wat er een natuurlijke kandidaat voor automatisering van maakt.</p> <p>In deze tutorial bouwen we een <a href="https://www.microsoft.com/en-us/power-platform/products/power-automate" target="_blank" rel="nofollow noopener">Power Automate</a>-flow die een Smartsheet-blad in de gaten houdt voor nieuwe rijen en automatisch een ingevulde W-9-PDF genereert met <a href="https://www.docugenerate.com/">DocuGenerate</a>. Telkens wanneer een nieuw leveranciersrecord aan het blad wordt toegevoegd, of het nu door een teamlid rechtstreeks wordt ingevoerd of via een import vanuit een ander systeem, voegt de flow de gegevens van die rij samen met een Word-sjabloon en slaat de definitieve PDF op in Azure File Storage. Hetzelfde patroon geldt voor elk document dat automatisch uit spreadsheetgegevens moet worden gegenereerd, maar een belastingformulier is een goede illustratie omdat het een mix van particuliere en zakelijke indieners, voorwaardelijke velden en een lay-out omvat die precies moet blijven.</p> <h2 id="de-docugenerate-sjabloon-voorbereiden">De DocuGenerate-Sjabloon Voorbereiden</h2> <p>De eerste stap is het maken van een Word-sjabloon in DocuGenerate die de officiële W-9-lay-out nabootst. We zijn uitgegaan van het <a href="https://www.irs.gov/forms-pubs/about-form-w-9" target="_blank" rel="nofollow noopener">IRS-formulier W-9</a> en hebben elk invulbaar veld vervangen door een <a href="https://www.docugenerate.com/nl/hulp/articles/wat-zijn-merge-tags/">merge-tag</a>, waarna we het als een nieuw sjabloon met de naam <strong>Form W-9</strong> <a href="https://www.docugenerate.com/nl/hulp/articles/hoe-maak-ik-een-nieuw-sjabloon-aan/">hebben geüpload</a>.</p> <p><img src="https://www.docugenerate.com/assets/posts/035-power-automate-form-w9/docugenerate-form-w-9-template.png" alt="Form-W-9-sjabloon met merge-tags in DocuGenerate"/></p> <p>Het sjabloon bevat 17 merge-tags: <code class="language-plaintext highlighter-rouge">firstName</code>, <code class="language-plaintext highlighter-rouge">lastName</code>, <code class="language-plaintext highlighter-rouge">businessName</code>, <code class="language-plaintext highlighter-rouge">taxClassification</code>, <code class="language-plaintext highlighter-rouge">exemptPayeeCode</code>, <code class="language-plaintext highlighter-rouge">fatcaCode</code>, <code class="language-plaintext highlighter-rouge">streetAddress</code>, <code class="language-plaintext highlighter-rouge">requesterName</code>, <code class="language-plaintext highlighter-rouge">requesterAddress</code>, <code class="language-plaintext highlighter-rouge">city</code>, <code class="language-plaintext highlighter-rouge">state</code>, <code class="language-plaintext highlighter-rouge">zipCode</code>, <code class="language-plaintext highlighter-rouge">accountNumber</code>, <code class="language-plaintext highlighter-rouge">ssn</code>, <code class="language-plaintext highlighter-rouge">ein</code>, <code class="language-plaintext highlighter-rouge">signature</code> en <code class="language-plaintext highlighter-rouge">signatureDate</code>. De meeste hiervan komen rechtstreeks overeen met een gelabeld vak op het formulier. <code class="language-plaintext highlighter-rouge">taxClassification</code> komt overeen met de regel “Other” in de sectie over de federale belastingclassificatie en bevat een korte omschrijving zoals “C Corporation” of “Trust/estate”, terwijl <code class="language-plaintext highlighter-rouge">ssn</code> en <code class="language-plaintext highlighter-rouge">ein</code> de twee vakken in Part I invullen, afhankelijk van of de indiener een particulier of een bedrijf is. U kunt het in deze tutorial gebruikte <a href="https://www.docugenerate.com/assets/posts/035-power-automate-form-w9/Form W-9.docx">Word-sjabloon</a> downloaden en aanpassen aan uw eigen lay-out.</p> <h2 id="smartsheet-gegevensbron">De Gegevensbron in Smartsheet Instellen</h2> <p>Met het sjabloon op zijn plaats is de volgende stap het voorbereiden van het blad dat als trigger voor onze flow zal dienen. Klik in Smartsheet op <strong>Create</strong> &gt; <strong>Sheet</strong> &gt; <strong>Table</strong> om een nieuw blad te maken en hernoem het naar <strong>Form W-9</strong>. In plaats van voorbeeldrijen handmatig in te typen, importeren we ze uit een Excel-bestand door het bladmenu te openen en <strong>Import</strong> te selecteren. Houd er rekening mee dat importeren alle bestaande gegevens in het blad vervangt door de gegevens uit het bronbestand.</p> <p><img src="https://www.docugenerate.com/assets/posts/035-power-automate-form-w9/smartsheet-import-excel-data.png" alt="Excel-gegevens importeren in het Form-W-9-blad in Smartsheet"/></p> <p>U kunt het voor deze import gebruikte <a href="https://www.docugenerate.com/assets/posts/035-power-automate-form-w9/Form W-9 Data.xlsx">voorbeeld-Excelbestand</a> downloaden. Het bevat 10 rijen die overeenkomen met de 18 kolommen die aan de merge-tags in het sjabloon worden gekoppeld: een kolom <code class="language-plaintext highlighter-rouge">Record ID</code> (<code class="language-plaintext highlighter-rouge">REC-001</code> tot <code class="language-plaintext highlighter-rouge">REC-010</code>), gevolgd door één kolom per veld van het formulier. De gegevens mengen particulieren en bedrijven om de verschillende vertakkingen van het formulier te doorlopen: zes particulieren of eenmanszaken met een ingevulde SSN en geen EIN, en vier entiteiten (een LLC, een C Corp, een trust/nalatenschap en een partnership) met een ingevulde EIN en geen SSN. Eén rij heeft ook de kolommen Exempt Payee Code en FATCA Code ingevuld, aangezien die alleen in specifieke gevallen van toepassing zijn.</p> <p><img src="https://www.docugenerate.com/assets/posts/035-power-automate-form-w9/smartsheet-table-form-w9-data.png" alt="Form-W-9-gegevens geïmporteerd in de Smartsheet-tabel"/></p> <h2 id="de-power-automate-flow-maken">De Power Automate-Flow Maken</h2> <p>Met het sjabloon en de gegevensbron gereed, kunnen we de flow zelf bouwen. Klik in Power Automate op <strong>New flow</strong> &gt; <strong>Automated cloud flow</strong>. Geef de flow in het dialoogvenster <strong>Build an automated cloud flow</strong> een naam zoals <code class="language-plaintext highlighter-rouge">Form W-9</code>, zoek naar “Smartsheet” in de lijst met triggers, en selecteer <strong>When a new row is created</strong>.</p> <p><img src="https://www.docugenerate.com/assets/posts/035-power-automate-form-w9/when-a-new-row-is-created-trigger.png" alt="De Smartsheet-trigger selecteren bij het maken van een nieuwe flow"/></p> <p>De flow die we bouwen bestaat uit drie stappen: een Smartsheet-trigger die afgaat wanneer een rij wordt toegevoegd, een DocuGenerate-actie die de PDF genereert, en een Azure File Storage-actie die deze opslaat. Laten we elk van deze stappen om beurten configureren.</p> <h3 id="smartsheet-trigger">De Smartsheet-Trigger Configureren</h3> <p>De trigger <strong>When a new row is created</strong> vereist een verbinding met uw Smartsheet-account, waartoe Power Automate u zal vragen bij het eerste gebruik. Stel na het verbinden de parameter <strong>Sheet Id</strong> in op het <a href="#smartsheet-gegevensbron">eerder gemaakte</a> blad <strong>Form W-9</strong>.</p> <p><img src="https://www.docugenerate.com/assets/posts/035-power-automate-form-w9/configure-sheet-id-trigger.png" alt="De Sheet-Id-parameter configureren op de Smartsheet-trigger"/></p> <h3 id="generate-document">De Generate Document-Actie Toevoegen</h3> <p>Klik vervolgens op de knop <strong>+</strong> onder de trigger en zoek naar “DocuGenerate” om de lijst met beschikbare acties te zien.</p> <p><img src="https://www.docugenerate.com/assets/posts/035-power-automate-form-w9/docugenerate-add-action.png" alt="Zoeken naar de DocuGenerate-connector in Power Automate"/></p> <p>Selecteer <strong>Generate Document</strong>. De eerste keer dat u een DocuGenerate-actie in uw omgeving gebruikt, wordt u gevraagd om <a href="https://www.docugenerate.com/nl/hulp/articles/documentgeneratie-automatiseren-met-power-apps/#add-the-custom-connector">een verbinding te maken</a> met uw DocuGenerate-<a href="https://www.docugenerate.com/nl/hulp/articles/waar-vind-ik-mijn-api-sleutel/">API-sleutel</a>. Stel na het verbinden het veld <strong>Template</strong> in op het <a href="#de-docugenerate-sjabloon-voorbereiden">in DocuGenerate gemaakte</a> sjabloon <strong>Form W-9</strong>.</p> <p>Voor het veld <strong>Data</strong> hebben we een JSON-object nodig met de waarden voor alle 17 merge-tags. De Smartsheet-trigger stelt de cellen van de rij niet beschikbaar op kolomnaam, alleen als array, dus elke waarde moet worden aangeduid via de numerieke index. Op basis van de volgorde van de kolommen tijdens de import ziet de koppeling er als volgt uit: kolom 0 is Record ID, kolom 1 is SSN, kolom 2 is First Name, kolom 3 is Last Name, enzovoort tot kolom 17, wat Signature Date is. We hebben de JSON opgebouwd met de expressies <code class="language-plaintext highlighter-rouge">concat</code> en <code class="language-plaintext highlighter-rouge">json</code>:</p> <div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>json(concat(
  '{"firstName": "', triggerBody()?.cells?[2]?.value,
  '", "lastName": "', triggerBody()?.cells?[3]?.value,
  '", "businessName": "', triggerBody()?.cells?[4]?.value,
  '", "taxClassification": "', triggerBody()?.cells?[5]?.value,
  '", "exemptPayeeCode": "', triggerBody()?.cells?[6]?.value,
  '", "fatcaCode": "', triggerBody()?.cells?[7]?.value,
  '", "streetAddress": "', triggerBody()?.cells?[8]?.value,
  '", "requesterName": "', triggerBody()?.cells?[9]?.value,
  '", "requesterAddress": "', triggerBody()?.cells?[10]?.value,
  '", "city": "', triggerBody()?.cells?[11]?.value,
  '", "state": "', triggerBody()?.cells?[12]?.value,
  '", "zipCode": "', triggerBody()?.cells?[13]?.value,
  '", "accountNumber": "', triggerBody()?.cells?[14]?.value,
  '", "ssn": "', triggerBody()?.cells?[1]?.value,
  '", "ein": "', triggerBody()?.cells?[15]?.value,
  '", "signature": "', triggerBody()?.cells?[16]?.value,
  '", "signatureDate": "', triggerBody()?.cells?[17]?.value,
  '"}'
))
</code></pre></div></div> <p>De <code class="language-plaintext highlighter-rouge">?</code>-tekens zijn null-conditionele operatoren: <code class="language-plaintext highlighter-rouge">triggerBody()?.cells?[2]?.value</code> leest de eigenschap <code class="language-plaintext highlighter-rouge">value</code> van de cel op index 2, en geeft <code class="language-plaintext highlighter-rouge">null</code> terug in plaats van een fout te genereren zodra <code class="language-plaintext highlighter-rouge">cells</code> of die specifieke cel ontbreekt. Dit is hier belangrijk omdat verschillende kolommen, zoals <code class="language-plaintext highlighter-rouge">businessName</code> of <code class="language-plaintext highlighter-rouge">ssn</code>, in veel rijen opzettelijk leeg zijn. De buitenste functie <code class="language-plaintext highlighter-rouge">concat</code> voegt al deze waarden samen tot één JSON-tekenreeks, en <code class="language-plaintext highlighter-rouge">json()</code> zet die tekenreeks om in het object dat het veld <strong>Data</strong> verwacht.</p> <p><img src="https://www.docugenerate.com/assets/posts/035-power-automate-form-w9/generate-document-action-data.png" alt="Het Data-veld configureren op de Generate Document-actie"/></p> <p>Voor het veld <strong>Name</strong> hebben we een expressie gebruikt die controleert of de kolom Business Name (index 4) is ingevuld en op basis daarvan het juiste naampatroon kiest, met dezelfde indexkoppeling als hierboven:</p> <div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>if(
  empty(triggerBody()?.cells?[4]?.value),
  concat('Form W-9 ', triggerBody()?.cells?[2]?.value, ' ', triggerBody()?.cells?[3]?.value),
  concat('Form W-9 ', triggerBody()?.cells?[4]?.value)
)
</code></pre></div></div> <p>Dit levert een naam op zoals “Form W-9 John Smith” voor een particuliere indiener, of “Form W-9 Bluepeak Software LLC” voor een zakelijke indiener. Laat het veld <strong>Format</strong> ten slotte op de standaardwaarde <strong>.pdf</strong> staan.</p> <p><img src="https://www.docugenerate.com/assets/posts/035-power-automate-form-w9/generate-document-action-name.png" alt="Het Name-veld configureren op de Generate Document-actie"/></p> <h3 id="azure-file-storage">Het Document Opslaan in Azure File Storage</h3> <p>Zodra het document is gegenereerd, zijn er veel manieren om het af te leveren: per e-mail versturen, toevoegen aan SharePoint of OneDrive, uploaden naar een S3-bucket, enzovoort. Voor deze tutorial slaan we het op in <a href="https://learn.microsoft.com/en-us/connectors/azurefile/" target="_blank" rel="nofollow noopener">Azure File Storage</a>. Klik op de knop <strong>+</strong> onder de actie <strong>Generate Document</strong>, zoek naar “Create file”, en selecteer de actie van <strong>Azure File Storage</strong>.</p> <p><img src="https://www.docugenerate.com/assets/posts/035-power-automate-form-w9/add-create-file-action.png" alt="De Create-file-actie van Azure File Storage toevoegen"/></p> <p>Maak een verbinding door een <strong>Connection name</strong>, uw <strong>Azure Storage account name or file endpoint</strong> en uw <strong>Azure Storage Account Access Key</strong> op te geven, beide beschikbaar vanuit uw opslagaccount in de Azure-portal.</p> <p><img src="https://www.docugenerate.com/assets/posts/035-power-automate-form-w9/create-file-config.png" alt="Een verbinding maken met Azure File Storage"/></p> <p>Configureer met de verbinding op zijn plaats de actie <strong>Create file</strong>:</p> <ul> <li><strong>Folder path</strong>: <code class="language-plaintext highlighter-rouge">/form-w-9</code>, de doelmap in het opslagaccount.</li> <li><strong>File name</strong>: <code class="language-plaintext highlighter-rouge">outputs('Generate_Document')?['body/filename']</code>, de bestandsnaam van de gegenereerde PDF.</li> <li><strong>File content</strong>: <code class="language-plaintext highlighter-rouge">outputs('Generate_Document')?['body/document_uri']</code>, de URL van de gegenereerde PDF.</li> </ul> <p><img src="https://www.docugenerate.com/assets/posts/035-power-automate-form-w9/create-file-params.png" alt="De parameters van de Create-file-actie configureren"/></p> <h2 id="flow-testen">De Flow Testen</h2> <p>Om de flow te testen, klikt u op <strong>Test</strong> op de flowpagina, selecteert u <strong>Manually</strong>, en klikt u vervolgens opnieuw op <strong>Test</strong>. Power Automate toont een bericht waarin u wordt gevraagd een rij toe te voegen aan het geselecteerde blad om de uitvoering te activeren.</p> <p><img src="https://www.docugenerate.com/assets/posts/035-power-automate-form-w9/test-flow-manually.png" alt="De flow handmatig testen vanuit Power Automate"/></p> <p>Voeg een nieuwe rij toe aan het blad <strong>Form W-9</strong> in Smartsheet met een nieuwe set leveranciersgegevens. Zodra de flow is uitgevoerd, verschijnt het gegenereerde document in het paneel <strong>Documents</strong> van het sjabloon <strong>Form W-9</strong> in DocuGenerate, en wordt de PDF opgeslagen in de opgegeven map in Azure File Storage. Hieronder ziet u een voorbeeld van de <a href="https://www.docugenerate.com/assets/posts/035-power-automate-form-w9/Form W-9 Jessica Martinez.pdf">gegenereerde PDF</a>.</p> <object data="/assets/posts/035-power-automate-form-w9/Form W-9 Jessica Martinez.pdf" type="application/pdf" class="inline-pdf-blog"></object> <h2 id="conclusie">Conclusie</h2> <p>Deze tutorial doorliep het volledige traject van een rij in Smartsheet tot een indienklare W-9-PDF, met behulp van een Power Automate-flow zonder aangepaste code. De trigger detecteert nieuwe leveranciersrecords zodra ze worden ingevoerd, de actie <strong>Generate Document</strong> vult de officiële formulierlay-out met de gegevens van die rij, en de actie <strong>Create file</strong> levert het resultaat automatisch af aan Azure File Storage.</p> <p>Hetzelfde patroon in drie stappen (trigger, genereren, afleveren) werkt voor elk terugkerend document dat uw team produceert vanuit spreadsheet- of tabelgegevens, of het nu gaat om onboardingdocumenten, facturen of compliance-formulieren. Omdat de DocuGenerate-acties beschikbaar zijn in het volledige Power Platform, kunt u deze flow net zo gemakkelijk activeren vanuit een Power Apps-formulier of een SharePoint-lijst in plaats van een Smartsheet-rij, met behoud van dezelfde configuratie van de actie <strong>Generate Document</strong>.</p> <h2 id="bronnen">Bronnen</h2> <ul> <li>Het in deze tutorial gebruikte Word-sjabloon <a href="https://www.docugenerate.com/assets/posts/035-power-automate-form-w9/Form W-9.docx">Form W-9</a>.</li> <li>Het <a href="https://www.docugenerate.com/assets/posts/035-power-automate-form-w9/Form W-9 Data.xlsx">voorbeeld-Excelbestand</a> met leveranciersgegevens om te importeren in Smartsheet.</li> <li>Een <a href="https://www.docugenerate.com/assets/posts/035-power-automate-form-w9/Form W-9 Jessica Martinez.pdf">voorbeeld van een gegenereerde PDF</a> die het eindresultaat toont.</li> <li>De <a href="https://learn.microsoft.com/en-us/connectors/smartsheet/" target="_blank" rel="nofollow noopener">Smartsheet-connectorreferentie</a> voor Power Automate.</li> <li>De <a href="https://learn.microsoft.com/en-us/connectors/azurefile/" target="_blank" rel="nofollow noopener">Azure File Storage-connectorreferentie</a> voor Power Automate.</li> <li>De <a href="https://learn.microsoft.com/en-us/connectors/docugenerate/" target="_blank" rel="nofollow noopener">DocuGenerate-connectorreferentie</a> voor Power Automate.</li> <li>Het officiële <a href="https://www.irs.gov/forms-pubs/about-form-w-9" target="_blank" rel="nofollow noopener">IRS-formulier W-9</a> en de bijbehorende instructies.</li> </ul>]]></content> <author> <name>DocuGenerate</name> <email>support@docugenerate.com</email> </author> <category term="Tax Forms"/> <category term="Power Platform"/> <category term="No-Code"/> <summary type="html"><![CDATA[Leer hoe u automatisch Formulier W-9-documenten genereert zodra er een nieuwe rij wordt toegevoegd in Smartsheet. Deze tutorial bouwt een Power Automate-flow die leveranciers- en contractantgegevens samenvoegt met een DocuGenerate-sjabloon om het formulier te produceren.]]></summary> <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.docugenerate.com/assets/posts/035-power-automate-form-w9/cover-image.png"/> <media:content medium="image" url="https://www.docugenerate.com/assets/posts/035-power-automate-form-w9/cover-image.png" xmlns:media="http://search.yahoo.com/mrss/"/> </entry> <entry> <title type="html">Organiseer Uw Sjablonen in Mappen voor Eenvoudige Toegang</title> <link href="https://www.docugenerate.com/nl/blog/organiseer-uw-sjablonen-in-mappen-voor-eenvoudige-toegang/" rel="alternate" type="text/html" title="Organiseer Uw Sjablonen in Mappen voor Eenvoudige Toegang"/> <published>2026-06-15T00:00:00+00:00</published> <updated>2026-06-15T00:00:00+00:00</updated> <id>https://www.docugenerate.com/nl/blog/organiseer-uw-sjablonen-in-mappen-voor-eenvoudige-toegang</id> <content type="html" xml:base="https://www.docugenerate.com/nl/blog/organiseer-uw-sjablonen-in-mappen-voor-eenvoudige-toegang/"><![CDATA[<h2 id="wat-zijn-sjabloonmappen">Wat zijn Sjabloonmappen?</h2> <p>Sjabloonmappen brengen een vertrouwd organisatiemodel naar DocuGenerate, waardoor u verwante sjablonen samen kunt groeperen in een hiërarchische structuur. Of u nu een handvol sjablonen beheert of honderden, mappen bieden een overzichtelijke, intuïtieve manier om te vinden wat u nodig heeft en uw sjabloonbibliotheek georganiseerd te houden naarmate deze groeit.</p> <p>Tot nu toe werden alle sjablonen in uw DocuGenerate-account weergegeven in één platte lijst, gesorteerd op aanmaakdatum. Met deze nieuwe functie introduceren we een mappensysteem dat de conventies volgt die u al kent van bestandsbeheerders en e-mailclients, met willekeurige nestingdiepte, intuïtieve herordening, en volledige ondersteuning in zowel de <a href="#hoe-sjabloonmappen-werken-in-de-web-app">webapp</a> als de <a href="#mapondersteuning-in-de-api">API</a>.</p> <h2 id="waarom-maporganisatie-belangrijk-is">Waarom Maporganisatie Belangrijk Is</h2> <p>Voor organisaties die vertrouwen op een groeiende bibliotheek van sjablonen kan het ontbreken van organisatiestructuur na verloop van tijd een echte productiviteitsrem worden. Naarmate uw sjabloonbibliotheek groeit van een paar dozijn tot honderden sjablonen, wordt het lastiger om de juiste te vinden, verloopt de onboarding van nieuwe teamleden trager, en raken sjablonen los van elke logische structuur die ooit in iemands hoofd bestond.</p> <p><strong>1. Sjablonen Sneller Vinden</strong><br/> Met mappen hoeft u niet langer door een lange lijst met sjablonen te scrollen of te vertrouwen op gedeeltelijke naamovereenkomsten om de juiste te vinden. Een goed georganiseerde maphiërarchie weerspiegelt hoe uw team daadwerkelijk over sjablonen denkt, of dat nu per afdeling, per klant, per documenttype, of per projectfase is.</p> <p><strong>2. Duidelijker Mentaal Model voor Teams</strong><br/> Wanneer sjablonen in mappen zijn georganiseerd, communiceert de structuur zelf de bedoeling. Een nieuw teamlid dat naar uw sjabloonbibliotheek kijkt, kan snel begrijpen hoe documenten binnen uw organisatie worden gecategoriseerd, wat de behoefte aan uitleg of onboardingdocumentatie vermindert.</p> <p><strong>3. Filterbare Weergaven</strong><br/> Mappen zijn niet alleen visuele containers. Door een map te selecteren, wordt de sjablonenweergave gefilterd om alleen de sjablonen erin te tonen, wat u een gerichte werkruimte biedt wanneer u binnen een specifieke categorie werkt. De huidige map wordt weerspiegeld in de pagina-URL, zodat u een gefilterde weergave kunt bladwijzeren of delen.</p> <h2 id="hoe-sjabloonmappen-werken-in-de-web-app">Hoe Sjabloonmappen Werken in de Web-App</h2> <p>Mappen zijn overal in de app toegankelijk via het mappictogram in de navigatiebalk. Erop klikken opent het mappenmenu, dat uw mapstructuur toont en u direct mappen laat maken, bewerken, of verwijderen. Op mobiele apparaten is het mappenmenu beschikbaar via het hoofdgebruikersmenu.</p> <p><img src="https://www.docugenerate.com/assets/posts/034-template-folders/folder-menu-v2.png" alt="Mappenmenu in de navigatiebalk"/></p> <h3 id="een-map-maken">Een Map Maken</h3> <p>Om <a href="https://www.docugenerate.com/nl/hulp/articles/hoe-maak-ik-een-map-aan/">een nieuwe map te maken</a>, klikt u op het pictogram <strong>New Folder</strong> naast de header <strong>Template Folders</strong> in het mappenmenu. Er opent een dialoogvenster waarin u de mapnaam kunt invoeren en optioneel een bovenliggende map kunt selecteren als u de map binnen een bestaande map wilt maken.</p> <p><img src="https://www.docugenerate.com/assets/posts/034-template-folders/new-folder-dialog-v2.png" alt="Dialoogvenster voor nieuwe map"/></p> <p>Om <a href="https://www.docugenerate.com/nl/hulp/articles/hoe-maak-ik-geneste-mappen-aan/">rechtstreeks vanuit een bestaande map een submap te maken</a>, kunt u ook de actie <strong>Add</strong> in het <a href="#mappen-beheren">contextmenu</a> van de map gebruiken, die de selectie van de bovenliggende map voor u vooraf invult. Mapnamen ondersteunen letters, cijfers, en spaties. Elke map krijgt een unieke URL afgeleid van zijn naam, zoals beschreven in de sectie <a href="#sjablonen-filteren-op-map">filteren</a> hieronder.</p> <h3 id="sjablonen-toewijzen-aan-mappen">Sjablonen Toewijzen aan Mappen</h3> <p>U kunt <a href="https://www.docugenerate.com/nl/hulp/articles/hoe-wijs-ik-een-sjabloon-toe-aan-een-map/">een sjabloon toewijzen aan een map</a>, ofwel bij het maken van een nieuw sjabloon, ofwel door de instellingen van een bestaand sjabloon te bewerken. De vervolgkeuzelijst voor mappen in de sjabloonsinstellingen toont de volledige structuur van beschikbare mappen, met inspringing die de ouder-kindrelaties weerspiegelt.</p> <p><img src="https://www.docugenerate.com/assets/posts/034-template-folders/template-settings-folder.png" alt="Mapselectie in de sjabloonsinstellingen"/></p> <p>Elk sjabloon behoort op elk moment tot één map. Om een sjabloon naar een andere map te verplaatsen, wijzigt u de mapselectie in de sjabloonsinstellingen en slaat u op. Om een sjabloon uit elke map te verwijderen, selecteert u <strong>None</strong> in de vervolgkeuzelijst voor mappen.</p> <h3 id="sjablonen-filteren-op-map">Sjablonen Filteren op Map</h3> <p>Door een map te selecteren in het mappenmenu wordt de <a href="https://www.docugenerate.com/nl/hulp/articles/hoe-filter-ik-sjablonen-op-map/">sjablonenweergave gefilterd</a> om alleen de sjablonen binnen die map te tonen. De pagina-URL wordt bijgewerkt om het huidige filter te weerspiegelen. Dit betekent dat u een mapweergave kunt bladwijzeren, de URL kunt delen met een teamgenoot, of meerdere browsertabbladen kunt openen die elk zijn gericht op een andere map.</p> <p><img src="https://www.docugenerate.com/assets/posts/034-template-folders/filtered-view.png" alt="Sjablonen gefilterd op map"/></p> <p>Het broodkruimelpad van de map verschijnt in de navigatiebalk, met het volledige pad van de geselecteerde map. Om terug te keren naar de standaardweergave met alle sjablonen, klikt u op het pictogram <strong>Clear Folder</strong> naast het broodkruimelpad, of selecteert u <strong>All Templates</strong> in het mappenmenu.</p> <p><img src="https://www.docugenerate.com/assets/posts/034-template-folders/nested-folders.png" alt="Gefilterde weergave van geneste mappen"/></p> <p>De map waartoe een sjabloon behoort, is zichtbaar in zowel de <a href="https://www.docugenerate.com/nl/hulp/articles/hoe-schakel-ik-weergaveopties-in-of-uit/">Grid- als List-weergave</a> van de sjablonenpagina. In de <strong>Grid</strong>-weergave verschijnt de mapnaam onder de sjabloontitel, samen met een klein mappictogram. In de <strong>List</strong>-weergave toont een speciale kolom <strong>Folder</strong> dezelfde informatie. Klikken op de mapnaam in beide weergaven filtert de sjablonenlijst naar die map.</p> <h3 id="mappen-beheren">Mappen Bewerken, Verplaatsen, en Verwijderen</h3> <p>Elke map in het mappenmenu heeft een contextmenu met drie acties: <strong>Edit</strong> om <a href="https://www.docugenerate.com/nl/hulp/articles/hoe-bewerk-ik-een-map/">de map te hernoemen</a> of de bovenliggende map te wijzigen, <strong>Delete</strong> om <a href="https://www.docugenerate.com/nl/hulp/articles/hoe-verwijder-ik-een-map/">de map te verwijderen</a> samen met alle submappen, en <strong>Add</strong> om een nieuwe submap erin te maken.</p> <p><img src="https://www.docugenerate.com/assets/posts/034-template-folders/folder-context-menu-v2.png" alt="Contextmenu van een map"/></p> <p>Wanneer u een map verwijdert, worden ook alle submappen ervan verwijderd. Sjablonen binnen verwijderde mappen worden niet zelf verwijderd, ze worden simpelweg verweesd en keren terug naar de weergave <strong>All Templates</strong>. Dit betekent dat het verwijderen van een map altijd een veilige bewerking is vanuit het perspectief van uw sjabloon-content.</p> <p>Het verplaatsen van een map naar een andere bovenliggende map wordt ondersteund, met één veiligheidsmaatregel: een map kan niet worden verplaatst naar zichzelf of een van zijn eigen submappen. Het mapdialoogvenster schakelt die opties automatisch uit wanneer u een bestaande map bewerkt, zodat de beperking visueel wordt afgedwongen voordat u zelfs maar een ongeldige verplaatsing kunt proberen.</p> <h2 id="mappen-voor-teamsamenwerking">Mappen voor Teamsamenwerking</h2> <p>Voor gebruikers met de functie <a href="https://www.docugenerate.com/nl/hulp/articles/introductie-tot-teamsamenwerking/">teamsamenwerking</a> breidt maporganisatie zich natuurlijk uit naar gedeelde sjablonen. Teamleden zien de mappen van hun teameigenaar in een speciale sectie <strong>Shared</strong> binnen het mappenmenu, gescheiden van hun eigen mappen door een visuele scheiding.</p> <p><img src="https://www.docugenerate.com/assets/posts/034-template-folders/shared-folders.png" alt="Mappenmenu met persoonlijke en gedeelde mappen"/></p> <p>Het zichtbaarheidsmodel is bewust ontworpen: teamleden kunnen bladeren en filteren op de gedeelde mappen van de teameigenaar, maar ze kunnen geen mappen maken, hernoemen, of verwijderen in de hiërarchie van de teameigenaar. Dit houdt de mapstructuur consistent binnen het team en geeft de eigenaar duidelijke controle over hoe sjablonen voor iedereen worden georganiseerd.</p> <p>Wanneer een teamlid wordt toegevoegd of verwijderd, weerspiegelt de mapstructuur deze wijziging onmiddellijk, zonder dat het teamlid actie hoeft te ondernemen. Evenzo, wanneer de eigenaar wijzigingen aanbrengt in zijn mapstructuur, worden die wijzigingen doorgevoerd naar de weergave van elk teamlid zodra ze zijn opgeslagen.</p> <h2 id="mapondersteuning-in-de-api">Mapondersteuning in de API</h2> <p>Voor gebruikers die sjablonen beheren via de <a href="https://api.docugenerate.com/" target="_blank">DocuGenerate API</a>, is maporganisatie toegankelijk via dezelfde eindpunten die u al gebruikt. De map waartoe een sjabloon behoort, wordt weergegeven als een parameter <code class="language-plaintext highlighter-rouge">folder</code> op het sjabloon, uitgedrukt als een array van mapnamen die het pad volgt van de root naar de toegewezen map. Een sjabloon binnen een submap genaamd “Contracts” binnen een bovenliggende map genaamd “Legal” heeft bijvoorbeeld zijn veld <code class="language-plaintext highlighter-rouge">folder</code> ingesteld op <code class="language-plaintext highlighter-rouge">["Legal", "Contracts"]</code>.</p> <h3 id="een-map-opgeven-bij-het-maken-van-een-sjabloon">Een Map Opgeven bij het Maken van een Sjabloon</h3> <p>Bij <a href="https://api.docugenerate.com/#/Template/createTemplate" target="_blank">het maken van een sjabloon</a> via de API, kunt u de parameter <code class="language-plaintext highlighter-rouge">folder</code> opnemen in uw verzoek om het sjabloon toe te wijzen aan een specifieke map. Als het mappad nog niet bestaat in uw account, maakt DocuGenerate dit automatisch aan, inclusief eventuele tussenliggende mappen onderweg.</p> <p><img src="https://www.docugenerate.com/assets/posts/034-template-folders/api-create-template-v2.png" alt="Folder-parameter bij het maken van een sjabloon"/></p> <p>Dit gedrag van automatische aanmaak maakt het eenvoudig om uw mapstructuur programmatisch in te stellen terwijl u sjablonen maakt, zonder dat u de hiërarchie eerst via de webapp hoeft te configureren.</p> <h3 id="sjablonen-verplaatsen-tussen-mappen">Sjablonen Verplaatsen Tussen Mappen</h3> <p>Om een bestaand sjabloon naar een andere map te verplaatsen, kunt u het eindpunt <a href="https://api.docugenerate.com/#/Template/updateTemplate" target="_blank">update template</a> gebruiken met een nieuwe waarde voor de parameter <code class="language-plaintext highlighter-rouge">folder</code>. Door deze in te stellen op een lege array (<code class="language-plaintext highlighter-rouge">[]</code>) wordt het sjabloon uit elke map verwijderd, en keert het terug naar de verweesde staat.</p> <p><img src="https://www.docugenerate.com/assets/posts/034-template-folders/api-update-template.png" alt="Folder-parameter bij het bijwerken van een sjabloon"/></p> <p>Net als bij het maken van een sjabloon geldt: als het nieuwe mappad nog niet bestaat, maakt DocuGenerate de ontbrekende mappen automatisch aan (op voorwaarde dat u de sjabloneigenaar bent). Teamleden met schrijfrechten op een gedeeld sjabloon kunnen de inhoud en instellingen van het sjabloon bijwerken, maar ze kunnen geen nieuwe mappen maken in de hiërarchie van de sjabloneigenaar, wat overeenkomt met het <a href="#mappen-voor-teamsamenwerking">gedrag in de webapp</a>.</p> <h3 id="sjablonen-filteren-op-map-api">Sjablonen Filteren op Map</h3> <p>Het eindpunt <a href="https://api.docugenerate.com/#/Template/getTemplates" target="_blank">list templates</a> accepteert een queryparameter <code class="language-plaintext highlighter-rouge">folder</code> die de respons filtert naar een specifieke map. De parameter heeft dezelfde vorm als bij <a href="#een-map-opgeven-bij-het-maken-van-een-sjabloon">het maken</a> of <a href="#sjablonen-verplaatsen-tussen-mappen">het bijwerken</a> van een sjabloon, uitgedrukt als een array van mapnamen die het pad volgt van de root naar de toegewezen map.</p> <p><img src="https://www.docugenerate.com/assets/posts/034-template-folders/api-query-template.png" alt="Folder-parameter bij het opvragen van sjablonen"/></p> <p>Dit filter volgt dezelfde logica als <a href="#sjablonen-filteren-op-map">filteren in de webapp</a>: het selecteren van een map retourneert alleen sjablonen die er rechtstreeks aan zijn toegewezen, niet sjablonen uit submappen. Om sjablonen uit een map en al zijn submappen te verzamelen, zou u aparte verzoeken moeten doen voor elke submap.</p> <h2 id="gebruiksscenarios">Gebruiksscenario’s</h2> <p>Laten we enkele praktijkscenario’s verkennen waarin sjabloonmappen aanzienlijke waarde kunnen bieden.</p> <h3 id="scenario-1-organisatie-op-basis-van-afdeling">Scenario 1: Organisatie op Basis van Afdeling</h3> <p>Een <strong>middelgroot bedrijf</strong> gebruikt DocuGenerate om sjablonen te beheren voor meerdere afdelingen: HR, Legal, Sales, en Finance. Met tientallen sjablonen per afdeling was het vinden van de juiste tijdrovend geworden, en nieuwe medewerkers hadden moeite om de sjablonen te vinden die relevant waren voor hun functie.</p> <p>Na het organiseren van sjablonen in mappen op het hoogste niveau per afdeling, met submappen voor specifieke documenttypes (aanbiedingsbrieven, contracten, voorstellen, facturen), kunnen teamleden rechtstreeks navigeren naar de map van hun afdeling en alleen de sjablonen zien die voor hen relevant zijn. Deelbare map-URL’s worden toegevoegd aan de onboardingdocumentatie van elk team, wat nieuwe medewerkers vanaf dag één een directe link geeft naar de sjablonen die ze zullen gebruiken.</p> <h3 id="scenario-2-organisatie-op-basis-van-klant-voor-een-bureau">Scenario 2: Organisatie op Basis van Klant voor een Bureau</h3> <p>Een <strong>marketingbureau</strong> genereert gepersonaliseerde contracten, voorstellen, en rapporten voor tientallen klanten, elk met hun eigen branding en voorwaarden. Vóór mappen vertrouwde het team van het bureau op een naamgevingsconventie zoals <code class="language-plaintext highlighter-rouge">[klantnaam]_[documenttype]</code> om sjablonen te vinden, maar dit resulteerde in lange, moeilijk te scannen sjabloonnamen en bemoeilijkte het onboarden van nieuwe accountmanagers.</p> <p>Door per klant een map op het hoogste niveau te maken en documenttypes te organiseren als submappen, kunnen de accountmanagers van het bureau nu bladeren door een overzichtelijke, hiërarchische weergave van alle materialen voor elke klant. Bij het onboarden van een nieuwe klant maakt de accountmanager een nieuwe klantmap en repliceert de standaard submapstructuur erin.</p> <h3 id="scenario-3-programmatische-mapinstelling-via-api">Scenario 3: Programmatische Mapinstelling via API</h3> <p>Een <strong>documentautomatiseringsteam</strong> integreert DocuGenerate in hun interne tooling, en genereert programmatisch sjablonen op basis van een database met documentpatronen. Hun interne systeem organiseert patronen per regio en documentcategorie, en ze willen dat hun DocuGenerate-account die structuur exact weerspiegelt.</p> <p>Met de API stuurt hun integratie de juiste parameter <code class="language-plaintext highlighter-rouge">folder</code> bij het maken van elk sjabloon, waarmee automatisch een maphiërarchie wordt opgebouwd die overeenkomt met hun interne taxonomie. Dit houdt hun DocuGenerate-account gesynchroniseerd met hun bron van waarheid, zonder handmatig mapbeheer in de webapp, zelfs als hun patronencatalogus evolueert.</p> <h2 id="best-practices-voor-maporganisatie">Best Practices voor Maporganisatie</h2> <p>Om het meeste uit sjabloonmappen te halen naarmate uw bibliotheek groeit, overweegt u deze praktijken die helpen uw structuur nuttig en onderhoudbaar te houden na verloop van tijd:</p> <ol> <li> <p><strong>Begin met brede categorieën en verfijn indien nodig.</strong> Weersta de verleiding om vanaf dag één diepe maphiërarchieën te maken. Begin met een paar mappen op het hoogste niveau die overeenkomen met de meest fundamentele onderscheidingen in uw workflow, en voeg alleen submappen toe wanneer een categorie genoeg sjablonen verzamelt om onderverdeling te rechtvaardigen.</p> </li> <li> <p><strong>Laat mappen aansluiten bij hoe uw team denkt, niet bij hoe uw data is gestructureerd.</strong> Een mapstructuur werkt het beste wanneer deze het mentale model weerspiegelt dat uw team al gebruikt. Als iedereen verwijst naar “Q1-contracten” in plaats van “contracten van januari tot en met maart”, laat de mapnaam dan overeenkomen met het gesproken vocabulaire, zelfs als dit afwijkt van uw interne naamgevingsnormen.</p> </li> <li> <p><strong>Gebruik deelbare map-URL’s voor onboarding.</strong> Wanneer nieuwe teamleden zich aansluiten, deelt u directe links naar de mappen waarmee ze het vaakst zullen werken. Dit verkort de leercurve aanzienlijk en zorgt ervoor dat iedereen vanaf het begin op de hoogte is van de relevante sjablonen.</p> </li> <li> <p><strong>Evalueer periodiek opnieuw.</strong> Mapstructuren die een jaar geleden logisch waren, komen mogelijk niet meer overeen met hoe uw team vandaag werkt. Plan een periodieke beoordeling (per kwartaal of halfjaarlijks) om weinig gebruikte mappen samen te voegen, mappen die te groot zijn geworden te splitsen, of volledig te herstructureren als uw workflow aanzienlijk is veranderd.</p> </li> </ol> <h2 id="conclusie">Conclusie</h2> <p>Sjabloonmappen zijn een van de meest gevraagde toevoegingen aan DocuGenerate, en we zijn blij eindelijk een organisatiemodel te kunnen leveren dat meegroeit met uw sjabloonbibliotheek. Of u nu een klein handvol sjablonen beheert of honderden verspreid over meerdere afdelingen en klanten, mappen geven u de structuur en flexibiliteit om te vinden wat u nodig heeft en het te delen met uw team.</p> <p>Zoals altijd verwelkomen we uw feedback terwijl u begint met het organiseren van uw sjablonen met deze nieuwe functie. We zijn met name geïnteresseerd om te horen over workflows waarin mappen uw team aanzienlijk tijd besparen, evenals eventuele knelpunten die u tegenkomt bij gebruik in de praktijk, waarmee we rekening moeten houden voor toekomstige verbeteringen.</p> <h3 id="bronnen">Bronnen</h3> <ul> <li><a href="https://www.docugenerate.com/nl/hulp/articles/hoe-maak-ik-een-map-aan/">Hoe maak ik een map aan?</a></li> <li><a href="https://www.docugenerate.com/nl/hulp/articles/hoe-wijs-ik-een-sjabloon-toe-aan-een-map/">Hoe wijs ik een sjabloon toe aan een map?</a></li> <li><a href="https://www.docugenerate.com/nl/hulp/articles/hoe-filter-ik-sjablonen-op-map/">Hoe filter ik sjablonen op map?</a></li> <li><a href="https://www.docugenerate.com/nl/hulp/articles/hoe-maak-ik-geneste-mappen-aan/">Hoe maak ik geneste mappen aan?</a></li> <li><a href="https://www.docugenerate.com/nl/hulp/articles/hoe-bewerk-ik-een-map/">Hoe bewerk ik een map?</a></li> <li><a href="https://www.docugenerate.com/nl/hulp/articles/hoe-verwijder-ik-een-map/">Hoe verwijder ik een map?</a></li> <li><a href="https://api.docugenerate.com/#/Template/createTemplate" target="_blank">Create template</a> API-documentatie.</li> <li><a href="https://api.docugenerate.com/#/Template/updateTemplate" target="_blank">Update template</a> API-documentatie.</li> <li><a href="https://api.docugenerate.com/#/Template/getTemplates" target="_blank">List templates</a> API-documentatie.</li> </ul>]]></content> <author> <name>DocuGenerate</name> <email>support@docugenerate.com</email> </author> <category term="Product Update"/> <category term="Web App"/> <category term="Templates"/> <summary type="html"><![CDATA[Mappen brengen een vertrouwd, hiërarchisch organisatiemodel naar uw DocuGenerate-sjablonen, waardoor het eenvoudiger wordt om verwante sjablonen te groeperen naarmate uw bibliotheek groeit. Ontdek hoe u mappen maakt en beheert om uw werkruimte georganiseerd te houden.]]></summary> <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.docugenerate.com/assets/posts/034-template-folders/cover-image.png"/> <media:content medium="image" url="https://www.docugenerate.com/assets/posts/034-template-folders/cover-image.png" xmlns:media="http://search.yahoo.com/mrss/"/> </entry> <entry> <title type="html">Formatteer Datums in Sjablonen met Datafilters en Automatische Velden</title> <link href="https://www.docugenerate.com/nl/blog/formatteer-datums-in-sjablonen-met-datafilters-en-automatische-velden/" rel="alternate" type="text/html" title="Formatteer Datums in Sjablonen met Datafilters en Automatische Velden"/> <published>2026-05-31T00:00:00+00:00</published> <updated>2026-05-31T00:00:00+00:00</updated> <id>https://www.docugenerate.com/nl/blog/formatteer-datums-in-sjablonen-met-datafilters-en-automatische-velden</id> <content type="html" xml:base="https://www.docugenerate.com/nl/blog/formatteer-datums-in-sjablonen-met-datafilters-en-automatische-velden/"><![CDATA[<h2 id="introductie">Introductie</h2> <p>Datums komen voor in bijna elk zakelijk document. Contracten specificeren ingangsdatums, facturen hebben vervaldatums, certificaten dragen uitgiftedatums, en aanbevelingsbrieven worden gedateerd om hun relevantie vast te stellen. Hoe die datums worden weergegeven, is belangrijk, omdat datumformaatconventies aanzienlijk verschillen per land en regio. In de Verenigde Staten is het standaardformaat <code class="language-plaintext highlighter-rouge">MM/DD/YYYY</code>, terwijl het grootste deel van Europa en veel van de rest van de wereld <code class="language-plaintext highlighter-rouge">DD/MM/YYYY</code> gebruikt. Zonder controle over datumopmaak zou een datum zoals 4 december 2026 kunnen verschijnen als <code class="language-plaintext highlighter-rouge">12/04/2026</code> voor een Amerikaanse lezer of <code class="language-plaintext highlighter-rouge">04/12/2026</code> voor een Europese lezer, waarbij elk deze alleen correct interpreteert volgens hun eigen conventie.</p> <p>DocuGenerate biedt u twee verschillende manieren om te bepalen hoe datums worden weergegeven in uw gegenereerde documenten, elk geschikt voor een ander gebruiksscenario. De eerste is het filter <code class="language-plaintext highlighter-rouge">date</code>, dat een datumwaarde uit uw dataset opmaakt en weergeeft in het uitvoerformaat dat u opgeeft. De tweede is het rechtstreeks invoegen van de huidige datum in het documentsjabloon met Word of LibreOffice, zodat het veld automatisch wordt gevuld met de datum van vandaag op het moment van generatie.</p> <p>Dit artikel doorloopt beide benaderingen met het sjabloon <a href="https://www.docugenerate.com/assets/posts/033-date-formatting/Recommendation Letter.docx">Aanbevelingsbrief</a> uit onze <a href="https://www.docugenerate.com/nl/sjablonen/#brieven">Sjabloonbibliotheek</a>. Voor elke benadering laten we zien hoe u zowel Amerikaanse als Europese datumformaten produceert, zodat u een concrete referentie heeft, ongeacht welke conventie uw documenten volgen.</p> <h2 id="datums-opmaken-vanuit-uw-dataset">Datums Opmaken vanuit Uw Dataset</h2> <p>Wanneer uw dataset datumwaarden bevat, geeft het <a href="https://www.docugenerate.com/nl/hulp/articles/data-opmaken-met-filters/#format-dates">date-filter</a> van DocuGenerate u volledige controle over hoe die datums worden weergegeven in het gegenereerde document. Dit is de juiste aanpak wanneer de datum een betekenisvol stukje data is dat is gekoppeld aan een specifieke gebeurtenis, zoals de ondertekeningsdatum van een contract of de datum waarop een brief formeel is geadresseerd.</p> <p>Het filter maakt deel uit van de functieset <a href="https://www.docugenerate.com/nl/hulp/articles/meer-mogelijkheden-met-uitgebreide-syntax/">uitgebreide syntax</a>, dus moet u deze <a href="https://www.docugenerate.com/nl/hulp/articles/hoe-schakel-ik-de-uitgebreide-syntax-in/">inschakelen</a> voordat het effect heeft. Open hiervoor het sjabloon, ga naar <strong>Settings</strong>, vink het selectievakje <strong>Enable enhanced syntax</strong> aan, en klik op <strong>Save</strong>.</p> <h3 id="de-data-voorbereiden">De Data Voorbereiden</h3> <p>Het filter <code class="language-plaintext highlighter-rouge">date</code> verwacht dat de invoerwaarde in het formaat <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank" rel="nofollow noopener">ISO 8601</a> is, specifiek <code class="language-plaintext highlighter-rouge">yyyy-MM-dd</code>. Dit is een internationaal erkende standaard voor het weergeven van datums die de dubbelzinnigheid van regionale conventies vermijdt. Als uw data momenteel datums in een ander formaat opslaat, moet u deze omzetten naar het ISO-formaat voordat u ze doorgeeft aan DocuGenerate. Het filter wordt genegeerd voor datums die niet in ISO-formaat zijn, en de invoerwaarde wordt ongewijzigd weergegeven in het gegenereerde document.</p> <h3 id="het-sjabloon-bijwerken">Het Sjabloon Bijwerken</h3> <p>Het <a href="https://www.docugenerate.com/assets/posts/033-date-formatting/Recommendation Letter.docx">originele sjabloon</a> gebruikt de standaard DocuGenerate-syntax met vierkante haken als scheidingstekens. Wanneer uitgebreide syntax is ingeschakeld, is de tag-parser strenger en tolereert deze geen extra witruimte binnen merge-tags, dus moeten tags zoals <code class="language-plaintext highlighter-rouge">[Job Title]</code> worden <code class="language-plaintext highlighter-rouge">[Job_Title]</code>. Het <a href="https://www.docugenerate.com/assets/posts/033-date-formatting/Recommendation Letter with Date Filter.docx">bijgewerkte sjabloon</a> is al bewerkt om tags zonder witruimte te hebben en is klaar voor gebruik met uitgebreide syntax.</p> <p><img src="https://www.docugenerate.com/assets/posts/033-date-formatting/recommendation-letter-date-filter-template.png" alt="Aanbevelingsbrief-sjabloon met merge-tag voor datumfilter"/></p> <h3 id="het-datumfilter-toepassen">Het Datumfilter Toepassen</h3> <p>Met uitgebreide syntax ingeschakeld, kunt u de datum rechtstreeks binnen de merge-tag opmaken met de volgende syntax:</p> <div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>[Date | date:'date_format']
</code></pre></div></div> <p>De tekenreeks <code class="language-plaintext highlighter-rouge">date_format</code> gebruikt symbolen uit de <a href="https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table" target="_blank" rel="nofollow noopener">Unicode Technical Standard</a> voor datum- en tijdpatronen. De twee meest gebruikte formaten voor Amerikaanse en Europese conventies zijn:</p> <table class="table table-bordered"> <thead> <tr> <th>Merge-Tag</th> <th>Resultaat</th> <th>Conventie</th> </tr> </thead> <tbody> <tr> <td><code>[Date &#124; date:'MM/dd/yyyy']</code></td> <td>12/04/2026</td> <td>VS (Maand/Dag/Jaar)</td> </tr> <tr> <td><code>[Date &#124; date:'dd/MM/yyyy']</code></td> <td>04/12/2026</td> <td>Europees (Dag/Maand/Jaar)</td> </tr> <tr> <td><code>[Date &#124; date:'MMMM d, yyyy']</code></td> <td>December 4, 2026</td> <td>Geschreven maandnaam</td> </tr> <tr> <td><code>[Date &#124; date:'dd-MM-yyyy']</code></td> <td>04-12-2026</td> <td>Europees met streepjes</td> </tr> </tbody> </table> <p>Het filter ondersteunt ook meer uitgebreide formaten als u de volledige maandnaam wilt tonen, de dag van de week wilt opnemen, of tijdcomponenten wilt toevoegen. Voor een volledige lijst met opmaakopties en voorbeelden, zie het artikel <a href="https://www.docugenerate.com/nl/hulp/articles/data-opmaken-met-filters/#format-dates">Data opmaken met filters</a> in ons Hulpcentrum.</p> <h2 id="de-datum-van-vandaag-invoegen-in-het-sjabloon">De Datum van Vandaag Invoegen in het Sjabloon</h2> <p>Voor documenten waarbij de datum altijd de huidige datum op het moment van generatie moet weerspiegelen, is het doorgeven van een datum via de dataset onnodig. Een aanbevelingsbrief, een dagelijks statusrapport, of een ad-hoc certificaat heeft doorgaans alleen de datum van vandaag nodig, en het zou overbodig zijn om deze in elk API-verzoek of elke spreadsheetrij op te nemen. Voor deze gevallen kunt u een datumveld rechtstreeks invoegen in het Word-sjabloon. Wanneer DocuGenerate het document verwerkt, evalueert het veld en geeft het automatisch de huidige datum weer, zonder dat er enige datumwaarde in de data aanwezig is.</p> <h3 id="de-datum-van-vandaag-invoegen-in-microsoft-word">De Datum van Vandaag Invoegen in Microsoft Word</h3> <p>Met Microsoft Word kunt u de huidige datum invoegen via het veld <a href="https://support.microsoft.com/en-US/Word/insert-today-s-date-in-a-word-document" target="_blank" rel="nofollow noopener">Date &amp; Time</a>. Dit opent een dialoogvenster met een lijst van datum- en tijdformaten en een selectievakje met het label <strong>Update automatically</strong>. Door deze optie te selecteren, wordt de statische datum omgezet in een live veld dat wordt bijgewerkt telkens wanneer het document wordt geopend of verwerkt.</p> <p><img src="https://www.docugenerate.com/assets/posts/033-date-formatting/word-insert-date-time-dialog.png" alt="Het veld voor de huidige datum en tijd invoegen in Microsoft Word"/></p> <p>De beschikbare formaten in Word zijn vooraf bepaald en gekoppeld aan de regionale instellingen van het systeem. U kunt de taal wijzigen via het vervolgkeuzemenu, en de lijst met beschikbare formaten wordt bijgewerkt om overeen te komen met de geselecteerde taal.</p> <p>Als u meer controle wilt over het datumformaat, kunt u in plaats daarvan <strong>Insert a Field</strong> kiezen, en de categorie <strong>Date and Time</strong> en de veldnaam <strong>Date</strong> selecteren. Klik op <strong>Options</strong> om te kiezen uit een lijst met vooraf gedefinieerde datumformaten, of voer het gewenste formaat in het tekstinvoerveld <strong>Field code</strong> in. Om hetzelfde resultaat te krijgen en de datum opgemaakt te hebben voor de <strong>Franse</strong> taal, moet u de waarde <code class="language-plaintext highlighter-rouge">DATE \@ "dd/MM/yyyy"</code> gebruiken in de field code. Dit vereist echter bekendheid met de veldsyntax van Word en is niet praktisch voor de meeste gebruikers.</p> <p><img src="https://www.docugenerate.com/assets/posts/033-date-formatting/word-insert-field-dialog.png" alt="Het datumveld invoegen in Microsoft Word"/></p> <p>Voor een sjabloon dat met deze aanpak is gebouwd, zie het <a href="https://www.docugenerate.com/assets/posts/033-date-formatting/Recommendation Letter with Today's Date in Word.docx">Word-specifieke sjabloon</a>, waarin de merge-tag <code class="language-plaintext highlighter-rouge">[Date]</code> is vervangen door het automatische datumveld van Word, ingesteld op het Europese formaat.</p> <h3 id="de-datum-van-vandaag-invoegen-in-libreoffice">De Datum van Vandaag Invoegen in LibreOffice</h3> <p>LibreOffice Writer biedt een flexibelere manier om de datum van vandaag in te voegen, met locale-bewuste opmaak die een breed scala aan regionale datumconventies dekt. Om een datumveld in te voegen, gaat u naar <strong>Insert</strong> &gt; <strong>Field</strong> &gt; <strong>Date (variable)</strong>, waarmee een datumveld met een standaardformaat aan uw document wordt toegevoegd. Klik met de rechtermuisknop op de nieuw ingevoegde datum en selecteer <strong>Edit Fields</strong>, waarmee het dialoogvenster Fields wordt geopend.</p> <p>In dit dialoogvenster toont de kolom <strong>Format</strong> aan de rechterkant een lijst met vooraf gedefinieerde formaten voor de standaard systeemtaal. Deze standaardformaten dekken veelvoorkomende patronen, maar om toegang te krijgen tot formaten voor andere locales, klikt u op de optie <strong>Additional formats</strong>.</p> <p><img src="https://www.docugenerate.com/assets/posts/033-date-formatting/libreoffice-fields-dialog.png" alt="Een datumveld invoegen in LibreOffice via het dialoogvenster Fields"/></p> <p>Dit opent een nieuw dialoogvenster waarin de datumopmaakmogelijkheden van LibreOffice bijzonder nuttig worden. Een vervolgkeuzelijst <strong>Language</strong> aan de rechterkant van het dialoogvenster laat u kiezen uit honderden taal- en localecombinaties. Zodra u een taal kiest, wordt de lijst <strong>Format</strong> bijgewerkt om datumpatronen te tonen die natuurlijk zijn voor die locale.</p> <p>Door bijvoorbeeld <strong>French (France)</strong> te selecteren, worden patronen zoals <code class="language-plaintext highlighter-rouge">JJ/MM/AAAA</code> beschikbaar, wat de Franse notatie is voor <code class="language-plaintext highlighter-rouge">DD/MM/YYYY</code>. U kunt ook rechtstreeks een aangepaste formaatcode invoeren in het veld <strong>Format Code</strong> als geen van de vermelde opties overeenkomt met wat u nodig heeft.</p> <p>Voor een sjabloon dat op deze manier is gebouwd, zie het <a href="https://www.docugenerate.com/assets/posts/033-date-formatting/Recommendation Letter with Today's Date in LibreOffice.docx">LibreOffice-specifieke sjabloon</a>. Deze aanpak is bijzonder praktisch wanneer u meerdere varianten van hetzelfde sjabloon voor verschillende regio’s onderhoudt. Elke versie kan dezelfde content gebruiken, maar het datumveld geconfigureerd hebben voor de doellocale, zodat de uitvoer overeenkomt met lokale verwachtingen zonder de data of de generatieworkflow te wijzigen.</p> <h2 id="de-juiste-aanpak-kiezen">De Juiste Aanpak Kiezen</h2> <p>De twee benaderingen behandelen verschillende scenario’s en kunnen beide van toepassing zijn binnen dezelfde organisatie, afhankelijk van het documenttype. Het <a href="#datums-opmaken-vanuit-uw-dataset">datumfilter</a> is de juiste keuze wanneer de datum een betekenisvol datageveld is dat is gekoppeld aan een specifieke gebeurtenis. De ondertekeningsdatum van een contract, de vervaldatum van een factuur, of de referentiedatum van een brief horen allemaal bij de data, en het filter laat u deze weergeven in welke regionale conventie de ontvanger ook verwacht. Aangezien het één ISO 8601-invoerwaarde neemt en deze bij uitvoer opmaakt, kunt u Amerikaanse en Europese doelgroepen bedienen met dezelfde data, door simpelweg de formaattekenreeks in het sjabloon te wijzigen.</p> <p>Het rechtstreeks invoegen van <a href="#de-datum-van-vandaag-invoegen-in-het-sjabloon">de datum van vandaag</a> in het sjabloon is de juiste keuze wanneer er geen datumwaarde in de data bestaat en het document simpelweg moet worden voorzien van de huidige datum. Dit houdt de dataset schoon en het generatieverzoek eenvoudig. Teams die documenten genereren voor meerdere regio’s onderhouden vaak een set locale-specifieke sjablonen, elk met het datumveld vooraf geconfigureerd voor zijn doelgroep, en wijzen elke regionale workflow toe aan het juiste sjabloon.</p> <h2 id="conclusie">Conclusie</h2> <p>Ervoor zorgen dat datums correct worden weergegeven in gegenereerde documenten komt neer op het bepalen van waar de datumwaarde vandaan komt. Als deze uit uw dataset komt, gebruikt u het filter van DocuGenerate met een formaattekenreeks die overeenkomt met uw doelconventie. Als het document altijd de datum van vandaag moet weerspiegelen, voegt u een datumveld in het sjabloon in met Word of LibreOffice, voor meer geavanceerde controle over locales. Beide benaderingen werken met hetzelfde sjabloonformaat en passen natuurlijk binnen de generatieworkflow van DocuGenerate, zonder dat wijzigingen nodig zijn in hoe documenten worden gegenereerd of afgeleverd.</p> <h3 id="bronnen">Bronnen</h3> <ul> <li>Het sjabloon <a href="https://www.docugenerate.com/assets/posts/033-date-formatting/Recommendation Letter with Date Filter.docx">Aanbevelingsbrief</a>, geconfigureerd voor het datumfilter.</li> <li>Het sjabloon <a href="https://www.docugenerate.com/assets/posts/033-date-formatting/Recommendation Letter with Today's Date in Word.docx">Aanbevelingsbrief</a>, met gebruik van het automatische datumveld van Word.</li> <li>Het sjabloon <a href="https://www.docugenerate.com/assets/posts/033-date-formatting/Recommendation Letter with Today's Date in LibreOffice.docx">Aanbevelingsbrief</a>, met gebruik van het datumveld van LibreOffice.</li> <li>Het artikel van DocuGenerate’s Hulpcentrum over <a href="https://www.docugenerate.com/nl/hulp/articles/data-opmaken-met-filters/">het opmaken van data met filters</a>.</li> <li>De documentatie van Microsoft over <a href="https://support.microsoft.com/en-US/Word/insert-today-s-date-in-a-word-document" target="_blank" rel="nofollow noopener">het invoegen van de datum van vandaag in een Word-document</a>.</li> </ul>]]></content> <author> <name>DocuGenerate</name> <email>support@docugenerate.com</email> </author> <category term="Letters"/> <category term="Microsoft Word"/> <category term="Expressions"/> <summary type="html"><![CDATA[Het bepalen van hoe datums worden weergegeven in gegenereerde documenten is een van de meest voorkomende opmaakuitdagingen, vooral bij het produceren van documenten voor verschillende regio's. Dit artikel behandelt twee verschillende benaderingen, met voorbeelden voor zowel Amerikaanse als Europese datumformaten.]]></summary> <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.docugenerate.com/assets/posts/033-date-formatting/cover-image.png"/> <media:content medium="image" url="https://www.docugenerate.com/assets/posts/033-date-formatting/cover-image.png" xmlns:media="http://search.yahoo.com/mrss/"/> </entry> <entry> <title type="html">Mail Merge met DocuGenerate Vergeleken met Microsoft Word</title> <link href="https://www.docugenerate.com/nl/blog/mail-merge-met-docugenerate-vergeleken-met-microsoft-word/" rel="alternate" type="text/html" title="Mail Merge met DocuGenerate Vergeleken met Microsoft Word"/> <published>2026-04-22T00:00:00+00:00</published> <updated>2026-04-22T00:00:00+00:00</updated> <id>https://www.docugenerate.com/nl/blog/mail-merge-met-docugenerate-vergeleken-met-microsoft-word</id> <content type="html" xml:base="https://www.docugenerate.com/nl/blog/mail-merge-met-docugenerate-vergeleken-met-microsoft-word/"><![CDATA[<h2 id="introductie">Introductie</h2> <p>Mail merge is het proces waarbij een documentsjabloon wordt gecombineerd met een gegevensbron om in één bewerking meerdere gepersonaliseerde documenten te produceren. Het wordt vaak gebruikt voor contracten, aanbiedingsbrieven, facturen, certificaten, en elk ander document waarbij de algemene structuur hetzelfde blijft, maar specifieke velden per ontvanger of record veranderen. <a href="https://www.microsoft.com/en-us/microsoft-365/word" target="_blank" rel="nofollow noopener">Microsoft Word</a> heeft al tientallen jaren mail merge als ingebouwde functie, waardoor het een vertrouwd startpunt is voor veel teams die al werken binnen het Microsoft 365-ecosysteem. Speciale platforms voor documentgeneratie zoals <a href="https://www.docugenerate.com/">DocuGenerate</a> benaderen hetzelfde probleem anders: cloudgebaseerde verwerking, een REST API, en een set sjabloonfuncties die veel verder gaan dan wat Word van nature ondersteunt.</p> <p>In dit artikel evalueren we beide benaderingen met hetzelfde sjabloon en dezelfde databestand, zodat de resultaten rechtstreeks vergelijkbaar zijn. We doorlopen elke workflow van begin tot eind, en onderzoeken vervolgens hoe de twee tools specifieke functies afhandelen, waaronder uitvoerformaten, bulkgeneratie, dynamische bestandsnamen, voorwaardelijke content, afbeeldingen, en QR-codes. Het doel is niet om een universele winnaar aan te wijzen, maar om u een duidelijk beeld te geven van waar elke tool past, zodat u de juiste kunt kiezen voor uw workflow.</p> <h2 id="de-voorbeeldbestanden">De Voorbeeldbestanden</h2> <p>Om de vergelijking concreet te houden, gebruiken beide workflows in dit artikel dezelfde twee bestanden. Het sjabloon is het Word-document <a href="https://www.docugenerate.com/assets/posts/032-word-mail-merge/Employment Contract.docx">Employment Contract.docx</a> uit onze <a href="https://www.docugenerate.com/nl/sjablonen/#contracten">Sjabloonbibliotheek</a>. Het bevat samenvoegvelden voor werknemersdetails, contractdatums, vergoeding, en andere standaard contractvoorwaarden.</p> <p><img src="https://www.docugenerate.com/assets/posts/032-word-mail-merge/employment-contract-template.png" alt="Employment Contract-sjabloon met merge-tags"/></p> <p>De gegevensbron is de bijbehorende spreadsheet <a href="https://www.docugenerate.com/assets/posts/032-word-mail-merge/Employment Contract.xlsx">Employment Contract.xlsx</a>, waarbij elke rij één werknemer vertegenwoordigt en de kolomkoppen exact overeenkomen met de namen van de samenvoegvelden in het sjabloon.</p> <p><img src="https://www.docugenerate.com/assets/posts/032-word-mail-merge/employment-contract-data.png" alt="Employment Contract-gegevensspreadsheet"/></p> <p>Een belangrijk punt is dat de kolomnamen in de spreadsheet exact moeten overeenkomen met de namen van de merge-tags in het sjabloon, wil een van beide tools correct werken. Dit is een vereiste die zowel voor Word als voor DocuGenerate geldt, en dit is ongeacht welk scheidingstekenformaat wordt gebruikt.</p> <h2 id="mail-merge-in-microsoft-word">Mail Merge in Microsoft Word</h2> <p>De mail merge-functie van Word is toegankelijk vanaf het <a href="https://support.microsoft.com/en-us/office/use-mail-merge-for-bulk-email-letters-labels-and-envelopes-f488ed5b-b849-4c11-9cff-932c49474705" target="_blank" rel="nofollow noopener">tabblad Mailings</a>, dat een gestructureerde workflow biedt voor het koppelen van een sjabloon aan een gegevensbron, het invoegen van velden, het bekijken van een voorvertoning van de uitvoer, en het voltooien van de samenvoeging. Dit alles gebeurt lokaal binnen de Word-applicatie.</p> <h3 id="de-excel-gegevensbron-koppelen">De Excel-Gegevensbron Koppelen</h3> <p>Om een mail merge te starten, opent u het Employment Contract-sjabloon in Word en navigeert u naar <strong>Mailings</strong> &gt; <strong>Select Recipients</strong> &gt; <strong>Use an Existing List</strong>. Word vraagt u een bestand te selecteren. Na het selecteren van <code class="language-plaintext highlighter-rouge">Employment Contract.xlsx</code> verschijnt een dialoogvenster waarin u wordt gevraagd <a href="https://support.microsoft.com/en-us/office/mail-merge-using-an-excel-spreadsheet-858c7d7f-5cc0-4ba1-9a7b-0a948fa3d7d3" target="_blank" rel="nofollow noopener">welk blad</a> u als gegevensbron wilt gebruiken, wat nuttig is wanneer uw werkmap meerdere tabbladen bevat.</p> <p><img src="https://www.docugenerate.com/assets/posts/032-word-mail-merge/word-select-recipients.png" alt="De Excel-gegevensbron selecteren in Word"/></p> <p>Zodra de gegevensbron is gekoppeld, leest Word de kolomkoppen en maakt deze gedurende de sessie beschikbaar als samenvoegvelden. U kunt ook <strong>Edit Recipient List</strong> openen om records te filteren, te sorteren, of specifieke rijen uit te sluiten voordat u de samenvoeging uitvoert.</p> <p>Een aandachtspunt: wanneer u het Word-sjabloon opslaat nadat het is gekoppeld aan een Excel-bestand, slaat het het pad naar dat bestand op in het document. Als het Excel-bestand later wordt verplaatst, hernoemd, of verwijderd, activeert het opnieuw openen van het sjabloon een foutmelding die zegt <em>“Word cannot find its data source”</em>. Vervolgens wordt u gevraagd het bestand opnieuw te lokaliseren of de koppeling naar de gegevensbron volledig te verwijderen. Dit koppelingsgedrag betekent dat het sjabloon en het databestand gesynchroniseerd moeten blijven, wat een aandachtspunt voor onderhoud kan worden bij het delen van sjablonen binnen een team.</p> <h3 id="de-samenvoegvelden-invoegen">De Samenvoegvelden Invoegen</h3> <p>Zodra de gegevensbron is gekoppeld, kunt u samenvoegvelden overal in het sjabloon plaatsen met <strong>Mailings</strong> &gt; <strong>Insert Merge Field</strong>. Word verpakt elk veld in het vaste scheidingstekenformaat <code class="language-plaintext highlighter-rouge">«Field_Name»</code>, met guillemet-tekens die via de interface worden ingevoegd in plaats van rechtstreeks te worden getypt. Dit scheidingstekenformaat is niet configureerbaar: alle samenvoegvelden van Word gebruiken <code class="language-plaintext highlighter-rouge">«»</code> en kunnen niet worden gewijzigd naar een ander tekenpaar.</p> <p><img src="https://www.docugenerate.com/assets/posts/032-word-mail-merge/word-insert-merge-fields.gif" alt="Merge Fields invoegen in het Word-sjabloon"/></p> <p>Merk op dat Word de spaties in de kolomnamen vervangt door underscores bij het maken van de veldnamen voor de samenvoeging. De kolom met de naam <code class="language-plaintext highlighter-rouge">Contract Date</code> in de spreadsheet wordt dus <code class="language-plaintext highlighter-rouge">«Contract_Date»</code> in de lijst met samenvoegvelden. Dit werkt prima in Word, maar het is nuttig om dit in gedachten te houden als u hetzelfde sjabloon bijvoorbeeld in DocuGenerate wilt gebruiken, omdat de kolomnamen in Excel dan niet meer exact overeenkomen met de merge-tags.</p> <h3 id="de-resultaten-in-de-voorvertoning-bekijken">De Resultaten in de Voorvertoning Bekijken</h3> <p>De knop <strong>Preview Results</strong> op het tabblad <strong>Mailings</strong> vervangt elk samenvoegveld door de bijbehorende waarde uit de eerste rij data. Met navigatiepijlen kunt u door de resterende records bladeren om de uitvoer steekproefsgewijs te controleren voordat u de volledige samenvoeging uitvoert. Deze directe voorvertoning is een van de meest nuttige functies van Word tijdens de ontwikkeling van sjablonen.</p> <p><img src="https://www.docugenerate.com/assets/posts/032-word-mail-merge/word-preview-results.gif" alt="Samenvoegresultaten bekijken in Word"/></p> <h3 id="de-samenvoeging-voltooien">De Samenvoeging Voltooien</h3> <p>Nu het sjabloon is geverifieerd, biedt <strong>Finish &amp; Merge</strong> drie opties: de samengevoegde documenten bewerken in een nieuw Word-bestand, rechtstreeks naar een printer versturen, of als afzonderlijke e-mailberichten versturen via Outlook. Door <strong>Edit Individual Documents</strong> te selecteren, wordt één Word-bestand geproduceerd waarin elk samengevoegd record wordt gescheiden door een pagina-einde.</p> <p><img src="https://www.docugenerate.com/assets/posts/032-word-mail-merge/word-finish-merge.png" alt="De mail merge voltooien in Word"/></p> <p>U kunt een kopie van het <a href="https://www.docugenerate.com/assets/posts/032-word-mail-merge/Employment Contract Merged.docx">samengevoegde document</a> downloaden om te zien hoe de uitvoer eruitziet. Om een PDF te verkrijgen, moet u dat bestand na het genereren handmatig opslaan of exporteren.</p> <p>Word genereert geen afzonderlijke bestanden per record als onderdeel van het samenvoegproces. De hele workflow is uitsluitend desktopgebonden: er is geen API, geen cloudverwerking, en geen manier om een mail merge programmatisch te activeren vanuit een andere applicatie.</p> <h2 id="mail-merge-in-docugenerate">Mail Merge in DocuGenerate</h2> <p>DocuGenerate is een cloudgebaseerd platform voor documentgeneratie dat werkt vanuit een webapp en een <a href="https://www.docugenerate.com/nl/hulp/articles/waar-vind-ik-de-api-referentie/">REST API</a>. Het sjabloon blijft een standaard DOCX-bestand, zodat u het zoals gebruikelijk kunt ontwerpen en bewerken in Word. De generatiestap vindt plaats in de cloud en produceert het uiteindelijke document zonder dat er lokale software nodig is buiten een browser of een HTTP-client.</p> <h3 id="het-sjabloon-instellen">Het Sjabloon Instellen</h3> <p>Om te beginnen, uploadt u het Employment Contract-sjabloon vanaf de pagina <a href="https://www.docugenerate.com/nl/hulp/articles/hoe-maak-ik-een-nieuw-sjabloon-aan/">New Template</a> in de webapp. DocuGenerate leest de <a href="https://www.docugenerate.com/nl/hulp/articles/wat-zijn-merge-tags/">merge-tags</a> uit het document en gebruikt deze als de velden die tijdens de generatie moeten worden ingevuld.</p> <p>De merge-tags kunnen vierkante haken <code class="language-plaintext highlighter-rouge">[]</code> gebruiken als <a href="https://www.docugenerate.com/nl/hulp/articles/wat-zijn-scheidingstekens-voor-tags/">scheidingstekens</a>, maar het is ook mogelijk om <a href="https://www.docugenerate.com/nl/hulp/articles/hoe-werk-ik-de-scheidingstekens-van-tags-bij/">de scheidingstekens aan te passen</a> naar elk gewenst tekenpaar, inclusief de Word-stijl <code class="language-plaintext highlighter-rouge">«»</code>-guillemets als u een bestaand mail merge-sjabloon van Word wilt hergebruiken zonder het te wijzigen.</p> <p><img src="https://www.docugenerate.com/assets/posts/032-word-mail-merge/docugenerate-employment-contract-v2.png" alt="Employment Contract-sjabloon in DocuGenerate"/></p> <h3 id="genereren-vanuit-excel">Genereren vanuit Excel</h3> <p>Om <a href="https://www.docugenerate.com/nl/hulp/articles/documenten-genereren-vanuit-een-excel-of-csv-bestand/">documenten te genereren vanuit Excel</a>, klikt u op <strong>New Document</strong> op het sjabloon, kiest u de optie <strong>Excel or CSV file</strong>, en uploadt u <code class="language-plaintext highlighter-rouge">Employment Contract.xlsx</code>. DocuGenerate detecteert de bladen in de werkmap en laat u kiezen welk blad u wilt gebruiken. Net als bij Word moeten de kolomnamen in de spreadsheet exact overeenkomen met de namen van de merge-tags in het sjabloon, wil de generatie slagen.</p> <p>In de sectie <strong>Data Items</strong> kunt u selecteren welke records worden gebruikt voor de samenvoeging door erop te klikken. Standaard worden alle records in de spreadsheet gebruikt voor het genereren van de documenten.</p> <p><img src="https://www.docugenerate.com/assets/posts/032-word-mail-merge/docugenerate-generate-from-excel.gif" alt="Employment Contracts in batch genereren in DocuGenerate"/></p> <p>Het <a href="https://www.docugenerate.com/nl/hulp/articles/het-exportformaat-selecteren/">exportformaat voor de samenvoeging</a> kan een Word-document zijn, wat overeenkomt met de native uitvoer van Word, of een PDF die rechtstreeks in de cloud wordt gegenereerd. Voor meerdere records kunt u ofwel <a href="https://www.docugenerate.com/nl/hulp/articles/de-gegenereerde-documenten-samenvoegen-tot-een-bestand/">alle documenten combineren</a> tot één bestand (zie <a href="https://www.docugenerate.com/assets/posts/032-word-mail-merge/Employment Contracts.docx">Employment Contracts.docx</a> als voorbeeld), of ze downloaden als <a href="https://www.docugenerate.com/nl/hulp/articles/aparte-documenten-genereren-voor-elk-gegevenselement/">afzonderlijke bestanden</a> gegroepeerd in een ZIP-archief (zie <a href="https://www.docugenerate.com/assets/posts/032-word-mail-merge/Employment Contracts.zip">Employment Contracts.zip</a>).</p> <h3 id="genereren-via-de-api">Genereren via de API</h3> <p>DocuGenerate biedt ook een API waarmee u documentgeneratie kunt activeren vanuit elk extern systeem. Bij het genereren vanuit een Excel-bestand <a href="https://api.docugenerate.com/#/Document/generateDocument" target="_blank">via de API</a>, geeft u het bestand door als parameter <code class="language-plaintext highlighter-rouge">file</code>, en optioneel de parameter <code class="language-plaintext highlighter-rouge">sheet</code> om op te geven welk tabblad moet worden gebruikt. Hoewel de webapp selectie van rijbereiken ondersteunt, verwerkt de API standaard alle rijen in het geselecteerde blad. Dit maakt het mogelijk om documentgeneratie te integreren in automatiseringsworkflows en backend-applicaties die automatisch documenten moeten produceren.</p> <h2 id="functievergelijking">Functievergelijking</h2> <p>Nu beide workflows zijn behandeld, volgt hier een nadere blik op hoe Word en DocuGenerate specifieke functies afhandelen die het meest van belang zijn in workflows voor documentgeneratie. U kunt op elke functie in de onderstaande tabel klikken om rechtstreeks naar de details te springen.</p> <table class="table table-bordered"> <thead> <tr> <th>Functie</th> <th>Word</th> <th>DocuGenerate</th> </tr> </thead> <tbody> <tr> <td><a href="#scheidingstekens">Scheidingstekens</a></td> <td>❌ Vast</td> <td>✅ Aanpasbaar</td> </tr> <tr> <td><a href="#voorvertoning">Voorvertoning</a></td> <td>✅ Directe voorvertoning in-app</td> <td>❌ Vereist het genereren van een document</td> </tr> <tr> <td><a href="#pdf-export">PDF-export</a></td> <td>❌ Alleen via handmatig opslaan</td> <td>✅ Ja</td> </tr> <tr> <td><a href="#bulkgeneratie">Bulkgeneratie</a></td> <td>✅ Eén samengevoegd Word-bestand</td> <td>✅ Eén gecombineerd bestand of afzonderlijke bestanden gegroepeerd in een ZIP</td> </tr> <tr> <td><a href="#dynamische-bestandsnamen">Dynamische bestandsnamen</a></td> <td>❌ Nee</td> <td>✅ Ja, met merge-tags</td> </tr> <tr> <td><a href="#api-toegang">API-toegang</a></td> <td>❌ Nee</td> <td>✅ Ja</td> </tr> <tr> <td><a href="#e-mailbezorging">E-mailbezorging</a></td> <td>✅ Ja, via Outlook</td> <td>❌ Nee, mogelijk via automatiseringstools</td> </tr> <tr> <td><a href="#voorwaarden">Voorwaarden</a></td> <td>✅ Ja, via Rules</td> <td>✅ Ja, inclusief uitgebreide expressies</td> </tr> <tr> <td><a href="#afbeeldingen">Afbeeldingen</a></td> <td>✅ Alleen lokale bestanden</td> <td>✅ Via URL of Base64, met formaatcontrole</td> </tr> <tr> <td><a href="#qr-codes-en-barcodes">QR-codes en barcodes</a></td> <td>✅ Ja, via veldcodes</td> <td>✅ Ja, met weergaveopties</td> </tr> <tr> <td><a href="#pdf-toevoegen">PDF Toevoegen</a></td> <td>❌ Nee</td> <td>✅ Ja</td> </tr> </tbody> </table> <h3 id="scheidingstekens">Scheidingstekens</h3> <p>Word vereist de <code class="language-plaintext highlighter-rouge">«»</code>-guillemet-tekens als scheidingstekens voor samenvoegvelden. Deze worden via de Word-interface ingevoegd en kunnen niet worden getypt of gewijzigd naar een ander formaat. Met DocuGenerate kunt u <a href="https://www.docugenerate.com/nl/hulp/articles/hoe-werk-ik-de-scheidingstekens-van-tags-bij/">elk gewenst scheidingsteken instellen</a> in de sjabloonsinstellingen, waardoor het eenvoudig wordt om een bestaand Word-sjabloon te migreren of aan te sluiten bij een formaat dat uw team al gebruikt.</p> <h3 id="voorvertoning">Voorvertoning</h3> <p>De knop <strong>Preview Results</strong> van Word toont het ingevulde document onmiddellijk, waardoor het eenvoudig wordt om tijdens de ontwikkeling van het sjabloon te itereren zonder elke keer een bestand te genereren. DocuGenerate heeft geen gelijkwaardige voorvertoning in de app. Om de uitvoer te zien, genereert u een document. Voor sjablonen die actief in ontwikkeling zijn, voegt dit een kleine feedbacklus toe in vergelijking met Word, hoewel het gegenereerde bestand doorgaans binnen enkele seconden beschikbaar is.</p> <h3 id="pdf-export">PDF-Export</h3> <p>De mail merge van Word produceert een Word-document als primaire uitvoer. Converteren naar PDF vereist het apart opslaan of exporteren van het bestand, en het proces maakt niet automatisch afzonderlijke PDF-bestanden per record. DocuGenerate kan zowel <a href="https://www.docugenerate.com/nl/hulp/articles/het-exportformaat-selecteren/">DOCX als PDF</a> rechtstreeks genereren.</p> <h3 id="bulkgeneratie">Bulkgeneratie</h3> <p>Beide tools ondersteunen het genereren van meerdere documenten vanuit een spreadsheet in één bewerking. Word voegt alle samengevoegde records samen tot één Word-bestand met pagina-einden tussen records. DocuGenerate geeft u meer controle: u kunt <a href="https://www.docugenerate.com/nl/hulp/articles/de-gegenereerde-documenten-samenvoegen-tot-een-bestand/">alle documenten combineren</a> tot één uitvoerbestand of afzonderlijke bestanden produceren gegroepeerd in een ZIP-archief.</p> <h3 id="dynamische-bestandsnamen">Dynamische Bestandsnamen</h3> <p>Word ondersteunt geen dynamische bestandsnamen voor samengevoegde uitvoer. Met DocuGenerate kunt u merge-tags gebruiken in de <a href="https://www.docugenerate.com/nl/hulp/articles/de-documentnaam-en-bestandsnaam-instellen/">documentnaam</a>, zodat elk gegenereerd bestand kan worden benoemd met waarden uit de datarij, zoals de volledige naam van de werknemer of de begindatum van het contract. Dit zorgt ervoor dat de uitvoer direct georganiseerd is, zonder handmatig hernoemen na de samenvoeging.</p> <h3 id="api-toegang">API-Toegang</h3> <p>Mail merge in Word heeft geen API en kan niet van buiten de Word-applicatie worden geactiveerd. DocuGenerate biedt een REST API die integreert met externe systemen, waardoor het mogelijk wordt om documenten programmatisch te genereren als onderdeel van een backend-applicatie, of een automatiseringsplatform.</p> <h3 id="e-mailbezorging">E-mailbezorging</h3> <p>Word ondersteunt het versturen van samengevoegde documenten als afzonderlijke e-mailberichten rechtstreeks via Outlook, wat nuttig is voor bulkoutreach of interne communicatie. DocuGenerate heeft geen ingebouwde e-mailbezorging, maar kan worden gecombineerd met e-mailtools via automatiseringsplatforms zoals <a href="https://www.docugenerate.com/nl/hulp/articles/documentgeneratie-automatiseren-met-zapier/">Zapier</a>, <a href="https://www.docugenerate.com/nl/hulp/articles/documentgeneratie-automatiseren-met-make/">Make</a>, <a href="https://www.docugenerate.com/nl/hulp/articles/documentgeneratie-automatiseren-met-n8n/">n8n</a>, of <a href="https://www.docugenerate.com/nl/hulp/articles/documentgeneratie-automatiseren-met-power-apps/">Power Automate</a> om hetzelfde resultaat te bereiken als onderdeel van een grotere workflow.</p> <h3 id="voorwaarden">Voorwaarden</h3> <p>Beide tools ondersteunen voorwaardelijke content binnen sjablonen. Word biedt <a href="https://support.microsoft.com/en-gb/office/set-the-rules-for-a-mail-merge-d546ee7e-ab7a-4d6d-b488-41f9e4bd1409" target="_blank" rel="nofollow noopener">Rules</a> zoals <code class="language-plaintext highlighter-rouge">IF...THEN...ELSE</code>, beschikbaar onder <strong>Mailings</strong> &gt; <strong>Rules</strong>, waarmee u content kunt tonen of verbergen op basis van veldwaarden. DocuGenerate gebruikt een <a href="https://www.docugenerate.com/nl/hulp/articles/voorwaarden-toevoegen-aan-een-sjabloon/">syntax voor voorwaardelijke tags</a> die rechtstreeks in de sjabloontekst wordt geschreven. Met <a href="https://www.docugenerate.com/nl/hulp/articles/meer-mogelijkheden-met-uitgebreide-syntax/">uitgebreide syntax</a> ingeschakeld, ondersteunt DocuGenerate ook logische expressies, vergelijkingen, en rekenkunde in voorwaarden, wat verder gaat dan de set regels die beschikbaar is in Word.</p> <h3 id="afbeeldingen">Afbeeldingen</h3> <p>Word staat dynamische afbeeldingen toe in mail merge, maar de afbeeldingen moeten lokaal zijn opgeslagen op de machine die de samenvoeging uitvoert en worden geconfigureerd via veldcodes, wat de installatie moeilijk maakt om te reproduceren of te automatiseren. DocuGenerate ondersteunt afbeeldingen die worden verwezen via <a href="https://www.docugenerate.com/nl/hulp/articles/afbeeldingen-toevoegen-aan-een-sjabloon/">URL of Base64</a>, wat betrouwbaar werkt in cloudgebaseerde workflows waar afbeeldingen extern worden gehost. U kunt ook de afmetingen van afbeeldingen rechtstreeks in de merge-tag beheren met het filter <code class="language-plaintext highlighter-rouge">size</code>, waardoor lay-outcontrole eenvoudig wordt zonder de documentstructuur aan te raken.</p> <h3 id="qr-codes-en-barcodes">QR-Codes en Barcodes</h3> <p>Word ondersteunt <a href="https://support.microsoft.com/en-us/office/field-codes-mergebarcode-812fc43f-cb53-4782-8f9f-290ed08d34f3" target="_blank" rel="nofollow noopener">barcodes en QR-codes</a> via de veldcodes <code class="language-plaintext highlighter-rouge">MergeBarCode</code> en <code class="language-plaintext highlighter-rouge">DisplayBarcode</code>, hoewel de syntax niet eenvoudig is en de mogelijkheden voor visuele aanpassing beperkt zijn. DocuGenerate heeft een speciale <a href="https://www.docugenerate.com/nl/hulp/articles/qr-codes-en-barcodes-toevoegen/">syntax voor QR-codes en barcodes</a> die elke veldwaarde omzet in een QR-code of barcode met configureerbare afmetingen, kleuren, en opmaak, rechtstreeks vanuit de merge-tag.</p> <h3 id="pdf-toevoegen">PDF Toevoegen</h3> <p>Word ondersteunt van nature niet het toevoegen van aanvullende PDF-content aan een samengevoegd uitvoerbestand. Met DocuGenerate kunt u <a href="https://www.docugenerate.com/nl/hulp/articles/een-pdf-samenvoegen-aan-het-einde-van-gegenereerde-documenten/">een statisch PDF-bestand toevoegen</a> aan het einde van elk gegenereerd document, wat nuttig is voor contracten die standaardvoorwaarden, juridische kennisgevingen, of vaste bijlagen moeten bevatten als onderdeel van elke uitvoer.</p> <h2 id="conclusie">Conclusie</h2> <p>Voor teams die volledig binnen de Microsoft 365-desktopomgeving werken en samengevoegde documenten moeten produceren zonder externe systemen te betrekken, dekt de ingebouwde mail merge van Word de basis goed af. Het verzorgt veldvervanging, voorwaardelijke regels, en directe e-mailbezorging via Outlook, allemaal zonder een aparte tool nodig te hebben.</p> <p>DocuGenerate is een betere keuze wanneer documentgeneratie deel moet uitmaken van een grotere workflow. De API maakt het bruikbaar vanuit automatiseringsplatforms, backend-systemen, en no-code tools, en functies zoals PDF-uitvoer, dynamische bestandsnamen, en het toevoegen van PDF’s dekken scenario’s die mail merge in Word niet van nature kan afhandelen. Voor teams die al Word gebruiken om sjablonen te ontwerpen, is de overgang minimaal, omdat de sjablonen hetzelfde formaat hebben.</p> <p>De keuze tussen de twee hangt af van waar de generatiestap zich bevindt in uw proces. Als het een eenmalige taak is die op een desktop wordt uitgevoerd, is Word al beschikbaar en voldoende. Als het een terugkerende, geautomatiseerde stap is in een bedrijfsworkflow, biedt een speciale tool zoals DocuGenerate de flexibiliteit om documentgeneratie te koppelen aan uw bestaande systemen.</p> <h3 id="bronnen">Bronnen</h3> <ul> <li>Het Word-sjabloon <a href="https://www.docugenerate.com/assets/posts/032-word-mail-merge/Employment Contract.docx">Employment Contract.docx</a> dat in dit artikel is gebruikt.</li> <li>Het voorbeeld-databestand <a href="https://www.docugenerate.com/assets/posts/032-word-mail-merge/Employment Contract.xlsx">Employment Contract.xlsx</a>.</li> <li>De samengevoegde uitvoer <a href="https://www.docugenerate.com/assets/posts/032-word-mail-merge/Employment Contract Merged.docx">Employment Contract Merged.docx</a> uit Word.</li> <li>Het bestand <a href="https://www.docugenerate.com/assets/posts/032-word-mail-merge/Employment Contracts.zip">Employment Contracts.zip</a> met dynamische bestandsnamen uit DocuGenerate.</li> <li>De documentatie van Microsoft over <a href="https://support.microsoft.com/en-us/office/use-mail-merge-for-bulk-email-letters-labels-and-envelopes-f488ed5b-b849-4c11-9cff-932c49474705" target="_blank" rel="nofollow noopener">mail merge voor brieven en bulkdocumenten</a>.</li> <li>De gids van Microsoft over <a href="https://support.microsoft.com/en-us/office/mail-merge-using-an-excel-spreadsheet-858c7d7f-5cc0-4ba1-9a7b-0a948fa3d7d3" target="_blank" rel="nofollow noopener">het gebruik van een Excel-spreadsheet</a> als gegevensbron voor mail merge.</li> </ul>]]></content> <author> <name>DocuGenerate</name> <email>support@docugenerate.com</email> </author> <category term="Contracts"/> <category term="Microsoft Word"/> <category term="Mail Merge"/> <summary type="html"><![CDATA[Mail merge bestaat al decennialang, en Microsoft Word biedt het nog steeds als ingebouwde functie. Maar hoe verhoudt dit zich tot een speciaal platform voor documentgeneratie zoals DocuGenerate? Ontdek het in deze vergelijking naast elkaar van beide oplossingen.]]></summary> <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.docugenerate.com/assets/posts/032-word-mail-merge/cover-image.png"/> <media:content medium="image" url="https://www.docugenerate.com/assets/posts/032-word-mail-merge/cover-image.png" xmlns:media="http://search.yahoo.com/mrss/"/> </entry> <entry> <title type="html">Genereer Vastgoedadvertenties met n8n en DocuGenerate</title> <link href="https://www.docugenerate.com/nl/blog/genereer-vastgoedadvertenties-met-n8n-en-docugenerate/" rel="alternate" type="text/html" title="Genereer Vastgoedadvertenties met n8n en DocuGenerate"/> <published>2026-03-13T00:00:00+00:00</published> <updated>2026-03-13T00:00:00+00:00</updated> <id>https://www.docugenerate.com/nl/blog/genereer-vastgoedadvertenties-met-n8n-en-docugenerate</id> <content type="html" xml:base="https://www.docugenerate.com/nl/blog/genereer-vastgoedadvertenties-met-n8n-en-docugenerate/"><![CDATA[<h2 id="introductie">Introductie</h2> <p>Vastgoedkantoren en vastgoedbeheerbedrijven produceren regelmatig advertentiedocumenten voor nieuwe panden, of het nu gaat om druk, e-mailcampagnes, of klantportalen. Het handmatig samenstellen van deze documenten, van het verzamelen van makelaardetails en het schrijven van beschrijvingen tot het vinden van foto’s en het consistent opmaken van alles, kost tijd die elders besteed zou kunnen worden. In deze tutorial bouwen we een geautomatiseerde workflow met <a href="https://n8n.io/" target="_blank" rel="nofollow noopener">n8n</a>, <a href="https://www.anthropic.com/claude" target="_blank" rel="nofollow noopener">Claude</a>, en <a href="https://www.docugenerate.com/">DocuGenerate</a> die binnen enkele seconden een gepolijste, direct-deelbare PDF-vastgoedadvertentie produceert.</p> <p>De workflow gebruikt de Anthropic-node in n8n, die Claude aanroept om op verzoek realistische advertentiedata te genereren, en voegt deze samen met een professioneel ontworpen Word-sjabloon via DocuGenerate. De voltooide PDF wordt vervolgens gedownload en rechtstreeks opgeslagen in een Dropbox-map. Hoewel deze tutorial Claude gebruikt om gegevensinvoer te simuleren, kan dezelfde workflow worden gekoppeld aan elke echte gegevensbron: een webformulier, een CRM, een vastgoeddatabase, of een spreadsheet. De stappen voor documentgeneratie en -bezorging blijven identiek, ongeacht waar de data vandaan komt, wat dit een solide basis maakt voor automatisering in de praktijk. Aan het einde van deze gids heeft u een volledig functionele n8n-workflow die u kunt importeren en aanpassen aan uw eigen gebruikssituatie.</p> <h2 id="het-sjabloon-voor-vastgoedadvertenties-instellen">Het Sjabloon voor Vastgoedadvertenties Instellen</h2> <p>Voordat we de n8n-workflow bouwen, hebben we een documentsjabloon in DocuGenerate nodig. Voor deze tutorial gebruiken we het Word-sjabloon <a href="https://www.docugenerate.com/assets/posts/031-n8n-property-listings/Property Listing.docx">Property Listing</a>, dat een strakke vastgoedlay-out heeft met een grote hero-afbeelding bovenaan, een rij van drie interieurfoto’s, belangrijke panddetails, een QR-code die linkt naar de advertentiepagina, en een makelaarskaart onderaan.</p> <p><img src="https://www.docugenerate.com/assets/posts/031-n8n-property-listings/property-listing-template.png" alt="Property Listing-sjabloon met merge-tags"/></p> <p>Het sjabloon gebruikt de volgende <a href="https://www.docugenerate.com/nl/hulp/articles/wat-zijn-merge-tags/">merge-tags</a>:</p> <ul> <li><code class="language-plaintext highlighter-rouge">agent_photo</code>, <code class="language-plaintext highlighter-rouge">agent_name</code>, <code class="language-plaintext highlighter-rouge">agent_email</code>, <code class="language-plaintext highlighter-rouge">agent_phone</code>, <code class="language-plaintext highlighter-rouge">agent_address</code>: Contactgegevens van de makelaar, weergegeven op de kaart in de footer.</li> <li><code class="language-plaintext highlighter-rouge">price</code>: Prominent weergegeven naast de titel.</li> <li><code class="language-plaintext highlighter-rouge">surface</code>, <code class="language-plaintext highlighter-rouge">bedrooms</code>, <code class="language-plaintext highlighter-rouge">bathrooms</code>, <code class="language-plaintext highlighter-rouge">kitchens</code>: Belangrijke pandstatistieken weergegeven in de detailrij.</li> <li><code class="language-plaintext highlighter-rouge">description</code>: Een korte alinea die het pand beschrijft, weergegeven onder de titelsectie.</li> <li><code class="language-plaintext highlighter-rouge">main_image</code>, <code class="language-plaintext highlighter-rouge">image1</code>, <code class="language-plaintext highlighter-rouge">image2</code>, <code class="language-plaintext highlighter-rouge">image3</code>: Pandfoto’s ingesloten in de lay-out.</li> <li><code class="language-plaintext highlighter-rouge">url</code>: Omgezet naar een QR-code die wordt weergegeven in de rechterbovenhoek van het document.</li> </ul> <p>Verschillende functies van dit sjabloon zijn het waard om nader toe te lichten:</p> <ul> <li> <p><strong>Formaataanpassing van afbeeldingen.</strong> De hero-afbeelding gebruikt de <a href="https://www.docugenerate.com/nl/hulp/articles/afbeeldingen-toevoegen-aan-een-sjabloon/#resizing-images">formaatsyntax</a> <code class="language-plaintext highlighter-rouge">[%main_image | size:'auto':600]</code> om de hoogte te beperken tot 600 pixels, met behoud van de beeldverhouding. De drie interieurfoto’s gebruiken <code class="language-plaintext highlighter-rouge">[%image1 | size:240:'auto']</code> om hun breedte vast te zetten op 240 pixels, zodat alle drie de afbeeldingen dezelfde grootte hebben en op één rij zijn uitgelijnd. Afbeeldingen kunnen worden doorgegeven als een openbare URL of als een base64-gecodeerde data-URI.</p> </li> <li> <p><strong>QR-code.</strong> Het veld <code class="language-plaintext highlighter-rouge">url</code> wordt niet weergegeven als platte tekst. In plaats daarvan gebruikt het sjabloon de syntax <code class="language-plaintext highlighter-rouge">[%url | qrcode:60:60 | set:'barcolor':'#2f7498']</code> om de waarde weer te geven als een <a href="https://www.docugenerate.com/nl/hulp/articles/qr-codes-en-barcodes-toevoegen/#adding-qr-codes">QR-code</a> met aangepaste afmetingen en een merkkleur die overeenkomt met het documentthema. Het scannen van de code in de gegenereerde PDF brengt de lezer rechtstreeks naar de vastgoedadvertentiepagina online.</p> </li> <li> <p><strong>Meervoudsvorming.</strong> De statistiekenrij gebruikt <a href="https://www.docugenerate.com/nl/hulp/articles/meer-mogelijkheden-met-uitgebreide-syntax/#logical-and-mathematical-expressions">voorwaardelijke syntax</a> om automatisch de meervoudsvorm te verwerken. Het aantal slaapkamers wordt bijvoorbeeld geschreven als <code class="language-plaintext highlighter-rouge">[bedrooms] Bedroom[#bedrooms &gt; 1]s[/]</code> in het sjabloon, wat resulteert in “1 Bedroom” of “3 Bedrooms” afhankelijk van de waarde van het veld <code class="language-plaintext highlighter-rouge">bedrooms</code>. Hetzelfde patroon geldt voor <code class="language-plaintext highlighter-rouge">bathrooms</code> en <code class="language-plaintext highlighter-rouge">kitchens</code>.</p> </li> </ul> <p>Alle drie deze functies zijn afhankelijk van de <a href="https://www.docugenerate.com/nl/hulp/articles/hoe-schakel-ik-de-uitgebreide-syntax-in/">uitgebreide syntax</a> van DocuGenerate, die voor het sjabloon moet worden ingeschakeld voordat documenten worden gegenereerd. U kunt dit inschakelen in de sjabloonsinstellingen in de webapp.</p> <h2 id="overzicht-van-de-n8n-workflow">Overzicht van de n8n-Workflow</h2> <p>In deze workflow gebruiken we Claude om dummy-advertentiedata te genereren, zodat het proces end-to-end kan worden gedemonstreerd zonder dat een live database of extern systeem nodig is. In een echte implementatie zouden de handmatige trigger en de node <strong>Message a model</strong> worden vervangen door een trigger en <a href="#gegevensbronnen-in-de-praktijk">gegevensbron</a> die uw daadwerkelijke proces weerspiegelt.</p> <p>De volledige workflow bestaat uit verschillende nodes die in een lineaire volgorde zijn verbonden:</p> <p><img src="https://www.docugenerate.com/assets/posts/031-n8n-property-listings/complete-workflow-v2.png" alt="De volledige n8n-workflow"/></p> <p>U kunt het <a href="https://www.docugenerate.com/assets/posts/031-n8n-property-listings/Property Listing Workflow.json" target="_blank">workflow-JSON-bestand</a> downloaden en rechtstreeks importeren in uw n8n-instantie. U moet de DocuGenerate-sjabloon-ID, uw API-gegevens, en het Dropbox-doelpad bijwerken zodat ze overeenkomen met uw eigen configuratie. Laten we elke node in detail doorlopen.</p> <h2 id="advertentiedata-genereren-met-claude">Advertentiedata Genereren met Claude</h2> <p>De eerste functionele node is de node <strong>Message a model</strong> uit de Anthropic-integratie, geconfigureerd om het model <code class="language-plaintext highlighter-rouge">claude-sonnet-4-6</code> te gebruiken. De rol hiervan in deze workflow is het produceren van een realistische set waarden voor vastgoedadvertenties die kunnen worden doorgegeven aan DocuGenerate. Om deze node te gebruiken, heeft u een Anthropic-account nodig en een API-sleutel gegenereerd vanuit de <a href="https://console.anthropic.com/" target="_blank" rel="nofollow noopener">Anthropic Console</a>, die u toevoegt als credential in n8n wanneer u de node voor de eerste keer instelt.</p> <p><img src="https://www.docugenerate.com/assets/posts/031-n8n-property-listings/anthropic-api-key.png" alt="API-sleutelconfiguratie voor de Anthropic-node" class="desktop-width-75"/></p> <p>De prompt bevat de volledige JSON-structuur die het sjabloon verwacht, waarbij de meeste velden leeg zijn gelaten voor Claude om in te vullen. Het veld <code class="language-plaintext highlighter-rouge">agent_photo</code> is vooraf ingevuld met een URL-patroon van <a href="https://randomuser.me/" target="_blank" rel="nofollow noopener">randomuser.me</a>, een gratis dienst die een realistische portretfoto retourneert voor een gegeven numerieke ID. Claude krijgt de instructie om <code class="language-plaintext highlighter-rouge">&lt;AGENT_ID&gt;</code> te vervangen door een willekeurig geheel getal tussen 1 en 50, wat bij elke uitvoering een andere makelaarsfoto oplevert.</p> <p><img src="https://www.docugenerate.com/assets/posts/031-n8n-property-listings/message-a-model-node.png" alt="Configuratie van de node Message a model"/></p> <p>Dit is de volledige prompt die in de node wordt gebruikt:</p> <div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Can you generate dummy values for the following JSON? The &lt;AGENT_ID&gt; needs to be an integer from 1 to 50.
The description needs to be around 400 characters. The output needs to be just the updated JSON.

{
  "agent_photo": "https://randomuser.me/api/portraits/women/&lt;AGENT_ID&gt;.jpg",
  "agent_address": "",
  "agent_phone": "",
  "agent_email": "",
  "agent_name": "",
  "description": "",
  "kitchens": "",
  "bathrooms": "",
  "bedrooms": "",
  "surface": "",
  "price": "",
  "url": "https://www.docugenerate.com/blog/generate-property-listings-with-n8n-and-docugenerate/",
  "main_image": "https://images.pexels.com/photos/1571459/pexels-photo-1571459.jpeg",
  "image1": "https://images.pexels.com/photos/2062431/pexels-photo-2062431.jpeg?w=400",
  "image2": "https://images.pexels.com/photos/2089698/pexels-photo-2089698.jpeg?w=400",
  "image3": "https://images.pexels.com/photos/164595/pexels-photo-164595.jpeg?w=400"
}
</code></pre></div></div> <p>De vier afbeeldingsvelden zijn voor de eenvoud statisch ingesteld als <a href="https://www.pexels.com/" target="_blank" rel="nofollow noopener">Pexels</a>-URL’s. In een praktijkscenario zouden dit daadwerkelijke foto’s van het pand zijn, opgehaald uit een mediabibliotheek, een CRM-bijlage, of een cloudopslagbucket. Het veld <code class="language-plaintext highlighter-rouge">url</code> verwijst naar deze blogpost en wordt weergegeven als QR-code in het uiteindelijke document.</p> <p>Claude retourneert de voltooide JSON verpakt in een markdown-codeblok. Het antwoord van de node <strong>Message a model</strong> heeft de volgende structuur:</p> <div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">[</span><span class="w">
  </span><span class="p">{</span><span class="w">
    </span><span class="nl">"content"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
      </span><span class="p">{</span><span class="w">
        </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"text"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"text"</span><span class="p">:</span><span class="w"> </span><span class="s2">"```json</span><span class="se">\n</span><span class="s2">{</span><span class="se">\n</span><span class="s2">  </span><span class="se">\"</span><span class="s2">agent_name</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">Sarah Mitchell</span><span class="se">\"</span><span class="s2">,</span><span class="se">\n</span><span class="s2">  </span><span class="se">\"</span><span class="s2">price</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">$485,000</span><span class="se">\"</span><span class="s2">,</span><span class="se">\n</span><span class="s2">  ...</span><span class="se">\n</span><span class="s2">}</span><span class="se">\n</span><span class="s2">```"</span><span class="w">
      </span><span class="p">}</span><span class="w">
    </span><span class="p">]</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">]</span><span class="w">
</span></code></pre></div></div> <p>De daadwerkelijke advertentiedata bevindt zich genest in <code class="language-plaintext highlighter-rouge">content[0].text</code> en is verpakt in markdown-fences, wat betekent dat deze niet rechtstreeks door de volgende node kan worden gebruikt. Dat is wat de Code-node in de <a href="#de-claude-respons-parsen">volgende stap</a> afhandelt.</p> <h2 id="de-claude-respons-parsen">De Claude-Respons Parsen</h2> <p>De node <strong>Code in JavaScript</strong> extraheert het JSON-object uit de respons van Claude en stelt dit beschikbaar als schone, gestructureerde data voor de rest van de workflow. Deze stap is om twee redenen nodig: de node <strong>Message a model</strong> retourneert het volledige API-responsobject in plaats van alleen de tekstinhoud, en Claude verpakt zijn JSON-uitvoer vaak in markdown-codefences, zelfs wanneer dit niet wordt gevraagd. In plaats van te vertrouwen op prompt engineering om deze inconsistentie te verhelpen, handelt de Code-node dit elke keer betrouwbaar af.</p> <p><img src="https://www.docugenerate.com/assets/posts/031-n8n-property-listings/code-node.png" alt="Configuratie van de node Code in JavaScript"/></p> <div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">const</span> <span class="nx">text</span> <span class="o">=</span> <span class="nx">$input</span><span class="p">.</span><span class="nf">first</span><span class="p">().</span><span class="nx">json</span><span class="p">.</span><span class="nx">content</span><span class="p">[</span><span class="mi">0</span><span class="p">].</span><span class="nx">text</span><span class="p">;</span>
<span class="kd">const</span> <span class="nx">json</span> <span class="o">=</span> <span class="nx">text</span><span class="p">.</span><span class="nf">replace</span><span class="p">(</span><span class="sr">/```json</span><span class="se">\n?</span><span class="sr">/</span><span class="p">,</span> <span class="dl">''</span><span class="p">).</span><span class="nf">replace</span><span class="p">(</span><span class="sr">/</span><span class="se">\n?</span><span class="sr">```/</span><span class="p">,</span> <span class="dl">''</span><span class="p">).</span><span class="nf">trim</span><span class="p">();</span>
<span class="k">return</span> <span class="p">{</span> <span class="na">json</span><span class="p">:</span> <span class="nx">JSON</span><span class="p">.</span><span class="nf">parse</span><span class="p">(</span><span class="nx">json</span><span class="p">)</span> <span class="p">};</span>
</code></pre></div></div> <p>De eerste regel leest de tekstwaarde uit de respons van Claude. De tweede regel verwijdert de markdown-codefences met behulp van twee reguliere expressies. De derde regel parseert de opgeschoonde tekenreeks naar een JavaScript-object en retourneert dit als node-uitvoer. Na deze stap zijn alle advertentievelden (<code class="language-plaintext highlighter-rouge">agent_name</code>, <code class="language-plaintext highlighter-rouge">price</code>, <code class="language-plaintext highlighter-rouge">bedrooms</code>, enz.) beschikbaar als velden op het hoogste niveau in de JSON van het item, klaar om rechtstreeks te worden doorgegeven aan DocuGenerate.</p> <h2 id="het-document-genereren">Het Document Genereren</h2> <p>De node <strong>Generate document</strong> gebruikt de <a href="https://n8n.io/integrations/docugenerate/" target="_blank" rel="noopener">DocuGenerate-integratie</a> voor n8n om de advertentiedata samen te voegen met het Word-sjabloon en een PDF te produceren. Om deze node te gebruiken, installeert u DocuGenerate in uw n8n-instantie en <a href="https://www.docugenerate.com/nl/hulp/articles/documentgeneratie-automatiseren-met-n8n/#install-docugenerate">configureert u deze</a> met uw <a href="https://www.docugenerate.com/nl/hulp/articles/waar-vind-ik-mijn-api-sleutel/">API-sleutel</a>.</p> <p><img src="https://www.docugenerate.com/assets/posts/031-n8n-property-listings/generate-document-node.png" alt="Configuratie van de node Generate document"/></p> <p>De node is geconfigureerd met de volgende parameters:</p> <ul> <li><strong>Template Name or ID</strong>: Het sjabloon <strong>Property Listing</strong> dat is geüpload in de stap <a href="#het-sjabloon-voor-vastgoedadvertenties-instellen">sjabloon instellen</a>.</li> <li><strong>Name</strong>: Een n8n-expressie die een dynamische documentnaam genereert: <code class="language-plaintext highlighter-rouge">Property Listing for {{ $json.price }} ({{ $json.surface }})</code>. Dit produceert een bestandsnaam zoals <code class="language-plaintext highlighter-rouge">Property Listing for $485,000 (1,850 sq ft)</code>, waardoor elk document eenvoudig te herkennen is.</li> <li><strong>Format</strong>: Ingesteld op <code class="language-plaintext highlighter-rouge">PDF (.pdf)</code>.</li> <li><strong>Data</strong>: Ingesteld op <code class="language-plaintext highlighter-rouge">{{ $json }}</code>, wat de volledige uitvoer van de Code-node doorgeeft als de datapayload. Aangezien de Code-node al een plat JSON-object produceert met alle sjabloonvelden op het hoogste niveau, is er geen aanvullende koppeling nodig.</li> </ul> <p>Wanneer de node succesvol wordt uitgevoerd, bevat het antwoord onder andere een veld <code class="language-plaintext highlighter-rouge">document_uri</code> met een URL die verwijst naar de gegenereerde PDF, en een veld <code class="language-plaintext highlighter-rouge">filename</code> met de bestandsnaam van het document.</p> <h2 id="de-gegenereerde-pdf-downloaden">De Gegenereerde PDF Downloaden</h2> <p>DocuGenerate retourneert een URL naar het gegenereerde document in plaats van rechtstreeks de binaire bestandsinhoud. Om de PDF in de volgende stap naar Dropbox te uploaden, moeten we het bestand eerst ophalen van die URL. De node <strong>HTTP Request</strong> verzorgt dit door een GET-verzoek te doen naar de <code class="language-plaintext highlighter-rouge">document_uri</code> die wordt geretourneerd door de node <a href="#het-document-genereren">Generate document</a>.</p> <p><img src="https://www.docugenerate.com/assets/posts/031-n8n-property-listings/http-request-node.png" alt="Configuratie van de node HTTP Request"/></p> <p>De parameter <strong>URL</strong> is ingesteld op <code class="language-plaintext highlighter-rouge">{{ $json.document_uri }}</code>, wat verwijst naar de document-URL uit de vorige stap. De binaire bestandsdata is vervolgens beschikbaar voor de Dropbox-node om te uploaden.</p> <h2 id="de-pdf-opslaan-in-dropbox">De PDF Opslaan in Dropbox</h2> <p>De laatste node uploadt de gegenereerde PDF naar een aangewezen Dropbox-map met behulp van de <a href="https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.dropbox/" target="_blank" rel="nofollow noopener">Dropbox-node</a> in n8n, waardoor het team onmiddellijk toegang heeft tot het nieuwe advertentiedocument.</p> <p><img src="https://www.docugenerate.com/assets/posts/031-n8n-property-listings/dropbox-node.png" alt="Configuratie van de node Upload a file"/></p> <p>De node gebruikt OAuth2-authenticatie gekoppeld aan uw Dropbox-account. De parameter <strong>File Path</strong> is ingesteld op <code class="language-plaintext highlighter-rouge">/n8n/Property Listings/{{ $json.filename }}</code>, waarmee elk document wordt opgeslagen in de map <code class="language-plaintext highlighter-rouge">/n8n/Property Listings/</code> met de bestandsnaam die door DocuGenerate is geretourneerd. De optie <strong>Binary File</strong> is ingeschakeld, zodat de node de bestandsinhoud leest uit de uitvoer van de HTTP Request-node in plaats van een statisch pad.</p> <p>Zodra de workflow is voltooid, is de gegenereerde PDF beschikbaar in Dropbox en ziet deze er als volgt uit. U kunt ook een <a href="https://www.docugenerate.com/assets/posts/031-n8n-property-listings/Property Listing for $875,000 (2,450 sq ft).pdf" target="_blank">voorbeeld-PDF</a> downloaden om het uiteindelijke resultaat te bekijken.</p> <p><img src="https://www.docugenerate.com/assets/posts/031-n8n-property-listings/sample-property-listing.png" alt="Voorbeeld van een gegenereerde PDF-vastgoedadvertentie"/></p> <h2 id="gegevensbronnen-in-de-praktijk">Gegevensbronnen in de Praktijk</h2> <p>De huidige workflow gebruikt Claude als handig vervangmiddel voor een echte gegevensbron, maar in de praktijk komt vastgoedadvertentiedata zelden van een AI-model. Deze bevindt zich doorgaans in een formulierinzending, een CRM-record, een databaserij, of een spreadsheet. Aangezien de stappen voor documentgeneratie en -bezorging hetzelfde blijven, ongeacht waar de data vandaan komt, is het vervangen van de Anthropic-node door een andere trigger en gegevensbron alles wat nodig is om deze tutorial-workflow om te zetten in een productieklare automatisering. Hieronder staan enkele veelvoorkomende scenario’s waarvoor deze workflow goed geschikt is.</p> <h3 id="webformulieren">Webformulieren</h3> <p>Veel kantoren gebruiken online formulieren om panddetails te verzamelen van advertentiemakelaars voordat ze marketingmateriaal voorbereiden. Een formuliertool zoals Jotform, Typeform, of Tally kan velden vastleggen zoals adres, prijs, aantal kamers, oppervlakte, en een beschrijving rechtstreeks van de makelaar. Wanneer een nieuwe inzending binnenkomt, kan het formulierplatform de n8n-workflow activeren via een webhook, en alle verzamelde data rechtstreeks doorgeven aan de stap voor documentgeneratie. Dit maakt het maken van vastgoedadvertenties een natuurlijk vervolg op het intakeproces, zonder dat handmatige gegevensoverdracht nodig is.</p> <h3 id="crm-systemen">CRM-Systemen</h3> <p>Vastgoedbedrijven die hun voorraad beheren in een CRM zoals Salesforce, HubSpot, of Pipedrive kunnen documentgeneratie activeren telkens wanneer een pandrecord een bepaalde pipelinefase bereikt, bijvoorbeeld wanneer het wordt gemarkeerd als “Ready to publish” of “New listing”. De workflow zou de relevante velden uit het CRM-record halen, deze samenvoegen met het sjabloon, en de PDF ofwel terugschrijven naar het record, ofwel per e-mail afleveren bij de toegewezen makelaar. Dit houdt het advertentiedocument gesynchroniseerd met de CRM-data en elimineert dubbele gegevensinvoer.</p> <h3 id="databases-en-spreadsheets">Databases en Spreadsheets</h3> <p>Teams die hun vastgoedvoorraad beheren in een database zoals PostgreSQL, Airtable, of Notion, of in een spreadsheet zoals Google Sheets of Excel, kunnen nieuwe of bijgewerkte records opvragen volgens een schema of als reactie op het toevoegen van een rij. n8n heeft native nodes voor al deze platforms, waardoor het eenvoudig wordt om een rij te lezen, de kolommen te koppelen aan de sjabloonvelden, en voor elk pand een PDF te genereren. Deze aanpak werkt bijzonder goed voor kantoren die meerdere advertenties tegelijk toevoegen en alle documenten in één geautomatiseerde run willen genereren.</p> <h2 id="conclusie">Conclusie</h2> <p>In deze tutorial hebben we een n8n-workflow gebouwd die automatisch een PDF-vastgoedadvertentie genereert. De workflow gebruikt Claude om realistische gegevensinvoer te simuleren, parseert de respons naar gestructureerde JSON, voegt de data samen met een professioneel ontworpen Word-sjabloon, en slaat de resulterende PDF op in Dropbox. Het sjabloon demonstreert verschillende geavanceerde functies van DocuGenerate, waaronder formaataanpassing van afbeeldingen met filters, QR-codegeneratie, en automatische meervoudsvorming via voorwaardelijke syntax.</p> <p>In een echte implementatie zou de Anthropic-node worden vervangen door een verbinding met uw daadwerkelijke gegevensbron, of dat nu een webformulier, een CRM, een database, of een spreadsheet is. De stappen voor documentgeneratie en -bezorging blijven hetzelfde, waardoor deze workflow eenvoudig aan te passen is aan bijna elke configuratie voor vastgoedbeheer.</p> <h3 id="bronnen">Bronnen</h3> <ul> <li>Het Word-sjabloon <a href="https://www.docugenerate.com/assets/posts/031-n8n-property-listings/Property Listing.docx">Property Listing</a>.</li> <li>Het <a href="https://www.docugenerate.com/assets/posts/031-n8n-property-listings/Property Listing Workflow.json" target="_blank">workflow-JSON-bestand</a> dat u kunt importeren in uw n8n-instantie.</li> <li>Een <a href="https://www.docugenerate.com/assets/posts/031-n8n-property-listings/Property Listing for $875,000 (2,450 sq ft).pdf" target="_blank">voorbeeld van een gegenereerde PDF</a> met het uiteindelijke resultaat.</li> <li>De DocuGenerate-<a href="https://www.docugenerate.com/nl/hulp/articles/documentgeneratie-automatiseren-met-n8n/">integratiegids</a> voor n8n.</li> <li>Foto’s aangeboden door <a href="https://www.pexels.com/" target="_blank" rel="nofollow noopener">Pexels</a> voor de pandafbeeldingen.</li> </ul>]]></content> <author> <name>DocuGenerate</name> <email>support@docugenerate.com</email> </author> <category term="Property Listings"/> <category term="n8n"/> <category term="No-Code"/> <summary type="html"><![CDATA[Leer hoe u een geautomatiseerde workflow voor vastgoedadvertenties bouwt met n8n, Claude, en DocuGenerate. Gebruik Claude om op verzoek realistische advertentiedata te genereren, voeg deze samen met een professioneel ontworpen Word-sjabloon, en sla de resulterende PDF rechtstreeks op in Dropbox.]]></summary> <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.docugenerate.com/assets/posts/031-n8n-property-listings/cover-image.png"/> <media:content medium="image" url="https://www.docugenerate.com/assets/posts/031-n8n-property-listings/cover-image.png" xmlns:media="http://search.yahoo.com/mrss/"/> </entry> <entry> <title type="html">Hoe u Zakenbrieven Genereert in Coda met DocuGenerate</title> <link href="https://www.docugenerate.com/nl/blog/hoe-u-zakenbrieven-genereert-in-coda-met-docugenerate/" rel="alternate" type="text/html" title="Hoe u Zakenbrieven Genereert in Coda met DocuGenerate"/> <published>2026-02-25T00:00:00+00:00</published> <updated>2026-02-25T00:00:00+00:00</updated> <id>https://www.docugenerate.com/nl/blog/hoe-u-zakenbrieven-genereert-in-coda-met-docugenerate</id> <content type="html" xml:base="https://www.docugenerate.com/nl/blog/hoe-u-zakenbrieven-genereert-in-coda-met-docugenerate/"><![CDATA[<h2 id="introductie">Introductie</h2> <p>Zakenbrieven zijn een basiselement van professionele communicatie, of u nu klantvoorstellen, formele kennisgevingen, of outreachcampagnes verstuurt. Elke brief afzonderlijk schrijven is repetitief en foutgevoelig, en het probleem stapelt zich snel op wanneer u een lange lijst met ontvangers heeft. In deze tutorial laten we zien hoe u <a href="https://coda.io/" target="_blank" rel="nofollow noopener">Coda</a> en <a href="https://www.docugenerate.com/">DocuGenerate</a> samen gebruikt om gepersonaliseerde PDF-zakenbrieven rechtstreeks vanuit een tabel te genereren, met één druk op de knop per rij.</p> <p>Coda is een flexibele werkruimte die documenten en spreadsheets combineert in één platform, waardoor het eenvoudig wordt om interactieve tools te bouwen met tabellen, knoppen, en aangepaste formules. De <a href="https://www.docugenerate.com/nl/integraties/coda/#pack">DocuGenerate Pack</a> breidt Coda uit met mogelijkheden voor documentgeneratie, waardoor u professionele PDF’s kunt produceren op basis van Word-sjablonen zonder code te schrijven. Elke rij in een Coda-tabel wordt een gepersonaliseerd document, ingevuld met de waarden uit de kolommen van die rij.</p> <p>Aan het einde van deze gids heeft u een Coda-document met een tabel van ontvangers en een knop <strong>Generate</strong> die voor elke persoon een gepersonaliseerde PDF-zakenbrief produceert. De gegenereerde bestanden worden rechtstreeks opgeslagen in een kolom <strong>PDF</strong> in de tabel, klaar om te worden gedownload of gedeeld.</p> <h2 id="het-zakenbriefsjabloon-instellen">Het Zakenbriefsjabloon Instellen</h2> <p>Voordat we in Coda gaan werken, hebben we een documentsjabloon in DocuGenerate nodig. We gebruiken het Word-bestand <a href="https://www.docugenerate.com/assets/posts/030-coda-business-letters/Business Letter.docx">Business Letter</a> uit onze <a href="https://www.docugenerate.com/nl/sjablonen/">Sjabloonbibliotheek</a>, wat een professioneel opgemaakte brief is die klaar is voor direct gebruik.</p> <p>Het sjabloon bevat <a href="https://www.docugenerate.com/nl/hulp/articles/wat-zijn-merge-tags/">merge-tags</a> voor <code class="language-plaintext highlighter-rouge">Date</code>, <code class="language-plaintext highlighter-rouge">Name</code>, <code class="language-plaintext highlighter-rouge">Job Title</code>, <code class="language-plaintext highlighter-rouge">Company Name</code>, <code class="language-plaintext highlighter-rouge">Street Address</code>, <code class="language-plaintext highlighter-rouge">City</code>, <code class="language-plaintext highlighter-rouge">State</code>, <code class="language-plaintext highlighter-rouge">Zip Code</code>, <code class="language-plaintext highlighter-rouge">Email</code>, en <code class="language-plaintext highlighter-rouge">Phone</code>. Deze tags fungeren als placeholders die worden vervangen door daadwerkelijke data wanneer een document wordt gegenereerd.</p> <p><img src="https://www.docugenerate.com/assets/posts/030-coda-business-letters/business-letter-template.png" alt="Business Letter-sjabloon met merge-tags"/></p> <p>Zodra u het Word-bestand heeft gedownload, <a href="https://www.docugenerate.com/nl/hulp/articles/hoe-maak-ik-een-nieuw-sjabloon-aan/">uploadt u het</a> naar uw DocuGenerate-account om een nieuw sjabloon te maken. De merge-tags worden automatisch gedetecteerd, en u kunt het resultaat op de sjabloonpagina bekijken voordat u verdergaat.</p> <h2 id="de-data-importeren-in-coda">De Data Importeren in Coda</h2> <p>Het sjabloon Business Letter in de Sjabloonbibliotheek wordt geleverd met een bijbehorende <a href="https://www.docugenerate.com/assets/posts/030-coda-business-letters/Business Letter.xlsx">Excel-dataset</a> met voorbeeldontvangerdata die is afgestemd op alle merge-tags van het sjabloon. Elke rij vertegenwoordigt één ontvanger, en elke kolom komt rechtstreeks overeen met een van de merge-tags in de brief.</p> <p>Om deze data in Coda te importeren, opent u het bestand <code class="language-plaintext highlighter-rouge">Business Letter.xlsx</code> in Excel of een andere spreadsheettoepassing, selecteert u de volledige tabel inclusief de headerrij, en kopieert u deze. Open vervolgens uw Coda-document, klik op een leeg gedeelte van de pagina, en plak. Coda herkent de tabelstructuur en maakt automatisch een nieuwe tabel op basis van de klembordgegevens, met behoud van alle kolomnamen en waarden.</p> <p><img src="https://www.docugenerate.com/assets/posts/030-coda-business-letters/business-letter-table-import.png" alt="Het dataset Business Letter plakken in een Coda-tabel"/></p> <h2 id="de-kolommen-generate-en-pdf-toevoegen">De Kolommen Generate en PDF Toevoegen</h2> <p>Nu de data op zijn plaats staat, moeten we twee kolommen aan de tabel toevoegen: één voor de generatieknop en één voor het opslaan van het uitvoerbestand. Klik op het pictogram <strong>+</strong> aan het einde van de tabelheaderrij om de eerste nieuwe kolom toe te voegen.</p> <p>Selecteer <strong>Button</strong> als het kolomtype, en kies vervolgens <strong>New</strong> om een lege knopconfiguratie te maken. Zodra de kolom verschijnt, hernoemt u deze naar <strong>Generate</strong>.</p> <p><img src="https://www.docugenerate.com/assets/posts/030-coda-business-letters/new-column-generate-button-v2.png" alt="Een Button-kolom toevoegen aan de tabel"/></p> <p>Herhaal hetzelfde proces om een tweede kolom toe te voegen. Selecteer deze keer <strong>File</strong> als kolomtype en hernoem de kolom naar <strong>PDF</strong>. Deze kolom bevat het gegenereerde PDF-bestand voor elke rij nadat op de knop is geklikt.</p> <p><img src="https://www.docugenerate.com/assets/posts/030-coda-business-letters/new-column-pdf-file-v2.png" alt="Een File-kolom toevoegen aan de tabel"/></p> <p>De tabel toont nu alle originele datakolommen samen met de twee nieuwe kolommen aan het einde.</p> <p><img src="https://www.docugenerate.com/assets/posts/030-coda-business-letters/business-letter-table-new-columns-v2.png" alt="Business Letter-tabel met de toegevoegde kolommen Generate en PDF"/></p> <h2 id="de-docugenerate-pack-installeren">De DocuGenerate Pack Installeren</h2> <p>Om de tabel te koppelen aan DocuGenerate, moeten we de <a href="https://coda.io/packs/docugenerate-47041" target="_blank" rel="noopener">DocuGenerate Pack</a> toevoegen aan het Coda-document. Klik op <strong>Insert</strong> in de rechterbovenhoek van de Coda-editor en zoek naar <strong>DocuGenerate</strong> in het zoekvak voor Packs.</p> <p><img src="https://www.docugenerate.com/assets/posts/030-coda-business-letters/install-docugenerate-pack.png" alt="Zoeken naar de DocuGenerate Pack in het paneel Insert"/></p> <p>Selecteer <strong>DocuGenerate</strong> uit de resultaten en klik op <strong>Add to doc for free</strong> om de Pack te installeren.</p> <p><img src="https://www.docugenerate.com/assets/posts/030-coda-business-letters/add-to-doc-for-free-button.png" alt="De DocuGenerate Pack toevoegen aan het Coda-document"/></p> <p>Zodra deze is geïnstalleerd, worden de bouwstenen van de Pack beschikbaar in uw document: de tabel <strong>Templates</strong>, de tabel <strong>Documents</strong>, de knopactie <strong>Generate Document</strong>, en de formule <strong>DataStructure</strong>.</p> <p><img src="https://www.docugenerate.com/assets/posts/030-coda-business-letters/docugenerate-pack-installed.png" alt="Bouwstenen van de DocuGenerate Pack beschikbaar in Coda"/></p> <p>Om de installatie te voltooien, opent u het tabblad <strong>Settings</strong> naast <strong>Building blocks</strong>, klikt u op <strong>Select an account</strong>, en vervolgens op <strong>Add a new account</strong>. Voer uw <a href="https://www.docugenerate.com/nl/hulp/articles/waar-vind-ik-mijn-api-sleutel">API-sleutel</a> uit uw DocuGenerate-account in in het veld <strong>API token</strong> en klik op <strong>Continue</strong>. Uw DocuGenerate-account is nu gekoppeld en de Pack is klaar voor gebruik.</p> <p><img src="https://www.docugenerate.com/assets/posts/030-coda-business-letters/docugenerate-select-account.png" alt="Een DocuGenerate-account koppelen in de instellingen van de Coda Pack"/></p> <h2 id="de-knop-generate-document-configureren">De Knop Generate Document Configureren</h2> <p>Nu de Pack is geïnstalleerd, kunnen we de kolom <strong>Generate</strong> configureren om DocuGenerate aan te roepen wanneer erop wordt geklikt. Klik op het kolomheadermenu voor de kolom <strong>Generate</strong> en selecteer <strong>Edit column</strong>.</p> <p><img src="https://www.docugenerate.com/assets/posts/030-coda-business-letters/edit-column-generate-v2.png" alt="Het paneel Edit column openen voor de kolom Generate"/></p> <p>Scroll in de sectie voor de actie <strong>On click</strong> naar beneden naar de categorie <strong>Packs</strong> onderaan de actielijst, zoek <strong>DocuGenerate</strong>, en selecteer de actie <strong>Generate Document</strong>.</p> <p><img src="https://www.docugenerate.com/assets/posts/030-coda-business-letters/add-generate-document-action-v2.png" alt="De actie Generate Document selecteren uit de DocuGenerate Pack"/></p> <p>Klik op <strong>+ Connect an account</strong> en selecteer het DocuGenerate-account dat u heeft geconfigureerd in de <a href="#de-docugenerate-pack-installeren">vorige sectie</a>. Nu het account is gekoppeld, kunt u de actieparameters invullen.</p> <h3 id="sjabloonselectie">Sjabloonselectie</h3> <p>Selecteer in de vervolgkeuzelijst <strong>Template</strong> het sjabloon <strong>Business Letter</strong> dat u naar DocuGenerate heeft geüpload in de stap <a href="#het-zakenbriefsjabloon-instellen">sjabloon instellen</a>.</p> <p><img src="https://www.docugenerate.com/assets/posts/030-coda-business-letters/select-business-letter-template-v2.png" alt="Het sjabloon Business Letter selecteren in de actie Generate Document"/></p> <h3 id="documentnaam-en-formaat">Documentnaam en Formaat</h3> <p>Voor het veld <strong>Name</strong> kunt u dit leeg laten om een standaardnaam te gebruiken, of een dynamische waarde instellen om elk bestand eenvoudiger te herkennen. De formule <a href="https://coda.io/formulas#Format" target="_blank" rel="nofollow noopener">Format</a> van Coda is hier goed geschikt. Bijvoorbeeld, <code class="language-plaintext highlighter-rouge">=Format("Letter for {1}", thisRow.Name)</code> benoemt elk document naar de ontvanger.</p> <p><img src="https://www.docugenerate.com/assets/posts/030-coda-business-letters/generate-button-name-formula.gif" alt="De formule Format gebruiken om een dynamische documentnaam in te stellen"/></p> <p>Laat <strong>Format</strong> ingesteld op <code class="language-plaintext highlighter-rouge">.pdf</code> om PDF-bestanden te produceren, het meest gebruikte formaat voor het delen van documenten.</p> <h3 id="dynamische-datawaarden">Dynamische Datawaarden</h3> <p>Voor het veld <strong>Data</strong> moeten we een JSON-object opgeven dat de merge-tag-namen in het sjabloon koppelt aan de bijbehorende kolomwaarden in de huidige rij. De formule <a href="https://coda.io/resources/guides/intro-to-codas-formula-syntax" target="_blank" rel="nofollow noopener">Object</a> van Coda is de meest directe manier om deze koppeling te bouwen:</p> <div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Object(
  "Name", thisRow.Name,
  "Job Title", thisRow.[Job Title],
  "Company Name", thisRow.[Company Name],
  "Street Address", thisRow.[Street Address],
  "City", thisRow.City,
  "State", thisRow.State,
  "Zip Code", thisRow.[Zip Code],
  "Email", thisRow.Email,
  "Phone", thisRow.Phone,
  "Date", thisRow.Date
)
</code></pre></div></div> <p>Elke sleutel in de aanroep van <code class="language-plaintext highlighter-rouge">Object</code> is een merge-tag-naam uit het sjabloon, en elke waarde verwijst naar de bijbehorende kolom in de huidige rij met behulp van <code class="language-plaintext highlighter-rouge">thisRow</code>. Kolomnamen die spaties bevatten, moeten worden omgeven door vierkante haken, zoals te zien bij <code class="language-plaintext highlighter-rouge">thisRow.[Job Title]</code> en <code class="language-plaintext highlighter-rouge">thisRow.[Company Name]</code>.</p> <p><img src="https://www.docugenerate.com/assets/posts/030-coda-business-letters/data-object-formula.png" alt="De parameter Data configureren met de formule Object"/></p> <p>Voor sjablonen met complexere of geneste data is de <a href="https://www.docugenerate.com/nl/hulp/articles/documentgeneratie-automatiseren-met-coda/#data-structure-formula">formule DataStructure</a> die is meegeleverd met de DocuGenerate Pack een nuttig alternatief. Deze genereert automatisch de verwachte JSON-structuur voor elk sjabloon, met genummerde placeholders die u kunt invullen met de formule <code class="language-plaintext highlighter-rouge">Format</code>.</p> <h3 id="kolom-voor-het-pdf-resultaat">Kolom voor het PDF-Resultaat</h3> <p>Stel ten slotte de <strong>Results column</strong> in op de kolom <strong>PDF</strong> die eerder is toegevoegd. Dit instrueert Coda om het gegenereerde bestand in die kolom op te slaan nadat op de knop is geklikt. U kunt ook het uiterlijk van de knop aanpassen in de sectie <strong>Style</strong> door een label in te stellen, een kleur te kiezen, en een pictogram te selecteren.</p> <p><img src="https://www.docugenerate.com/assets/posts/030-coda-business-letters/configure-visual-ui-button.gif" alt="Het label, de kleur, en het pictogram van de knop aanpassen"/></p> <h2 id="de-documenten-genereren">De Documenten Genereren</h2> <p>Nu de configuratie is voltooid, klikt u op de knop <strong>Generate</strong> in elke rij om documentgeneratie voor die ontvanger te activeren. DocuGenerate gebruikt de data van de rij om de merge-tags in het sjabloon in te vullen en retourneert een PDF-bestand. Coda importeert vervolgens het bestand in zijn opslag en toont het in de kolom <strong>PDF</strong> voor die rij. Het gehele proces duurt enkele seconden, dus verwacht een korte vertraging voordat het bestand verschijnt.</p> <p>U kunt snel achter elkaar op <strong>Generate</strong> klikken voor meerdere rijen, zonder te wachten tot elk document is voltooid. DocuGenerate verwerkt de verzoeken gelijktijdig, zodat alle documenten parallel worden gegenereerd. Het aantal documenten dat u tegelijk kunt verwerken, hangt af van de <a href="https://www.docugenerate.com/nl/hulp/articles/is-er-een-limiet-voor-gelijktijdige-documenten/">limiet voor gelijktijdige documenten</a> van uw abonnement.</p> <p><img src="https://www.docugenerate.com/assets/posts/030-coda-business-letters/generate-multiple-documents-v3.gif" alt="Meerdere zakenbrieven genereren vanuit de Coda-tabel"/></p> <h2 id="conclusie">Conclusie</h2> <p>In deze tutorial hebben we een Coda-document gebouwd dat gepersonaliseerde PDF-zakenbrieven genereert op basis van een tabel met ontvangerdata, met behulp van de DocuGenerate Pack. De workflow omvat het uploaden van een Word-sjabloon naar DocuGenerate, het importeren van de ontvangerdata in Coda, het toevoegen van de kolommen <strong>Generate</strong> en <strong>PDF</strong>, en het koppelen van de actie <strong>Generate Document</strong> om data van elke rij te koppelen aan de merge-tags van het sjabloon. Zodra de installatie klaar is, kost het genereren van een brief voor elke ontvanger slechts één druk op de knop.</p> <p>Hetzelfde patroon geldt voor elk documenttype dat u wilt produceren op basis van tabulaire Coda-data. Facturen, contracten, aanbiedingsbrieven, en certificaten volgen allemaal dezelfde structuur: een Word-sjabloon met merge-tags, een tabel met de bijbehorende data, en een knop om het proces te activeren. U kunt dit verder uitbreiden door het te combineren met andere Coda-automatiseringen, zoals het automatisch genereren van documenten wanneer een nieuwe rij wordt toegevoegd, of het versturen van de gegenereerde bestanden naar ontvangers per e-mail.</p> <h3 id="bronnen">Bronnen</h3> <ul> <li>Het Word-sjabloon <a href="https://www.docugenerate.com/assets/posts/030-coda-business-letters/Business Letter.docx">Business Letter</a> en de <a href="https://www.docugenerate.com/assets/posts/030-coda-business-letters/Business Letter.xlsx">Excel-dataset</a> die in deze tutorial zijn gebruikt.</li> <li>De <a href="https://coda.io/packs/docugenerate-47041" target="_blank" rel="nofollow noopener">DocuGenerate Pack op Coda</a> voor het toevoegen van documentgeneratie aan uw Coda-documenten.</li> <li>De <a href="https://www.docugenerate.com/nl/hulp/articles/documentgeneratie-automatiseren-met-coda/">Coda-integratiegids</a> in het Hulpcentrum, inclusief installatie-instructies en formulereferenties.</li> <li>Officiële <a href="https://coda.io/formulas" target="_blank" rel="nofollow noopener">Coda-formulereferentie</a> voor formules die in deze tutorial worden gebruikt.</li> </ul>]]></content> <author> <name>DocuGenerate</name> <email>support@docugenerate.com</email> </author> <category term="Letters"/> <category term="Coda"/> <category term="No-Code"/> <summary type="html"><![CDATA[Genereer gepersonaliseerde PDF-zakenbrieven rechtstreeks vanuit een Coda-tabel met de DocuGenerate Pack. Deze tutorial doorloopt het importeren van tabeldata, het instellen van een knop om documenten te maken, en het opslaan van gegenereerde bestanden in een kolom met één klik per rij.]]></summary> <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.docugenerate.com/assets/posts/030-coda-business-letters/cover-image.png"/> <media:content medium="image" url="https://www.docugenerate.com/assets/posts/030-coda-business-letters/cover-image.png" xmlns:media="http://search.yahoo.com/mrss/"/> </entry> <entry> <title type="html">Automatiseer PDF-Certificaatgeneratie met FlowRunner</title> <link href="https://www.docugenerate.com/nl/blog/automatiseer-pdf-certificaatgeneratie-met-flowrunner/" rel="alternate" type="text/html" title="Automatiseer PDF-Certificaatgeneratie met FlowRunner"/> <published>2026-01-21T00:00:00+00:00</published> <updated>2026-01-21T00:00:00+00:00</updated> <id>https://www.docugenerate.com/nl/blog/automatiseer-pdf-certificaatgeneratie-met-flowrunner</id> <content type="html" xml:base="https://www.docugenerate.com/nl/blog/automatiseer-pdf-certificaatgeneratie-met-flowrunner/"><![CDATA[<h2 id="introductie">Introductie</h2> <p>Certificaten zijn een veelvoorkomende uitvoer in veel bedrijfsprocessen, van registraties van voltooide trainingen tot prestatieprijzen en bevestigingen van deelname aan evenementen. Het handmatig maken van individuele certificaten voor elke ontvanger is vervelend en foutgevoelig, vooral bij tientallen of honderden records. In deze tutorial bouwen we een geautomatiseerde workflow met <a href="https://flowrunner.ai/" target="_blank" rel="nofollow noopener">FlowRunner</a> en <a href="https://www.docugenerate.com/">DocuGenerate</a>, die PDF-certificaten genereert telkens wanneer een nieuw record wordt toegevoegd aan een databasetabel.</p> <p><a href="https://docs.flowrunner.ai/" target="_blank" rel="nofollow noopener">FlowRunner</a> maakt deel uit van het <a href="https://backendless.com/" target="_blank" rel="nofollow noopener">Backendless</a>-platform en maakt het eenvoudig om met slechts een paar klikken intelligente workflows te maken. Het orkestreert geautomatiseerde workflows die AI-agents, menselijke besluitvorming, en systeemintegraties combineren. Zowel technische als niet-technische gebruikers kunnen workflows bouwen. Niet-technische gebruikers werken via de visuele interface, terwijl technische gebruikers gebruik kunnen maken van aangepaste code en geavanceerde integraties.</p> <p>De workflow die we maken, luistert naar nieuwe records in een Backendless-databasetabel, genereert een gepersonaliseerd PDF-certificaat met DocuGenerate, slaat het gegenereerde bestand op in de Backendless File Service, en werkt het originele databaserecord bij met een link naar het PDF-bestand. Aan het einde van deze gids heeft u een volledig functionele automatiseringspijplijn voor certificaten die u kunt aanpassen voor elk documenttype.</p> <h2 id="het-certificaatsjabloon-instellen">Het Certificaatsjabloon Instellen</h2> <p>Voordat we de FlowRunner-workflow bouwen, moeten we het certificaatsjabloon in DocuGenerate voorbereiden. Om het eenvoudig te houden, gebruiken we het kant-en-klare sjabloon <a href="https://www.docugenerate.com/assets/posts/029-flowrunner-certificates/Certificate of Achievement.doc">Certificate of Achievement</a> uit onze <a href="https://www.docugenerate.com/nl/sjablonen/">Sjabloonbibliotheek</a>. Dit is een standaard certificaatlay-out met merge-tags voor <code class="language-plaintext highlighter-rouge">Company Name</code>, <code class="language-plaintext highlighter-rouge">Name</code>, <code class="language-plaintext highlighter-rouge">Course Name</code>, <code class="language-plaintext highlighter-rouge">Diploma Title</code>, en <code class="language-plaintext highlighter-rouge">Certificate Date</code>. U kunt het sjabloon aanpassen door het ontwerp te wijzigen, de lay-out aan te passen, of andere <a href="https://www.docugenerate.com/nl/hulp/articles/wat-zijn-merge-tags/">merge-tags</a> toe te voegen die aansluiten bij de branding en vereisten van uw organisatie.</p> <p><img src="https://www.docugenerate.com/assets/posts/029-flowrunner-certificates/certificate-template.png" alt="Certificate of Achievement-sjabloon met merge-tags"/></p> <p>Zodra u het sjabloonbestand heeft gedownload, <a href="https://www.docugenerate.com/nl/hulp/articles/hoe-maak-ik-een-nieuw-sjabloon-aan/">uploadt u het</a> naar uw DocuGenerate-account. Noteer na afloop van de upload de <a href="https://www.docugenerate.com/nl/hulp/articles/hoe-vind-ik-de-sjabloon-id/">sjabloon-ID</a> die wordt weergegeven op de sjabloonpagina, aangezien u deze nodig heeft bij het configureren van de stap voor documentgeneratie in de workflow.</p> <h2 id="de-participants-tabel-maken">De Participants-Tabel Maken</h2> <p>Vervolgens hebben we een databasetabel in Backendless nodig om de data op te slaan die wordt gebruikt voor het genereren van certificaten. Navigeer naar de sectie <strong>Database</strong> van uw Backendless-app en maak een nieuwe tabel genaamd <code class="language-plaintext highlighter-rouge">Participants</code>.</p> <p><img src="https://www.docugenerate.com/assets/posts/029-flowrunner-certificates/create-table-participants.png" alt="De Participants-tabel maken in Backendless" class="desktop-width-75"/></p> <p>Voeg de volgende kolommen toe aan de tabel:</p> <ul> <li><code class="language-plaintext highlighter-rouge">Certificate Date</code> (DATETIME): De datum die op het certificaat moet worden afgedrukt.</li> <li><code class="language-plaintext highlighter-rouge">Certificate URL</code> (STRING): Slaat de URL van het gegenereerde certificaatbestand op. Deze kolom wordt automatisch ingevuld door de workflow.</li> <li><code class="language-plaintext highlighter-rouge">Company Name</code> (STRING): De naam van het bedrijf of de organisatie die het certificaat uitgeeft.</li> <li><code class="language-plaintext highlighter-rouge">Course Name</code> (STRING): De naam van de cursus of het programma dat de deelnemer heeft voltooid.</li> <li><code class="language-plaintext highlighter-rouge">Diploma Title</code> (STRING): De titel van het diploma of de prestatie die wordt toegekend.</li> <li><code class="language-plaintext highlighter-rouge">Name</code> (STRING): De volledige naam van de deelnemer.</li> </ul> <p><img src="https://www.docugenerate.com/assets/posts/029-flowrunner-certificates/database-table-schema-v2.png" alt="Databasetabelschema voor de Participants-tabel"/></p> <p>De kolom <code class="language-plaintext highlighter-rouge">Certificate URL</code> begint leeg voor elk nieuw record. De workflow vult deze automatisch in met de URL van de gegenereerde PDF nadat de gehele flow is voltooid, wat een directe link biedt naar het certificaat vanuit de database.</p> <h2 id="de-databasetrigger-configureren">De Databasetrigger Configureren</h2> <p>Nu de tabel klaar is, gaat u naar de pagina <strong>FlowRunner Designer</strong> en maakt u een nieuwe flow genaamd “Certificate of Achievement Flow”. Het eerste element dat we nodig hebben, is een trigger die de flow start telkens wanneer een nieuw deelnemersrecord wordt gemaakt. Selecteer in het paneel <strong>Triggers</strong> de trigger <strong>Record Created in Database</strong> uit de categorie <strong>Data Service</strong>.</p> <p><img src="https://www.docugenerate.com/assets/posts/029-flowrunner-certificates/record-created-in-database.png" alt="De trigger Record Created in Database toevoegen"/></p> <p>De configuratie van de trigger is eenvoudig. Selecteer de tabel <code class="language-plaintext highlighter-rouge">Participants</code> in de vervolgkeuzelijst <strong>Table or View</strong> en stel <strong>Reference Trigger Data As</strong> in op <code class="language-plaintext highlighter-rouge">Participant</code>. U kunt alle andere velden op hun standaardwaarden laten staan.</p> <p><img src="https://www.docugenerate.com/assets/posts/029-flowrunner-certificates/configure-record-created.png" alt="De trigger Record Created in Database configureren"/></p> <p>Dit betekent dat telkens wanneer een nieuwe rij wordt ingevoegd in de tabel <code class="language-plaintext highlighter-rouge">Participants</code>, de flow wordt uitgevoerd en de recorddata toegankelijk is als het object <code class="language-plaintext highlighter-rouge">Participant</code> gedurende de resterende stappen.</p> <h2 id="het-document-genereren">Het Document Genereren</h2> <p>Nu de trigger op zijn plaats staat, kunnen we de stap voor documentgeneratie toevoegen. Zoek de <a href="https://flowrunner.ai/integrations/docugenerate" target="_blank" rel="nofollow noopener">DocuGenerate-extensie</a> en selecteer de actie <strong>Generate Document</strong>. Deze actie wordt uitgevoerd telkens wanneer de trigger afgaat, en genereert een nieuw certificaat op basis van de data van de deelnemer.</p> <p><img src="https://www.docugenerate.com/assets/posts/029-flowrunner-certificates/generate-document-action.png" alt="De actie Generate Document van DocuGenerate toevoegen"/></p> <p>Configureer de actie met de volgende parameters:</p> <ul> <li><strong>Template ID</strong>: De ID van het sjabloon dat u in de <a href="#het-certificaatsjabloon-instellen">eerdere stap</a> heeft geüpload naar DocuGenerate.</li> <li><strong>Name</strong>: Gebruik de Expression-invoer om een dynamische naam te maken door de tekst <code class="language-plaintext highlighter-rouge">Certificate for </code> samen te voegen met de waarde <code class="language-plaintext highlighter-rouge">Participant -&gt; Name</code>.</li> <li><strong>Output Name</strong>: Laat leeg, het gegenereerde bestand gebruikt de documentnaam.</li> <li><strong>Output Format</strong>: Stel in op <code class="language-plaintext highlighter-rouge">.pdf</code> om een PDF-bestand te produceren.</li> <li><strong>Data</strong>: Gebruik de Expression-invoer om het JSON-data-object te construeren (hieronder uitgelegd).</li> </ul> <p>Stel ten slotte <strong>Reference Result Data As</strong> in op <code class="language-plaintext highlighter-rouge">Document</code> en laat de overige parameters ongewijzigd.</p> <p><img src="https://www.docugenerate.com/assets/posts/029-flowrunner-certificates/generate-document-config.png" alt="Configuratie van de actie Generate Document"/></p> <p>De parameter <strong>Data</strong> vereist een JSON-array die elke merge-tag in het sjabloon koppelt aan de bijbehorende waarde uit het record <code class="language-plaintext highlighter-rouge">Participant</code>. Met de Expression-invoer van FlowRunner kunt u statische tekst combineren met dynamische blokresultaten om deze JSON tijdens runtime te construeren. U wisselt af tussen Text Inputs (voor de JSON-structuur en sleutelnamen) en Block Results (om te verwijzen naar de eigenschappen van het object <code class="language-plaintext highlighter-rouge">Participant</code>). De resulterende expressie produceert een waarde die gelijkwaardig is aan:</p> <div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">[{</span><span class="w">
  </span><span class="nl">"Company Name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Participant -&gt; Company Name"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"Name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Participant -&gt; Name"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"Course Name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Participant -&gt; Course Name"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"Diploma Title"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Participant -&gt; Diploma Title"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"Certificate Date"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Participant -&gt; Certificate Date"</span><span class="w">
</span><span class="p">}]</span><span class="w">
</span></code></pre></div></div> <p>De onderstaande screenshot toont de Expression-invoer met alle tekst- en referentieblokken samengesteld. Elke sleutel in het JSON-object komt overeen met een merge-tag in het certificaatsjabloon, en elke waarde wordt dynamisch opgehaald uit het databaserecord van de deelnemer.</p> <p><img src="https://www.docugenerate.com/assets/posts/029-flowrunner-certificates/data-expression-input.png" alt="Expression-invoer voor het construeren van de Data-parameter"/></p> <h2 id="het-bestand-opslaan-in-backendless">Het Bestand Opslaan in Backendless</h2> <p>Nu de stap voor documentgeneratie is geconfigureerd, kunnen we de workflow verder bouwen door het gegenereerde PDF-certificaat op te slaan in de Backendless File Service. Ga in het paneel <strong>Extensions</strong> naar <strong>Backendless File Services</strong> en selecteer de actie <strong>Add To File</strong>. Deze actie voegt content toe aan een bestaand bestand, en kan ook een nieuw bestand maken vanaf een externe URL met behulp van het veld <strong>Content From URL</strong>.</p> <p><img src="https://www.docugenerate.com/assets/posts/029-flowrunner-certificates/add-to-file-action.png" alt="De actie Add To File toevoegen"/></p> <p>Configureer de actie met de volgende body-parameters:</p> <ul> <li><strong>Directory Path</strong>: Stel in op <code class="language-plaintext highlighter-rouge">certificates</code> om alle gegenereerde bestanden op te slaan in een speciale map.</li> <li><strong>File Name</strong>: Gebruik de expressie <code class="language-plaintext highlighter-rouge">Document -&gt; filename</code> om het bestand te benoemen op basis van het document dat is gegenereerd in de <a href="#het-document-genereren">vorige stap</a>.</li> <li><strong>Content From URL</strong>: Gebruik <code class="language-plaintext highlighter-rouge">Document -&gt; document_uri</code> om de gegenereerde PDF te downloaden van DocuGenerate.</li> </ul> <p><img src="https://www.docugenerate.com/assets/posts/029-flowrunner-certificates/add-to-file-config-v2.png" alt="Configuratie van de actie Add To File"/></p> <p>Vergeet niet <strong>Reference Result Data As</strong> in te stellen op <code class="language-plaintext highlighter-rouge">File</code>. Het object <code class="language-plaintext highlighter-rouge">File</code> bevat een eigenschap <code class="language-plaintext highlighter-rouge">fileURL</code> die we in de volgende stap gebruiken om de locatie van het bestand terug op te slaan in de database.</p> <h2 id="het-databaserecord-bijwerken">Het Databaserecord Bijwerken</h2> <p>Voor de laatste stap van de workflow moeten we het originele record <code class="language-plaintext highlighter-rouge">Participants</code> bijwerken met de URL van het opgeslagen certificaat. Dit creëert een directe koppeling tussen het databaserecord van elke deelnemer en hun gegenereerde certificaat, waardoor het eenvoudig wordt om het bestand later op te halen of weer te geven, of het nu gaat om een webapplicatie, een rapport, of rechtstreeks vanuit de databasetabel.</p> <p>Ga in het paneel <strong>Actions</strong> naar <strong>Data Service</strong> en selecteer de actie <a href="https://docs.flowrunner.ai/reference/save-record-action.html" target="_blank" rel="nofollow noopener">Save Record In Database</a>. Deze actie slaat data op of werkt deze bij in uw Backendless-database wanneer deze wordt uitgevoerd, en kan op elk punt in de workflow worden geplaatst om tijdige gegevensupdates te waarborgen in reactie op specifieke events of acties.</p> <p><img src="https://www.docugenerate.com/assets/posts/029-flowrunner-certificates/save-record-in-database-action.png" alt="De actie Save Record In Database toevoegen"/></p> <p>Om de actie te configureren, selecteert u de optie <strong>Update record from flow</strong> en kiest u <strong>Use data from</strong> het object <code class="language-plaintext highlighter-rouge">Participant</code>. Selecteer in de sectie <strong>Perform Changes</strong> de eigenschap <code class="language-plaintext highlighter-rouge">Certificate URL</code> en voer de waarde <code class="language-plaintext highlighter-rouge">File -&gt; fileURL</code> in. Dit schrijft de URL van het bestand dat we hebben opgeslagen in de <a href="#het-bestand-opslaan-in-backendless">vorige stap</a> terug naar het record van de deelnemer. Optioneel kunt u <strong>Reference Result Data As</strong> instellen op <code class="language-plaintext highlighter-rouge">Record</code>.</p> <p><img src="https://www.docugenerate.com/assets/posts/029-flowrunner-certificates/save-record-in-database-config-v2.png" alt="Configuratie van de actie Save Record In Database"/></p> <h2 id="de-workflow-testen">De Workflow Testen</h2> <p>Nu alle vier de stappen op hun plaats staan, is de workflow compleet en klaar voor een end-to-end-test. De flow volgt een duidelijke volgorde: een nieuw databaserecord activeert documentgeneratie, de gegenereerde PDF wordt opgeslagen in de Backendless-bestandsopslag, en het record wordt bijgewerkt met de bestands-URL.</p> <p>Om <a href="https://docs.flowrunner.ai/flow-execution/overview.html" target="_blank" rel="nofollow noopener">de flow te starten</a>, klikt u op de knop <strong>Play</strong> in de FlowRunner Designer. Merk op dat u zodra een flow draait, geen wijzigingen meer kunt aanbrengen, maar u kunt deze op elk moment stoppen en de configuratie indien nodig bijwerken.</p> <p>Er zijn meerdere manieren om de workflow te testen, en een van de eenvoudigste manieren is het gebruik van de <strong>REST Console</strong> in de tabel <code class="language-plaintext highlighter-rouge">Participants</code>. We kunnen bijvoorbeeld een <strong>POST</strong>-verzoek uitvoeren met de volgende request body:</p> <div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"Company Name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Wikivu"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"Name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Brandtr Lusk"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"Course Name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Property-Casualty Insurers"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"Diploma Title"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Food Chemist"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"Certificate Date"</span><span class="p">:</span><span class="w"> </span><span class="s2">"7/12/2024"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div> <p>De response body bevestigt dat een nieuw record is gemaakt in de database. Binnen enkele ogenblikken wordt de workflow uitgevoerd en het certificaat gegenereerd.</p> <p><img src="https://www.docugenerate.com/assets/posts/029-flowrunner-certificates/test-rest-console.png" alt="De flow testen met de REST Console"/></p> <p>Zoals verwacht, verschijnt het gegenereerde <a href="https://www.docugenerate.com/assets/posts/029-flowrunner-certificates/Certificate for Brandtr Lusk.pdf" target="_blank">PDF-certificaat</a> in de map <code class="language-plaintext highlighter-rouge">certificates</code> in de <strong>File Service</strong>. Als toekomstige verbetering zou u het document ook na opslag naar Backendless kunnen verwijderen uit DocuGenerate, om uw DocuGenerate-account overzichtelijk te houden.</p> <p><img src="https://www.docugenerate.com/assets/posts/029-flowrunner-certificates/file-service-certificates.png" alt="Certificaat-PDF opgeslagen in de Backendless File Service"/></p> <p>In de tabel <code class="language-plaintext highlighter-rouge">Participants</code> bevat de kolom <code class="language-plaintext highlighter-rouge">Certificate URL</code> nu een link naar het bestand dat is opgeslagen in de Backendless-bestandsopslag, wat bevestigt dat de gehele flow correct werkt van trigger tot voltooiing.</p> <p><img src="https://www.docugenerate.com/assets/posts/029-flowrunner-certificates/database-table-updated.png" alt="Databasetabel bijgewerkt met de certificaat-URL"/></p> <p>Als u deze workflow zelf wilt proberen, kunt u de volledige <a href="https://www.docugenerate.com/assets/posts/029-flowrunner-certificates/Certificate of Achievement Flow.json" target="_blank">flowdefinitie</a> downloaden en importeren in uw FlowRunner-instantie. U moet de sjabloon-ID en tabelreferenties bijwerken zodat ze overeenkomen met de configuratie van uw eigen Backendless-app.</p> <h2 id="conclusie">Conclusie</h2> <p>In deze tutorial hebben we een complete automatiseringsworkflow voor certificaten gebouwd met FlowRunner en DocuGenerate. De flow luistert naar nieuwe records in een Backendless-database, genereert een gepersonaliseerd PDF-certificaat voor elke deelnemer, slaat het bestand op in de Backendless File Service, en werkt het databaserecord bij met een link naar het gegenereerde document. Het gehele proces verloopt automatisch zonder handmatige tussenkomst zodra de flow is gestart.</p> <p>Deze workflow toont één praktisch voorbeeld van wat u kunt bouwen met FlowRunner en DocuGenerate. Hetzelfde patroon geldt voor elk scenario waarin u documenten moet genereren op basis van databaserecords, zoals facturen, contracten, rapporten, of elk ander sjabloongebaseerd document. U zou deze workflow ook kunnen uitbreiden door e-mailmeldingen, voorwaardelijke vertakking op basis van recorddata, of integraties met andere diensten in het Backendless-ecosysteem toe te voegen.</p> <h3 id="bronnen">Bronnen</h3> <ul> <li>Het sjabloon <a href="https://www.docugenerate.com/assets/posts/029-flowrunner-certificates/Certificate of Achievement.doc">Certificate of Achievement</a> dat in deze tutorial is gebruikt.</li> <li>De DocuGenerate-<a href="https://www.docugenerate.com/nl/hulp/articles/documentgeneratie-automatiseren-met-backendless/">integratiegids</a> voor Backendless.</li> <li>De volledige <a href="https://www.docugenerate.com/assets/posts/029-flowrunner-certificates/Certificate of Achievement Flow.json" target="_blank">flowdefinitie</a> die u kunt importeren en gebruiken.</li> <li>De <a href="https://flowrunner.ai/integrations/docugenerate" target="_blank" rel="nofollow noopener">DocuGenerate-extensie</a> op FlowRunner.</li> <li>Officiële <a href="https://docs.flowrunner.ai/" target="_blank" rel="nofollow noopener">FlowRunner-documentatie</a>.</li> </ul>]]></content> <author> <name>DocuGenerate</name> <email>support@docugenerate.com</email> </author> <category term="Certificates"/> <category term="Backendless"/> <category term="No-Code"/> <summary type="html"><![CDATA[Leer hoe u een geautomatiseerde workflow voor certificaatgeneratie bouwt met FlowRunner en DocuGenerate. Maak een flow die PDF-certificaten genereert op basis van databaserecords, deze opslaat in bestandsopslag, en elk record bijwerkt met een link naar het gegenereerde bestand.]]></summary> <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.docugenerate.com/assets/posts/029-flowrunner-certificates/cover-image-v2.png"/> <media:content medium="image" url="https://www.docugenerate.com/assets/posts/029-flowrunner-certificates/cover-image-v2.png" xmlns:media="http://search.yahoo.com/mrss/"/> </entry> <entry> <title type="html">Genereer Zorgplanvoorstellen in Power Apps met DocuGenerate</title> <link href="https://www.docugenerate.com/nl/blog/genereer-zorgplanvoorstellen-in-power-apps-met-docugenerate/" rel="alternate" type="text/html" title="Genereer Zorgplanvoorstellen in Power Apps met DocuGenerate"/> <published>2025-12-22T00:00:00+00:00</published> <updated>2025-12-22T00:00:00+00:00</updated> <id>https://www.docugenerate.com/nl/blog/genereer-zorgplanvoorstellen-in-power-apps-met-docugenerate</id> <content type="html" xml:base="https://www.docugenerate.com/nl/blog/genereer-zorgplanvoorstellen-in-power-apps-met-docugenerate/"><![CDATA[<h2 id="introductie">Introductie</h2> <p>Bij de onboarding van werknemers moeten nieuwe medewerkers vaak worden geholpen bij het navigeren door complexe arbeidsvoorwaarden, met name bij het kiezen van een ziektekostenverzekering. Bedrijven bieden doorgaans meerdere zorgplannen aan met verschillende dekkingsniveaus, premies, en eigen bijdragen, wat nieuwe werknemers kan overweldigen bij het maken van de beste keuze voor hun gezin. In deze tutorial nemen we een bestaande Health Plan Selector-app in <a href="https://www.microsoft.com/en-us/power-platform/products/power-apps" target="_blank" rel="nofollow noopener">Power Apps</a> en verrijken we deze met mogelijkheden voor geautomatiseerde documentgeneratie, met <a href="https://www.docugenerate.com/">DocuGenerate</a> en <a href="https://www.microsoft.com/en-us/power-platform/products/power-automate" target="_blank" rel="nofollow noopener">Power Automate</a>.</p> <p>De Health Plan Selector is een voorbeeldapplicatie die nieuwe werknemers helpt bij het verkennen van de zorgplannen van het bedrijf via een reeks begeleide vragen. Op basis van de antwoorden beveelt de app het meest geschikte plan aan. De originele app verstuurt de plandetails echter simpelweg via de standaard e-mailclient van de gebruiker. We vervangen deze basale functionaliteit door een geautomatiseerde workflow die een professioneel PDF-voorstel genereert en dit rechtstreeks aflevert in de inbox van de werknemer, zonder dat handmatig een e-mail hoeft te worden opgesteld.</p> <p>Deze aanpak creëert een betere ervaring voor zowel HR-teams als nieuwe werknemers. De geautomatiseerde workflow zorgt voor consistentie in hoe planinformatie wordt gepresenteerd, creëert een formeel document dat werknemers op hun gemak kunnen bekijken en met familieleden kunnen bespreken, en elimineert de handmatige stappen bij het opstellen en versturen van deze communicatie. Gedurende deze gids doorlopen we elke stap van de integratie, van het begrijpen van de bestaande app-structuur tot het creëren van een complete workflow voor documentgeneratie.</p> <h2 id="beginnen-met-de-health-plan-selector-sjabloon">Beginnen met de Health Plan Selector-Sjabloon</h2> <p>Power Apps biedt een verscheidenheid aan kant-en-klare sjablonen die uitstekende startpunten vormen voor het bouwen van bedrijfsapplicaties. Voor deze tutorial gebruiken we de Health Plan Selector-sjabloon, die veel belangrijke Power Apps-concepten demonstreert, waaronder validatie van gebruikersinvoer, voorwaardelijke logica, navigatie tussen meerdere schermen, en gegevensverzameling.</p> <p>Om te beginnen, opent u Power Apps en klikt u op <strong>Start with an app template</strong>. Met deze optie kunt u kiezen uit een lijst met volledig functionele bedrijfsapp-sjablonen die u zo kunt gebruiken of kunt aanpassen aan uw specifieke behoeften. Blader door de beschikbare sjablonen totdat u de Health Plan Selector-app vindt. Deze voorbeeldapp is specifiek ontworpen voor onboardingscenario’s van nieuwe werknemers, en helpt gebruikers bij het verkennen van de zorgplannen van het bedrijf en het ontdekken welke optie het beste werkt voor hen en hun gezin.</p> <p><img src="https://www.docugenerate.com/assets/posts/028-power-apps-health-plan/start-with-a-template.png" alt="Beginnen met de Health Plan Selector-sjabloon"/></p> <p>Zodra u dit sjabloon selecteert, maakt Power Apps een nieuwe app in uw omgeving op basis van de sjabloonstructuur. De app bevat alle schermen, besturingselementen, gegevensverzamelingen, en logica die nodig zijn voor de workflow voor het selecteren van een zorgplan. U kunt elk aspect van de app verkennen en aanpassen om deze af te stemmen op het specifieke zorgplanaanbod en de merkrichtlijnen van uw organisatie.</p> <h2 id="de-voorbeeldapp-begrijpen">De Voorbeeldapp Begrijpen</h2> <p>De Health Plan Selector-app begeleidt gebruikers door een vragenlijst met meerdere stappen om het meest geschikte zorgplan te bepalen. De app vraagt naar dekkingsbehoeften (individueel, gezin, enz.), gewenste diensten (huisartsenzorg, tandheelkundige zorg, oogzorg, specialisten), budgetvoorkeuren (basis of premium), en andere factoren die de planselectie beïnvloeden. Op basis van deze invoer beveelt de app specifieke plannen aan en toont gedetailleerde informatie, waaronder maandelijkse premies, dekkingslimieten, en eigen bijdragen.</p> <p><img src="https://www.docugenerate.com/assets/posts/028-power-apps-health-plan/health-plan-app-demo.gif" alt="Demo van de workflow van de Health Plan Selector-app"/></p> <p>De app is gebouwd met meerdere schermen die verschillende fasen van het selectieproces vertegenwoordigen. Na het maken van de app op basis van het sjabloon, kunt u alle schermen bekijken in het paneel <strong>Tree view</strong>, dat schermen toont zoals <code class="language-plaintext highlighter-rouge">HomeScreen</code>, <code class="language-plaintext highlighter-rouge">Step1_Screen</code>, <code class="language-plaintext highlighter-rouge">Step2_Screen</code>, <code class="language-plaintext highlighter-rouge">Step3_Screen</code>, <code class="language-plaintext highlighter-rouge">Step4_Screen</code>, <code class="language-plaintext highlighter-rouge">Recommendation_Screen</code>, <code class="language-plaintext highlighter-rouge">ViewOptions_Screen</code>, en <code class="language-plaintext highlighter-rouge">Share_Screen</code>.</p> <p><img src="https://www.docugenerate.com/assets/posts/028-power-apps-health-plan/health-plan-app-screens-v2.png" alt="App-schermen in de Tree view"/></p> <p>Elk scherm bevat verschillende besturingselementen, zoals tekstinvoervelden, keuzerondjes, selectievakjes, galerijen, en knoppen die samenwerken om gebruikersvoorkeuren te verzamelen en aanbevelingen weer te geven.</p> <h2 id="de-logica-van-de-send-knop-onderzoeken">De Logica van de Send-Knop Onderzoeken</h2> <p>Voor deze tutorial richten we ons specifiek op <code class="language-plaintext highlighter-rouge">Share_Screen</code>, waar gebruikers hun definitieve planaanbeveling zien en de optie hebben om de details naar hun e-mailadres te versturen. Dit is het scherm dat we aanpassen om mogelijkheden voor documentgeneratie te integreren, in plaats van de basale e-mailfunctionaliteit die momenteel bestaat.</p> <p><code class="language-plaintext highlighter-rouge">Share_Screen</code> bevat een knop <strong>SEND</strong> die momenteel een <code class="language-plaintext highlighter-rouge">mailto</code>-link activeert om een e-mail met de plandetails op te stellen. Om te begrijpen wat we moeten vervangen, bekijken we eerst de bestaande logica van de knop. Wanneer u de knop <strong>SEND</strong> selecteert in de app-designer, kunt u de bijbehorende code bekijken in de formulebalk.</p> <p><img src="https://www.docugenerate.com/assets/posts/028-power-apps-health-plan/share-screen-send-button-v2.png" alt="Code van de Send-knop in Share_Screen"/></p> <p>De code gebruikt de functie <code class="language-plaintext highlighter-rouge">Launch</code> om de standaard e-mailclient van de gebruiker te openen met vooraf ingevulde onderwerp- en berichtinhoud. Deze aanpak heeft verschillende beperkingen. Het vereist dat de gebruiker een standaard e-mailclient heeft geconfigureerd, het opent de e-mail als concept waardoor de gebruiker handmatig op verzenden moet klikken, en de opmaak is beperkt tot platte tekst met URL-gecodeerde regeleinden.</p> <p>De code voert ook gegevensverzamelingsbewerkingen uit om de antwoorden van de gebruiker op te slaan in een verzameling genaamd <code class="language-plaintext highlighter-rouge">ResponsesCollect</code>. Dit is de volledige code van de originele knop <strong>SEND</strong>:</p> <div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nc">If</span><span class="p">(</span><span class="o">!</span><span class="nc">IsBlank</span><span class="p">(</span><span class="nx">TextInput1_1</span><span class="p">.</span><span class="nx">Text</span><span class="p">);</span><span class="nc">Collect</span><span class="p">(</span><span class="nx">ResponsesCollect</span><span class="p">;{</span><span class="na">QuestionId</span><span class="p">:</span><span class="dl">"</span><span class="s2">1</span><span class="dl">"</span><span class="p">;</span><span class="nl">ResponseId</span><span class="p">:</span><span class="nc">Text</span><span class="p">(</span><span class="nc">CountRows</span><span class="p">(</span><span class="nx">ResponsesCollect</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">);</span><span class="nl">Response</span><span class="p">:</span><span class="nx">Radio1</span><span class="p">.</span><span class="nx">SelectedText</span><span class="p">.</span><span class="nx">OptionText</span><span class="p">});;</span>

<span class="nc">If</span><span class="p">(</span><span class="nc">CountRows</span><span class="p">(</span><span class="nx">BasicCollect</span><span class="p">)</span><span class="o">&gt;=</span><span class="mi">1</span><span class="p">;</span><span class="nc">Collect</span><span class="p">(</span><span class="nx">ResponsesCollect</span><span class="p">;{</span><span class="na">QuestionId</span><span class="p">:</span><span class="dl">"</span><span class="s2">2</span><span class="dl">"</span><span class="p">;</span><span class="nl">ResponseId</span><span class="p">:</span><span class="nc">Text</span><span class="p">(</span><span class="nc">CountRows</span><span class="p">(</span><span class="nx">ResponsesCollect</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">);</span><span class="nl">Response</span><span class="p">:</span><span class="nc">Text</span><span class="p">(</span><span class="nc">Last</span><span class="p">(</span><span class="nc">FirstN</span><span class="p">(</span><span class="nx">BasicCollect</span><span class="p">;</span><span class="mi">1</span><span class="p">)).</span><span class="nx">OptionText</span><span class="p">)}));;</span>

<span class="nc">If</span><span class="p">(</span><span class="nc">CountRows</span><span class="p">(</span><span class="nx">BasicCollect</span><span class="p">)</span><span class="o">&gt;=</span><span class="mi">2</span><span class="p">;</span><span class="nc">Collect</span><span class="p">(</span><span class="nx">ResponsesCollect</span><span class="p">;{</span><span class="na">QuestionId</span><span class="p">:</span><span class="dl">"</span><span class="s2">2</span><span class="dl">"</span><span class="p">;</span><span class="nl">ResponseId</span><span class="p">:</span><span class="nc">Text</span><span class="p">(</span><span class="nc">CountRows</span><span class="p">(</span><span class="nx">ResponsesCollect</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">);</span><span class="nl">Response</span><span class="p">:</span><span class="nc">Text</span><span class="p">(</span><span class="nc">Last</span><span class="p">(</span><span class="nc">FirstN</span><span class="p">(</span><span class="nx">BasicCollect</span><span class="p">;</span><span class="mi">2</span><span class="p">)).</span><span class="nx">OptionText</span><span class="p">)}));;</span>

<span class="nc">If</span><span class="p">(</span><span class="nc">CountRows</span><span class="p">(</span><span class="nx">BasicCollect</span><span class="p">)</span><span class="o">&gt;=</span><span class="mi">3</span><span class="p">;</span><span class="nc">Collect</span><span class="p">(</span><span class="nx">ResponsesCollect</span><span class="p">;{</span><span class="na">QuestionId</span><span class="p">:</span><span class="dl">"</span><span class="s2">3</span><span class="dl">"</span><span class="p">;</span><span class="nl">ResponseId</span><span class="p">:</span><span class="nc">Text</span><span class="p">(</span><span class="nc">CountRows</span><span class="p">(</span><span class="nx">ResponsesCollect</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">);</span><span class="nl">Response</span><span class="p">:</span><span class="nc">Text</span><span class="p">(</span><span class="nc">Last</span><span class="p">(</span><span class="nc">FirstN</span><span class="p">(</span><span class="nx">BasicCollect</span><span class="p">;</span><span class="mi">3</span><span class="p">)).</span><span class="nx">OptionText</span><span class="p">)}));;</span><span class="nc">If</span><span class="p">(</span><span class="nc">CountRows</span><span class="p">(</span><span class="nx">BasicCollect</span><span class="p">)</span><span class="o">&gt;=</span><span class="mi">4</span><span class="p">;</span><span class="nc">Collect</span><span class="p">(</span><span class="nx">ResponsesCollect</span><span class="p">;{</span><span class="na">QuestionId</span><span class="p">:</span><span class="dl">"</span><span class="s2">4</span><span class="dl">"</span><span class="p">;</span><span class="nl">ResponseId</span><span class="p">:</span><span class="nc">Text</span><span class="p">(</span><span class="nc">CountRows</span><span class="p">(</span><span class="nx">ResponsesCollect</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">);</span><span class="nl">Response</span><span class="p">:</span><span class="nc">Text</span><span class="p">(</span><span class="nc">Last</span><span class="p">(</span><span class="nc">FirstN</span><span class="p">(</span><span class="nx">BasicCollect</span><span class="p">;</span><span class="mi">4</span><span class="p">)).</span><span class="nx">OptionText</span><span class="p">)}));;</span>

<span class="nc">If</span><span class="p">(</span><span class="nc">CountRows</span><span class="p">(</span><span class="nx">BasicCollect</span><span class="p">)</span><span class="o">&gt;=</span><span class="mi">5</span><span class="p">;</span><span class="nc">Collect</span><span class="p">(</span><span class="nx">ResponsesCollect</span><span class="p">;{</span><span class="na">QuestionId</span><span class="p">:</span><span class="dl">"</span><span class="s2">2</span><span class="dl">"</span><span class="p">;</span><span class="nl">ResponseId</span><span class="p">:</span><span class="nc">Text</span><span class="p">(</span><span class="nc">CountRows</span><span class="p">(</span><span class="nx">ResponsesCollect</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">);</span><span class="nl">Response</span><span class="p">:</span><span class="nc">Text</span><span class="p">(</span><span class="nc">Last</span><span class="p">(</span><span class="nc">FirstN</span><span class="p">(</span><span class="nx">BasicCollect</span><span class="p">;</span><span class="mi">5</span><span class="p">)).</span><span class="nx">OptionText</span><span class="p">)}));;</span>

<span class="nc">If</span><span class="p">(</span><span class="nc">CountRows</span><span class="p">(</span><span class="nx">AddONCollect</span><span class="p">)</span><span class="o">&gt;=</span><span class="mi">1</span><span class="p">;</span><span class="nc">Collect</span><span class="p">(</span><span class="nx">ResponsesCollect</span><span class="p">;{</span><span class="na">QuestionId</span><span class="p">:</span><span class="dl">"</span><span class="s2">2</span><span class="dl">"</span><span class="p">;</span><span class="nl">ResponseId</span><span class="p">:</span><span class="nc">Text</span><span class="p">(</span><span class="nc">CountRows</span><span class="p">(</span><span class="nx">ResponsesCollect</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">);</span><span class="nl">Response</span><span class="p">:</span><span class="nc">Text</span><span class="p">(</span><span class="nc">Last</span><span class="p">(</span><span class="nc">FirstN</span><span class="p">(</span><span class="nx">AddONCollect</span><span class="p">;</span><span class="mi">1</span><span class="p">)).</span><span class="nx">OptionText</span><span class="p">)}));;</span><span class="nc">If</span><span class="p">(</span><span class="nc">CountRows</span><span class="p">(</span><span class="nx">AddONCollect</span><span class="p">)</span><span class="o">&gt;=</span><span class="mi">2</span><span class="p">;</span><span class="nc">Collect</span><span class="p">(</span><span class="nx">ResponsesCollect</span><span class="p">;{</span><span class="na">QuestionId</span><span class="p">:</span><span class="dl">"</span><span class="s2">2</span><span class="dl">"</span><span class="p">;</span><span class="nl">ResponseId</span><span class="p">:</span><span class="nc">Text</span><span class="p">(</span><span class="nc">CountRows</span><span class="p">(</span><span class="nx">ResponsesCollect</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">);</span><span class="nl">Response</span><span class="p">:</span><span class="nc">Text</span><span class="p">(</span><span class="nc">Last</span><span class="p">(</span><span class="nc">FirstN</span><span class="p">(</span><span class="nx">AddONCollect</span><span class="p">;</span><span class="mi">2</span><span class="p">)).</span><span class="nx">OptionText</span><span class="p">)}));;</span>

<span class="nc">If</span><span class="p">(</span><span class="nc">CountRows</span><span class="p">(</span><span class="nx">AddONCollect</span><span class="p">)</span><span class="o">&gt;=</span><span class="mi">3</span><span class="p">;</span><span class="nc">Collect</span><span class="p">(</span><span class="nx">ResponsesCollect</span><span class="p">;{</span><span class="na">QuestionId</span><span class="p">:</span><span class="dl">"</span><span class="s2">2</span><span class="dl">"</span><span class="p">;</span><span class="nl">ResponseId</span><span class="p">:</span><span class="nc">Text</span><span class="p">(</span><span class="nc">CountRows</span><span class="p">(</span><span class="nx">ResponsesCollect</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">);</span><span class="nl">Response</span><span class="p">:</span><span class="nc">Text</span><span class="p">(</span><span class="nc">Last</span><span class="p">(</span><span class="nc">FirstN</span><span class="p">(</span><span class="nx">AddONCollect</span><span class="p">;</span><span class="mi">3</span><span class="p">)).</span><span class="nx">OptionText</span><span class="p">)}));;</span>

<span class="nc">If</span><span class="p">(</span><span class="nc">CountRows</span><span class="p">(</span><span class="nx">AddONCollect</span><span class="p">)</span><span class="o">&gt;=</span><span class="mi">4</span><span class="p">;</span><span class="nc">Collect</span><span class="p">(</span><span class="nx">ResponsesCollect</span><span class="p">;{</span><span class="na">QuestionId</span><span class="p">:</span><span class="dl">"</span><span class="s2">2</span><span class="dl">"</span><span class="p">;</span><span class="nl">ResponseId</span><span class="p">:</span><span class="nc">Text</span><span class="p">(</span><span class="nc">CountRows</span><span class="p">(</span><span class="nx">ResponsesCollect</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">);</span><span class="nl">Response</span><span class="p">:</span><span class="nc">Text</span><span class="p">(</span><span class="nc">Last</span><span class="p">(</span><span class="nc">FirstN</span><span class="p">(</span><span class="nx">AddONCollect</span><span class="p">;</span><span class="mi">4</span><span class="p">)).</span><span class="nx">OptionText</span><span class="p">)}));;</span>

<span class="nc">If</span><span class="p">(</span><span class="nc">CountRows</span><span class="p">(</span><span class="nx">AddONCollect</span><span class="p">)</span><span class="o">&gt;=</span><span class="mi">5</span><span class="p">;</span><span class="nc">Collect</span><span class="p">(</span><span class="nx">ResponsesCollect</span><span class="p">;{</span><span class="na">QuestionId</span><span class="p">:</span><span class="dl">"</span><span class="s2">2</span><span class="dl">"</span><span class="p">;</span><span class="nl">ResponseId</span><span class="p">:</span><span class="nc">Text</span><span class="p">(</span><span class="nc">CountRows</span><span class="p">(</span><span class="nx">ResponsesCollect</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">);</span><span class="nl">Response</span><span class="p">:</span><span class="nc">Text</span><span class="p">(</span><span class="nc">Last</span><span class="p">(</span><span class="nc">FirstN</span><span class="p">(</span><span class="nx">AddONCollect</span><span class="p">;</span><span class="mi">5</span><span class="p">)).</span><span class="nx">OptionText</span><span class="p">)}));;</span>

<span class="nc">If</span><span class="p">(</span><span class="nc">CountRows</span><span class="p">(</span><span class="nx">AddONCollect</span><span class="p">)</span><span class="o">&gt;=</span><span class="mi">6</span><span class="p">;</span><span class="nc">Collect</span><span class="p">(</span><span class="nx">ResponsesCollect</span><span class="p">;{</span><span class="na">QuestionId</span><span class="p">:</span><span class="dl">"</span><span class="s2">2</span><span class="dl">"</span><span class="p">;</span><span class="nl">ResponseId</span><span class="p">:</span><span class="nc">Text</span><span class="p">(</span><span class="nc">CountRows</span><span class="p">(</span><span class="nx">ResponsesCollect</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">);</span><span class="nl">Response</span><span class="p">:</span><span class="nc">Text</span><span class="p">(</span><span class="nc">Last</span><span class="p">(</span><span class="nc">FirstN</span><span class="p">(</span><span class="nx">AddONCollect</span><span class="p">;</span><span class="mi">6</span><span class="p">)).</span><span class="nx">OptionText</span><span class="p">)}));;</span>

<span class="nc">Collect</span><span class="p">(</span><span class="nx">ResponsesCollect</span><span class="p">;{</span><span class="na">QuestionId</span><span class="p">:</span><span class="dl">"</span><span class="s2">3</span><span class="dl">"</span><span class="p">;</span><span class="nl">ResponseId</span><span class="p">:</span><span class="nc">Text</span><span class="p">(</span><span class="nc">CountRows</span><span class="p">(</span><span class="nx">ResponsesCollect</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">);</span><span class="nl">Response</span><span class="p">:</span><span class="nx">Radio1_2</span><span class="p">.</span><span class="nx">SelectedText</span><span class="p">.</span><span class="nx">OptionText</span><span class="p">});;</span>

<span class="nc">Collect</span><span class="p">(</span><span class="nx">ResponsesCollect</span><span class="p">;{</span><span class="na">QuestionId</span><span class="p">:</span><span class="dl">"</span><span class="s2">4</span><span class="dl">"</span><span class="p">;</span><span class="nl">ResponseId</span><span class="p">:</span><span class="nc">Text</span><span class="p">(</span><span class="nc">CountRows</span><span class="p">(</span><span class="nx">ResponsesCollect</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">);</span><span class="nl">Response</span><span class="p">:</span><span class="nx">Radio1_3</span><span class="p">.</span><span class="nx">SelectedText</span><span class="p">.</span><span class="nx">OptionText</span><span class="p">});;</span>

<span class="nc">Launch</span><span class="p">(</span><span class="dl">"</span><span class="s2">mailto:</span><span class="dl">"</span><span class="o">&amp;</span><span class="nx">TextInput1_1</span><span class="p">.</span><span class="nx">Text</span><span class="o">&amp;</span><span class="dl">"</span><span class="s2">?subject=</span><span class="dl">"</span><span class="o">&amp;</span><span class="nx">TextBox1_16</span><span class="p">.</span><span class="nx">Text</span><span class="o">&amp;</span><span class="dl">"</span><span class="s2"> &amp;body=Plan Details:</span><span class="dl">"</span> <span class="o">&amp;</span><span class="nx">TextBox1_16</span><span class="p">.</span><span class="nx">Text</span><span class="o">&amp;</span> <span class="dl">"</span><span class="s2">%0D%0A</span><span class="dl">"</span> <span class="o">&amp;</span> <span class="nx">TextBox3_5</span><span class="p">.</span><span class="nx">Text</span> <span class="o">&amp;</span> <span class="dl">"</span><span class="s2">%0D%0A</span><span class="dl">"</span> <span class="o">&amp;</span><span class="nx">TextBox3_6</span><span class="p">.</span><span class="nx">Text</span> <span class="o">&amp;</span> <span class="dl">"</span><span class="s2">%0D%0A</span><span class="dl">"</span> <span class="o">&amp;</span> <span class="nx">TextBox3_7</span><span class="p">.</span><span class="nx">Text</span> <span class="o">&amp;</span> <span class="dl">"</span><span class="s2">%0D%0A</span><span class="dl">"</span> <span class="o">&amp;</span><span class="nx">TextBox3_8</span><span class="p">.</span><span class="nx">Text</span><span class="o">&amp;</span> <span class="dl">"</span><span class="s2">%0D%0A</span><span class="dl">"</span> <span class="o">&amp;</span> <span class="nc">EncodeUrl</span><span class="p">(</span><span class="nx">TextBox3_9</span><span class="p">.</span><span class="nx">Text</span><span class="p">)</span> <span class="o">&amp;</span> <span class="dl">"</span><span class="s2">%0D%0A</span><span class="dl">"</span> <span class="o">&amp;</span> <span class="nc">EncodeUrl</span><span class="p">(</span><span class="nx">TextBox3_11</span><span class="p">.</span><span class="nx">Text</span><span class="p">));;</span>

<span class="nc">Navigate</span><span class="p">(</span><span class="nx">Screen1</span><span class="p">;</span><span class="nx">ScreenTransition</span><span class="p">.</span><span class="nx">Fade</span><span class="p">);</span><span class="nc">UpdateContext</span><span class="p">({</span><span class="na">emailreset</span><span class="p">:</span><span class="kc">true</span><span class="p">}));;</span>
</code></pre></div></div> <p>Deze code verzamelt antwoordgegevens uit verschillende formulierbesturingselementen en verzamelingen, en bouwt vervolgens een <code class="language-plaintext highlighter-rouge">mailto</code>-URL met het e-mailadres uit <code class="language-plaintext highlighter-rouge">TextInput1_1.Text</code>, de plannaam uit <code class="language-plaintext highlighter-rouge">TextBox1_16.Text</code> als onderwerp, en verschillende andere tekstvakwaarden samengevoegd in het bericht. We vervangen de aanroep van de functie <code class="language-plaintext highlighter-rouge">Launch</code> door een aanroep naar een Power Automate-flow die documentgeneratie en e-mailbezorging afhandelt.</p> <h2 id="de-knop-aanpassen-om-power-automate-aan-te-roepen">De Knop Aanpassen om Power Automate Aan te Roepen</h2> <p>In plaats van de e-mailclient te openen, passen we de knop <strong>SEND</strong> aan om een Power Automate-flow te activeren. Deze flow ontvangt de plandetails, genereert een professioneel PDF-document met DocuGenerate, en verstuurt dit per e-mail. Vervang de volledige aanroep van de functie <code class="language-plaintext highlighter-rouge">Launch</code> door de volgende code:</p> <div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code>
<span class="nx">SendEmailWithDocument</span><span class="p">.</span><span class="nc">Run</span><span class="p">(</span><span class="nx">TextInput1_1</span><span class="p">.</span><span class="nx">Text</span><span class="p">;</span> <span class="nx">TextBox1_16</span><span class="p">.</span><span class="nx">Text</span><span class="p">;</span> <span class="nx">TextBox3_5</span><span class="p">.</span><span class="nx">Text</span><span class="p">;</span> <span class="nx">TextBox3_6</span><span class="p">.</span><span class="nx">Text</span><span class="p">;</span> <span class="nx">TextBox3_7</span><span class="p">.</span><span class="nx">Text</span><span class="p">;</span> <span class="nx">TextBox3_8</span><span class="p">.</span><span class="nx">Text</span><span class="p">;</span> <span class="nx">TextBox3_9</span><span class="p">.</span><span class="nx">Text</span><span class="p">;</span> <span class="nx">TextBox3_11</span><span class="p">.</span><span class="nx">Text</span><span class="p">;</span> <span class="nc">User</span><span class="p">().</span><span class="nx">FullName</span><span class="p">);;</span>

</code></pre></div></div> <p><img src="https://www.docugenerate.com/assets/posts/028-power-apps-health-plan/share-screen-send-button-call-flow.png" alt="Bijgewerkte code van de knop die de flow SendEmailWithDocument aanroept"/></p> <p>Deze aangepaste code roept een Power Automate-flow aan genaamd <code class="language-plaintext highlighter-rouge">SendEmailWithDocument</code> en geeft negen parameters door: het e-mailadres, de plannaam, dekkingsdetails, prijs per maand, prijs per individu, limiet voor eigen bijdrage, coassurantiepercentage, aanvullende diensten, en de volledige naam van de huidige gebruiker.</p> <p>De functie <code class="language-plaintext highlighter-rouge">User().FullName</code> haalt de naam van de geauthenticeerde gebruiker op uit Azure Active Directory, die we kunnen opnemen in het gepersonaliseerde document. Deze parameters komen overeen met de data die wordt weergegeven op <code class="language-plaintext highlighter-rouge">Share_Screen</code> en vertegenwoordigen de informatie die we willen opnemen in het gegenereerde voorsteldocument.</p> <p>U zult merken dat Power Apps deze flowreferentie aanvankelijk rood weergeeft, omdat de flow nog niet bestaat. We maken de flow in de <a href="#de-power-automate-flow-maken">volgende sectie</a>, en zodra deze is gekoppeld aan de app, wordt de referentie correct opgelost.</p> <h2 id="de-power-automate-flow-maken">De Power Automate-Flow Maken</h2> <p>Nu maken we de Power Automate-flow die documentgeneratie en e-mailbezorging afhandelt. Navigeer in Power Apps naar de sectie <strong>Power Automate</strong> in het linkermenu en klik op <strong>Create a new flow</strong>. Selecteer <strong>Create from blank</strong> om te beginnen met een leeg flowcanvas.</p> <p><img src="https://www.docugenerate.com/assets/posts/028-power-apps-health-plan/create-flow-from-blank-v2.png" alt="Een nieuwe flow maken vanaf blanco" class="desktop-width-75"/></p> <p>Geef uw flow de naam <code class="language-plaintext highlighter-rouge">SendEmailWithDocument</code>, overeenkomend met de flownaam die we hebben gebruikt in de knopcode. De eerste stap in elke door Power Apps geactiveerde flow is de trigger <strong>Power Apps (V2)</strong>, die de parameters definieert die de app doorgeeft aan de flow.</p> <p><img src="https://www.docugenerate.com/assets/posts/028-power-apps-health-plan/power-apps-input-parameters.png" alt="Configuratie van de invoerparameters van Power Automate"/></p> <p>Klik op <strong>Add an input</strong> voor elke parameter die u vanuit Power Apps moet ontvangen. De parametertypes moeten overeenkomen met de doorgegeven data (in dit geval allemaal tekst). De onderstaande tabel toont hoe elke flowparameter overeenkomt met het bijbehorende UI-element:</p> <table class="table table-bordered"> <thead> <tr> <th>Flow Parameter</th> <th>UI Element</th> <th>Beschrijving</th> </tr> </thead> <tbody> <tr> <td><code class="language-plaintext highlighter-rouge">Email</code></td> <td><code class="language-plaintext highlighter-rouge">TextInput1_1.Text</code></td> <td>E-mailadres van de ontvanger</td> </tr> <tr> <td><code class="language-plaintext highlighter-rouge">Plan_Name</code></td> <td><code class="language-plaintext highlighter-rouge">TextBox1_16.Text</code></td> <td>Naam van het aanbevolen zorgplan</td> </tr> <tr> <td><code class="language-plaintext highlighter-rouge">Coverage</code></td> <td><code class="language-plaintext highlighter-rouge">TextBox3_5.Text</code></td> <td>Beschrijving van het dekkingsniveau</td> </tr> <tr> <td><code class="language-plaintext highlighter-rouge">Price_Per_Month</code></td> <td><code class="language-plaintext highlighter-rouge">TextBox3_6.Text</code></td> <td>Bedrag van de maandelijkse premie</td> </tr> <tr> <td><code class="language-plaintext highlighter-rouge">Price_Per_Individual</code></td> <td><code class="language-plaintext highlighter-rouge">TextBox3_7.Text</code></td> <td>Kosten voor individuele dekking</td> </tr> <tr> <td><code class="language-plaintext highlighter-rouge">Out_Of_Pocket_Limit</code></td> <td><code class="language-plaintext highlighter-rouge">TextBox3_8.Text</code></td> <td>Maximale eigen bijdrage</td> </tr> <tr> <td><code class="language-plaintext highlighter-rouge">Coinsurance_Percentage</code></td> <td><code class="language-plaintext highlighter-rouge">TextBox3_9.Text</code></td> <td>Coassurantiepercentage</td> </tr> <tr> <td><code class="language-plaintext highlighter-rouge">Additional_Services</code></td> <td><code class="language-plaintext highlighter-rouge">TextBox3_11.Text</code></td> <td>Lijst van aanvullend gedekte diensten</td> </tr> <tr> <td><code class="language-plaintext highlighter-rouge">Name</code></td> <td><code class="language-plaintext highlighter-rouge">User().FullName</code></td> <td>Naam van de werknemer uit Azure Active Directory</td> </tr> </tbody> </table> <p><br/></p> <h2 id="de-docugenerate-sjabloon-voorbereiden">De DocuGenerate-Sjabloon Voorbereiden</h2> <p>Voordat we de stap voor documentgeneratie aan onze flow toevoegen, moeten we een Word-sjabloon maken in DocuGenerate die de structuur en opmaak van ons zorgplanvoorstel definieert. Het sjabloon gebruikt <a href="https://www.docugenerate.com/nl/hulp/articles/wat-zijn-merge-tags/">merge-tags</a> die overeenkomen met de parameternamen die we hebben gedefinieerd in Power Automate, en die worden vervangen door de daadwerkelijke waarden uit de flow.</p> <p>Het Word-document bevat bedrijfsbranding, een duidelijke header, secties voor plandetails, en aanvullende informatie die op elk voorstel moet verschijnen. Het bevat merge-tags voor alle negen parameters: <code class="language-plaintext highlighter-rouge">[Name]</code>, <code class="language-plaintext highlighter-rouge">[Email]</code>, <code class="language-plaintext highlighter-rouge">[Plan_Name]</code>, <code class="language-plaintext highlighter-rouge">[Coverage]</code>, <code class="language-plaintext highlighter-rouge">[Price_Per_Month]</code>, <code class="language-plaintext highlighter-rouge">[Price_Per_Individual]</code>, <code class="language-plaintext highlighter-rouge">[Out_Of_Pocket_Limit]</code>, <code class="language-plaintext highlighter-rouge">[Coinsurance_Percentage]</code>, en <code class="language-plaintext highlighter-rouge">[Additional_Services]</code>.</p> <p><img src="https://www.docugenerate.com/assets/posts/028-power-apps-health-plan/docugenerate-template.png" alt="Health Plan Proposal-sjabloon met merge-tags"/></p> <p>Zodra uw sjabloon klaar is, <a href="https://www.docugenerate.com/nl/hulp/articles/hoe-maak-ik-een-nieuw-sjabloon-aan/">uploadt u het</a> naar uw DocuGenerate-account en geeft u het de naam <strong>Health Plan Proposal</strong>. U kunt een kopie van het sjabloon dat in deze tutorial wordt gebruikt <a href="https://www.docugenerate.com/assets/posts/028-power-apps-health-plan/Health Plan Proposal.docx">hier</a> downloaden.</p> <h2 id="de-stap-voor-documentgeneratie-toevoegen">De Stap voor Documentgeneratie Toevoegen</h2> <p>Om DocuGenerate te gebruiken vanuit Power Automate, moet u de <a href="https://www.docugenerate.com/nl/hulp/articles/documentgeneratie-automatiseren-met-power-apps/#add-the-custom-connector">aangepaste connector</a> installeren in uw Power Platform-omgeving. De eerste keer dat u deze gebruikt, moet u zich authenticeren met uw DocuGenerate-<a href="https://www.docugenerate.com/nl/hulp/articles/waar-vind-ik-mijn-api-sleutel/">API-sleutel</a>, die u kunt vinden in uw DocuGenerate-accountinstellingen. Dit creëert een verbinding die kan worden hergebruikt in meerdere flows binnen uw omgeving.</p> <p>Nu het sjabloon is gemaakt en de connector beschikbaar is, kunnen we de stap voor documentgeneratie aan onze flow toevoegen. Klik op <strong>New step</strong> in uw flow en zoek naar “DocuGenerate”. Selecteer de actie <strong>Generate Document</strong> uit de lijst met beschikbare bewerkingen.</p> <p><img src="https://www.docugenerate.com/assets/posts/028-power-apps-health-plan/search-docugenerate-app.png" alt="Zoeken naar de DocuGenerate-connector"/></p> <p>Om de actie te configureren, selecteert u uw sjabloon in de vervolgkeuzelijst <strong>Template</strong>. Als u uw sjabloon heeft geüpload met de naam “Health Plan Proposal”, ziet u dit in de lijst. Stel vervolgens de parameter <strong>Name</strong> in om op te geven hoe het gegenereerde document moet heten. Selecteer <code class="language-plaintext highlighter-rouge">.pdf</code> als <strong>Format</strong>, zodat het gegenereerde document wordt afgeleverd als een professionele PDF in plaats van een bewerkbaar Word-bestand.</p> <p><img src="https://www.docugenerate.com/assets/posts/028-power-apps-health-plan/generate-document-step.png" alt="Configuratie van de stap Generate Document"/></p> <p>Voor de parameter <strong>Data</strong> moet u een JSON-object opgeven met alle waarden voor de merge-tags in uw sjabloon. Vervang elke lege tekenreeks door de juiste dynamische content uit de triggerstap. Power Automate toont deze als tokens in de expressie in plaats van letterlijke tekenreeksen.</p> <div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"Name"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span><span class="w">
  </span><span class="nl">"Email"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span><span class="w">
  </span><span class="nl">"Plan_Name"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span><span class="w">
  </span><span class="nl">"Coverage"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span><span class="w">
  </span><span class="nl">"Price_Per_Month"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span><span class="w">
  </span><span class="nl">"Price_Per_Individual"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span><span class="w">
  </span><span class="nl">"Out_Of_Pocket_Limit"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span><span class="w">
  </span><span class="nl">"Coinsurance_Percentage"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span><span class="w">
  </span><span class="nl">"Additional_Services"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div> <h2 id="de-e-mail-met-het-document-versturen">De E-Mail met het Document Versturen</h2> <p>De laatste stap in onze flow stuurt een e-mail naar de werknemer met het gegenereerde PDF-voorstel als bijlage. Voeg een nieuwe stap toe en zoek naar de actie <strong>Send an email notification (V3)</strong>.</p> <p><img src="https://www.docugenerate.com/assets/posts/028-power-apps-health-plan/send-an-email-notification-step.png" alt="Configuratie van de stap Send an email notification"/></p> <p>Configureer de e-mailparameters als volgt. Stel het veld <strong>To</strong> in op de waarde <strong>Email</strong> uit de Power Apps-trigger, wat het adres is dat de werknemer in de app heeft ingevoerd. Gebruik voor <strong>Subject</strong> iets beschrijvends, zoals <code class="language-plaintext highlighter-rouge">Your Personalized Healthcare Plan Proposal</code>. Stel in het veld <strong>Body</strong> een vriendelijk bericht op dat uitlegt wat de bijlage bevat en eventuele vervolgstappen aangeeft die de werknemer moet nemen.</p> <p>De belangrijkste configuratie is de sectie met bijlagen. Hier koppelt u de gegenereerde PDF aan de e-mail. Selecteer voor de parameter <strong>Attachment</strong> de uitvoer <code class="language-plaintext highlighter-rouge">document_uri</code> van de stap <strong>Generate Document</strong>. Selecteer voor de parameter <strong>Attachment File Name</strong> de uitvoer <code class="language-plaintext highlighter-rouge">filename</code> van dezelfde stap. Dit zorgt ervoor dat de e-mail het daadwerkelijke PDF-document met de juiste bestandsnaam bevat.</p> <p>Nu deze laatste stap is geconfigureerd, slaat u uw flow op en test u deze om er zeker van te zijn dat alles correct werkt.</p> <h2 id="de-volledige-integratie-testen">De Volledige Integratie Testen</h2> <p>Nu zowel de Power Apps-app als de Power Automate-flow zijn geconfigureerd, is het tijd om de volledige integratie te testen. Voer de app uit in previewmodus en doorloop het proces voor het selecteren van een zorgplan. Beantwoord de vragen over dekkingsbehoeften, gewenste diensten, en budgetvoorkeuren. Wanneer u het bevestigingsscherm bereikt, voert u uw e-mailadres in en klikt u op de knop <strong>SEND</strong>. Als alles correct is geconfigureerd, activeert de knop de Power Automate-flow, die de PDF genereert en de e-mail verstuurt.</p> <p>Het document bevat alle plandetails met de merge-tags vervangen door daadwerkelijke waarden uit de app, en de opmaak komt overeen met het professionele sjabloonontwerp.</p> <object data="/assets/posts/028-power-apps-health-plan/Health Plan Proposal.pdf" type="application/pdf" class="inline-pdf-blog"></object> <p>Als u problemen ondervindt, controleert u de flowuitvoeringsgeschiedenis in Power Automate om te zien waar het proces mogelijk is mislukt. Veelvoorkomende problemen zijn onder meer onjuiste parameterkoppelingen, of authenticatieproblemen met een van de connectors. De flowuitvoeringsgeschiedenis biedt gedetailleerde informatie over elke stap, inclusief de doorgegeven data en eventuele foutmeldingen die zijn opgetreden.</p> <h2 id="voordelen-van-deze-aanpak">Voordelen van Deze Aanpak</h2> <p>Het vervangen van de basale functionaliteit voor het versturen van e-mails door geautomatiseerde documentgeneratie en e-mailbezorging biedt verschillende voordelen voor zowel HR-teams als werknemers. De geautomatiseerde workflow zorgt voor consistentie in hoe zorgplaninformatie wordt gepresenteerd aan alle werknemers, waardoor variaties worden geëlimineerd die kunnen ontstaan wanneer individuen handmatig e-mails opstellen. De gegenereerde PDF dient als formeel document dat werknemers kunnen opslaan, afdrukken, en raadplegen gedurende de inschrijvingsperiode, waardoor het eenvoudiger wordt om opties te vergelijken of plannen met familieleden te bespreken.</p> <p>Vanuit operationeel oogpunt vermindert deze integratie de handmatige inspanning die van HR-medewerkers wordt gevraagd. In plaats van werknemers individueel te helpen bij het opstellen van e-mails of het voorbereiden van plansamenvattingen, verzorgt het systeem dit automatisch op basis van de aanbevelingen die door de app worden gegenereerd. Dit maakt HR-tijd vrij voor waardevollere activiteiten, zoals het beantwoorden van specifieke vragen of het helpen van werknemers bij complexe situaties.</p> <p>De aanpak creëert ook betere documentatie voor compliancedoeleinden. Elk gegenereerd voorstel is een record van welke informatie aan de werknemer is verstrekt, wat belangrijk kan zijn voor wettelijke naleving of als er later vragen rijzen over wat er tijdens het inschrijvingsproces is gecommuniceerd. U zou de workflow verder kunnen uitbreiden door een stap toe te voegen die elk gegenereerd voorstel opslaat in SharePoint of een ander documentbeheersysteem voor gecentraliseerde archivering.</p> <h2 id="conclusie">Conclusie</h2> <p>Het verrijken van Power Apps-applicaties met mogelijkheden voor geautomatiseerde documentgeneratie toont de kracht van het Microsoft Power Platform-ecosysteem in combinatie met gespecialiseerde diensten zoals DocuGenerate. De integratie die we hebben gebouwd, transformeert een eenvoudige app voor het selecteren van zorgplannen in een complete onboardingoplossing die werknemers begeleidt bij de planselectie en automatisch professionele voorsteldocumenten aflevert.</p> <p>Deze tutorial richtte zich op zorgplanvoorstellen, maar hetzelfde integratiepatroon kan worden toegepast op veel andere Power Apps-scenario’s. Telkens wanneer uw app data verzamelt die moet worden opgemaakt als een formeel document en afgeleverd bij gebruikers of opgeslagen voor archivering, kan deze aanpak van het gebruiken van Power Automate om documentgeneratie en distributie te orkestreren aanzienlijke waarde toevoegen. Of u nu arbeidsovereenkomsten, aanbiedingsbrieven, trainingscertificaten, of aangepaste rapporten genereert, de combinatie van Power Apps voor gegevensverzameling, Power Automate voor workfloworkestratie, en DocuGenerate voor documentgeneratie biedt een krachtige en flexibele oplossing.</p> <p>De no-code aard van deze integratie maakt het toegankelijk voor business analisten en power users die mogelijk geen traditionele ontwikkelvaardigheden hebben. Door gebruik te maken van vooraf gebouwde connectors en visuele workflowdesigners, kunt u geavanceerde oplossingen voor documentautomatisering maken zonder aangepaste code te schrijven of complexe infrastructuur te beheren.</p> <h2 id="bronnen">Bronnen</h2> <ul> <li>Het sjabloon <a href="https://www.docugenerate.com/assets/posts/028-power-apps-health-plan/Health Plan Proposal.docx">Health Plan Proposal</a> dat in deze tutorial is gebruikt.</li> <li>De <a href="https://www.docugenerate.com/nl/hulp/articles/documentgeneratie-automatiseren-met-power-apps/">DocuGenerate-gids</a> voor integratie met Power Apps.</li> <li>Officiële <a href="https://learn.microsoft.com/en-us/power-automate/" target="_blank" rel="nofollow noopener">Power Automate-documentatie</a> van Microsoft.</li> <li>Officiële <a href="https://learn.microsoft.com/en-us/power-apps/" target="_blank" rel="nofollow noopener">Power Apps-documentatie</a> van Microsoft.</li> </ul>]]></content> <author> <name>DocuGenerate</name> <email>support@docugenerate.com</email> </author> <category term="Proposals"/> <category term="Power Platform"/> <category term="No-Code"/> <summary type="html"><![CDATA[Deze diepgaande tutorial laat zien hoe u de Health Plan Selector-app in Power Apps verrijkt met geautomatiseerde documentgeneratie met DocuGenerate, om professionele PDF-voorstellen te maken die gepersonaliseerde zorgplanaanbevelingen samenvatten.]]></summary> <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.docugenerate.com/assets/posts/028-power-apps-health-plan/cover-image.png"/> <media:content medium="image" url="https://www.docugenerate.com/assets/posts/028-power-apps-health-plan/cover-image.png" xmlns:media="http://search.yahoo.com/mrss/"/> </entry> <entry> <title type="html">Bouw een CV-Analysator met Pipedream en DocuGenerate</title> <link href="https://www.docugenerate.com/nl/blog/bouw-een-cv-analysator-met-pipedream-en-docugenerate/" rel="alternate" type="text/html" title="Bouw een CV-Analysator met Pipedream en DocuGenerate"/> <published>2025-11-19T00:00:00+00:00</published> <updated>2025-11-19T00:00:00+00:00</updated> <id>https://www.docugenerate.com/nl/blog/bouw-een-cv-analysator-met-pipedream-en-docugenerate</id> <content type="html" xml:base="https://www.docugenerate.com/nl/blog/bouw-een-cv-analysator-met-pipedream-en-docugenerate/"><![CDATA[<h2 id="introductie">Introductie</h2> <p>Cv-screening is een van de meest tijdrovende aspecten van het wervingsproces. HR-teams besteden vaak uren aan het beoordelen van cv’s om belangrijke informatie te extraheren, kandidaten te evalueren, en samenvattingen voor hiring managers voor te bereiden. In deze tutorial bouwen we een geautomatiseerde cv-analysator die dit werk voor u verzorgt, waarbij we de kracht van workflowautomatisering met <a href="https://pipedream.com/" target="_blank" rel="nofollow noopener">Pipedream</a>, intelligente analyse met <a href="https://www.anthropic.com/claude" target="_blank" rel="nofollow noopener">Claude AI</a>, en professionele PDF-generatie met <a href="https://www.docugenerate.com/">DocuGenerate</a> combineren.</p> <p>De workflow werkt automatisch telkens wanneer een nieuw cv wordt toegevoegd aan een Dropbox-map. Deze extraheert de tekst uit het cv, gebruikt Claude om de ervaring en kwalificaties van de kandidaat te analyseren, genereert een gestructureerde samenvatting met belangrijke inzichten, en maakt een professioneel PDF-rapport dat uw wervingsteam onmiddellijk kan beoordelen. Het gehele proces duurt slechts enkele seconden en vereist geen handmatige tussenkomst.</p> <p>Deze aanpak is bijzonder waardevol voor organisaties die snel meerdere cv’s moeten verwerken, terwijl consistentie in de kandidaatevaluatie behouden blijft. Door het analyseformaat te standaardiseren en AI te benutten om inzichten te extraheren, kunt u uw tijd richten op het interviewen van de meest veelbelovende kandidaten in plaats van uren te besteden aan de eerste screening.</p> <h2 id="de-workflow-begrijpen">De Workflow Begrijpen</h2> <p>De volledige workflow bestaat uit zeven verbonden stappen die samenwerken om een ruw cv om te zetten naar een gestructureerd analyserapport. Zo verloopt het proces van begin tot eind:</p> <p><img src="https://www.docugenerate.com/assets/posts/027-pipedream-resume-analyzer/complete-workflow-diagram.png" alt="Diagram van de volledige workflow met alle stappen"/></p> <p>De workflow begint wanneer u een cv uploadt naar een gecontroleerde Dropbox-map. Pipedream detecteert het nieuwe bestand, downloadt het, en extraheert de tekstinhoud uit de PDF. Deze tekst wordt vervolgens naar Claude AI gestuurd met specifieke instructies om het cv te analyseren en belangrijke informatie te extraheren, zoals werkervaring, vaardigheden, opleiding, en opmerkelijke prestaties. Claude retourneert een gestructureerd JSON-antwoord met alle geëxtraheerde data.</p> <p>De JSON-data wordt vervolgens doorgegeven aan DocuGenerate, samen met een vooraf ontworpen sjabloon, om een professionele PDF-samenvatting te genereren. Zodra het document is gemaakt, wordt het automatisch teruggeüpload naar Dropbox in een aangewezen map, waar uw wervingsteam er toegang toe heeft. Het gehele proces wordt in minder dan een minuut voltooid, en u kunt meerdere cv’s tegelijk verwerken door ze simpelweg naar de triggermap te uploaden.</p> <h2 id="het-documentsjabloon-instellen">Het Documentsjabloon Instellen</h2> <p>Voordat we de Pipedream-workflow bouwen, moeten we een sjabloon maken dat onze cv-analyserapporten opmaakt. Het sjabloon gebruikt de <a href="https://www.docugenerate.com/nl/hulp/articles/wat-zijn-merge-tags/">merge-tag</a>-syntax van DocuGenerate om te definiëren waar data uit de analyse van Claude moet verschijnen in het uiteindelijke document. Dit zorgt ervoor dat elke kandidaatsamenvatting een consistent, professioneel formaat volgt.</p> <p><img src="https://www.docugenerate.com/assets/posts/027-pipedream-resume-analyzer/docugenerate-template.png" alt="Screenshot van het cv-samenvattingssjabloon in DocuGenerate"/></p> <p>Het sjabloon bevat secties voor kandidaatinformatie (naam, e-mail, telefoon, locatie), een professionele samenvatting, ervaringsoverzicht, belangrijke vaardigheden, opleiding, sterke punten, interviewaanbevelingen, en een algemene beoordeling met een geschiktheidsscore. Sommige secties, zoals vaardigheden, sterke punten, en aanbevelingen, gebruiken <a href="https://www.docugenerate.com/nl/hulp/articles/lijsten-toevoegen-aan-een-sjabloon/">lijstsyntax</a> om meerdere items uit arrays in de data weer te geven. De sectie met vaardigheden gebruikt bijvoorbeeld <code class="language-plaintext highlighter-rouge">[#skills]</code> om de lus te starten, <code class="language-plaintext highlighter-rouge">[.]</code> om elke vaardigheid als opsommingsteken weer te geven, en <code class="language-plaintext highlighter-rouge">[/skills]</code> om de lus te beëindigen.</p> <p>U kunt <a href="https://www.docugenerate.com/assets/posts/027-pipedream-resume-analyzer/Resume Analysis Summary.docx" target="_blank">het volledige sjabloon downloaden</a> en uploaden naar uw DocuGenerate-account. Noteer na het uploaden de sjabloonnaam of -ID, aangezien u deze informatie nodig heeft bij het configureren van de stap voor documentgeneratie in de workflow. Nu het sjabloon klaar is, kunnen we de Pipedream-workflow bouwen die het volledige analyseproces zal automatiseren.</p> <h2 id="de-dropbox-trigger-configureren">De Dropbox-Trigger Configureren</h2> <p>De workflow begint met een <a href="https://pipedream.com/apps/dropbox/triggers/new-file" target="_blank" rel="nofollow noopener">Dropbox-trigger</a> die een specifieke map controleert op nieuwe bestanden. Deze trigger is het beginpunt dat de gehele automatisering activeert telkens wanneer een cv wordt geüpload. Om deze trigger te configureren, moet u uw Dropbox-account koppelen aan Pipedream en opgeven welke map moet worden gecontroleerd.</p> <p><img src="https://www.docugenerate.com/assets/posts/027-pipedream-resume-analyzer/dropbox-trigger-config.png" alt="Screenshot van de configuratie van de Dropbox-trigger"/></p> <p>Voor deze tutorial controleren we een map genaamd <code class="language-plaintext highlighter-rouge">/Pipedream/Resumes</code>. Wanneer u de trigger test met een voorbeeld-cv, ziet u dat deze metadata over het bestand retourneert, inclusief de bestandsnaam, het pad, de grootte, en wijzigingsdatums. Het is echter belangrijk om op te merken dat de trigger alleen deze metadata biedt en niet de daadwerkelijke bestandsinhoud. Daarom hebben we een aparte stap nodig om het bestand te downloaden, die we configureren in de <a href="#het-cv-bestand-downloaden">volgende sectie</a>.</p> <p>De trigger wordt onmiddellijk geactiveerd wanneer een nieuw bestand wordt gedetecteerd, waardoor de workflow reageert op uw wervingsbehoeften. U kunt de hele dag door cv’s uploaden, en elk cv wordt automatisch verwerkt zonder enige handmatige tussenkomst. Deze realtime verwerking zorgt ervoor dat kandidaatsamenvattingen zo snel mogelijk beschikbaar zijn voor uw team.</p> <h2 id="het-cv-bestand-downloaden">Het Cv-Bestand Downloaden</h2> <p>Nadat de trigger een nieuw bestand detecteert, moeten we de bestandsinhoud daadwerkelijk downloaden voordat we er tekst uit kunnen extraheren. De actie <a href="https://pipedream.com/apps/dropbox/actions/download-file-to-tmp" target="_blank" rel="nofollow noopener">Download File to TMP</a> haalt het cv op van Dropbox en slaat het op in de tijdelijke opslag van Pipedream, waar volgende stappen er toegang toe hebben.</p> <p><img src="https://www.docugenerate.com/assets/posts/027-pipedream-resume-analyzer/download-file-to-tmp-config.png" alt="Screenshot van de configuratie van het downloaden van het bestand"/></p> <p>De configuratie is eenvoudig. De parameter <strong>Path</strong> gebruikt <code class="language-plaintext highlighter-rouge">{{steps.trigger.event.path_display}}</code> om te verwijzen naar het bestandspad dat door de trigger is vastgelegd. Deze actie downloadt het bestand en retourneert een object met het tijdelijke bestandspad in de eigenschap <code class="language-plaintext highlighter-rouge">tmpPath</code>. Het bestand blijft gedurende de uitvoering van de workflow in tijdelijke opslag, wat perfect is voor verwerking en het vervolgens verwijderen nadat de workflow is voltooid.</p> <p>Het gedownloade bestand is nu klaar voor tekstextractie. Het tijdelijke bestandspad wordt in de volgende stap gebruikt om de PDF-inhoud te lezen en om te zetten naar tekst die Claude kan analyseren.</p> <h2 id="tekst-extraheren-uit-de-pdf">Tekst Extraheren uit de PDF</h2> <p>Nu het cv is gedownload naar tijdelijke opslag, moeten we de tekstinhoud uit het PDF-bestand extraheren. Deze stap gebruikt een Node.js-codeblok met de <a href="https://www.npmjs.com/package/pdf-parse" target="_blank" rel="nofollow noopener">pdf-parse</a>-bibliotheek om de PDF te lezen en om te zetten naar platte tekst die Claude kan analyseren.</p> <p><img src="https://www.docugenerate.com/assets/posts/027-pipedream-resume-analyzer/node-code-config.png" alt="Screenshot van de code voor tekstextractie"/></p> <p>De code leest het bestand van het tijdelijke pad met behulp van de ingebouwde <code class="language-plaintext highlighter-rouge">fs</code>-module van Node.js, en geeft vervolgens de bestandsbuffer door aan <code class="language-plaintext highlighter-rouge">pdf-parse</code> voor verwerking. De bibliotheek verzorgt de complexiteit van het parsen van PDF’s en retourneert de geëxtraheerde tekst als een string.</p> <div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">import</span> <span class="p">{</span> <span class="nx">PDFParse</span> <span class="p">}</span> <span class="k">from</span> <span class="dl">"</span><span class="s2">pdf-parse</span><span class="dl">"</span><span class="p">;</span>
<span class="k">import</span> <span class="o">*</span> <span class="k">as</span> <span class="nx">fs</span> <span class="k">from</span> <span class="dl">"</span><span class="s2">fs</span><span class="dl">"</span><span class="p">;</span>

<span class="k">export</span> <span class="k">default</span> <span class="nf">defineComponent</span><span class="p">({</span>
  <span class="k">async</span> <span class="nf">run</span><span class="p">({</span> <span class="nx">steps</span><span class="p">,</span> <span class="nx">$</span> <span class="p">})</span> <span class="p">{</span>
    <span class="c1">// Get the tmp file path</span>
    <span class="kd">const</span> <span class="nx">filePath</span> <span class="o">=</span> <span class="nx">steps</span><span class="p">.</span><span class="nx">download_file_to_tmp</span><span class="p">.</span><span class="nx">$return_value</span><span class="p">.</span><span class="nx">tmpPath</span><span class="p">;</span>

    <span class="c1">// Read the file from /tmp</span>
    <span class="kd">const</span> <span class="nx">dataBuffer</span> <span class="o">=</span> <span class="nx">fs</span><span class="p">.</span><span class="nf">readFileSync</span><span class="p">(</span><span class="nx">filePath</span><span class="p">);</span>

    <span class="c1">// Parse the PDF</span>
    <span class="kd">const</span> <span class="nx">parser</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">PDFParse</span><span class="p">({</span> <span class="na">data</span><span class="p">:</span> <span class="nx">dataBuffer</span> <span class="p">});</span>
    <span class="kd">const</span> <span class="nx">resumeText</span> <span class="o">=</span> <span class="k">await</span> <span class="nx">parser</span><span class="p">.</span><span class="nf">getText</span><span class="p">();</span>

    <span class="c1">// Return the PDF content</span>
    <span class="k">return</span> <span class="nx">resumeText</span><span class="p">;</span>
  <span class="p">},</span>
<span class="p">})</span>
</code></pre></div></div> <p>De geëxtraheerde tekst is nu beschikbaar in <code class="language-plaintext highlighter-rouge">resumeText</code> en klaar om in de volgende stap door Claude te worden geanalyseerd.</p> <h2 id="het-cv-analyseren-met-claude">Het Cv Analyseren met Claude</h2> <p>Dit is waar de intelligentie plaatsvindt. De Claude-API-stap stuurt de geëxtraheerde cv-tekst naar <a href="https://docs.anthropic.com/en/api/getting-started" target="_blank" rel="nofollow noopener">de Claude AI van Anthropic</a> met gedetailleerde instructies om de content te analyseren en gestructureerde data in JSON-formaat te retourneren. Claude onderzoekt het cv en extraheert belangrijke informatie, waaronder werkervaring, vaardigheden, opleiding, en biedt inzichten die doorgaans een handmatige beoordeling zouden vereisen.</p> <p><img src="https://www.docugenerate.com/assets/posts/027-pipedream-resume-analyzer/claude-chat-config.png" alt="Screenshot van de Claude-API-configuratie"/></p> <p>Voor de configuratie van de actie <a href="https://pipedream.com/apps/anthropic/actions/chat" target="_blank" rel="nofollow noopener">Chat with Anthropic (Claude)</a> heeft u uw Anthropic-API-sleutel nodig, die u kunt verkrijgen via uw Anthropic-account. Het verzoek gebruikt het model <code class="language-plaintext highlighter-rouge">claude-sonnet-4-5-20250929</code>, dat een uitstekende balans biedt tussen snelheid, kosten, en analytisch vermogen voor deze taak. De parameter <strong>Maximum Tokens to Sample</strong> is ingesteld op <code class="language-plaintext highlighter-rouge">4096</code>, wat Claude voldoende ruimte geeft om een uitgebreide analyse te retourneren met alle velden die we nodig hebben.</p> <p>De prompt is zorgvuldig gestructureerd om Claude te sturen bij het extraheren van specifieke informatie en het opmaken ervan als geldige JSON. Dit is de volledige prompt die Claude instrueert wat te analyseren en hoe het antwoord moet worden gestructureerd:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>You are an expert HR analyst. Analyze the following resume and extract key information into a structured JSON format.

Resume content:
{{steps.code.$return_value.text}}

Please analyze this resume and provide a comprehensive summary in the following JSON structure. Be thorough but concise:

{
  "date": "YYYY-MM-DD (today's date)",
  "candidateName": "Full name from resume",
  "email": "Email address",
  "phone": "Phone number",
  "location": "City, State/Country",
  "summary": "2-3 sentence professional summary highlighting key qualifications, experience, and strengths",
  "yearsOfExperience": "X years (calculate total)",
  "currentPosition": "Most recent job title",
  "currentCompany": "Most recent company name",
  "skills": [
    "List 6-10 key technical and professional skills with proficiency levels where relevant"
  ],
  "highestDegree": "Degree name (e.g., Bachelor of Science in Computer Science)",
  "institution": "University/College name",
  "fieldOfStudy": "Major/Field",
  "strengths": [
    "List 4-6 key strengths based on achievements, projects, and experience"
  ],
  "recommendations": [
    "List 4-5 specific interview questions or topics to explore based on their unique experience"
  ],
  "fitScore": "Rate 1-10 based on overall qualifications and experience",
  "finalNotes": "2-3 sentence overall assessment and hiring recommendation"
}

IMPORTANT INSTRUCTIONS:
- Extract all information directly from the resume
- If any field is not available in the resume, use "Not specified" or an empty array []
- For skills, include proficiency levels when they can be inferred from years of experience or explicit mentions
- Make the summary compelling but accurate
- Base the fitScore on years of experience, skill diversity, education, and career progression
- Ensure all JSON is properly formatted with no syntax errors
- Return ONLY the JSON object, no additional text or markdown formatting

CRITICAL OUTPUT REQUIREMENTS:
- Return ONLY the raw JSON object
- Do NOT wrap the JSON in markdown code blocks
- Do NOT include ```json or ``` markers
- Do NOT add any explanatory text before or after the JSON
- The response must start with { and end with }
- The entire response must be valid, parseable JSON
</code></pre></div></div> <p>Claude verwerkt de cv-tekst en retourneert een JSON-object met alle geëxtraheerde informatie. Het antwoord omvat alles, van basale contactgegevens tot inzichtelijke aanbevelingen voor interviewvragen op basis van de unieke ervaring van de kandidaat. Dit gestructureerde formaat maakt het eenvoudig om de data door te geven aan DocuGenerate voor documentgeneratie in de volgende stap.</p> <h2 id="het-json-antwoord-parsen">Het JSON-Antwoord Parsen</h2> <p>Claude retourneert zijn analyse als een JSON-string, maar we moeten dit omzetten naar een gestructureerd object waarmee we in volgende stappen kunnen werken. De ingebouwde actie <a href="https://pipedream.com/apps/formatting/actions/parse-json" target="_blank" rel="nofollow noopener">Parse JSON</a> van Pipedream, te vinden onder <a href="https://pipedream.com/apps/formatting" target="_blank" rel="nofollow noopener">Formatting → Data</a>, verzorgt deze conversie automatisch.</p> <p><img src="https://www.docugenerate.com/assets/posts/027-pipedream-resume-analyzer/parse-json-config.png" alt="Screenshot van de configuratie van Parse JSON"/></p> <p>De configuratie neemt simpelweg het antwoord van Claude uit <code class="language-plaintext highlighter-rouge">{{steps.chat.$return_value.content[0].text}}</code> en parseert dit naar een gestructureerd object. Deze geparseerde data wordt beschikbaar voor alle volgende stappen in de workflow, waardoor we kunnen verwijzen naar specifieke velden zoals <code class="language-plaintext highlighter-rouge">{{steps.parse_json.$return_value.candidateName}}</code> wanneer we ze nodig hebben.</p> <p>Het parsen van de data in afzonderlijke velden is bijzonder nuttig voor dynamische bestandsbenaming en voor het doorgeven van de complete dataset aan DocuGenerate. Het geparseerde object bevat alle velden die in ons sjabloon zijn gedefinieerd: kandidaatinformatie, samenvatting, vaardighedenarray, sterke-puntenarray, aanbevelingenarray, en de algemene beoordeling.</p> <h2 id="het-samenvattingsdocument-genereren">Het Samenvattingsdocument Genereren</h2> <p>Nu de geanalyseerde data beschikbaar is als een gestructureerd object, zijn we klaar om de professionele PDF-samenvatting te genereren. Deze stap gebruikt de <a href="https://pipedream.com/apps/docugenerate" target="_blank" rel="noopener">DocuGenerate App</a> op Pipedream om de data samen te voegen met ons sjabloon en een opgemaakt document te maken.</p> <p><img src="https://www.docugenerate.com/assets/posts/027-pipedream-resume-analyzer/generate-document-config.png" alt="Screenshot van de DocuGenerate-API-configuratie"/></p> <p>U heeft uw DocuGenerate API-sleutel nodig om een verbinding tot stand te brengen, die u kunt vinden in uw accountinstellingen. De configuratie van de actie omvat verschillende belangrijke parameters:</p> <ul> <li><strong>Template</strong> geeft het sjabloon <strong>Resume Analysis Summary</strong> op uit de installatiesectie</li> <li><strong>Name</strong> gebruikt <code class="language-plaintext highlighter-rouge">Resume Analysis for {{steps.parse_json.$return_value.candidateName}}</code> om een dynamische bestandsnaam te maken op basis van de naam van de kandidaat</li> <li><strong>Format</strong> is ingesteld op <code class="language-plaintext highlighter-rouge">PDF (.pdf)</code> om een PDF-document te genereren</li> <li><strong>Data</strong> bevat het volledige geparseerde JSON-object <code class="language-plaintext highlighter-rouge">{{steps.parse_json.$return_value}}</code> van Claude met alle kandidaatinformatie</li> </ul> <p>De API verwerkt dit verzoek en retourneert een antwoord met een veld <code class="language-plaintext highlighter-rouge">document_uri</code>, wat een URL is die verwijst naar het gegenereerde PDF-document.</p> <h2 id="de-analyse-uploaden-naar-dropbox">De Analyse Uploaden naar Dropbox</h2> <p>De laatste stap voltooit de workflow door de gegenereerde PDF-analyse terug te uploaden naar Dropbox, waar uw wervingsteam er toegang toe heeft. De actie <a href="https://pipedream.com/apps/dropbox/actions/upload-file" target="_blank" rel="nofollow noopener">Upload a File</a> slaat het document op in een aangewezen map, en organiseert alle kandidaatanalyses op één locatie.</p> <p><img src="https://www.docugenerate.com/assets/posts/027-pipedream-resume-analyzer/upload-file-to-dropbox.png" alt="Screenshot van de configuratie van het uploaden naar Dropbox"/></p> <p>De configuratie vereist het opgeven van het doelpad en de bestandsinhoud die moet worden geüpload:</p> <ul> <li><strong>Path</strong> geeft de doelmap <code class="language-plaintext highlighter-rouge">/Pipedream/Analysis</code> op</li> <li><strong>File Name</strong> is ingesteld op <code class="language-plaintext highlighter-rouge">{{steps.generate_document.$return_value.filename}}</code> als de bestandsnaam van het gegenereerde document</li> <li><strong>File Path or URL</strong> verwijst naar de waarde <code class="language-plaintext highlighter-rouge">{{steps.generate_document.$return_value.document_uri}}</code> uit de vorige stap</li> <li><strong>Mode</strong> is ingesteld op <code class="language-plaintext highlighter-rouge">overwrite</code> om te bepalen wat er moet gebeuren als het bestand al bestaat</li> </ul> <p>Zodra het is geüpload, is de analyse onmiddellijk beschikbaar voor uw team, en kunt u optioneel een stap voor e-mailmeldingen toevoegen om hiring managers te waarschuwen wanneer een nieuwe kandidaatsamenvatting klaar is om te worden beoordeeld.</p> <h2 id="de-volledige-workflow-testen">De Volledige Workflow Testen</h2> <p>Nu alle stappen zijn geconfigureerd, is de workflow klaar om cv’s automatisch te verwerken. Om dit te testen, uploadt u simpelweg een cv-PDF naar de map <code class="language-plaintext highlighter-rouge">/Pipedream/Resumes</code> in uw Dropbox. De workflow detecteert het nieuwe bestand binnen enkele seconden en begint met de verwerking via elke stap.</p> <p>U kunt de uitvoering in realtime volgen via de interface van Pipedream, die toont hoe de data door elke stap stroomt. Zodra dit is voltooid, vindt u de gegenereerde analyse-PDF in uw map <code class="language-plaintext highlighter-rouge">/Pipedream/Analysis</code> in Dropbox, klaar voor beoordeling door uw wervingsteam.</p> <p><img src="https://www.docugenerate.com/assets/posts/027-pipedream-resume-analyzer/pdf-analysis-in-dropbox.png" alt="Voorbeeld van de gegenereerde PDF-analyse opgeslagen in Dropbox"/></p> <h2 id="de-workflow-uitbreiden">De Workflow Uitbreiden</h2> <p>De cv-analysator die we hebben gebouwd, biedt een solide basis, maar er zijn veel manieren waarop u deze kunt uitbreiden om beter aan te sluiten bij uw wervingsproces. Hier zijn enkele praktische verbeteringen die u zou kunnen overwegen toe te voegen om de workflow nog waardevoller te maken voor uw organisatie.</p> <p>U zou een stap voor e-mailmeldingen kunnen toevoegen die hiring managers onmiddellijk waarschuwt wanneer een nieuwe kandidaatanalyse klaar is. Deze melding zou belangrijke hoogtepunten uit de analyse van Claude kunnen bevatten, zoals de geschiktheidsscore en professionele samenvatting, samen met een directe link naar het volledige PDF-rapport in Dropbox. Dit elimineert de noodzaak voor hiring managers om voortdurend de map te controleren op nieuwe analyses.</p> <p>Een andere nuttige uitbreiding is het opslaan van de gestructureerde JSON-data in een database of spreadsheet. Door een stap toe te voegen die de geparseerde data verstuurt naar <a href="https://pipedream.com/apps/airtable" target="_blank" rel="nofollow noopener">Airtable</a>, <a href="https://pipedream.com/apps/google-sheets" target="_blank" rel="nofollow noopener">Google Sheets</a>, of uw applicant tracking system, kunt u een doorzoekbare database van alle kandidaten bouwen. Dit maakt het eenvoudig om kandidaten te filteren op vaardigheden, ervaringsniveau, of geschiktheidsscore wanneer u op zoek bent naar specifieke kwalificaties.</p> <p>U wilt de analyse mogelijk ook aanpassen op basis van de functie waarvoor u werft. U zou verschillende sjablonen kunnen maken voor verschillende functies en de bestandsnaam of een aangewezen mapstructuur kunnen gebruiken om te bepalen welk sjabloon moet worden gebruikt. Cv’s in <code class="language-plaintext highlighter-rouge">/Resumes/Engineering</code> zouden bijvoorbeeld een sjabloon kunnen gebruiken dat de nadruk legt op technische vaardigheden, terwijl die in <code class="language-plaintext highlighter-rouge">/Resumes/Sales</code> zich meer zouden kunnen richten op communicatievaardigheden en dealervaring.</p> <h2 id="conclusie">Conclusie</h2> <p>Het bouwen van een geautomatiseerde cv-analysator met Pipedream, Claude, en DocuGenerate toont hoe AI en workflowautomatisering tijdrovende handmatige processen kunnen transformeren in efficiënte, consistente bewerkingen. De workflow die we hebben gemaakt, verwerkt cv’s in seconden, extraheert betekenisvolle inzichten die mensen veel langer zouden kosten om te identificeren, en genereert rapporten die wervingsbeslissingen eenvoudiger maken.</p> <p>Deze aanpak is bijzonder waardevol, omdat het consistentie behoudt in de kandidaatevaluatie. Elk cv wordt geanalyseerd met dezelfde criteria, wat onbewuste vooroordelen vermindert en ervoor zorgt dat alle kandidaten eerlijk worden beoordeeld. Het gestructureerde formaat van de analyserapporten maakt het ook eenvoudiger om kandidaten naast elkaar te vergelijken en de meest veelbelovende sollicitanten voor uw openstaande functies te identificeren.</p> <p>Het workflowpatroon dat we hier hebben gedemonstreerd, gaat verder dan alleen cv-analyse. Dezelfde aanpak van het extraheren van tekst uit documenten, het gebruiken van AI om de content te analyseren en te structureren, en het genereren van opgemaakte rapporten, kan worden toegepast op veel andere documentverwerkingsscenario’s. Of u nu contracten analyseert, klantfeedback verwerkt, of data extraheert uit onderzoekspapers, de kernworkflow blijft vergelijkbaar met aanpassingen aan de analyseprompt en het uitvoersjabloon.</p> <h3 id="bronnen">Bronnen</h3> <ul> <li>Het sjabloon <a href="https://www.docugenerate.com/assets/posts/027-pipedream-resume-analyzer/Resume Analysis Summary.docx" target="_blank">Resume Analysis Summary</a> voor DocuGenerate.</li> <li>De officiële <a href="https://pipedream.com/apps/docugenerate" target="_blank" rel="noopener">DocuGenerate App</a> voor Pipedream.</li> <li>De <a href="https://pipedream.com/apps/anthropic" target="_blank" rel="nofollow noopener">Anthropic (Claude) App</a> op Pipedream.</li> <li>De <a href="https://pipedream.com/apps/dropbox" target="_blank" rel="nofollow noopener">Dropbox App</a> op Pipedream.</li> </ul>]]></content> <author> <name>DocuGenerate</name> <email>support@docugenerate.com</email> </author> <category term="AI"/> <category term="Pipedream"/> <category term="No-Code"/> <summary type="html"><![CDATA[Ontdek hoe u een intelligente cv-analysator bouwt die sollicitaties automatisch verwerkt met Pipedream, Claude AI, en DocuGenerate. Deze stapsgewijze tutorial laat zien hoe u belangrijke data uit cv's extraheert en deze gebruikt om PDF-rapporten te maken.]]></summary> <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.docugenerate.com/assets/posts/027-pipedream-resume-analyzer/cover-image-v2.png"/> <media:content medium="image" url="https://www.docugenerate.com/assets/posts/027-pipedream-resume-analyzer/cover-image-v2.png" xmlns:media="http://search.yahoo.com/mrss/"/> </entry> <entry> <title type="html">Automatiseer PDF-Factuurgeneratie met n8n en DocuGenerate</title> <link href="https://www.docugenerate.com/nl/blog/automatiseer-pdf-factuurgeneratie-met-n8n-en-docugenerate/" rel="alternate" type="text/html" title="Automatiseer PDF-Factuurgeneratie met n8n en DocuGenerate"/> <published>2025-10-24T00:00:00+00:00</published> <updated>2025-10-24T00:00:00+00:00</updated> <id>https://www.docugenerate.com/nl/blog/automatiseer-pdf-factuurgeneratie-met-n8n-en-docugenerate</id> <content type="html" xml:base="https://www.docugenerate.com/nl/blog/automatiseer-pdf-factuurgeneratie-met-n8n-en-docugenerate/"><![CDATA[<h2 id="introductie">Introductie</h2> <p>Documentautomatisering vereist niet altijd cloudgebaseerde oplossingen; soms zijn de meest effectieve workflows degene die lokaal op uw computer draaien. In deze tutorial verkennen we hoe u een geautomatiseerd systeem voor factuurgeneratie bouwt met <a href="https://n8n.io/" target="_blank" rel="nofollow noopener">n8n</a>, een krachtige tool voor workflowautomatisering, gecombineerd met <a href="https://www.docugenerate.com/">DocuGenerate</a> om professionele PDF-facturen te maken.</p> <p>De workflow die we bouwen is eenvoudig maar krachtig. Deze controleert een aangewezen map op uw lokale computer op nieuwe Excel-bestanden met factuurdata. Wanneer een bestand verschijnt, leest de workflow automatisch de data, genereert een aparte factuur voor elke rij, en slaat de voltooide PDF-documenten op in een uitvoermap. Deze aanpak is bijzonder nuttig voor bedrijven die facturen lokaal moeten verwerken en volledige controle over hun data willen behouden.</p> <p>Gedurende deze gids doorlopen we elke node in de n8n-workflow, en leggen we het doel en de configuratie ervan uit. Aan het einde van deze tutorial heeft u een volledig functioneel lokaal systeem voor factuurgeneratie dat u kunt aanpassen aan uw specifieke behoeften.</p> <h2 id="het-sjabloon-instellen">Het Sjabloon Instellen</h2> <p>Voordat we de n8n-workflow bouwen, moeten we ons factuursjabloon voorbereiden. De <a href="/nl/sjablonen/">Sjabloonbibliotheek</a> van DocuGenerate bevat een kant-en-klaar sjabloon <a href="https://www.docugenerate.com/assets/templates/invoices/repair/Repair Invoice.zip">Repair Invoice</a> dat perfect is voor deze tutorial. U kunt meer leren over het gebruik van sjablonen uit de bibliotheek in onze <a href="/nl/blog/hoe-u-de-sjablonen-uit-de-sjabloonbibliotheek-gebruikt/">vorige gids</a>.</p> <p>Het sjabloon bevat merge-tags zoals <code class="language-plaintext highlighter-rouge">Invoice No</code>, <code class="language-plaintext highlighter-rouge">Customer Name</code>, <code class="language-plaintext highlighter-rouge">Product Name</code>, en andere veelvoorkomende factuurvelden. Deze <a href="https://www.docugenerate.com/nl/hulp/articles/wat-zijn-merge-tags/">merge-tags</a> worden automatisch vervangen door daadwerkelijke data uit het Excel-bestand tijdens het documentgeneratieproces. Het sjabloon bevat ook een voorbeeld-Excel-bestand met tien rijen factuurdata, dat we gebruiken om de workflow te demonstreren.</p> <p><img src="https://www.docugenerate.com/assets/posts/026-n8n-generate-invoices/repair-invoice-template.png" alt="Het Repair Invoice-sjabloon in DocuGenerate"/></p> <p>Zodra u het sjabloon uit de bibliotheek heeft gedownload, uploadt u het bestand <a href="https://www.docugenerate.com/assets/posts/026-n8n-generate-invoices/Repair Invoice.docx">Repair Invoice.docx</a> naar uw DocuGenerate-account. Nu het sjabloon klaar is, kunnen we onze aandacht richten op het bouwen van de n8n-workflow die het volledige factuurgeneratieproces zal automatiseren.</p> <h2 id="overzicht-van-de-volledige-workflow">Overzicht van de Volledige Workflow</h2> <p>De workflow die we bouwen bestaat uit verschillende onderling verbonden nodes die samenwerken om bestanden te controleren, data te verwerken, documenten te genereren, en de resultaten op de schijf op te slaan. Dit is hoe de volledige workflow eruitziet in n8n:</p> <p><img src="https://www.docugenerate.com/assets/posts/026-n8n-generate-invoices/complete-workflow.png" alt="De volledige n8n-workflow"/></p> <p>De workflow begint met een trigger die een lokale map controleert op nieuwe bestanden. Wanneer een Excel-bestand wordt toegevoegd, valideert de workflow de bestandsextensie, leest de bestandsinhoud, extraheert de data naar gestructureerde rijen, en doorloopt vervolgens elke rij om een individuele factuur te genereren. Elke gegenereerde factuur wordt gedownload en opgeslagen in een aangewezen uitvoermap op uw lokale computer. Dit volledige proces verloopt automatisch, zonder handmatige tussenkomst nadat het is geconfigureerd.</p> <p>Als u deze workflow rechtstreeks in uw n8n-instantie wilt importeren, kunt u het <a href="https://www.docugenerate.com/assets/posts/026-n8n-generate-invoices/n8n-workflow.json" target="_blank">workflow-JSON-bestand</a> downloaden en importeren. Dit kan u tijd besparen en ervoor zorgen dat alle nodes correct zijn geconfigureerd. Laten we nu elke node in detail bekijken om te begrijpen hoe de workflow werkt.</p> <h2 id="de-local-file-trigger-configureren">De Local File Trigger Configureren</h2> <p>De workflow begint met de node <a href="https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.localfiletrigger/" target="_blank" rel="nofollow noopener">Local File Trigger</a>, die een specifieke map op uw computer controleert op nieuwe bestanden. Deze trigger is het beginpunt van het volledige automatiseringsproces. Voor deze tutorial controleren we de map <code class="language-plaintext highlighter-rouge">/Users/docugenerate/n8n/Data</code>, maar u kunt dit configureren naar elke map op uw systeem waar u van plan bent Excel-bestanden toe te voegen.</p> <p><img src="https://www.docugenerate.com/assets/posts/026-n8n-generate-invoices/local-file-trigger-v3.png" alt="Configuratie van de Local File Trigger" class="desktop-width-50"/></p> <p>De trigger is geconfigureerd om het event <code class="language-plaintext highlighter-rouge">File Added</code> te detecteren, wat betekent dat deze wordt geactiveerd telkens wanneer een nieuw bestand verschijnt in de gecontroleerde map. Dit is ideaal voor batchverwerkingsscenario’s waarbij u mogelijk meerdere Excel-bestanden gedurende de dag in een map plaatst en wilt dat deze automatisch worden verwerkt. De trigger legt het bestandspad vast en geeft dit door aan de volgende node in de workflow.</p> <p>Voor dit voorbeeld gebruiken we het bestand <strong>Repair Invoice.xlsx</strong> uit het voorbeeldsjabloon, dat tien rijen factuurdata bevat. Elke rij vertegenwoordigt een aparte factuur met details zoals factuurnummer, klantinformatie, servicebeschrijvingen, en bedragen.</p> <h2 id="de-bestandsextensie-valideren">De Bestandsextensie Valideren</h2> <p>Nadat de trigger een nieuw bestand detecteert, moeten we controleren of het daadwerkelijk een Excel-bestand is, voordat we proberen het te verwerken. De node <a href="https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.if/" target="_blank" rel="nofollow noopener">If</a> dient dit doel door te controleren of het bestandspad eindigt op de extensie <code class="language-plaintext highlighter-rouge">.xlsx</code>. Deze validatiestap voorkomt fouten die kunnen optreden als iemand per ongeluk een ander bestandstype in de gecontroleerde map plaatst.</p> <p><img src="https://www.docugenerate.com/assets/posts/026-n8n-generate-invoices/if-condition.png" alt="Controleren of het bestand een Excel-bestand is" class="desktop-width-75"/></p> <p>Als de voorwaarde waar is, gaat de workflow verder naar de volgende stap. Als deze onwaar is, stopt de workflow, wat onnodige verwerking van incompatibele bestanden voorkomt. Deze eenvoudige controle voegt robuustheid toe aan de workflow en zorgt ervoor dat alleen geldige Excel-bestanden worden verwerkt.</p> <h2 id="het-bestand-van-de-schijf-lezen">Het Bestand van de Schijf Lezen</h2> <p>Zodra we hebben bevestigd dat het bestand een Excel-spreadsheet is, haalt de node <a href="https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.readwritefile/#read-files-from-disk" target="_blank" rel="nofollow noopener">Read File from Disk</a> de daadwerkelijke bestandsinhoud op van uw lokale computer. Deze node gebruikt het bestandspad dat door de trigger is opgegeven om de binaire data van het Excel-bestand te vinden en te lezen.</p> <p><img src="https://www.docugenerate.com/assets/posts/026-n8n-generate-invoices/read-file-from-disk-v2.png" alt="Het bestand van de schijf lezen"/></p> <p>De configuratie is eenvoudig. De parameter <strong>File(s) Selector</strong> is ingesteld op <code class="language-plaintext highlighter-rouge">{{ $json.path }}</code>, wat verwijst naar het pad dat is vastgelegd door de <a href="#de-local-file-trigger-configureren">trigger</a>. In de sectie met opties geven we <code class="language-plaintext highlighter-rouge">data</code> op als de naam van het uitvoer-binaire veld waarin de bestandsinhoud wordt opgeslagen. Deze veldnaam wordt gebruikt in volgende nodes om toegang te krijgen tot de bestandsdata.</p> <p>Het is belangrijk op te merken dat deze node werkt met bestanden op dezelfde computer waarop n8n draait. Als u bestanden tussen verschillende computers moet verwerken, heeft u alternatieve nodes nodig, zoals FTP, HTTP Request, of AWS S3-nodes. Voor lokale verwerkingsscenario’s zoals het onze biedt deze node een eenvoudige en efficiënte oplossing.</p> <h2 id="data-extraheren-uit-het-excel-bestand">Data Extraheren uit het Excel-Bestand</h2> <p>Nu de bestandsinhoud beschikbaar is als binaire data, moeten we deze omzetten naar een gestructureerd formaat dat door de workflow kan worden verwerkt. De node <a href="https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.extractfromfile/" target="_blank" rel="nofollow noopener">Extract from File</a> verzorgt deze transformatie door het Excel-bestand te parsen en elke rij om te zetten naar een apart gegevenselement.</p> <p><img src="https://www.docugenerate.com/assets/posts/026-n8n-generate-invoices/extract-from-file.png" alt="Data extraheren uit het Excel-bestand"/></p> <p>De node is geconfigureerd met de bewerking <strong>Extract from XLSX</strong>, en het <strong>Input Binary Field</strong> is ingesteld op <code class="language-plaintext highlighter-rouge">data</code>, wat overeenkomt met de veldnaam die we hebben opgegeven in de <a href="#het-bestand-van-de-schijf-lezen">vorige node</a>. Deze stap is essentieel, omdat deze de ruwe binaire bestandsdata omzet naar gestructureerde JSON-objecten die de factuurinformatie van elke rij bevatten. Deze gestructureerde gegevenselementen kunnen nu afzonderlijk worden verwerkt om facturen te genereren.</p> <h2 id="elk-factuurrecord-doorlopen">Elk Factuurrecord Doorlopen</h2> <p>Nu we de gestructureerde gegevenselementen uit het Excel-bestand hebben, moeten we elk item afzonderlijk verwerken om een aparte factuur te genereren. De node <a href="https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.splitinbatches/" target="_blank" rel="nofollow noopener">Loop Over Items</a> maakt dit mogelijk door de items in batches te doorlopen. Voor deze workflow gebruiken we een batchgrootte van één, wat betekent dat elke factuur wordt gegenereerd en opgeslagen voordat wordt overgegaan naar de volgende.</p> <p><img src="https://www.docugenerate.com/assets/posts/026-n8n-generate-invoices/loop-over-items.png" alt="Items doorlopen met batchgrootte van 1"/></p> <p>Deze batchgewijze aanpak is bijzonder nuttig voor documentgeneratie, omdat het ervoor zorgt dat elke factuur volledig wordt verwerkt voordat met de volgende wordt begonnen. Het helpt ook bij het beheren van systeembronnen bij het werken met grotere datasets. De lus gaat door totdat alle items zijn verwerkt, waarbij de workflow dezelfde reeks nodes uitvoert voor elk factuurrecord.</p> <h2 id="het-factuurdocument-genereren">Het Factuurdocument Genereren</h2> <p>De node <a href="/nl/hulp/articles/documentgeneratie-automatiseren-met-n8n/#generate-document">Generate Document</a> neemt de data van elke rij en voegt deze samen met het sjabloon om een PDF-factuur te maken. Om deze node te gebruiken, moet u de <a href="/nl/hulp/articles/documentgeneratie-automatiseren-met-n8n/#install-docugenerate">DocuGenerate-node</a> installeren in uw n8n-instantie.</p> <p><img src="https://www.docugenerate.com/assets/posts/026-n8n-generate-invoices/generate-document-v2.png" alt="Het factuurdocument genereren"/></p> <p>De configuratie van de node vereist verschillende parameters:</p> <ul> <li><strong>Template Name or ID</strong> is ingesteld op <code class="language-plaintext highlighter-rouge">Repair Invoice</code>, wat overeenkomt met het sjabloon dat we <a href="#het-sjabloon-instellen">eerder hebben geüpload</a>.</li> <li><strong>Name</strong> gebruikt een expressie <code class="language-plaintext highlighter-rouge">Invoice no {{ $json['Invoice No'] }}</code> om elk document dynamisch te benoemen op basis van het factuurnummer uit de data.</li> <li><strong>Format</strong> is ingesteld op <code class="language-plaintext highlighter-rouge">PDF (.pdf)</code> om PDF-documenten te genereren.</li> <li><strong>Data</strong> is geconfigureerd met <code class="language-plaintext highlighter-rouge">{{ $json }}</code>, wat het volledige huidige gegevenselement doorgeeft aan de API voor documentgeneratie. Dit betekent dat alle velden uit de Excel-rij beschikbaar zijn voor merge-tags in het sjabloon.</li> </ul> <p>De API verwerkt dit verzoek en retourneert een antwoord met een veld <code class="language-plaintext highlighter-rouge">document_uri</code> dat verwijst naar het gegenereerde document.</p> <h2 id="het-gegenereerde-document-downloaden">Het Gegenereerde Document Downloaden</h2> <p>Nadat DocuGenerate de factuur heeft gemaakt, gebruikt <strong>Get File from URL</strong> de ingebouwde node <a href="https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/" target="_blank" rel="nofollow noopener">HTTP Request</a> om de gegenereerde PDF op te halen van de URL die is opgegeven in het antwoord van de vorige stap.</p> <p><img src="https://www.docugenerate.com/assets/posts/026-n8n-generate-invoices/get-file-from-url.png" alt="Het bestand van URL ophalen"/></p> <p>De parameter <strong>URL</strong> is ingesteld op <code class="language-plaintext highlighter-rouge">{{ $json.document_uri }}</code>, wat verwijst naar de document-URL die is geretourneerd door de node <a href="#het-factuurdocument-genereren">Generate Document</a>. In de sectie met opties is de <strong>Response Format</strong> geconfigureerd als <code class="language-plaintext highlighter-rouge">File</code>, om ervoor te zorgen dat de data wordt behandeld als binaire content in plaats van tekst. De optie <strong>Put Output in Field</strong> is ingesteld op <code class="language-plaintext highlighter-rouge">data</code>, waarmee de PDF-inhoud wordt opgeslagen in een veld dat toegankelijk is voor de volgende node.</p> <p>Voor dit voorbeeld heeft het gegenereerde document de bestandsnaam <code class="language-plaintext highlighter-rouge">Invoice no 58-223-0655.pdf</code>, die dynamisch is gemaakt op basis van het factuurnummer in de eerste rij van onze voorbeelddata. Elke volgende factuur krijgt zijn eigen unieke bestandsnaam volgens hetzelfde patroon.</p> <h2 id="de-factuur-opslaan-op-de-schijf">De Factuur Opslaan op de Schijf</h2> <p>De laatste stap in de workflow slaat de gegenereerde factuur-PDF op in een aangewezen map op uw lokale computer. De node <a href="https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.readwritefile/#write-file-to-disk" target="_blank" rel="nofollow noopener">Write File to Disk</a> verzorgt deze bewerking, en slaat elke voltooide factuur op waar u er eenvoudig toegang toe heeft.</p> <p><img src="https://www.docugenerate.com/assets/posts/026-n8n-generate-invoices/write-file-to-disk.png" alt="Het bestand op de schijf opslaan"/></p> <p>De parameter <strong>File Path and Name</strong> is geconfigureerd met <code class="language-plaintext highlighter-rouge">/Users/docugenerate/n8n/Invoices/{{ $data.filename }}</code>, wat een basismappad combineert met de dynamische bestandsnaam van het gegenereerde document. Het <strong>Input Binary Field</strong> is ingesteld op <code class="language-plaintext highlighter-rouge">data</code>, dat de PDF-inhoud bevat die is opgehaald in de <a href="#het-gegenereerde-document-downloaden">vorige stap</a>.</p> <p>Deze configuratie slaat alle facturen op in dezelfde map, maar u zou dit verder kunnen aanpassen. U zou bijvoorbeeld facturen kunnen organiseren op datum, of ze kunnen groeperen op klantnaam. De flexibiliteit van n8n-expressies stelt u in staat elke mapstructuur te creëren die past bij uw bedrijfsbehoeften. Houd er rekening mee dat deze node is ontworpen voor het werken met bestanden op dezelfde computer waarop n8n draait.</p> <h2 id="de-workflow-uitvoeren">De Workflow Uitvoeren</h2> <p>Nu alle nodes zijn geconfigureerd, is de workflow klaar om facturen automatisch te verwerken. Om dit te testen, voegt u simpelweg het bestand <strong>Repair Invoice.xlsx</strong> toe aan de map <code class="language-plaintext highlighter-rouge">Data</code> die door de trigger wordt gecontroleerd. De workflow detecteert het nieuwe bestand onmiddellijk en begint met verwerken.</p> <p><img src="https://www.docugenerate.com/assets/posts/026-n8n-generate-invoices/execute-workflow-v2.gif" alt="De workflow uitvoeren"/></p> <p>De bovenstaande animatie toont het segment <a href="#elk-factuurrecord-doorlopen">Loop Over Items</a> in actie, waarbij alle tien gegevenselementen uit het Excel-bestand worden doorlopen. Voor elk item genereert de workflow een factuur met behulp van het sjabloon en de data, downloadt de PDF, en slaat deze op in de doelmap. U kunt de voortgang in realtime volgen via de visuele interface van n8n, die uitstekend inzicht biedt in elke stap van het proces.</p> <p><img src="https://www.docugenerate.com/assets/posts/026-n8n-generate-invoices/invoices-folder.png" alt="Gegenereerde facturen in de uitvoermap"/></p> <p>Zodra de workflow is voltooid, zijn alle tien facturen gegenereerd en opgeslagen in de map <code class="language-plaintext highlighter-rouge">Invoices</code>. Deze geautomatiseerde aanpak elimineert de noodzaak voor handmatige documentcreatie, wat aanzienlijk tijd bespaart en de kans op fouten vermindert die kunnen optreden bij handmatige gegevensinvoer.</p> <h2 id="conclusie">Conclusie</h2> <p>Het bouwen van lokale automatiseringsworkflows met n8n en DocuGenerate biedt een krachtige oplossing voor bedrijven die documenten efficiënt moeten verwerken, terwijl ze volledige controle over hun data behouden. De workflow die we hebben gebouwd, toont hoe eenvoudig het is om mappen te controleren, bestanden te valideren, data te extraheren, en professionele documenten te genereren zonder afhankelijk te zijn van clouddiensten of complexe integraties.</p> <p>Deze aanpak is bijzonder waardevol voor scenario’s waarin gegevensprivacy van het grootste belang is, internetconnectiviteit beperkt is, of u er simpelweg de voorkeur aan geeft uw documentverwerkingspijplijn lokaal te houden. De flexibiliteit van n8n stelt u in staat deze workflow op talloze manieren uit te breiden. U zou bijvoorbeeld e-mailmeldingen kunnen toevoegen wanneer facturen worden gegenereerd, back-upkopieën kunnen maken, of kunnen integreren met uw bestaande bedrijfssystemen met andere oplossingen.</p> <p>De workflow die we hebben gemaakt, verwerkt reparatiefacturen, maar hetzelfde patroon kan worden toegepast op elk documenttype dat wordt ondersteund door DocuGenerate. Of u nu contracten, brieven, certificaten, of rapporten moet genereren, de kernworkflow blijft hetzelfde. U hoeft alleen het sjabloon aan te passen en ervoor te zorgen dat uw Excel-data overeenkomt met de merge-tags in uw gekozen sjabloon.</p> <h3 id="bronnen">Bronnen</h3> <ul> <li>Het <a href="https://www.docugenerate.com/assets/posts/026-n8n-generate-invoices/n8n-workflow.json" target="_blank">n8n-workflow-JSON-bestand</a> dat u kunt importeren in uw n8n-instantie.</li> <li>Het sjabloon <a href="https://www.docugenerate.com/assets/templates/invoices/repair/Repair Invoice.zip">Repair Invoice</a> uit de Sjabloonbibliotheek van DocuGenerate.</li> <li>De officiële pagina van de <a href="https://docs.n8n.io/" target="_blank" rel="nofollow noopener">n8n-documentatie</a>.</li> <li>De volledige DocuGenerate-<a href="/nl/hulp/articles/documentgeneratie-automatiseren-met-n8n/">integratiegids</a> voor n8n.</li> </ul>]]></content> <author> <name>DocuGenerate</name> <email>support@docugenerate.com</email> </author> <category term="Invoices"/> <category term="n8n"/> <category term="No-Code"/> <summary type="html"><![CDATA[Leer hoe u een geautomatiseerde workflow voor factuurgeneratie bouwt met n8n en DocuGenerate die een map controleert op Excel-bestanden, de data extraheert, en professionele PDF-facturen genereert. Ideaal voor lokale verwerking zonder afhankelijk te zijn van meerdere cloudgebaseerde oplossingen.]]></summary> <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.docugenerate.com/assets/posts/026-n8n-generate-invoices/cover-image-v2.png"/> <media:content medium="image" url="https://www.docugenerate.com/assets/posts/026-n8n-generate-invoices/cover-image-v2.png" xmlns:media="http://search.yahoo.com/mrss/"/> </entry> <entry> <title type="html">Synchroniseer Sjablonen van Google Docs naar DocuGenerate met Apps Script</title> <link href="https://www.docugenerate.com/nl/blog/synchroniseer-sjablonen-van-google-docs-naar-docugenerate-met-apps-script/" rel="alternate" type="text/html" title="Synchroniseer Sjablonen van Google Docs naar DocuGenerate met Apps Script"/> <published>2025-09-25T00:00:00+00:00</published> <updated>2025-09-25T00:00:00+00:00</updated> <id>https://www.docugenerate.com/nl/blog/synchroniseer-sjablonen-van-google-docs-naar-docugenerate-met-apps-script</id> <content type="html" xml:base="https://www.docugenerate.com/nl/blog/synchroniseer-sjablonen-van-google-docs-naar-docugenerate-met-apps-script/"><![CDATA[<h2 id="introductie">Introductie</h2> <p>Hoewel DocuGenerate voornamelijk werkt met Word-documenten, geven veel teams er de voorkeur aan om hun sjablonen te maken en te bewerken in Google Docs, vanwege de superieure samenwerkingsfuncties, realtime bewerkingsmogelijkheden, en intuïtieve interface. Het gebruik van Google Docs-sjablonen in DocuGenerate vereist echter traditioneel een handmatig proces: download het Google Doc als een Word-bestand en upload het vervolgens naar DocuGenerate. Hoewel deze aanpak werkt, creëert het wrijving in uw workflow en maakt het sjabloononderhoud omslachtig, vooral wanneer sjablonen vaak veranderen.</p> <p>Wat als u deze handmatige stap volledig zou kunnen elimineren? Wat als uw Google Docs automatisch zouden kunnen synchroniseren met DocuGenerate, waarbij nieuwe sjablonen worden gemaakt wanneer documenten worden toegevoegd en bestaande sjablonen worden bijgewerkt wanneer wijzigingen worden aangebracht? Deze automatisering zou uw team in staat stellen om in Google Docs te blijven werken, terwijl uw DocuGenerate-sjablonen actueel blijven zonder enige handmatige tussenkomst.</p> <p>In deze uitgebreide tutorial bouwen we een complete synchronisatieoplossing met <a href="https://developers.google.com/apps-script" target="_blank" rel="nofollow noopener">Google Apps Script</a>, die een specifieke Google Drive-map controleert en eventuele wijzigingen automatisch synchroniseert met uw DocuGenerate-account. Het systeem verzorgt zowel de initiële sjabloonaanmaak als de doorlopende updates, waardoor het perfect is voor teams die hun Google Docs-workflow willen behouden, terwijl ze profiteren van de krachtige documentgeneratiemogelijkheden van DocuGenerate.</p> <h2 id="hoe-het-synchronisatiesysteem-werkt">Hoe het Synchronisatiesysteem Werkt</h2> <p>Ons synchronisatiescript controleert een aangewezen Google Drive-map op wijzigingen en verwerkt automatisch alle gewijzigde documenten, zodat uw DocuGenerate-sjablonen altijd de nieuwste versie van uw Google Docs weerspiegelen. De synchronisatieworkflow volgt deze logische volgorde:</p> <ul> <li> <p><strong>Documentdetectie</strong>: Het <a href="#efficiente-wijzigingsdetectie">systeem scant</a> uw aangewezen Google Drive-map op Google Docs, en identificeert zowel nieuwe documenten die nog niet zijn gesynchroniseerd als bestaande documenten die onlangs zijn gewijzigd.</p> </li> <li> <p><strong>Sjabloonkoppeling</strong>: Voor elk document controleert het script of het al overeenkomt met een DocuGenerate-sjabloon, door de aangepaste eigenschappen van het document te onderzoeken. Deze eigenschappen fungeren als brug tussen de twee systemen, en slaan de <a href="#documentsynchronisatie-begrijpen">DocuGenerate-sjabloon-ID</a> rechtstreeks op in de metadata van het Google Doc.</p> </li> <li> <p><strong>Formaatconversie</strong>: Wanneer een document moet worden gesynchroniseerd, <a href="#documenten-converteren-naar-word-formaat">converteert het script het</a> van Google Docs-formaat naar Microsoft Word-formaat (<code class="language-plaintext highlighter-rouge">.docx</code>), wat het formaat is dat DocuGenerate verwacht voor sjabloonverwerking.</p> </li> <li> <p><strong>API-communicatie</strong>: Afhankelijk van of het document nieuw of bestaand is, wordt door de automatisering ofwel <a href="#nieuwe-sjablonen-maken-in-docugenerate">een nieuw sjabloon gemaakt</a> in DocuGenerate, ofwel <a href="#bestaande-sjablonen-bijwerken">een bestaand sjabloon bijgewerkt</a> met de API van DocuGenerate.</p> </li> <li> <p><strong>Metadata-opslag</strong>: Na succesvolle synchronisatie slaat het script de DocuGenerate-sjabloon-ID op in de aangepaste eigenschappen van het Google Doc, zodat toekomstige updates het juiste sjabloon wijzigen in plaats van duplicaten te maken.</p> </li> </ul> <p>Dit ontwerp zorgt ervoor dat uw team op natuurlijke wijze kan blijven werken in Google Docs, terwijl de geautomatiseerde synchronisatie alle technische details verzorgt om DocuGenerate-sjablonen actueel te houden. U kunt een kijkje nemen in het <a href="https://www.docugenerate.com/assets/posts/025-sync-google-docs/apps-script.txt" target="_blank">volledige script</a> dat we in deze tutorial bouwen, als u een idee wilt krijgen van hoe alles werkt.</p> <h2 id="het-apps-script-project-instellen">Het Apps Script-Project Instellen</h2> <p>Google Apps Script biedt een krachtig platform voor het automatiseren van workflows tussen Google Workspace-applicaties en externe API’s. Voor onze synchronisatieoplossing maken we een nieuw Apps Script-project aan met alle functies die nodig zijn om Google Docs te controleren en te communiceren met DocuGenerate.</p> <p>Navigeer om te beginnen naar <a href="https://script.google.com/" target="_blank" rel="nofollow noopener">Apps Script</a> en maak een nieuw project aan. U begint met een leeg canvas waarop we onze complete synchronisatieoplossing kunnen bouwen. Ons project voor deze tutorial heet <strong>Templates Sync DocuGenerate</strong>, zoals u kunt zien in de afbeelding hieronder.</p> <p><img src="https://www.docugenerate.com/assets/posts/025-sync-google-docs/new-apps-script-project.png" alt="Placeholder voor het aanmaken van een nieuw Apps Script-project"/></p> <h3 id="de-google-drive-api-inschakelen">De Google Drive API Inschakelen</h3> <p>Ons synchronisatiescript heeft toegang nodig tot geavanceerde Google Drive-functionaliteit die verder gaat dan de standaard DriveApp-service. Specifiek hebben we de <a href="https://developers.google.com/workspace/drive/api/guides/about-sdk" target="_blank" rel="nofollow noopener">Google Drive API</a> v3 nodig om te werken met aangepaste bestandseigenschappen, wat de manier is waarop we de relatie tussen Google Docs en DocuGenerate-sjablonen bijhouden.</p> <p>Om de Google Drive API in te schakelen in uw nieuw gemaakte Apps Script-project, klikt u op <strong>Add a service</strong> in de linkerzijbalk van de Apps Script-editor.<br/> <img src="https://www.docugenerate.com/assets/posts/025-sync-google-docs/add-a-service.png" alt="Placeholder voor het aanmaken van een nieuw Apps Script-project" class="desktop-width-75"/></p> <p>Zoek vervolgens naar <strong>Drive API</strong>, stel de identifier in op <code class="language-plaintext highlighter-rouge">Drive</code> en klik op de knop <strong>Add</strong> om de installatie te voltooien.<br/> <img src="https://www.docugenerate.com/assets/posts/025-sync-google-docs/add-drive-service.png" alt="De Google Drive API-service toevoegen" class="desktop-width-50"/></p> <p>Deze stap is cruciaal, omdat de standaard DriveApp-service geen toegang biedt tot aangepaste bestandseigenschappen, die we gebruiken om de DocuGenerate-sjabloon-ID op te slaan in de metadata van elk Google Doc. Zonder deze API-toegang zou ons script niet kunnen bijhouden welke documenten al zijn gesynchroniseerd, of bepalen of nieuwe sjablonen moeten worden gemaakt of bestaande moeten worden bijgewerkt.</p> <h3 id="uw-inloggegevens-configureren">Uw Inloggegevens Configureren</h3> <p>Voordat u de synchronisatiefuncties implementeert, moet u het systeem configureren met uw specifieke inloggegevens en instellingen. Ons script gebruikt een configuratieobject dat alle instellingen centraliseert die u moet aanpassen:</p> <div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">const</span> <span class="nx">CONFIG</span> <span class="o">=</span> <span class="p">{</span>
  <span class="na">DOCUGENERATE_API_KEY</span><span class="p">:</span> <span class="dl">'</span><span class="s1">YOUR_API_KEY_HERE</span><span class="dl">'</span><span class="p">,</span> <span class="c1">// Get from DocuGenerate settings</span>
  <span class="na">DOCUGENERATE_BASE_URL</span><span class="p">:</span> <span class="dl">'</span><span class="s1">https://api.docugenerate.com/v1</span><span class="dl">'</span><span class="p">,</span> <span class="c1">// Change region if needed</span>
  <span class="na">MONITORED_FOLDER_ID</span><span class="p">:</span> <span class="dl">'</span><span class="s1">YOUR_FOLDER_ID_HERE</span><span class="dl">'</span> <span class="c1">// Google Drive folder ID to monitor</span>
<span class="p">};</span>
</code></pre></div></div> <ul> <li> <p><strong>DOCUGENERATE_API_KEY</strong>: U vindt uw API-sleutel op de pagina <a href="https://www.docugenerate.com/nl/hulp/articles/waar-vind-ik-mijn-api-sleutel/">Developers settings</a>. Deze sleutel authenticeert alle verzoeken naar de API van DocuGenerate en zorgt ervoor dat gegenereerde sjablonen correct worden gekoppeld aan uw account.</p> </li> <li> <p><strong>DOCUGENERATE_BASE_URL</strong>: De standaard-URL verwijst naar de primaire verwerkingsregio van DocuGenerate. Als u een <a href="https://www.docugenerate.com/nl/hulp/articles/kan-ik-regionale-api-eindpunten-gebruiken/">regionaal eindpunt</a> gebruikt voor snellere verwerking in uw geografische regio, werkt u deze URL dienovereenkomstig bij.</p> </li> <li> <p><strong>MONITORED_FOLDER_ID</strong>: Dit is de unieke identifier voor de Google Drive-map die u wilt controleren. U kunt de map-ID halen uit elke Google Drive-URL: <code class="language-plaintext highlighter-rouge">https://drive.google.com/drive/folders/&lt;FOLDER_ID&gt;</code></p> </li> </ul> <h2 id="de-functie-voor-handmatige-synchronisatie-bouwen">De Functie voor Handmatige Synchronisatie Bouwen</h2> <p>De functie voor handmatige synchronisatie vormt de basis van onze synchronisatieoplossing en biedt het initiële installatiemechanisme voor het tot stand brengen van verbindingen tussen uw Google Docs en DocuGenerate-sjablonen. Deze functie verwerkt alle documenten in uw gecontroleerde map, ongeacht wanneer ze voor het laatst zijn gewijzigd, waardoor het perfect is voor initiële installatie of bulksynchronisatie.</p> <div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cm">/**
 * Manual sync function - syncs all documents in the monitored folder
 * Useful for initial setup or bulk sync
 */</span>
<span class="kd">function</span> <span class="nf">manualSync</span><span class="p">()</span> <span class="p">{</span>
  <span class="k">try</span> <span class="p">{</span>
    <span class="nx">console</span><span class="p">.</span><span class="nf">log</span><span class="p">(</span><span class="dl">'</span><span class="s1">Starting manual sync of all documents...</span><span class="dl">'</span><span class="p">);</span>

    <span class="kd">const</span> <span class="nx">folder</span> <span class="o">=</span> <span class="nx">DriveApp</span><span class="p">.</span><span class="nf">getFolderById</span><span class="p">(</span><span class="nx">CONFIG</span><span class="p">.</span><span class="nx">MONITORED_FOLDER_ID</span><span class="p">);</span>
    <span class="nx">console</span><span class="p">.</span><span class="nf">log</span><span class="p">(</span><span class="s2">`Processing folder: </span><span class="p">${</span><span class="nx">folder</span><span class="p">.</span><span class="nf">getName</span><span class="p">()}</span><span class="s2">`</span><span class="p">);</span>

    <span class="kd">const</span> <span class="nx">files</span> <span class="o">=</span> <span class="nx">folder</span><span class="p">.</span><span class="nf">getFilesByType</span><span class="p">(</span><span class="nx">MimeType</span><span class="p">.</span><span class="nx">GOOGLE_DOCS</span><span class="p">);</span>

    <span class="k">while </span><span class="p">(</span><span class="nx">files</span><span class="p">.</span><span class="nf">hasNext</span><span class="p">())</span> <span class="p">{</span>
      <span class="kd">const</span> <span class="nx">file</span> <span class="o">=</span> <span class="nx">files</span><span class="p">.</span><span class="nf">next</span><span class="p">();</span>
      <span class="nx">console</span><span class="p">.</span><span class="nf">log</span><span class="p">(</span><span class="s2">`Processing: </span><span class="p">${</span><span class="nx">file</span><span class="p">.</span><span class="nf">getName</span><span class="p">()}</span><span class="s2">`</span><span class="p">);</span>
      <span class="nf">syncDocument</span><span class="p">(</span><span class="nx">file</span><span class="p">);</span>
    <span class="p">}</span>

    <span class="nx">console</span><span class="p">.</span><span class="nf">log</span><span class="p">(</span><span class="dl">'</span><span class="s1">Manual sync completed!</span><span class="dl">'</span><span class="p">);</span>

  <span class="p">}</span> <span class="k">catch </span><span class="p">(</span><span class="nx">error</span><span class="p">)</span> <span class="p">{</span>
    <span class="nx">console</span><span class="p">.</span><span class="nf">error</span><span class="p">(</span><span class="dl">'</span><span class="s1">Error in manual sync:</span><span class="dl">'</span><span class="p">,</span> <span class="nx">error</span><span class="p">);</span>
  <span class="p">}</span>
<span class="p">}</span>
</code></pre></div></div> <p>Deze functie toont verschillende belangrijke concepten die in het hele synchronisatiescript worden gebruikt:</p> <p><strong>Maptoegang</strong>: De functie gebruikt <code class="language-plaintext highlighter-rouge">DriveApp.getFolderById()</code> om toegang te krijgen tot de specifieke map die we willen controleren. Deze aanpak zorgt ervoor dat alleen documenten in de aangewezen map worden verwerkt, wat onbedoelde synchronisatie van niet-gerelateerde documenten voorkomt.</p> <p><strong>Bestandstypefiltering</strong>: Door <code class="language-plaintext highlighter-rouge">getFilesByType(MimeType.GOOGLE_DOCS)</code> te gebruiken, filtert de functie automatisch alle niet-Google Docs-bestanden in de map uit. Dit zorgt ervoor dat alleen documenten die kunnen worden geconverteerd naar Word-formaat worden verwerkt.</p> <p><strong>Iterator-Patroon</strong>: Google Apps Script gebruikt iterators voor bestandsverzamelingen om mogelijk grote aantallen bestanden efficiënt te verwerken. De lus <code class="language-plaintext highlighter-rouge">while (files.hasNext())</code> verwerkt elk bestand afzonderlijk, wat gedetailleerde logging en foutafhandeling per document mogelijk maakt.</p> <p><strong>Delegatie aan Kernlogica</strong>: Het daadwerkelijke synchronisatiewerk wordt afgehandeld door de functie <code class="language-plaintext highlighter-rouge">syncDocument()</code>, die we hierna bekijken. Deze scheiding van verantwoordelijkheden maakt de code beter onderhoudbaar en maakt het mogelijk dat dezelfde kernlogica wordt gebruikt voor zowel handmatige als automatische synchronisatiebewerkingen.</p> <p><strong>Foutafhandeling</strong>: De volledige bewerking is verpakt in een try-catch-blok om ervoor te zorgen dat eventuele fouten tijdens de verwerking correct worden gelogd en de volledige synchronisatiebewerking niet laten crashen. Dit is bijzonder belangrijk voor geautomatiseerde scripts die betrouwbaar moeten blijven werken over langere tijd.</p> <p>U moet deze functie als eerste uitvoeren bij het instellen van uw synchronisatieautomatisering, aangezien deze de initiële koppelingen tot stand brengt tussen uw bestaande Google Docs en hun bijbehorende DocuGenerate-sjablonen.</p> <h2 id="documentsynchronisatie-begrijpen">Documentsynchronisatie Begrijpen</h2> <p>De functie <code class="language-plaintext highlighter-rouge">syncDocument()</code> bevat de kernlogica die het synchronisatieproces voor individuele documenten afhandelt. Deze functie is verantwoordelijk voor het bepalen of een document een nieuw sjabloon moet maken of een bestaand sjabloon moet bijwerken, het beheren van het conversieproces, en het bijhouden van de metadata die de relatie tussen Google Docs en DocuGenerate-sjablonen volgt.</p> <div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cm">/**
 * Syncs a Google Doc to DocuGenerate
 */</span>
<span class="kd">function</span> <span class="nf">syncDocument</span><span class="p">(</span><span class="nx">doc</span><span class="p">)</span> <span class="p">{</span>
  <span class="k">try</span> <span class="p">{</span>
    <span class="kd">const</span> <span class="nx">docId</span> <span class="o">=</span> <span class="nx">doc</span><span class="p">.</span><span class="nf">getId</span><span class="p">();</span>
    <span class="kd">const</span> <span class="nx">docName</span> <span class="o">=</span> <span class="nx">doc</span><span class="p">.</span><span class="nf">getName</span><span class="p">();</span>

    <span class="nx">console</span><span class="p">.</span><span class="nf">log</span><span class="p">(</span><span class="s2">`Syncing document: </span><span class="p">${</span><span class="nx">docName</span><span class="p">}</span><span class="s2"> (</span><span class="p">${</span><span class="nx">docId</span><span class="p">}</span><span class="s2">)`</span><span class="p">);</span>

    <span class="c1">// Check if document already has a template ID</span>
    <span class="kd">const</span> <span class="nx">docMetadata</span> <span class="o">=</span> <span class="nx">Drive</span><span class="p">.</span><span class="nx">Files</span><span class="p">.</span><span class="nf">get</span><span class="p">(</span><span class="nx">docId</span><span class="p">,</span> <span class="p">{</span>
      <span class="na">fields</span><span class="p">:</span> <span class="dl">'</span><span class="s1">properties</span><span class="dl">'</span>
    <span class="p">});</span>
    <span class="kd">const</span> <span class="nx">docProperties</span> <span class="o">=</span> <span class="nx">docMetadata</span><span class="p">.</span><span class="nx">properties</span> <span class="o">||</span> <span class="p">{};</span>
    <span class="kd">const</span> <span class="nx">existingTemplateId</span> <span class="o">=</span> <span class="nx">docProperties</span><span class="p">[</span><span class="dl">'</span><span class="s1">docugenerate_template_id</span><span class="dl">'</span><span class="p">];</span>

    <span class="c1">// Convert Google Doc to Word format</span>
    <span class="kd">const</span> <span class="nx">wordBlob</span> <span class="o">=</span> <span class="nf">convertToWordFormat</span><span class="p">(</span><span class="nx">docId</span><span class="p">,</span> <span class="nx">docName</span><span class="p">);</span>

    <span class="k">if </span><span class="p">(</span><span class="nx">existingTemplateId</span><span class="p">)</span> <span class="p">{</span>
      <span class="nx">console</span><span class="p">.</span><span class="nf">log</span><span class="p">(</span><span class="s2">`Updating existing template: </span><span class="p">${</span><span class="nx">existingTemplateId</span><span class="p">}</span><span class="s2">`</span><span class="p">);</span>
      <span class="nf">updateTemplate</span><span class="p">(</span><span class="nx">existingTemplateId</span><span class="p">,</span> <span class="nx">wordBlob</span><span class="p">,</span> <span class="nx">docName</span><span class="p">);</span>
    <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
      <span class="nx">console</span><span class="p">.</span><span class="nf">log</span><span class="p">(</span><span class="dl">'</span><span class="s1">Creating new template</span><span class="dl">'</span><span class="p">);</span>
      <span class="kd">const</span> <span class="nx">templateId</span> <span class="o">=</span> <span class="nf">createTemplate</span><span class="p">(</span><span class="nx">wordBlob</span><span class="p">,</span> <span class="nx">docName</span><span class="p">);</span>

      <span class="k">if </span><span class="p">(</span><span class="nx">templateId</span><span class="p">)</span> <span class="p">{</span>
        <span class="c1">// Store the template ID in document properties</span>
        <span class="nx">Drive</span><span class="p">.</span><span class="nx">Files</span><span class="p">.</span><span class="nf">update</span><span class="p">({</span>
          <span class="na">properties</span><span class="p">:</span> <span class="p">{</span>
            <span class="dl">'</span><span class="s1">docugenerate_template_id</span><span class="dl">'</span><span class="p">:</span> <span class="nx">templateId</span>
          <span class="p">}</span>
        <span class="p">},</span> <span class="nx">docId</span><span class="p">);</span>
      <span class="p">}</span>
    <span class="p">}</span>

  <span class="p">}</span> <span class="k">catch </span><span class="p">(</span><span class="nx">error</span><span class="p">)</span> <span class="p">{</span>
    <span class="nx">console</span><span class="p">.</span><span class="nf">error</span><span class="p">(</span><span class="dl">'</span><span class="s1">Error syncing document:</span><span class="dl">'</span><span class="p">,</span> <span class="nx">error</span><span class="p">);</span>
  <span class="p">}</span>
<span class="p">}</span>
</code></pre></div></div> <p>Deze functie illustreert verschillende geavanceerde concepten die de synchronisatieoplossing robuust en intelligent maken:</p> <p><strong>Metadata-inspectie</strong>: De functie gebruikt de Google Drive API v3 om de aangepaste eigenschappen van het document te onderzoeken. Deze eigenschappen zijn onzichtbaar voor gebruikers, maar bieden een krachtige manier om metadata op te slaan die aan het document blijft gekoppeld. De aanroep <code class="language-plaintext highlighter-rouge">Drive.Files.get()</code> vraagt specifiek alleen het properties-veld op, om het API-gebruik te minimaliseren en de prestaties te verbeteren.</p> <p><strong>Beslissingslogica</strong>: Op basis van of het document al een eigenschap <code class="language-plaintext highlighter-rouge">docugenerate_template_id</code> heeft, bepaalt de functie of een nieuw sjabloon moet worden gemaakt of een bestaand sjabloon moet worden bijgewerkt. Deze beslissingslogica voorkomt dubbele sjablonen en zorgt ervoor dat documentwijzigingen resulteren in sjabloonupdates in plaats van het maken van nieuwe sjablonen.</p> <p><strong>Formaatconversie</strong>: Elke synchronisatiebewerking vereist het converteren van het Google Doc naar Word-formaat, wat wordt afgehandeld door de functie <code class="language-plaintext highlighter-rouge">convertToWordFormat()</code>. Deze conversie zorgt ervoor dat DocuGenerate het sjabloon ontvangt in een formaat dat het betrouwbaar kan verwerken.</p> <p><strong>Metadata-persistentie</strong>: Wanneer een nieuw sjabloon succesvol wordt gemaakt in DocuGenerate, slaat de functie de geretourneerde sjabloon-ID op in de eigenschappen van het document met <code class="language-plaintext highlighter-rouge">Drive.Files.update()</code>. Dit creëert een permanente koppeling tussen het Google Doc en het bijbehorende DocuGenerate-sjabloon.</p> <p><strong>Soepele Foutafhandeling</strong>: Fouten bij individuele documenten stoppen het algehele synchronisatieproces niet. Als de synchronisatie van één document mislukt, wordt de fout gelogd, maar gaat het systeem door met het verwerken van andere documenten.</p> <p>Deze aanpak zorgt ervoor dat het synchronisatiesysteem zich intelligent gedraagt en de gegevensintegriteit tussen beide platforms behoudt. Het metadata-opslagmechanisme is bijzonder elegant, omdat het volledig onzichtbaar is voor gebruikers, terwijl het systeem wel de informatie krijgt die nodig is om slimme beslissingen te nemen over sjabloonbeheer.</p> <h2 id="documenten-converteren-naar-word-formaat">Documenten Converteren naar Word-Formaat</h2> <p>Het documentconversieproces is een cruciaal onderdeel van onze synchronisatieoplossing, omdat DocuGenerate verwacht dat sjablonen in Microsoft Word-formaat (<code class="language-plaintext highlighter-rouge">.docx</code>) zijn. Google Apps Script biedt ingebouwde functionaliteit om Google Docs te exporteren in verschillende formaten, en we benutten deze functionaliteit om correct opgemaakte Word-documenten te maken die alle opmaak, stijlen, en merge-tags van het originele Google Doc behouden.</p> <div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cm">/**
 * Converts a Google Doc to Word format (.docx)
 */</span>
<span class="kd">function</span> <span class="nf">convertToWordFormat</span><span class="p">(</span><span class="nx">docId</span><span class="p">,</span> <span class="nx">docName</span><span class="p">)</span> <span class="p">{</span>
  <span class="k">try</span> <span class="p">{</span>
    <span class="c1">// Export as Word document</span>
    <span class="kd">const</span> <span class="nx">url</span> <span class="o">=</span> <span class="s2">`https://docs.google.com/document/d/</span><span class="p">${</span><span class="nx">docId</span><span class="p">}</span><span class="s2">/export?format=docx`</span><span class="p">;</span>
    <span class="kd">const</span> <span class="nx">response</span> <span class="o">=</span> <span class="nx">UrlFetchApp</span><span class="p">.</span><span class="nf">fetch</span><span class="p">(</span><span class="nx">url</span><span class="p">,</span> <span class="p">{</span>
      <span class="na">headers</span><span class="p">:</span> <span class="p">{</span>
        <span class="dl">'</span><span class="s1">Authorization</span><span class="dl">'</span><span class="p">:</span> <span class="dl">'</span><span class="s1">Bearer </span><span class="dl">'</span> <span class="o">+</span> <span class="nx">ScriptApp</span><span class="p">.</span><span class="nf">getOAuthToken</span><span class="p">()</span>
      <span class="p">}</span>
    <span class="p">});</span>

    <span class="c1">// Return blob with proper name and content type</span>
    <span class="k">return</span> <span class="nx">response</span><span class="p">.</span><span class="nf">getBlob</span><span class="p">()</span>
      <span class="p">.</span><span class="nf">setName</span><span class="p">(</span><span class="s2">`</span><span class="p">${</span><span class="nx">docName</span><span class="p">}</span><span class="s2">.docx`</span><span class="p">)</span>
      <span class="p">.</span><span class="nf">setContentType</span><span class="p">(</span><span class="nx">MimeType</span><span class="p">.</span><span class="nx">MICROSOFT_WORD</span><span class="p">);</span>

  <span class="p">}</span> <span class="k">catch </span><span class="p">(</span><span class="nx">error</span><span class="p">)</span> <span class="p">{</span>
    <span class="nx">console</span><span class="p">.</span><span class="nf">error</span><span class="p">(</span><span class="dl">'</span><span class="s1">Error converting to Word format:</span><span class="dl">'</span><span class="p">,</span> <span class="nx">error</span><span class="p">);</span>
    <span class="k">throw</span> <span class="nx">error</span><span class="p">;</span>
  <span class="p">}</span>
<span class="p">}</span>
</code></pre></div></div> <p>Deze functie toont verschillende belangrijke technische concepten:</p> <p><strong>Export-API van Google</strong>: Google biedt een directe export-URL voor elk document, waarmee het document in verschillende formaten kan worden gegenereerd. De parameter <code class="language-plaintext highlighter-rouge">format=docx</code> vraagt specifiek om Microsoft Word-formaat, wat compatibiliteit waarborgt met het sjabloonverwerkingssysteem van DocuGenerate.</p> <p><strong>OAuth-Authenticatie</strong>: Het conversieproces vereist authenticatie om toegang te krijgen tot privé Google Docs. De methode <code class="language-plaintext highlighter-rouge">ScriptApp.getOAuthToken()</code> biedt het benodigde OAuth-token dat het script toegang geeft tot het document namens de gebruiker die het script heeft geautoriseerd.</p> <p><strong>Blob-beheer</strong>: Google Apps Script vertegenwoordigt bestanden als “blobs” - binary large objects die de bestandsdata bevatten, samen met metadata zoals bestandsnaam en content-type. De functie stelt zowel de bestandsnaam (met toevoeging van de extensie <code class="language-plaintext highlighter-rouge">.docx</code>) als het MIME-type correct in, om ervoor te zorgen dat het resulterende bestand wordt herkend als een geldig Word-document.</p> <p><strong>Foutpropagatie</strong>: In tegenstelling tot andere functies die fouten lokaal opvangen en loggen, geeft deze functie fouten opnieuw door aan de aanroepende functie. Dit ontwerp zorgt ervoor dat, als de documentconversie mislukt, de aanroepende functie de fout op de juiste manier kan afhandelen (zoals het document overslaan of later opnieuw proberen).</p> <p><strong>Bestandsnaambehandeling</strong>: De functie voegt automatisch de extensie <code class="language-plaintext highlighter-rouge">.docx</code> toe aan de documentnaam, zodat het resulterende bestand de juiste extensie heeft, ongeacht hoe het originele Google Doc was genoemd.</p> <p>Dit conversieproces behoudt alle belangrijke aspecten van uw Google Doc, waaronder tekstopmaak, tabellen, afbeeldingen, en vooral merge-tags die DocuGenerate zal gebruiken tijdens de documentgeneratie. Het resulterende Word-document is functioneel identiek aan wat u zou krijgen als u het Google Doc handmatig zou exporteren via de Google Docs-interface.</p> <h2 id="nieuwe-sjablonen-maken-in-docugenerate">Nieuwe Sjablonen Maken in DocuGenerate</h2> <p>Wanneer een Google Doc geen bijbehorend DocuGenerate-sjabloon heeft (aangegeven door de afwezigheid van een eigenschap <code class="language-plaintext highlighter-rouge">docugenerate_template_id</code>), moet het systeem een nieuw sjabloon maken in DocuGenerate. Deze functie verzorgt de API-communicatie die nodig is om het geconverteerde Word-document te uploaden en dit als nieuw sjabloon vast te leggen in uw DocuGenerate-account.</p> <div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cm">/**
 * Creates a new template in DocuGenerate
 */</span>
<span class="kd">function</span> <span class="nf">createTemplate</span><span class="p">(</span><span class="nx">wordBlob</span><span class="p">,</span> <span class="nx">templateName</span><span class="p">)</span> <span class="p">{</span>
  <span class="k">try</span> <span class="p">{</span>
    <span class="kd">const</span> <span class="nx">payload</span> <span class="o">=</span> <span class="p">{</span>
      <span class="dl">'</span><span class="s1">file</span><span class="dl">'</span><span class="p">:</span> <span class="nx">wordBlob</span><span class="p">,</span>
      <span class="dl">'</span><span class="s1">name</span><span class="dl">'</span><span class="p">:</span> <span class="nx">templateName</span>
    <span class="p">};</span>

    <span class="kd">const</span> <span class="nx">options</span> <span class="o">=</span> <span class="p">{</span>
      <span class="na">method</span><span class="p">:</span> <span class="dl">'</span><span class="s1">POST</span><span class="dl">'</span><span class="p">,</span>
      <span class="na">headers</span><span class="p">:</span> <span class="p">{</span>
        <span class="dl">'</span><span class="s1">Authorization</span><span class="dl">'</span><span class="p">:</span> <span class="nx">CONFIG</span><span class="p">.</span><span class="nx">DOCUGENERATE_API_KEY</span>
        <span class="c1">// Don't set Content-Type - Apps Script will handle it automatically</span>
      <span class="p">},</span>
      <span class="na">payload</span><span class="p">:</span> <span class="nx">payload</span>
    <span class="p">};</span>

    <span class="kd">const</span> <span class="nx">response</span> <span class="o">=</span> <span class="nx">UrlFetchApp</span><span class="p">.</span><span class="nf">fetch</span><span class="p">(</span>
      <span class="s2">`</span><span class="p">${</span><span class="nx">CONFIG</span><span class="p">.</span><span class="nx">DOCUGENERATE_BASE_URL</span><span class="p">}</span><span class="s2">/template`</span><span class="p">,</span>
      <span class="nx">options</span>
    <span class="p">);</span>

    <span class="k">if </span><span class="p">(</span><span class="nx">response</span><span class="p">.</span><span class="nf">getResponseCode</span><span class="p">()</span> <span class="o">===</span> <span class="mi">201</span><span class="p">)</span> <span class="p">{</span>
      <span class="kd">const</span> <span class="nx">responseData</span> <span class="o">=</span> <span class="nx">JSON</span><span class="p">.</span><span class="nf">parse</span><span class="p">(</span><span class="nx">response</span><span class="p">.</span><span class="nf">getContentText</span><span class="p">());</span>
      <span class="nx">console</span><span class="p">.</span><span class="nf">log</span><span class="p">(</span><span class="dl">'</span><span class="s1">Template created successfully:</span><span class="dl">'</span><span class="p">,</span> <span class="nx">responseData</span><span class="p">.</span><span class="nx">id</span><span class="p">);</span>
      <span class="k">return</span> <span class="nx">responseData</span><span class="p">.</span><span class="nx">id</span><span class="p">;</span>
    <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
      <span class="nx">console</span><span class="p">.</span><span class="nf">error</span><span class="p">(</span><span class="dl">'</span><span class="s1">Error creating template:</span><span class="dl">'</span><span class="p">,</span> <span class="nx">response</span><span class="p">.</span><span class="nf">getContentText</span><span class="p">());</span>
      <span class="k">return</span> <span class="kc">null</span><span class="p">;</span>
    <span class="p">}</span>

  <span class="p">}</span> <span class="k">catch </span><span class="p">(</span><span class="nx">error</span><span class="p">)</span> <span class="p">{</span>
    <span class="nx">console</span><span class="p">.</span><span class="nf">error</span><span class="p">(</span><span class="dl">'</span><span class="s1">Error creating template:</span><span class="dl">'</span><span class="p">,</span> <span class="nx">error</span><span class="p">);</span>
    <span class="k">return</span> <span class="kc">null</span><span class="p">;</span>
  <span class="p">}</span>
<span class="p">}</span>
</code></pre></div></div> <p>Deze functie toont verschillende belangrijke aspecten van API-integratie en het verwerken van multipart formulieren:</p> <p><strong>Multipart Form Data</strong>: Het maken van een sjabloon vereist het uploaden van zowel een bestand (het Word-document) als metadata (de sjabloonnaam). Deze functie bouwt een multipart formulierpayload die beide gegevens bevat, in het formaat dat de API van DocuGenerate verwacht.</p> <p><strong>Automatische Content-Type-afhandeling</strong>: Een cruciaal detail is dat we bewust vermijden de header <code class="language-plaintext highlighter-rouge">Content-Type</code> handmatig in te stellen. Wanneer u bestanden opneemt in de payload, moet Google Apps Script boundary-parameters toevoegen aan het content type <code class="language-plaintext highlighter-rouge">multipart/form-data</code>. Door de Content-Type-header weg te laten, staan we Apps Script toe dit automatisch af te handelen, waardoor boundary-gerelateerde fouten worden voorkomen.</p> <p><strong>HTTP-statuscodeverificatie</strong>: De API van DocuGenerate retourneert een statuscode <code class="language-plaintext highlighter-rouge">201 Created</code> wanneer een sjabloon succesvol is gemaakt. De functie controleert specifiek op deze statuscode om onderscheid te maken tussen succesvolle bewerkingen en fouten, wat zorgt voor robuuste foutafhandeling.</p> <p><strong>Antwoordverwerking</strong>: Wanneer het maken van het sjabloon slaagt, retourneert de API een JSON-antwoord met de ID van het nieuwe sjabloon. Deze ID is cruciaal, omdat we deze opslaan in de eigenschappen van het Google Doc om het document te koppelen aan het bijbehorende sjabloon.</p> <p><strong>Soepele Foutretouren</strong>: In plaats van uitzonderingen te genereren, retourneert deze functie <code class="language-plaintext highlighter-rouge">null</code> wanneer er fouten optreden. Deze aanpak stelt de aanroepende functie in staat om door te gaan met het verwerken van andere documenten, zelfs als het maken van één sjabloon mislukt.</p> <p><strong>Uitgebreide Logging</strong>: De functie biedt gedetailleerde logging voor zowel succesvolle bewerkingen als fouten, waardoor het eenvoudig wordt om problemen te diagnosticeren tijdens de ontwikkeling en de systeemprestaties in productie te bewaken.</p> <p>Het proces voor het maken van sjablonen legt de fundamentele koppeling vast tussen uw Google Doc en DocuGenerate. Zodra deze koppeling tot stand is gebracht via het metadata-opslagmechanisme, resulteren alle toekomstige wijzigingen aan het Google Doc in sjabloonupdates in plaats van het maken van extra sjablonen.</p> <h2 id="bestaande-sjablonen-bijwerken">Bestaande Sjablonen Bijwerken</h2> <p>Wanneer een Google Doc al een bijbehorend DocuGenerate-sjabloon heeft (aangegeven door de aanwezigheid van een eigenschap <code class="language-plaintext highlighter-rouge">docugenerate_template_id</code>), werkt het systeem het bestaande sjabloon bij in plaats van een nieuw sjabloon te maken. Deze functie verzorgt de API-communicatie die nodig is om de sjabloon-inhoud te vervangen, terwijl de sjabloon-ID en eventuele bijbehorende instellingen in DocuGenerate behouden blijven.</p> <div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cm">/**
 * Updates an existing template in DocuGenerate
 */</span>
<span class="kd">function</span> <span class="nf">updateTemplate</span><span class="p">(</span><span class="nx">templateId</span><span class="p">,</span> <span class="nx">wordBlob</span><span class="p">,</span> <span class="nx">templateName</span><span class="p">)</span> <span class="p">{</span>
  <span class="k">try</span> <span class="p">{</span>
    <span class="kd">const</span> <span class="nx">payload</span> <span class="o">=</span> <span class="p">{</span>
      <span class="dl">'</span><span class="s1">file</span><span class="dl">'</span><span class="p">:</span> <span class="nx">wordBlob</span><span class="p">,</span>
      <span class="dl">'</span><span class="s1">name</span><span class="dl">'</span><span class="p">:</span> <span class="nx">templateName</span>
    <span class="p">};</span>

    <span class="kd">const</span> <span class="nx">options</span> <span class="o">=</span> <span class="p">{</span>
      <span class="na">method</span><span class="p">:</span> <span class="dl">'</span><span class="s1">PUT</span><span class="dl">'</span><span class="p">,</span>
      <span class="na">headers</span><span class="p">:</span> <span class="p">{</span>
        <span class="dl">'</span><span class="s1">Authorization</span><span class="dl">'</span><span class="p">:</span> <span class="nx">CONFIG</span><span class="p">.</span><span class="nx">DOCUGENERATE_API_KEY</span>
        <span class="c1">// Don't set Content-Type - Apps Script will handle it automatically</span>
      <span class="p">},</span>
      <span class="na">payload</span><span class="p">:</span> <span class="nx">payload</span>
    <span class="p">};</span>

    <span class="kd">const</span> <span class="nx">response</span> <span class="o">=</span> <span class="nx">UrlFetchApp</span><span class="p">.</span><span class="nf">fetch</span><span class="p">(</span>
      <span class="s2">`</span><span class="p">${</span><span class="nx">CONFIG</span><span class="p">.</span><span class="nx">DOCUGENERATE_BASE_URL</span><span class="p">}</span><span class="s2">/template/</span><span class="p">${</span><span class="nx">templateId</span><span class="p">}</span><span class="s2">`</span><span class="p">,</span>
      <span class="nx">options</span>
    <span class="p">);</span>

    <span class="k">if </span><span class="p">(</span><span class="nx">response</span><span class="p">.</span><span class="nf">getResponseCode</span><span class="p">()</span> <span class="o">===</span> <span class="mi">200</span><span class="p">)</span> <span class="p">{</span>
      <span class="kd">const</span> <span class="nx">responseData</span> <span class="o">=</span> <span class="nx">JSON</span><span class="p">.</span><span class="nf">parse</span><span class="p">(</span><span class="nx">response</span><span class="p">.</span><span class="nf">getContentText</span><span class="p">());</span>
      <span class="nx">console</span><span class="p">.</span><span class="nf">log</span><span class="p">(</span><span class="dl">'</span><span class="s1">Template updated successfully:</span><span class="dl">'</span><span class="p">,</span> <span class="nx">templateId</span><span class="p">);</span>
      <span class="k">return</span> <span class="kc">true</span><span class="p">;</span>
    <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
      <span class="nx">console</span><span class="p">.</span><span class="nf">error</span><span class="p">(</span><span class="dl">'</span><span class="s1">Error updating template:</span><span class="dl">'</span><span class="p">,</span> <span class="nx">response</span><span class="p">.</span><span class="nf">getContentText</span><span class="p">());</span>
      <span class="k">return</span> <span class="kc">false</span><span class="p">;</span>
    <span class="p">}</span>

  <span class="p">}</span> <span class="k">catch </span><span class="p">(</span><span class="nx">error</span><span class="p">)</span> <span class="p">{</span>
    <span class="nx">console</span><span class="p">.</span><span class="nf">error</span><span class="p">(</span><span class="dl">'</span><span class="s1">Error updating template:</span><span class="dl">'</span><span class="p">,</span> <span class="nx">error</span><span class="p">);</span>
    <span class="k">return</span> <span class="kc">false</span><span class="p">;</span>
  <span class="p">}</span>
<span class="p">}</span>
</code></pre></div></div> <p>Deze functie vertoont veel overeenkomsten met de functie voor het maken van sjablonen, maar bevat enkele belangrijke verschillen:</p> <p><strong>HTTP-methode</strong>: Sjabloonupdates gebruiken de methode <code class="language-plaintext highlighter-rouge">PUT</code> in plaats van <code class="language-plaintext highlighter-rouge">POST</code>, volgens de conventies van RESTful API’s. De methode <code class="language-plaintext highlighter-rouge">PUT</code> geeft aan dat we de bestaande resource volledig vervangen met nieuwe content.</p> <p><strong>URL-structuur</strong>: De URL bevat de specifieke sjabloon-ID die we bijwerken (<code class="language-plaintext highlighter-rouge">/template/${templateId}</code>), wat ervoor zorgt dat de updatebewerking het juiste sjabloon in uw DocuGenerate-account target.</p> <p><strong>Verwachte statuscodes</strong>: Succesvolle updates retourneren een statuscode <code class="language-plaintext highlighter-rouge">200 OK</code> in plaats van <code class="language-plaintext highlighter-rouge">201 Created</code>, wat het verschil weerspiegelt tussen het maken van nieuwe resources en het bijwerken van bestaande resources.</p> <p><strong>Semantiek van de Retourwaarde</strong>: De functie retourneert een boolean die succes of falen aangeeft, in plaats van een resource-ID te retourneren zoals de aanmaakfunctie. Aangezien de sjabloon-ID niet verandert tijdens updates, is het niet nodig deze te retourneren.</p> <p><strong>Contentvervanging</strong>: De updatebewerking vervangt de sjabloon-inhoud volledig door de nieuwe versie uit het Google Doc. Dit zorgt ervoor dat alle wijzigingen, inclusief tekstwijzigingen, opmaakupdates, en aanpassingen aan merge-tags, worden weerspiegeld in het DocuGenerate-sjabloon.</p> <p><strong>Behoud van Instellingen</strong>: Hoewel de sjabloon-inhoud wordt vervangen, blijven andere DocuGenerate-instellingen die aan het sjabloon zijn gekoppeld ongewijzigd. Dit biedt het beste van beide werelden: actuele content met behouden configuratie.</p> <p>Het updatemechanisme is cruciaal voor het behouden van synchronisatie over tijd. Terwijl uw team samenwerkt aan Google Docs en wijzigingen aanbrengt in sjablonen, zorgt deze functie ervoor dat uw DocuGenerate-sjablonen automatisch actueel blijven, zonder enige handmatige tussenkomst.</p> <h2 id="automatische-synchronisatie-implementeren">Automatische Synchronisatie Implementeren</h2> <p>Hoewel handmatige synchronisatie nuttig is voor initiële installatie en bulkbewerkingen, komt de echte kracht van onze oplossing van automatische synchronisatie die continu op de achtergrond draait. Deze automatisering zorgt ervoor dat uw DocuGenerate-sjablonen actueel blijven terwijl uw team wijzigingen aanbrengt in Google Docs, zonder dat handmatige tussenkomst nodig is.</p> <h3 id="tijdgebaseerde-triggers-instellen">Tijdgebaseerde Triggers Instellen</h3> <p>Google Apps Script biedt een krachtig triggermechanisme waarmee functies op een schema kunnen worden uitgevoerd. Onze oplossing voor automatische synchronisatie gebruikt tijdgebaseerde triggers om periodiek te controleren op documentwijzigingen en deze automatisch te verwerken.</p> <div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cm">/**
 * Sets up automatic sync with time-based triggers
 * Run this function once to initialize the sync
 */</span>
<span class="kd">function</span> <span class="nf">setupAutoSync</span><span class="p">()</span> <span class="p">{</span>
  <span class="k">try</span> <span class="p">{</span>
    <span class="c1">// Delete existing triggers to avoid duplicates</span>
    <span class="kd">const</span> <span class="nx">triggers</span> <span class="o">=</span> <span class="nx">ScriptApp</span><span class="p">.</span><span class="nf">getProjectTriggers</span><span class="p">();</span>
    <span class="nx">triggers</span><span class="p">.</span><span class="nf">forEach</span><span class="p">(</span><span class="nx">trigger</span> <span class="o">=&gt;</span> <span class="p">{</span>
      <span class="k">if </span><span class="p">(</span><span class="nx">trigger</span><span class="p">.</span><span class="nf">getHandlerFunction</span><span class="p">()</span> <span class="o">===</span> <span class="dl">'</span><span class="s1">autoSync</span><span class="dl">'</span><span class="p">)</span> <span class="p">{</span>
        <span class="nx">ScriptApp</span><span class="p">.</span><span class="nf">deleteTrigger</span><span class="p">(</span><span class="nx">trigger</span><span class="p">);</span>
      <span class="p">}</span>
    <span class="p">});</span>

    <span class="c1">// Create time-based trigger that runs every 5 minutes</span>
    <span class="nx">ScriptApp</span><span class="p">.</span><span class="nf">newTrigger</span><span class="p">(</span><span class="dl">'</span><span class="s1">autoSync</span><span class="dl">'</span><span class="p">)</span>
      <span class="p">.</span><span class="nf">timeBased</span><span class="p">()</span>
      <span class="p">.</span><span class="nf">everyMinutes</span><span class="p">(</span><span class="mi">5</span><span class="p">)</span>
      <span class="p">.</span><span class="nf">create</span><span class="p">();</span>

    <span class="nx">console</span><span class="p">.</span><span class="nf">log</span><span class="p">(</span><span class="dl">'</span><span class="s1">Auto-sync setup completed successfully!</span><span class="dl">'</span><span class="p">);</span>
    <span class="nx">console</span><span class="p">.</span><span class="nf">log</span><span class="p">(</span><span class="dl">'</span><span class="s1">Monitored folder:</span><span class="dl">'</span><span class="p">,</span> <span class="nx">CONFIG</span><span class="p">.</span><span class="nx">MONITORED_FOLDER_ID</span><span class="p">);</span>

  <span class="p">}</span> <span class="k">catch </span><span class="p">(</span><span class="nx">error</span><span class="p">)</span> <span class="p">{</span>
    <span class="nx">console</span><span class="p">.</span><span class="nf">error</span><span class="p">(</span><span class="dl">'</span><span class="s1">Error setting up auto-sync:</span><span class="dl">'</span><span class="p">,</span> <span class="nx">error</span><span class="p">);</span>
  <span class="p">}</span>
<span class="p">}</span>
</code></pre></div></div> <p>Deze installatiefunctie toont verschillende belangrijke concepten voor robuuste automatisering:</p> <p><strong>Duplicaatpreventie</strong>: Voordat een nieuwe trigger wordt gemaakt, verwijdert de functie eventuele bestaande triggers die dezelfde functie zouden aanroepen. Dit voorkomt het maken van meerdere overlappende triggers als de installatiefunctie meerdere keren wordt uitgevoerd.</p> <p><strong>Triggerconfiguratie</strong>: De trigger is geconfigureerd om elke 5 minuten uit te voeren, wat een goede balans biedt tussen responsiviteit (wijzigingen worden snel gedetecteerd) en efficiëntie (het systeem verspilt geen middelen door te vaak te controleren op wijzigingen).</p> <p><strong>Foutafhandeling</strong>: Zoals bij al onze functies, bevat het installatieproces uitgebreide foutafhandeling om ervoor te zorgen dat problemen bij het maken van triggers correct worden gelogd en de automatisering niet laten crashen.</p> <p><strong>Bevestigingslogging</strong>: De functie biedt duidelijke bevestiging wanneer de automatische synchronisatie succesvol is ingesteld, inclusief details over welke map wordt gecontroleerd.</p> <p>U hoeft deze functie slechts één keer uit te voeren om de automatische synchronisatie in te stellen. Nadat u deze heeft uitgevoerd, wordt de functie <code class="language-plaintext highlighter-rouge">autoSync()</code> automatisch elke 5 minuten uitgevoerd, waarbij wordt gecontroleerd op documentwijzigingen en deze indien nodig worden verwerkt.</p> <h3 id="efficiente-wijzigingsdetectie">Efficiënte Wijzigingsdetectie</h3> <p>De functie voor automatische synchronisatie is ontworpen om zeer efficiënt te zijn, door alleen documenten te verwerken die onlangs zijn gewijzigd. Deze aanpak minimaliseert het API-gebruik en de verwerkingstijd, terwijl wordt gewaarborgd dat wijzigingen snel worden gedetecteerd en gesynchroniseerd.</p> <div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cm">/**
 * Automatically checks for modified documents and syncs them
 * This function is called automatically every 5 minutes
 */</span>
<span class="kd">function</span> <span class="nf">autoSync</span><span class="p">()</span> <span class="p">{</span>
  <span class="k">try</span> <span class="p">{</span>
    <span class="nx">console</span><span class="p">.</span><span class="nf">log</span><span class="p">(</span><span class="dl">'</span><span class="s1">Running auto-sync check...</span><span class="dl">'</span><span class="p">);</span>

    <span class="kd">const</span> <span class="nx">folder</span> <span class="o">=</span> <span class="nx">DriveApp</span><span class="p">.</span><span class="nf">getFolderById</span><span class="p">(</span><span class="nx">CONFIG</span><span class="p">.</span><span class="nx">MONITORED_FOLDER_ID</span><span class="p">);</span>
    <span class="kd">const</span> <span class="nx">files</span> <span class="o">=</span> <span class="nx">folder</span><span class="p">.</span><span class="nf">getFilesByType</span><span class="p">(</span><span class="nx">MimeType</span><span class="p">.</span><span class="nx">GOOGLE_DOCS</span><span class="p">);</span>

    <span class="c1">// Check for files modified in the last 5 minutes</span>
    <span class="kd">const</span> <span class="nx">lastCheck</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">Date</span><span class="p">(</span><span class="nb">Date</span><span class="p">.</span><span class="nf">now</span><span class="p">()</span> <span class="o">-</span> <span class="mi">5</span> <span class="o">*</span> <span class="mi">60</span> <span class="o">*</span> <span class="mi">1000</span><span class="p">);</span>
    <span class="kd">let</span> <span class="nx">modifiedCount</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>

    <span class="k">while </span><span class="p">(</span><span class="nx">files</span><span class="p">.</span><span class="nf">hasNext</span><span class="p">())</span> <span class="p">{</span>
      <span class="kd">const</span> <span class="nx">file</span> <span class="o">=</span> <span class="nx">files</span><span class="p">.</span><span class="nf">next</span><span class="p">();</span>

      <span class="c1">// Check if file was modified recently</span>
      <span class="k">if </span><span class="p">(</span><span class="nx">file</span><span class="p">.</span><span class="nf">getLastUpdated</span><span class="p">()</span> <span class="o">&gt;</span> <span class="nx">lastCheck</span><span class="p">)</span> <span class="p">{</span>
        <span class="nx">console</span><span class="p">.</span><span class="nf">log</span><span class="p">(</span><span class="s2">`Auto-syncing recently modified document: </span><span class="p">${</span><span class="nx">file</span><span class="p">.</span><span class="nf">getName</span><span class="p">()}</span><span class="s2">`</span><span class="p">);</span>
        <span class="nf">syncDocument</span><span class="p">(</span><span class="nx">file</span><span class="p">);</span>
        <span class="nx">modifiedCount</span><span class="o">++</span><span class="p">;</span>
      <span class="p">}</span>
    <span class="p">}</span>

    <span class="k">if </span><span class="p">(</span><span class="nx">modifiedCount</span> <span class="o">===</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
      <span class="nx">console</span><span class="p">.</span><span class="nf">log</span><span class="p">(</span><span class="dl">'</span><span class="s1">No recently modified documents found</span><span class="dl">'</span><span class="p">);</span>
    <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
      <span class="nx">console</span><span class="p">.</span><span class="nf">log</span><span class="p">(</span><span class="s2">`Synced </span><span class="p">${</span><span class="nx">modifiedCount</span><span class="p">}</span><span class="s2"> modified document(s)`</span><span class="p">);</span>
    <span class="p">}</span>

  <span class="p">}</span> <span class="k">catch </span><span class="p">(</span><span class="nx">error</span><span class="p">)</span> <span class="p">{</span>
    <span class="nx">console</span><span class="p">.</span><span class="nf">error</span><span class="p">(</span><span class="dl">'</span><span class="s1">Error in periodic sync:</span><span class="dl">'</span><span class="p">,</span> <span class="nx">error</span><span class="p">);</span>
  <span class="p">}</span>
<span class="p">}</span>
</code></pre></div></div> <p>Deze functie toont verschillende optimalisatietechnieken die automatische synchronisatie efficiënt en betrouwbaar maken:</p> <p><strong>Filtering op Basis van Tijdstempel</strong>: De functie verwerkt alleen documenten die binnen de laatste 5 minuten zijn gewijzigd (overeenkomend met de triggerfrequentie). Dit vermindert het aantal documenten dat bij elke uitvoering moet worden gecontroleerd drastisch.</p> <p><strong>Minimale Verwerking</strong>: Door wijzigingstijdstempels te controleren voordat zware verwerking plaatsvindt (zoals formaatconversie of API-aanroepen), minimaliseert de functie het gebruik van middelen wanneer er geen wijzigingen hebben plaatsgevonden.</p> <p><strong>Prestatiebewaking</strong>: De functie houdt bij en rapporteert hoeveel documenten daadwerkelijk zijn gesynchroniseerd, wat inzicht biedt en helpt bij het identificeren van mogelijke problemen.</p> <p><strong>Niet-Verstorende Werking</strong>: Als er geen documenten zijn gewijzigd, voltooit de functie snel zonder onnodige bewerkingen uit te voeren. Dit zorgt ervoor dat de automatische synchronisatie de prestaties niet beïnvloedt wanneer er geen werk te doen is.</p> <p><strong>Consistente Foutafhandeling</strong>: Zelfs geautomatiseerde functies bevatten uitgebreide foutafhandeling om ervoor te zorgen dat tijdelijke problemen het synchronisatiesysteem niet permanent verstoren.</p> <p>Het synchronisatie-interval van 5 minuten biedt een optimale balans tussen responsiviteit en efficiëntie. Wijzigingen aan Google Docs worden binnen 5 minuten weerspiegeld in DocuGenerate-sjablonen, wat snel genoeg is voor de meeste bedrijfsworkflows, terwijl het systeem de systeembronnen ontziet.</p> <h2 id="initiele-installatie-en-test">Initiële Installatie en Test van Handmatige Synchronisatie</h2> <p>Voordat u uw synchronisatieoplossing implementeert voor regelmatig gebruik, is het belangrijk om alle onderdelen grondig te testen, om ervoor te zorgen dat ze correct werken met uw specifieke Google Drive-map en DocuGenerate-accountconfiguratie. Goed testen helpt eventuele configuratieproblemen te identificeren en bevestigt dat de synchronisatielogica verschillende scenario’s correct verwerkt.</p> <p>Begin met het testen van de functie voor <a href="#de-functie-voor-handmatige-synchronisatie-bouwen">handmatige synchronisatie</a>, die directe feedback biedt en helpt bij het tot stand brengen van de initiële verbindingen tussen uw Google Docs en DocuGenerate-sjablonen.</p> <h3 id="testdocumenten-voorbereiden">Testdocumenten Voorbereiden</h3> <p>Maak een paar testdocumenten in Google Docs in uw gecontroleerde map met verschillende soorten content (eenvoudige tekst, opgemaakte tekst, tabellen, afbeeldingen), om ervoor te zorgen dat het conversieproces verschillende documenttypes correct verwerkt. Voor deze tutorial gebruiken we de sjablonen <strong>Software licensing agreement</strong> en <strong>General release of liability</strong> uit Google Docs.</p> <p><img src="https://www.docugenerate.com/assets/posts/025-sync-google-docs/google-docs-documents.png" alt="Google Docs-documenten"/></p> <h3 id="handmatige-synchronisatie-uitvoeren">Handmatige Synchronisatie Uitvoeren</h3> <p>Voer de functie <code class="language-plaintext highlighter-rouge">manualSync()</code> uit vanuit de Apps Script-editor en volg het uitvoeringslogboek. U zou gedetailleerde uitvoer moeten zien die toont welke documenten worden verwerkt en of sjablonen succesvol worden gemaakt.</p> <p><img src="https://www.docugenerate.com/assets/posts/025-sync-google-docs/manual-sync-logs.png" alt="Uitvoeringslogboek van de handmatige synchronisatie"/></p> <h3 id="sjabloonaanmaak-verifieren">Sjabloonaanmaak Verifiëren</h3> <p>Controleer uw DocuGenerate-account om te bevestigen dat nieuwe sjablonen zijn gemaakt met de juiste namen en content. De sjablonen moeten alle opmaak van de originele Google Docs behouden.</p> <p><img src="https://www.docugenerate.com/assets/posts/025-sync-google-docs/manual-sync.gif" alt="Demo van de uitvoering van de handmatige synchronisatie"/></p> <p>Deze initiële test bevestigt dat uw synchronisatieautomatisering correct is geconfigureerd en succesvol nieuwe sjablonen kan maken op basis van uw Google Docs. Nu de handmatige synchronisatie correct werkt, bent u klaar om automatische synchronisatie in te stellen.</p> <h2 id="test-van-automatische-synchronisatie">Test van Automatische Synchronisatie</h2> <p>Zodra handmatige synchronisatie correct werkt, is het tijd om het systeem voor <a href="#automatische-synchronisatie-implementeren">automatische synchronisatie</a> te testen, dat de kern vormt van uw doorlopende synchronisatieworkflow. Dit proces is complexer, omdat het afhankelijk is van tijdgebaseerde triggers en algoritmes voor wijzigingsdetectie om te bepalen welke documenten moeten worden bijgewerkt.</p> <h3 id="triggers-instellen">Triggers Instellen</h3> <p>Voer de functie <code class="language-plaintext highlighter-rouge">setupAutoSync()</code> uit om de <a href="#tijdgebaseerde-triggers-instellen">tijdgebaseerde trigger</a> te maken. U zou gedetailleerde uitvoerlogs moeten zien om er zeker van te zijn dat de installatie van de automatische synchronisatie succesvol is voltooid.</p> <p><img src="https://www.docugenerate.com/assets/posts/025-sync-google-docs/setup-auto-sync.png" alt="Uitvoeringslogboek van de installatie van automatische synchronisatie"/></p> <p>Na het uitvoeren van de installatiefunctie is het belangrijk om te controleren of de trigger succesvol is gemaakt en is geconfigureerd met de juiste parameters. Navigeer naar de sectie <strong>Triggers</strong> in de linkerzijbalk van de Apps Script-editor om alle triggers te bekijken die aan uw project zijn gekoppeld. U zou een nieuwe tijdgebaseerde trigger moeten zien die de functie <code class="language-plaintext highlighter-rouge">autoSync</code> elke 5 minuten aanroept.</p> <p><img src="https://www.docugenerate.com/assets/posts/025-sync-google-docs/apps-script-trigger.png" alt="Uitvoeringslogboek van de installatie van automatische synchronisatie"/></p> <h3 id="testwijzigingen-aanbrengen">Testwijzigingen Aanbrengen</h3> <p>Wijzig uw testdocumenten en wacht op de volgende automatische synchronisatiecyclus (tot 5 minuten). De automatisering zou de wijziging moeten detecteren en het bijbehorende DocuGenerate-sjabloon bijwerken. In ons geval hebben we de groene markering van de merge-tags verwijderd om de documentupdate te activeren, wat een typische opmaakwijziging vertegenwoordigt die teams zouden kunnen maken tijdens gezamenlijke bewerkingssessies.</p> <p><img src="https://www.docugenerate.com/assets/posts/025-sync-google-docs/google-docs-updated.png" alt="Bijgewerkte Google Docs-documenten"/></p> <h3 id="updates-verifieren">Updates Verifiëren</h3> <p>Volg de uitvoeringslogs van Apps Script om te bevestigen dat de <a href="#efficiente-wijzigingsdetectie">functie voor automatische synchronisatie</a> uw wijzigingen heeft gedetecteerd en correct heeft verwerkt. De onderstaande uitvoeringslogs tonen hoe het systeem onlangs gewijzigde documenten identificeert en de bijbehorende DocuGenerate-sjablonen succesvol bijwerkt.</p> <p><img src="https://www.docugenerate.com/assets/posts/025-sync-google-docs/auto-sync-logs.png" alt="Uitvoeringslogboek van de automatische synchronisatie"/></p> <p>Log ten slotte in op uw DocuGenerate-account en controleer of de wijzigingen aan uw Google Docs correct zijn gesynchroniseerd naar de bijbehorende sjablonen. Controleer of opmaakwijzigingen, tekstwijzigingen, en eventuele structurele updates correct worden weerspiegeld in de sjabloon-inhoud. Deze verificatiestap voltooit de testcyclus en bevestigt dat uw oplossing voor automatische synchronisatie correct functioneert.</p> <p><img src="https://www.docugenerate.com/assets/posts/025-sync-google-docs/docugenerate-templates-updated.png" alt="Bijgewerkte sjablonen op DocuGenerate"/></p> <p>Nu de test van de automatische synchronisatie is voltooid, is uw synchronisatiesysteem volledig operationeel en blijft het uw Google Drive-map elke 5 minuten controleren op wijzigingen, zodat uw DocuGenerate-sjablonen actueel blijven zonder enige handmatige inspanning.</p> <h2 id="toekomstige-verbeteringen-en-aanpassingen">Toekomstige Verbeteringen en Aanpassingen</h2> <p>De synchronisatieworkflow die we hebben gebouwd, biedt een solide basis die kan worden uitgebreid met extra functies op basis van uw specifieke behoeften. Deze verbeteringen zouden de basisautomatisering voor synchronisatie transformeren in een complete oplossing voor sjabloonbeheer.</p> <h3 id="geavanceerde-bewakingsmogelijkheden">Geavanceerde Bewakingsmogelijkheden</h3> <ul> <li> <p><strong>Ondersteuning voor Meerdere Mappen</strong>: Wijzig het script om meerdere Google Drive-mappen tegelijk te controleren, elk mogelijk synchroniserend naar verschillende DocuGenerate-accounts of met verschillende verwerkingsregels.</p> </li> <li> <p><strong>Selectieve Synchronisatie</strong>: Implementeer documentfiltering op basis van naamgevingspatronen, documenteigenschappen, of metadatatags, om u fijnmazige controle te geven over welke documenten worden gesynchroniseerd.</p> </li> </ul> <h3 id="integratieverbeteringen">Integratieverbeteringen</h3> <ul> <li> <p><strong>Ondersteuning voor Regionale Eindpunten</strong>: Selecteer automatisch optimale regionale eindpunten van DocuGenerate op basis van uw geografische locatie of teamverdeling.</p> </li> <li> <p><strong>Uitgebreide Formaatondersteuning</strong>: Breid de oplossing uit om Microsoft Word-documenten die zijn opgeslagen in Google Drive te verwerken, wat synchronisatiemogelijkheden biedt voor teams die werken met gemengde documentformaten.</p> </li> </ul> <h3 id="verwijdering-afhandelen">Verwijdering Afhandelen</h3> <ul> <li> <p><strong>Synchronisatie bij Documentverwijdering</strong>: Implementeer logica om documentverwijderingen in Google Drive af te handelen, door bijbehorende sjablonen uit DocuGenerate te verwijderen.</p> </li> <li> <p><strong>Sjabloonopruiming</strong>: Maak functies om verweesde sjablonen in DocuGenerate te identificeren en op te ruimen die niet langer een bijbehorend Google Doc hebben.</p> </li> </ul> <h2 id="conclusie">Conclusie</h2> <p>Het synchroniseren van Google Docs met DocuGenerate elimineert de handmatige wrijving die teams vaak verhindert om actuele sjablonen te behouden, terwijl ze profiteren van krachtige mogelijkheden voor documentgeneratie. Het geautomatiseerde systeem dat we hebben gebouwd, overbrugt de kloof tussen gezamenlijke documentbewerking en professionele documentgeneratie, waardoor uw team op natuurlijke wijze in Google Docs kan blijven werken, terwijl uw DocuGenerate-sjablonen altijd de nieuwste wijzigingen weerspiegelen.</p> <p>Door deze oplossing te implementeren, kan uw team Google Docs blijven gebruiken voor gezamenlijke sjabloonontwikkeling, terwijl ze profiteren van de geavanceerde documentgeneratiemogelijkheden die DocuGenerate biedt. De automatische synchronisatie zorgt ervoor dat wijzigingen die tijdens gezamenlijke bewerkingssessies worden aangebracht, onmiddellijk beschikbaar zijn voor documentgeneratieworkflows, wat een krachtige combinatie van tools creëert die zowel de productiviteit als de documentkwaliteit verbetert.</p> <p>Het modulaire ontwerp van onze synchronisatieoplossing maakt het eenvoudig om aan te passen en uit te breiden op basis van uw specifieke vereisten. Of u nu meerdere mappen moet controleren, aangepaste filterregels moet implementeren, of moet integreren met aanvullende systemen, de basis die we hebben gelegd biedt een robuust platform voor toekomstige verbeteringen.</p> <h2 id="bronnen">Bronnen</h2> <ul> <li><a href="https://www.docugenerate.com/assets/posts/025-sync-google-docs/apps-script.txt" target="_blank">Complete Apps Script-code</a> - Download het volledige synchronisatiescript</li> <li><a href="https://developers.google.com/apps-script" target="_blank" rel="nofollow noopener">Google Apps Script-documentatie</a> - Officiële gids en API-referentie van Google Apps Script</li> <li><a href="https://developers.google.com/workspace/drive/api/guides/properties" target="_blank" rel="nofollow noopener">Gids voor Google Drive API-eigenschappen</a> - Werken met aangepaste bestandseigenschappen</li> <li><a href="https://api.docugenerate.com/" target="_blank">DocuGenerate API-documentatie</a> - Volledige API-referentie voor DocuGenerate-integratie</li> </ul>]]></content> <author> <name>DocuGenerate</name> <email>support@docugenerate.com</email> </author> <category term="Templates"/> <category term="Google Docs"/> <category term="Apps Script"/> <summary type="html"><![CDATA[Ontdek hoe u automatisch nieuwe sjablonen maakt wanneer Google Docs aan een map worden toegevoegd, en sjablonen bijwerkt wanneer documenten worden gewijzigd. Perfect voor teams die liever in Google Docs werken, maar de kracht van DocuGenerate nodig hebben voor documentgeneratie.]]></summary> <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.docugenerate.com/assets/posts/025-sync-google-docs/cover-image-v3.png"/> <media:content medium="image" url="https://www.docugenerate.com/assets/posts/025-sync-google-docs/cover-image-v3.png" xmlns:media="http://search.yahoo.com/mrss/"/> </entry> <entry> <title type="html">Hoe Verstuurt u Gegenereerde Documenten als E-mailbijlagen in Bubble</title> <link href="https://www.docugenerate.com/nl/blog/hoe-verstuurt-u-gegenereerde-documenten-als-e-mailbijlagen-in-bubble/" rel="alternate" type="text/html" title="Hoe Verstuurt u Gegenereerde Documenten als E-mailbijlagen in Bubble"/> <published>2025-08-17T00:00:00+00:00</published> <updated>2025-08-17T00:00:00+00:00</updated> <id>https://www.docugenerate.com/nl/blog/hoe-verstuurt-u-gegenereerde-documenten-als-e-mailbijlagen-in-bubble</id> <content type="html" xml:base="https://www.docugenerate.com/nl/blog/hoe-verstuurt-u-gegenereerde-documenten-als-e-mailbijlagen-in-bubble/"><![CDATA[<h2 id="introductie">Introductie</h2> <p>Het bouwen van professionele onboardingsystemen voor klanten kan complex zijn, vooral wanneer u gepersonaliseerde documenten moet genereren en deze automatisch per e-mail moet versturen. Traditionele aanpakken vereisen vaak uitgebreid ontwikkelwerk, aangepaste integraties, en aanzienlijke technische expertise. Met moderne no-code platforms zoals <a href="https://bubble.io/" target="_blank" rel="nofollow noopener">Bubble</a>, gecombineerd met gespecialiseerde diensten voor documentgeneratie, kunt u echter geavanceerde workflows creëren die alles verzorgen, van gegevensverzameling tot documentbezorging.</p> <p>In deze uitgebreide tutorial bouwen we een compleet onboardingsysteem voor klanten dat klantinformatie verzamelt via een webformulier, gepersonaliseerde geheimhoudingsverklaringen (NDA’s) genereert op basis van die data, en de voltooide documenten automatisch als e-mailbijlagen verstuurt. Deze aanpak toont hoe u het visuele ontwikkelplatform van Bubble kunt combineren met de API voor documentgeneratie van DocuGenerate om professionele bedrijfsworkflows te creëren zonder code te schrijven.</p> <p>Het systeem dat we maken, toont verschillende krachtige concepten: geautomatiseerde documentgeneratie op basis van formulierinzendingen, integratie tussen no-code platforms en externe API’s, en professionele e-mailbezorging met bestandsbijlagen. Deze workflow is bijzonder waardevol voor bedrijven die op grote schaal klantovereenkomsten, contracten, of andere gepersonaliseerde documenten moeten verwerken, terwijl een professionele uitstraling en betrouwbare bezorging behouden blijven.</p> <h2 id="de-ai-paginaontwerper-van-bubble-benutten">De AI-Paginaontwerper van Bubble Benutten</h2> <p>Om ons ontwikkelproces te versnellen, gebruiken we de innovatieve functie voor AI-paginaontwerp van Bubble, waarmee complete applicatie-interfaces kunnen worden gegenereerd op basis van beschrijvingen in natuurlijke taal. Deze functie, publiekelijk uitgebracht als bèta halverwege juni 2024 en officieel aangekondigd tijdens het evenement <a href="https://bubble.io/blog/event-recap-ai-founder-tools/" target="_blank" rel="nofollow noopener">Zero to One With AI + No-Code</a>, vertegenwoordigt een belangrijke vooruitgang in no-code applicatieontwikkeling.</p> <p>Met de AI-paginaontwerper kunnen we onze vereisten in gewone taal beschrijven en een volledig functionele applicatiestructuur ontvangen, compleet met formulieren, workflows, en datatypes. Deze aanpak vermindert de ontwikkeltijd aanzienlijk, terwijl wordt gewaarborgd dat de gegenereerde applicatie de best practices en ontwerppatronen van Bubble volgt.</p> <p>Voor ons NDA-ondertekeningssysteem geven we de volgende gedetailleerde prompt aan de AI-ontwerper:<br/> <em>“Help me create a web page that will allow my clients to sign NDAs. The web page needs to be modern and contain a form with the following fields: Name, Address, Email and Country. The form data will be used to generate the NDA using DocuGenerate and send it by email to the client.”</em></p> <p><img src="https://www.docugenerate.com/assets/posts/024-email-attachments-bubble/ai-prompt.png" alt="AI-prompt voor het genereren van de NDA-applicatie"/></p> <p>Deze prompt geeft de AI voldoende context om zowel de functionele vereisten (formuliervelden, gegevensverwerking) als de beoogde workflow (documentgeneratie en e-mailbezorging) te begrijpen. De AI gebruikt deze informatie om passende datastructuren, gebruikersinterface-elementen, en initiële workflowconfiguraties te maken.</p> <p><img src="https://www.docugenerate.com/assets/posts/024-email-attachments-bubble/ai-generating.png" alt="AI genereert de applicatie-interface"/></p> <p>Het generatieproces duurt doorgaans enkele minuten, waarin de AI van Bubble de vereisten analyseert, de benodigde componenten maakt, en deze samenvoegt tot een samenhangende applicatie. Het is belangrijk om het browsertabblad open te houden tijdens dit proces, aangezien het sluiten ervan de generatie kan onderbreken.</p> <h2 id="de-structuur-van-de-gegenereerde-applicatie-begrijpen">De Structuur van de Gegenereerde Applicatie Begrijpen</h2> <p>Zodra de AI het generatieproces voltooit, heeft u een volledig functionele applicatie met meerdere pagina’s, datastructuren, en initiële workflows. De gegenereerde applicatie toont de systematische aanpak van Bubble voor applicatiearchitectuur, met duidelijke scheiding tussen verschillende functionele gebieden en logische gegevensorganisatie. De door AI gegenereerde applicatie bevat twee primaire pagina’s die samenwerken om een volledige gebruikerservaring te creëren.</p> <h3 id="indexpagina">Indexpagina</h3> <p>Dit dient als het belangrijkste toegangspunt waar klanten met uw systeem interageren. De pagina heeft een strak, modern ontwerp met een uitgebreid formulier dat alle benodigde informatie verzamelt voor NDA-generatie. Het formulier bevat velden voor <strong>Name</strong>, <strong>Address</strong>, <strong>Email Address</strong>, en <strong>Country</strong>, samen met een prominente knop <strong>Submit NDA Request</strong> die de workflow voor documentgeneratie en e-mailbezorging start.</p> <p><img src="https://www.docugenerate.com/assets/posts/024-email-attachments-bubble/app-index-page.png" alt="Hoofdformulier op de indexpagina"/></p> <p>Het ontwerp van de indexpagina geeft prioriteit aan de gebruikerservaring met duidelijke labels, passende formuliervalidatie, en visuele feedback. De lay-out is responsief en professioneel, zodat klanten het formulier eenvoudig kunnen invullen, ongeacht hun apparaat of technische expertise.</p> <h3 id="bevestigingspagina">Bevestigingspagina</h3> <p>Na het indienen van het formulier worden gebruikers automatisch doorgestuurd naar deze pagina, die directe feedback geeft over de status van hun verzoek. De bevestigingspagina toont de ingediende informatie en de huidige verwerkingsstatus, wat transparantie creëert en het vertrouwen van de gebruiker in het systeem opbouwt.</p> <p><img src="https://www.docugenerate.com/assets/posts/024-email-attachments-bubble/app-confirmation-page.png" alt="Bevestigingspagina met inzendingsdetails"/></p> <p>Deze structuur met twee pagina’s volgt gevestigde patronen voor formuliergebaseerde applicaties, en biedt gebruikers duidelijke feedback terwijl de betrokkenheid gedurende het proces behouden blijft.</p> <h3 id="datatype-architectuur">Datatype-Architectuur</h3> <p>De AI-ontwerper maakt automatisch het datatype <code class="language-plaintext highlighter-rouge">NdaSubmission</code>, dat dient als basis voor het opslaan en beheren van klantinformatie gedurende de hele workflow. Deze datastructuur is ontworpen om zowel de eerste formulierinzending als de verschillende velden voor statustracking te verwerken, die nodig zijn voor documentgeneratie en e-mailbezorging.</p> <p><img src="https://www.docugenerate.com/assets/posts/024-email-attachments-bubble/nda-submission-data-type.png" alt="Structuur van het datatype NDA Submission"/></p> <p>Het datatype <code class="language-plaintext highlighter-rouge">NdaSubmission</code> bevat de volgende velden:</p> <ul> <li><code class="language-plaintext highlighter-rouge">address</code> (tekst): Slaat de volledige adresinformatie van de klant op</li> <li><code class="language-plaintext highlighter-rouge">confirmation_email_sent</code> (ja/nee): Houdt bij of de initiële bevestigingsmail is verstuurd</li> <li><code class="language-plaintext highlighter-rouge">country</code> (tekst): Registreert de landinformatie van de klant</li> <li><code class="language-plaintext highlighter-rouge">docugenerate_status</code> (tekst): Volgt de status van het documentgeneratieproces</li> <li><code class="language-plaintext highlighter-rouge">email</code> (tekst): Bevat het e-mailadres van de klant voor documentbezorging</li> <li><code class="language-plaintext highlighter-rouge">name</code> (tekst): Slaat de volledige naam van de klant op</li> <li><code class="language-plaintext highlighter-rouge">nda_email_sent</code> (ja/nee): Geeft aan of de NDA succesvol is bezorgd</li> <li><code class="language-plaintext highlighter-rouge">submission_date</code> (datum): Registreert wanneer het formulier oorspronkelijk is ingediend</li> </ul> <p>Deze uitgebreide datastructuur ondersteunt zowel de directe workflowvereisten als toekomstige verbeteringen, zoals rapportage, analyses, en geavanceerde statustracking.</p> <h3 id="vulling-met-voorbeelddata">Vulling met Voorbeelddata</h3> <p>De gegenereerde applicatie bevat een doordachte voorbeelddataset die de tabel <code class="language-plaintext highlighter-rouge">NdaSubmission</code> vult met realistische vermeldingen. Deze voorbeelddata dient meerdere doelen: het toont het verwachte dataformaat, biedt direct content om workflows te testen, en biedt voorbeelden van hoe het systeem verschillende klantscenario’s verwerkt.</p> <p><img src="https://www.docugenerate.com/assets/posts/024-email-attachments-bubble/nda-submission-app-data.png" alt="Voorbeelddata in de tabel NDA Submission"/></p> <p>Doordat voorbeelddata direct beschikbaar is, kunt u de volledige workflow testen zonder handmatig testitems te hoeven maken. Deze aanpak versnelt de ontwikkeling en zorgt ervoor dat u kunt verifiëren dat alle systeemonderdelen correct werken voordat u naar productie gaat.</p> <h2 id="de-docugenerate-plugin-installeren-en-configureren">De DocuGenerate-Plugin Installeren en Configureren</h2> <p>Om mogelijkheden voor documentgeneratie in te schakelen in onze Bubble-applicatie, moeten we de <a href="https://bubble.io/plugin/docugenerate-1730225425528x319288222630019100" target="_blank">DocuGenerate-plugin</a> uit de marketplace van Bubble installeren en configureren. Deze plugin biedt rechtstreekse toegang tot de API-functionaliteit van DocuGenerate via het visuele workflowsysteem van Bubble, waardoor aangepaste API-integratie niet meer nodig is.</p> <p>Het installatieproces van de plugin is eenvoudig en volgt de standaardprocedures voor pluginbeheer van Bubble. Navigeer naar de sectie <strong>Plugins</strong> in uw Bubble-editor en zoek naar “DocuGenerate” in de marketplace, klik vervolgens op <strong>Install</strong>:</p> <p><img src="https://www.docugenerate.com/assets/posts/024-email-attachments-bubble/install-docugenerate-plugin.png" alt="De DocuGenerate-plugin installeren"/></p> <p>Na het installeren van de plugin moet u deze configureren met uw DocuGenerate API-gegevens. Deze configuratie legt de verbinding tussen uw Bubble-applicatie en uw DocuGenerate-account, en maakt veilige communicatie mogelijk voor documentgeneratieverzoeken.</p> <p><img src="https://www.docugenerate.com/assets/posts/024-email-attachments-bubble/configure-docugenerate-plugin.png" alt="De DocuGenerate-plugin configureren"/></p> <p>De configuratie vereist uw DocuGenerate-<a href="https://www.docugenerate.com/nl/hulp/articles/waar-vind-ik-mijn-api-sleutel/">API-sleutel</a>, die u kunt vinden in uw accountinstellingen van DocuGenerate. Deze API-sleutel authenticeert uw verzoeken en zorgt ervoor dat gegenereerde documenten correct worden gekoppeld aan uw account en gebruikslimieten.</p> <p>Eenmaal geconfigureerd, biedt de plugin toegang tot alle functionaliteit van DocuGenerate via het actiesysteem van Bubble, waaronder documentgeneratie, sjabloonbeheer, en statusmonitoring. De plugin verzorgt automatisch de authenticatie, verzoekopmaak, en antwoordverwerking, zodat u zich kunt richten op het bouwen van uw applicatielogica in plaats van het beheren van integratiedetails van de API.</p> <h2 id="het-nda-sjabloon-maken">Het NDA-Sjabloon Maken</h2> <p>Voordat we gepersonaliseerde NDA’s kunnen genereren, moeten we een sjabloon maken dat de documentstructuur definieert en aangeeft waar klantspecifieke informatie moet worden ingevoegd. Voor deze tutorial gebruiken we het sjabloon <a href="https://www.docugenerate.com/assets/posts/024-email-attachments-bubble/Non Disclosure Agreement.docx">Non Disclosure Agreement</a> uit de <a href="https://www.docugenerate.com/nl/sjablonen/#contracten">Sjabloonbibliotheek</a> van DocuGenerate, die een professioneel opgemaakt juridisch document biedt met passende merge-tags.</p> <p><img src="https://www.docugenerate.com/assets/posts/024-email-attachments-bubble/docugenerate-nda-template.png" alt="Voorbeeld van het DocuGenerate NDA-sjabloon"/></p> <p>Het sjabloon bevat verschillende belangrijke secties die het geschikt maken voor onze geautomatiseerde workflow:</p> <ul> <li> <p><strong>Partijinformatie</strong>: Het sjabloon bevat speciale secties voor zowel de openbaarmakende partij (uw bedrijf) als de ontvangende partij (de klant), met merge-tags die worden ingevuld met informatie uit ons Bubble-formulier.</p> </li> <li> <p><strong>Juridisch Kader</strong>: Alle benodigde juridische taal is vooraf geschreven en op de juiste manier opgemaakt, zodat de gegenereerde documenten professionele juridische normen behouden zonder dat juridische expertise nodig is om ze te maken.</p> </li> <li> <p><strong>Merge-Tag-Integratie</strong>: Strategische plaatsing van merge-tags door het hele document maakt dynamische content-invoeging mogelijk, terwijl de juiste opmaak en juridische structuur behouden blijven.</p> </li> </ul> <p>Het sjabloon gebruikt de <a href="https://www.docugenerate.com/nl/hulp/articles/wat-zijn-merge-tags/">merge-tag-syntax</a> van DocuGenerate om aan te geven waar dynamische content moet worden ingevoegd. Deze tags komen overeen met de data die we verzamelen in ons Bubble-formulier en versturen via de API van DocuGenerate tijdens het generatieproces.</p> <h2 id="de-workflow-voor-documentgeneratie-bouwen">De Workflow voor Documentgeneratie Bouwen</h2> <p>De door AI gegenereerde applicatie biedt een basisworkflow die we moeten uitbreiden met mogelijkheden voor documentgeneratie en e-mailbezorging. De initiële workflow bevat basisverwerking van formulieren en paginanavigatie, maar we breiden deze uit om het volledige proces van documentautomatisering te omvatten.</p> <h3 id="analyse-van-de-initiele-workflow">Analyse van de Initiële Workflow</h3> <p>De bestaande workflow op de indexpagina bevat drie primaire stappen die het basisproces van formulierinzending afhandelen:</p> <ol> <li><strong>Event Trigger</strong>: Wordt geactiveerd wanneer op de knop <strong>Submit NDA Request</strong> wordt geklikt</li> <li><strong>Gegevens Aanmaken</strong>: Maakt een nieuw record <code class="language-plaintext highlighter-rouge">NdaSubmission</code> met formulierdata</li> <li><strong>Navigatie</strong>: Stuurt de gebruiker door naar de bevestigingspagina</li> </ol> <p><img src="https://www.docugenerate.com/assets/posts/024-email-attachments-bubble/submit-nda-initial-workflow-v2.png" alt="Configuratie van de initiële workflow"/></p> <p>Deze basisworkflow legt de formulierdata vast en biedt gebruikersfeedback, maar bevat nog niet de functionaliteit voor documentgeneratie of e-mailbezorging die we nodig hebben. We bouwen hierop voort door extra workflowstappen toe te voegen die deze geavanceerde functies afhandelen.</p> <h3 id="documentgeneratie-toevoegen">Documentgeneratie Toevoegen</h3> <p>De volgende stap betreft het toevoegen van een action voor documentgeneratie aan onze workflow. Deze action wordt geactiveerd onmiddellijk nadat de formulierdata is opgeslagen, zodat de documentgeneratie begint zodra de klantinformatie beschikbaar is in het systeem.</p> <p>Om de stap voor documentgeneratie toe te voegen, klikt u op de knop <strong>+</strong> na de bestaande workflowstappen, navigeert u naar de sectie <strong>Plugins</strong>, en selecteert u <strong>DocuGenerate - Generate Document</strong>.</p> <p><img src="https://www.docugenerate.com/assets/posts/024-email-attachments-bubble/add-generate-document-action-v2.png" alt="De action voor het genereren van een document toevoegen"/></p> <p>De <a href="https://www.docugenerate.com/nl/hulp/articles/documentgeneratie-automatiseren-met-bubble/#generate-document">action voor documentgeneratie</a> vereist verschillende configuratieparameters die onze formulierdata verbinden met het DocuGenerate-sjabloon:</p> <ul> <li> <p><code class="language-plaintext highlighter-rouge">template_id</code>: Dit identificeert het specifieke NDA-sjabloon dat we in DocuGenerate hebben gemaakt. Elk sjabloon heeft een <a href="https://www.docugenerate.com/nl/hulp/articles/hoe-vind-ik-de-sjabloon-id/">unieke ID</a> die het systeem vertelt welke documentstructuur moet worden gebruikt voor de generatie.</p> </li> <li> <p><code class="language-plaintext highlighter-rouge">name</code>: We stellen dit in om dynamisch de naam van de klant op te nemen. Dit creëert beschrijvende bestandsnamen waardoor gegenereerde documenten eenvoudig te herkennen zijn.</p> </li> <li> <p><code class="language-plaintext highlighter-rouge">output_format</code>: Voer <code class="language-plaintext highlighter-rouge">.pdf</code> in om PDF-documenten te genereren, die zorgen voor consistente opmaak op verschillende apparaten en platforms, met behoud van een professionele uitstraling.</p> </li> <li> <p><code class="language-plaintext highlighter-rouge">data</code>: Dit is het meest complexe onderdeel van de configuratie, aangezien het vereist dat onze formulierdata wordt gekoppeld aan de merge-tags in het sjabloon. De data moet worden opgemaakt als een JSON-array met de dynamische waarden uit onze formulierinzending.</p> </li> </ul> <p><img src="https://www.docugenerate.com/assets/posts/024-email-attachments-bubble/config-generate-document-action-v2.png" alt="De action voor het genereren van een document configureren"/></p> <p>Deze JSON-structuur koppelt elke merge-tag in het sjabloon aan ofwel statische informatie (zoals uw bedrijfsgegevens) ofwel dynamische data uit de formulierinzending. De dynamische waarden gebruiken de syntax van Bubble om te verwijzen naar de data die is gemaakt in de eerste workflowstap, zodat elk gegenereerd document de juiste klantinformatie bevat:</p> <div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">[{</span><span class="w">
  </span><span class="nl">"Effective Date"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Result of step 1 (Create a new NdaSubmission)'s submission_date:formatted as 8/30/25"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"Disclosing Party Name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"NDA Signer"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"Disclosing Party Address"</span><span class="p">:</span><span class="w"> </span><span class="s2">"93 East Lassen Street, Los Angeles, CA, 90013"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"Receiving Party Name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Result of step 1 (Create a new NdaSubmission)'s name"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"Receiving Party Address"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Result of step 1 (Create a new NdaSubmission)'s address"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"Governing Country"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Result of step 1 (Create a new NdaSubmission)'s country"</span><span class="w">
</span><span class="p">}]</span><span class="w">
</span></code></pre></div></div> <h3 id="e-mailbezorging-implementeren">E-mailbezorging Implementeren</h3> <p>De laatste workflowstap verzorgt de e-mailbezorging van het gegenereerde document. Dit houdt in dat de <a href="https://manual.bubble.io/core-resources/actions/email" target="_blank" rel="nofollow noopener">native e-mailfunctie van Bubble</a> wordt gebruikt om de PDF als bijlage te versturen naar het e-mailadres van de klant. Het e-mailbezorgingssysteem zorgt voor professionele communicatie, terwijl klanten hun documenten snel en betrouwbaar ontvangen.</p> <p>Om de e-mailstap toe te voegen, klikt u op het teken <strong>+</strong> na de stap voor documentgeneratie en selecteert u <strong>Send email</strong> in het submenu <strong>Email</strong>:</p> <p><img src="https://www.docugenerate.com/assets/posts/024-email-attachments-bubble/email-add-action-v2.png" alt="De action voor e-mailbezorging toevoegen"/></p> <p>De e-mailconfiguratie vereist verschillende parameters die een professionele communicatie-ervaring creëren:</p> <ul> <li> <p><strong>Recipient</strong>: Stel in op <code class="language-plaintext highlighter-rouge">Result of step 1 (Create a new NdaSubmission)'s email</code> om automatisch te versturen naar het door de klant ingevoerde e-mailadres.</p> </li> <li> <p><strong>Sender Name</strong>: Gebruik een professionele naam zoals “NDA Signer” of uw bedrijfsnaam om geloofwaardigheid en merkherkenning op te bouwen.</p> </li> <li> <p><strong>Subject Line</strong>: Maak een duidelijk, professioneel onderwerp zoals “Your NDA is ready” dat het doel van de e-mail onmiddellijk communiceert.</p> </li> <li> <p><strong>Email Body</strong>: Stel een gepersonaliseerd bericht op dat professioneel blijft.</p> </li> <li> <p><strong>File Attachment</strong>: Dit is het meest cruciale configuratiepunt. Stel dit in op <code class="language-plaintext highlighter-rouge">Result of step 2 (DocuGenerate - Generate Document)'s document_uri:saved to Bubble Storage</code>.</p> </li> </ul> <p><img src="https://www.docugenerate.com/assets/posts/024-email-attachments-bubble/email-config-action-v2.png" alt="De action voor e-mailbezorging configureren"/></p> <p>De modifier <a href="https://manual.bubble.io/core-resources/data/operations-and-comparisons#saved-to-bubble-storage" target="_blank" rel="nofollow noopener">:saved to Bubble Storage</a> is essentieel voor de juiste verwerking van e-mailbijlagen. Zonder deze modifier heeft Bubble geen toegang tot het gegenereerde PDF-bestand voor bijlagedoeleinden. Dit vertelt Bubble om het gegenereerde document van DocuGenerate te downloaden en tijdelijk op te slaan in het bestandssysteem van Bubble, waardoor het beschikbaar wordt voor e-mailbijlage.</p> <h2 id="de-volledige-applicatie-testen">De Volledige Applicatie Testen</h2> <p>Nu alle workflowonderdelen zijn geconfigureerd, kunnen we de volledige applicatie testen om te controleren of elke stap correct functioneert en of de integratie tussen Bubble, DocuGenerate, en e-mailbezorging werkt zoals verwacht. Deze testfase is cruciaal om eventuele configuratieproblemen te identificeren voordat de applicatie in productie wordt genomen.</p> <p>Bubble biedt een preview-modus waarmee u uw applicatie kunt testen in een live-omgeving zonder gevolgen voor productiegebruikers. U heeft toegang tot de testversie van onze NDA-applicatie <a href="https://support-55928.bubbleapps.io/version-test?debug_mode=true" target="_blank">hier</a>. De testomgeving biedt mogelijkheden voor debug-modus, die gedetailleerde informatie bieden over workflowuitvoering, gegevensverwerking, en eventuele fouten die tijdens het testen kunnen optreden.</p> <h3 id="nda-generatie-en-e-mailbezorging">NDA-Generatie &amp; E-mailbezorging</h3> <p>Het testproces omvat het doorlopen van het volledige gebruikerstraject, van formulierinzending tot documentontvangst. Gebruik tijdens het testen realistische informatie die uw verwachte klantdata weerspiegelt, om ervoor te zorgen dat het systeem verschillende scenario’s correct verwerkt. Na het invullen van het formulier met klantinformatie verwerkt het systeem het verzoek automatisch via alle workflowstappen:</p> <p><strong>1. Formulierverwerking</strong>: Klantinformatie wordt gevalideerd en opgeslagen in de database.<br/> <strong>2. Documentgeneratie</strong>: De NDA wordt gemaakt met gepersonaliseerde informatie.<br/> <strong>3. E-mailbezorging</strong>: Het voltooide document wordt als bijlage verstuurd.<br/> <strong>4. Gebruikersfeedback</strong>: De bevestigingspagina toont de huidige status.</p> <p>De gegenereerde e-mail toont de professionele uitstraling en functionaliteit van het volledige systeem:</p> <p><img src="https://www.docugenerate.com/assets/posts/024-email-attachments-bubble/email-received.png" alt="Ontvangen e-mail met NDA-bijlage"/></p> <p>De e-mail bevat de gepersonaliseerde berichtinhoud, professionele opmaak, en de gegenereerde NDA als PDF-bijlage. Dit toont aan dat de volledige workflow correct functioneert en een professionele ervaring biedt voor klanten.</p> <h3 id="verificatie-van-bestandsopslag">Verificatie van Bestandsopslag</h3> <p>Een belangrijk aspect van testen betreft het verifiëren dat gegenereerde documenten correct worden opgeslagen in het bestandsbeheersysteem van Bubble. Deze opslagmogelijkheid biedt back-uptoegang tot gegenereerde documenten en ondersteunt toekomstige verbeteringen, zoals documentgeschiedenis of mogelijkheden om opnieuw te versturen.</p> <p><img src="https://www.docugenerate.com/assets/posts/024-email-attachments-bubble/file-manager.png" alt="Gegenereerde documenten in de bestandsbeheerder van Bubble"/></p> <p>De <a href="https://manual.bubble.io/help-guides/data/files" target="_blank" rel="nofollow noopener">bestandsbeheerder</a> toont dat elke gegenereerde NDA correct wordt opgeslagen met passende naamgevingsconventies, en toegankelijk is voor toekomstige raadpleging. Deze opslagmogelijkheid zorgt ervoor dat uw systeem gegevens bijhoudt van alle gegenereerde documenten, wat nalevingsvereisten en klantenservicebehoeften ondersteunt.</p> <h2 id="conclusie">Conclusie</h2> <p>Het bouwen van een geautomatiseerd systeem voor documentgeneratie en e-mailbezorging met Bubble en DocuGenerate toont de kracht van moderne no-code ontwikkelplatforms in combinatie met gespecialiseerde API’s. Het systeem dat we hebben gemaakt, verwerkt complexe bedrijfsprocessen, waaronder gegevensverzameling, documentpersonalisatie, en professionele communicatie, allemaal zonder traditionele softwareontwikkelingsvaardigheden te vereisen.</p> <p>Deze aanpak biedt aanzienlijke voordelen voor bedrijven die op grote schaal klantdocumenten moeten verwerken. De geautomatiseerde workflow elimineert handmatige documentcreatie, vermindert fouten, zorgt voor consistente opmaak, en biedt professionele klantervaringen. De integratie tussen het visuele ontwikkelplatform van Bubble en de documentgeneratiemogelijkheden van DocuGenerate creëert een oplossing die zowel krachtig als toegankelijk is.</p> <h3 id="bronnen">Bronnen</h3> <ul> <li><a href="https://support-55928.bubbleapps.io/version-test?debug_mode=true" target="_blank">Test Application</a> voor praktische ervaring met de volledige workflow.</li> <li>Documentatie en best practices van <a href="https://bubble.io/blog/ai-page-designer-prompts/" target="_blank" rel="nofollow noopener">Bubble’s AI Page Designer</a>.</li> <li>Installatie- en configuratiegids van de <a href="https://www.docugenerate.com/nl/hulp/articles/documentgeneratie-automatiseren-met-bubble/">DocuGenerate Bubble Plugin</a>.</li> <li>Het sjabloon <a href="https://www.docugenerate.com/assets/posts/024-email-attachments-bubble/Non Disclosure Agreement.docx">Non Disclosure Agreement</a> dat in deze tutorial is gebruikt.</li> </ul>]]></content> <author> <name>DocuGenerate</name> <email>support@docugenerate.com</email> </author> <category term="Email"/> <category term="Bubble"/> <category term="No-Code"/> <summary type="html"><![CDATA[Leer hoe u een volledige workflow in Bubble maakt die gepersonaliseerde NDA's genereert en deze als e-mailbijlagen verstuurt naar klanten. Deze stapsgewijze tutorial laat zien hoe u een professioneel onboardingsysteem voor klanten bouwt met de AI-paginaontwerper van Bubble.]]></summary> <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.docugenerate.com/assets/posts/024-email-attachments-bubble/cover-image.png"/> <media:content medium="image" url="https://www.docugenerate.com/assets/posts/024-email-attachments-bubble/cover-image.png" xmlns:media="http://search.yahoo.com/mrss/"/> </entry> <entry> <title type="html">Genereer PDF-Verzendformulieren met Retool voor Voorraadbeheer</title> <link href="https://www.docugenerate.com/nl/blog/genereer-pdf-verzendformulieren-met-retool-voor-voorraadbeheer/" rel="alternate" type="text/html" title="Genereer PDF-Verzendformulieren met Retool voor Voorraadbeheer"/> <published>2025-07-29T00:00:00+00:00</published> <updated>2025-07-29T00:00:00+00:00</updated> <id>https://www.docugenerate.com/nl/blog/genereer-pdf-verzendformulieren-met-retool-voor-voorraadbeheer</id> <content type="html" xml:base="https://www.docugenerate.com/nl/blog/genereer-pdf-verzendformulieren-met-retool-voor-voorraadbeheer/"><![CDATA[<h2 id="introductie">Introductie</h2> <p>Toepassingen voor voorraadbeheer die zijn gebouwd met <a href="https://retool.com/" target="_blank" rel="nofollow noopener">Retool</a> blinken uit in het organiseren van data en het bieden van intuïtieve interfaces voor het volgen van producten, bestellingen, en zendingen. Veel bedrijven hebben echter professionele documentatie nodig voor hun verzendactiviteiten die verder gaat dan eenvoudige gegevensweergaven. Het maken van PDF-verzendformulieren met gedetailleerde productinformatie, adressen, en aangepaste branding kan de logistieke activiteiten aanzienlijk verbeteren en klanten voorzien van professionele documentatie.</p> <p>In deze tutorial verrijken we het bestaande sjabloon <a href="https://retool.com/templates/inventory-management" target="_blank" rel="nofollow noopener">Inventory Management App</a> van Retool door de documentgeneratiemogelijkheden van DocuGenerate te integreren. In plaats van een voorraadsysteem vanaf nul te bouwen, richten we ons op het toevoegen van professionele generatie van PDF-verzendformulieren aan een reeds functionele applicatie. Deze aanpak laat zien hoe bestaande Retool-applicaties kunnen worden verrijkt met functies voor documentgeneratie zonder bestaande workflows te verstoren.</p> <p>De integratie die we bouwen, creëert een krachtige combinatie waarbij gebruikers hun voorraaddata kunnen beheren via de intuïtieve interface van Retool, terwijl ze op verzoek professionele verzenddocumenten genereren. Deze oplossing is bijzonder waardevol voor bedrijven die vervoerders, klanten, en interne teams moeten voorzien van gestandaardiseerde verzenddocumentatie met gedetailleerde productinformatie en bedrijfsbranding.</p> <h2 id="de-basisapplicatie-begrijpen">De Basisapplicatie Begrijpen</h2> <p>Voordat we mogelijkheden voor documentgeneratie toevoegen, bekijken we eerst de basis waarmee we werken. Het sjabloon Inventory Management App van Retool biedt een uitgebreide oplossing voor het bijhouden van voorraadniveaus, het beheren van zendingen, en het volgen van productdata op meerdere locaties.</p> <p>De applicatie bevat verschillende belangrijke onderdelen die het ideaal maken voor onze verbetering met verzendformulieren:</p> <ul> <li> <p><strong>Zendingstracking</strong>: Een compleet systeem voor het beheren van zendingen van aanmaak tot levering, inclusief statusupdates en gedetailleerde zendingsinformatie.</p> </li> <li> <p><strong>Productbeheer</strong>: Uitgebreide productdata, waaronder beschrijvingen, hoeveelheden, en prijsinformatie die essentieel zijn voor verzenddocumentatie.</p> </li> <li> <p><strong>Locatiebeheer</strong>: Ondersteuning voor meerdere magazijnen en verzendlocaties, met de adresinformatie die nodig is voor verzendformulieren.</p> </li> <li> <p><strong>Gegevensrelaties</strong>: Goed gestructureerde relaties tussen zendingen, producten, en locaties die uitgebreide documentgeneratie mogelijk maken.</p> </li> </ul> <p>De bestaande datastructuur van het sjabloon biedt alle informatie die doorgaans vereist is voor professionele verzendformulieren, waaronder gegevens van afzender en ontvanger, productbeschrijvingen, hoeveelheden, en zendingsstatusinformatie.</p> <p><img src="https://www.docugenerate.com/assets/posts/023-retool-shipping-forms/app-database.png" alt="Database van de Inventory Management-app"/></p> <h2 id="de-applicatie-voorbereiden">De Applicatie Voorbereiden</h2> <p>Om ons te richten op de aspecten van documentgeneratie in deze tutorial, brengen we verschillende wijzigingen aan in het basissjabloon. Deze wijzigingen vereenvoudigen de interface, terwijl de kernfunctionaliteit die nodig is voor het genereren van verzendformulieren behouden blijft.</p> <h3 id="het-sjabloon-klonen">Het Sjabloon Klonen</h3> <p>Begin met het klonen van het sjabloon Inventory Management App uit de sjabloonbibliotheek van Retool. Dit biedt de volledige basis met voorbeelddata, gevestigde workflows, en beproefde patronen voor de gebruikersinterface.</p> <p><img src="https://www.docugenerate.com/assets/posts/023-retool-shipping-forms/clone-app-template.png" alt="Het Inventory Management-sjabloon van Retool klonen"/></p> <p>Het gekloonde sjabloon bevat alle benodigde componenten, query’s, en voorbeelddata om het proces van verzendformuliergeneratie te demonstreren. De bestaande structuur biedt realistische zendingsscenario’s die verschillende mogelijkheden voor documentgeneratie tonen.</p> <h3 id="de-interface-vereenvoudigen">De Interface Vereenvoudigen</h3> <p>Voor deze tutorial verwijderen we wat complexiteit om ons te richten op de workflow voor documentgeneratie. De belangrijkste vereenvoudiging betreft het bijwerken van de shipments-query om datumfiltering te verwijderen, waardoor het eenvoudiger wordt om alle beschikbare zendingen te bekijken.</p> <p><img src="https://www.docugenerate.com/assets/posts/023-retool-shipping-forms/get-shipments-filter.png" alt="Vereenvoudigde shipments-query zonder filter"/></p> <p>We verwijderen de componenten voor het filteren op datumbereik en vereenvoudigen de query <code class="language-plaintext highlighter-rouge">getShipments</code>. Deze wijziging heeft geen invloed op de kernfunctionaliteit, maar maakt het eenvoudiger om tijdens onze tutorial door zendingen te navigeren. In een productieomgeving zou u deze filtermogelijkheden doorgaans behouden voor het beheren van grote hoeveelheden zendingsdata. De vereenvoudigde weergave biedt directe toegang tot alle zendingen, waardoor het eenvoudiger wordt om documentgeneratie te testen met verschillende soorten en configuraties van zendingen.</p> <p><img src="https://www.docugenerate.com/assets/posts/023-retool-shipping-forms/simplified-shipments-view.png" alt="Vereenvoudigde weergave van zendingen zonder datumfilters"/></p> <h3 id="de-pdf-generatieknop-toevoegen">De PDF-Generatieknop Toevoegen</h3> <p>Vervolgens voegen we een knop <strong>View Shipping Form</strong> toe aan de detailpagina van de zending. Deze knop activeert het documentgeneratieproces en navigeert gebruikers naar een PDF-viewerpagina.</p> <p><img src="https://www.docugenerate.com/assets/posts/023-retool-shipping-forms/view-shipping-form-pdf-button.png" alt="View Shipping Form PDF-knop op detailpagina van de zending"/></p> <p>De plaatsing van de knop integreert natuurlijk met de bestaande interface voor zendingsdetails, en biedt gebruikers directe toegang tot het genereren van verzendformulieren zonder bestaande workflows te verstoren. Het ontwerp van de knop komt overeen met de bestaande stijlpatronen van de applicatie en behoudt visuele consistentie.</p> <h3 id="de-verzendformulierpagina-toevoegen">De Verzendformulierpagina Toevoegen</h3> <p>De laatste stap betreft het maken van een nieuwe pagina <strong>ShippingFormPDF</strong>, voor het weergeven van gegenereerde verzendformulieren. Deze pagina bevat een PDF-viewercomponent die is geconfigureerd om documenten weer te geven die door DocuGenerate zijn gegenereerd, en een fab-knop <strong>Print</strong> waarmee gebruikers het verzendformulier kunnen afdrukken.</p> <p><img src="https://www.docugenerate.com/assets/posts/023-retool-shipping-forms/shipping-form-pdf.png" alt="Voorbeeld van het gegenereerde PDF-verzendformulier"/></p> <h2 id="het-verzendformuliersjabloon-maken">Het Verzendformuliersjabloon Maken</h2> <p>Om dynamische verzendformulieren te genereren, moeten we eerst <a href="https://www.docugenerate.com/nl/hulp/articles/hoe-maak-ik-een-nieuw-sjabloon-aan/">een sjabloon maken</a>, ontworpen om alle essentiële elementen op te nemen die doorgaans voorkomen in commerciële verzenddocumentatie. Het verzendformuliersjabloon bevat secties met <a href="https://www.docugenerate.com/nl/hulp/articles/wat-zijn-merge-tags/">merge-tags</a> voor afzenderinformatie, ontvangerdetails, zendingsinhoud, en aanvullende notities.</p> <p><img src="https://www.docugenerate.com/assets/posts/023-retool-shipping-forms/shipping-form-template.png" alt="Afbeelding van het Shipping Form Template"/></p> <p>Het sjabloon <a href="https://www.docugenerate.com/assets/posts/023-retool-shipping-forms/Shipping Form.docx">Shipping Form</a> dat in deze tutorial wordt gebruikt, bevat verschillende belangrijke functies:</p> <ul> <li> <p><strong>Voorwaardelijke Content</strong>: De sectie met notities verschijnt alleen wanneer er notities bij de zending aanwezig zijn, met behulp van de <a href="https://www.docugenerate.com/nl/hulp/articles/voorwaarden-toevoegen-aan-een-sjabloon/">voorwaardelijke syntax</a></p> </li> <li> <p><strong>Dynamische Tabel</strong>: De sectie met zendingsitems breidt automatisch uit om verschillende aantallen producten te verwerken, met behulp van de <a href="https://www.docugenerate.com/nl/hulp/articles/tabellen-toevoegen-aan-een-sjabloon/">tabelsyntax</a></p> </li> <li> <p><strong>Consistente Opmaak</strong>: Alle elementen behouden professionele opmaak, ongeacht de lengte of complexiteit van de content</p> </li> </ul> <h2 id="documentgeneratie-instellen">Documentgeneratie Instellen</h2> <p>Nu onze interface klaar is, kunnen we ons richten op het integreren van de PDF-generatiemogelijkheden van DocuGenerate in de bestaande workflow voor zendingen, om automatisch verzendformulieren te maken.</p> <h3 id="docugenerate-resource">DocuGenerate-Resource</h3> <p>We moeten de verbinding tussen Retool en de <a href="https://api.docugenerate.com/" target="_blank">API van DocuGenerate</a> configureren. Dit houdt in dat we een REST API-resource maken die de authenticatie en communicatie met de documentgeneratiedienst van DocuGenerate afhandelt.</p> <p><img src="https://www.docugenerate.com/assets/posts/023-retool-shipping-forms/configure-rest-api.png" alt="De REST API-verbinding voor DocuGenerate configureren"/></p> <p>De configuratie van de REST API vereist:</p> <ul> <li><strong>Resource Name</strong>: Gebruik “DocuGenerate” voor eenvoudige identificatie in query’s</li> <li><strong>Base URL</strong>: Stel in op <code class="language-plaintext highlighter-rouge">https://api.docugenerate.com</code> (of gebruik een van onze <a href="https://www.docugenerate.com/nl/hulp/articles/kan-ik-regionale-api-eindpunten-gebruiken/">regionale eindpunten</a> voor betere prestaties)</li> <li><strong>Authentication</strong>: Voeg uw DocuGenerate-<a href="https://www.docugenerate.com/nl/hulp/articles/waar-vind-ik-mijn-api-sleutel/">API-sleutel</a> toe in de header <code class="language-plaintext highlighter-rouge">Authorization</code></li> </ul> <p>Deze configuratie legt de basis voor alle documentgeneratieverzoeken, verzorgt automatisch de authenticatie, en biedt een herbruikbare verbinding voor meerdere documenttypes.</p> <h3 id="documentgeneratiequery">Documentgeneratiequery</h3> <p>Nu ons sjabloon is gemaakt, moeten we de Retool-query configureren die zendingsdata naar DocuGenerate stuurt voor verwerking. Deze query verzorgt gegevenstransformatie en API-communicatie.</p> <p><img src="https://www.docugenerate.com/assets/posts/023-retool-shipping-forms/generate-document-query.png" alt="Configuratie van de generate document-query in Retool"/></p> <p>De query <code class="language-plaintext highlighter-rouge">generateDocument</code> gebruikt de <a href="#docugenerate-resource">DocuGenerate-resource</a> en de configuratie ervan omvat:</p> <ul> <li><strong>URL Path</strong>: POST-verzoek naar het eindpunt <code class="language-plaintext highlighter-rouge">/v1/document/</code> voor het maken van nieuwe documenten</li> <li><strong>Request Body</strong>: JSON met de volgende velden: <ul> <li><code class="language-plaintext highlighter-rouge">template_id</code>: ID van het sjabloon <a href="#het-verzendformuliersjabloon-maken">Shipping Form</a> gemaakt in DocuGenerate</li> <li><code class="language-plaintext highlighter-rouge">output_format</code>: ingesteld op <code class="language-plaintext highlighter-rouge">.pdf</code> om PDF-documenten te genereren</li> <li><code class="language-plaintext highlighter-rouge">name</code>: geeft de dynamische documentnaam op, overeenkomend met de naam die in de app wordt weergegeven (<code class="language-plaintext highlighter-rouge">Shipment #{{ Shipments_HistoryCollection.selectedItem.id }}</code>)</li> <li><code class="language-plaintext highlighter-rouge">data</code>: de data van het verzendformulier, gebaseerd op <code class="language-plaintext highlighter-rouge">Shipments_HistoryCollection.selectedItem</code></li> </ul> <div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  
[{
  "shipment_number": "{{ Shipments_HistoryCollection.selectedItem.id }}",
  "shipment_from": "{{ Shipments_HistoryCollection.selectedItem.fromStreet }}",
  "shipment_to": "{{ Shipments_HistoryCollection.selectedItem.toStreet }}",
  "shipment_status": "{{ Shipments_HistoryCollection.selectedItem.status }}",
  "shipment_notes": "{{ Shipments_HistoryCollection.selectedItem.notes }}",
  "shipment_items": {{ getShipmentItems.data }},
  "shipment_date": "{{ Shipments_HistoryCollection.selectedItem.date }}"
}]
  
</code></pre></div> </div> </li> </ul> <p>De query zet de zendingsdata van Retool om naar het formaat dat wordt verwacht door de sjabloonverwerkingsengine van DocuGenerate. Dit omvat het extraheren van relevante informatie uit het geselecteerde zendingsrecord en het op de juiste manier opmaken voor de merge-tags die in ons sjabloon zijn gedefinieerd.</p> <h3 id="datatransformatie">Datatransformatie</h3> <p>De query <code class="language-plaintext highlighter-rouge">getShipmentItems</code> levert de zendingsitems in een tabelformaat, maar dat is niet compatibel met het lijstformaat dat wordt verwacht voor de waarde <code class="language-plaintext highlighter-rouge">shipment_items</code> die wordt gebruikt in de query <code class="language-plaintext highlighter-rouge">generateDocument</code>.</p> <p><img src="https://www.docugenerate.com/assets/posts/023-retool-shipping-forms/get-shipment-items-table.png" alt="Tabel met zendingsitems met productdata"/></p> <p>We moeten deze tabulaire data omzetten naar een array-structuur die de dynamische productlijst in ons verzendformuliersjabloon kan vullen. Door de volgende JavaScript-code in te voeren bij de stap <strong>Transform results</strong>, wordt het tabelformaat omgezet naar een array van objecten met de attributen <code class="language-plaintext highlighter-rouge">title</code> en <code class="language-plaintext highlighter-rouge">quantity</code>:</p> <div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">const</span> <span class="p">{</span> <span class="nx">title</span><span class="p">,</span> <span class="nx">quantity</span> <span class="p">}</span> <span class="o">=</span> <span class="nx">data</span><span class="p">;</span>

<span class="k">return</span> <span class="nx">title</span><span class="p">.</span><span class="nf">map</span><span class="p">((</span><span class="nx">t</span><span class="p">,</span> <span class="nx">i</span><span class="p">)</span> <span class="o">=&gt;</span> <span class="p">({</span>
  <span class="na">title</span><span class="p">:</span> <span class="nx">t</span><span class="p">,</span>
  <span class="na">quantity</span><span class="p">:</span> <span class="nx">quantity</span><span class="p">[</span><span class="nx">i</span><span class="p">]</span>
<span class="p">}));</span>
</code></pre></div></div> <p>Deze transformatie zorgt ervoor dat productinformatie uit de databasestructuur van Retool overeenkomt met het array-formaat dat wordt verwacht door de sjabloonverwerkingsengine van DocuGenerate. De resulterende array kan elk aantal producten verwerken, met behoud van consistente opmaak in het gegenereerde document.</p> <p><img src="https://www.docugenerate.com/assets/posts/023-retool-shipping-forms/get-shipment-items-array.png" alt="Getransformeerde array van zendingsitems voor sjabloonverwerking"/></p> <h2 id="de-volledige-workflow-implementeren">De Volledige Workflow Implementeren</h2> <p>De uiteindelijke implementatie verbindt alle onderdelen tot een soepele gebruikerservaring, van zendingsselectie tot PDF-generatie en -weergave. Deze integratie zorgt ervoor dat documentgeneratie aanvoelt als een natuurlijke uitbreiding van de bestaande workflow voor voorraadbeheer, in plaats van een apart proces.</p> <h3 id="event-handler-configuratie">Event Handler-Configuratie</h3> <p>De knop <strong>View Shipping Form</strong> vereist twee event handlers om de volledige workflow te beheren. De eerste event handler activeert de query <code class="language-plaintext highlighter-rouge">generateDocument</code>, die de zendingsdata naar DocuGenerate stuurt en als antwoord de URL van het gegenereerde PDF-bestand ontvangt.</p> <p><img src="https://www.docugenerate.com/assets/posts/023-retool-shipping-forms/click-handler-generate-document.png" alt="Configuratie van de click handler voor documentgeneratie"/></p> <p>De tweede event handler verzorgt de navigatie naar de pagina <code class="language-plaintext highlighter-rouge">ShippingFormPDF</code> na succesvolle documentgeneratie. Dit creëert een soepele gebruikerservaring waarbij het klikken op de knop onmiddellijk het document genereert en aan de gebruiker toont.</p> <p><img src="https://www.docugenerate.com/assets/posts/023-retool-shipping-forms/click-handler-navigate-to-page.png" alt="Configuratie van de click handler voor paginanavigatie"/></p> <h3 id="implementatie-van-de-pdf-viewer">Implementatie van de PDF-Viewer</h3> <p>De laatste stap bestaat uit het weergeven van het gegenereerde verzendformulier op de <a href="#de-verzendformulierpagina-toevoegen">speciale pagina</a> die aan het begin van deze tutorial aan de applicatie is toegevoegd.</p> <p><img src="https://www.docugenerate.com/assets/posts/023-retool-shipping-forms/shipping-form-file-url.png" alt="Gegenereerd PDF-verzendformulier weergegeven in de viewer"/></p> <p>Om het gegenereerde document te laden in de component <code class="language-plaintext highlighter-rouge">ShippingFormPDFViewer</code>, moeten we de volgende waarde opgeven in het invoerveld <code class="language-plaintext highlighter-rouge">File URL</code>:</p> <div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>{{ generateDocument.data?.document_uri }}
</code></pre></div></div> <p>Deze configuratie toont automatisch de PDF die wordt geretourneerd door de API van DocuGenerate via de <a href="#documentgeneratiequery">documentgeneratiequery</a>, waardoor gebruikers direct toegang hebben tot hun gegenereerde verzendformulieren.</p> <h2 id="de-volledige-oplossing-testen">De Volledige Oplossing Testen</h2> <p>Nu alle onderdelen zijn geconfigureerd, biedt de volledige workflow een professionele documentgeneratie-ervaring die rechtstreeks is geïntegreerd in de interface voor voorraadbeheer. Gebruikers kunnen van zendingsbeheer naar professionele PDF-generatie navigeren zonder de applicatie te verlaten.</p> <p><img src="https://www.docugenerate.com/assets/posts/023-retool-shipping-forms/demo-video-retool.gif" alt="Demovideo van de volledige Retool-workflow voor verzendformulieren"/></p> <p>De uiteindelijke oplossing, die u <a href="https://docugenerate.retool.com/mobile/apps/Inventory%20Management" target="_blank">hier</a> kunt bekijken, toont verschillende belangrijke voordelen:</p> <ul> <li><strong>Workflowintegratie</strong>: Documentgeneratie past natuurlijk in bestaande processen voor zendingsbeheer</li> <li><strong>Professionele Uitvoer</strong>: Gegenereerde formulieren behouden consistente opmaak en branding voor alle zendingen</li> <li><strong>Gebruikerservaring</strong>: Eenvoudige knopklikken activeren complexe documentgeneratie zonder technische complexiteit bloot te leggen</li> <li><strong>Gegevensconsistentie</strong>: Alle zendingsinformatie wordt automatisch ingevuld in de gegenereerde formulieren, waardoor fouten door handmatige gegevensinvoer worden geëlimineerd</li> </ul> <h2 id="conclusie">Conclusie</h2> <p>Het integreren van de documentgeneratiemogelijkheden van DocuGenerate in de Inventory Management App van Retool toont aan hoe bestaande no-code applicaties kunnen worden verrijkt met professionele documentcreatie, zonder bestaande workflows te verstoren. Deze aanpak biedt aanzienlijke waarde voor bedrijven die consistente, professionele verzenddocumentatie moeten genereren, terwijl de efficiëntie van hun bestaande processen voor voorraadbeheer behouden blijft.</p> <p>De combinatie van de intuïtieve mogelijkheden voor interfacebouw van Retool met de robuuste sjabloonverwerking van DocuGenerate creëert een oplossing die operationele efficiëntie verbindt met professionele documentatievereisten. Gebruikers kunnen hun voorraad en zendingen blijven beheren via vertrouwde interfaces, terwijl ze met eenvoudige knopklikken toegang hebben tot documentgeneratie op ondernemingsniveau. De flexibiliteit van beide platforms betekent dat de oplossing kan meegroeien met veranderende bedrijfsvereisten, en alles ondersteunt van eenvoudige verzendlabels tot complexe verzendmanifesten met meerdere pagina’s.</p> <p>De stapsgewijze aanpak van de tutorial toont aan dat geavanceerde functies voor documentgeneratie kunnen worden toegevoegd aan bestaande applicaties zonder uitgebreide ontwikkelingsmiddelen te vereisen of huidige operationele workflows te verstoren. Dit maakt professionele documentautomatisering toegankelijk voor bedrijven van elke omvang, van kleine bedrijven die tientallen zendingen beheren tot grote ondernemingen die dagelijks duizenden verzenddocumenten verwerken.</p> <h3 id="bronnen">Bronnen</h3> <ul> <li><a href="https://retool.com/templates/inventory-management" target="_blank" rel="nofollow noopener">Retool Inventory Management Template</a> voor de basisapplicatiestructuur.</li> <li><a href="https://api.docugenerate.com/" target="_blank">DocuGenerate API Documentation</a> met uitgebreide begeleiding voor integratie.</li> <li>Het sjabloon <a href="https://www.docugenerate.com/assets/posts/023-retool-shipping-forms/Shipping Form.docx">Shipping Form</a> dat in deze tutorial is gebruikt.</li> <li><a href="https://docugenerate.retool.com/mobile/apps/Inventory%20Management" target="_blank">Live Demo Application</a> die de volledige integratie in actie toont.</li> </ul>]]></content> <author> <name>DocuGenerate</name> <email>support@docugenerate.com</email> </author> <category term="Shipping Forms"/> <category term="Retool"/> <category term="No-Code"/> <summary type="html"><![CDATA[Verrijk uw voorraadbeheer-app in Retool met professionele PDF-verzendformulieren met DocuGenerate. Deze stapsgewijze tutorial laat zien hoe u documentgeneratie integreert in bestaande workflows, en verzenddocumenten maakt voor uw logistieke activiteiten.]]></summary> <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.docugenerate.com/assets/posts/023-retool-shipping-forms/cover-image.png"/> <media:content medium="image" url="https://www.docugenerate.com/assets/posts/023-retool-shipping-forms/cover-image.png" xmlns:media="http://search.yahoo.com/mrss/"/> </entry> <entry> <title type="html">Google Docs vs. DocuGenerate: De Ultieme Vergelijking</title> <link href="https://www.docugenerate.com/nl/blog/google-docs-vs-docugenerate-de-ultieme-vergelijking/" rel="alternate" type="text/html" title="Google Docs vs. DocuGenerate: De Ultieme Vergelijking"/> <published>2025-06-18T00:00:00+00:00</published> <updated>2025-06-18T00:00:00+00:00</updated> <id>https://www.docugenerate.com/nl/blog/google-docs-vs-docugenerate-de-ultieme-vergelijking</id> <content type="html" xml:base="https://www.docugenerate.com/nl/blog/google-docs-vs-docugenerate-de-ultieme-vergelijking/"><![CDATA[<h2 id="introductie">Introductie</h2> <p>Documentgeneratie is een cruciaal proces voor bedrijven in alle sectoren. Of u nu facturen, contracten, certificaten, of rapporten maakt, de mogelijkheid om data efficiënt om te zetten in professionele documenten kan talloze uren besparen en menselijke fouten verminderen. Twee populaire benaderingen voor documentgeneratie zijn het gebruik van Google Docs met de bijbehorende API, en gespecialiseerde platforms voor documentgeneratie zoals DocuGenerate.</p> <p>Hoewel beide oplossingen documenten kunnen maken op basis van sjablonen en data, verschillen ze aanzienlijk in hun aanpak, complexiteit, en mogelijkheden. <a href="https://developers.google.com/workspace/docs/api/how-tos/overview" target="_blank" rel="nofollow noopener">Google Docs</a> biedt een vertrouwde interface en krachtige samenwerkingsfuncties, maar vereist programmeerkennis om documentgeneratie te automatiseren voorbij eenvoudige tekstvervanging. <a href="https://www.docugenerate.com/">DocuGenerate</a> daarentegen is specifiek ontworpen voor documentautomatisering en biedt declaratieve, op sjablonen gebaseerde generatie zonder de noodzaak van complexe codering.</p> <p>In deze uitgebreide vergelijking verkennen we de sterke punten en beperkingen van elke aanpak, om u te helpen bepalen welke oplossing het beste past bij uw documentgeneratiebehoeften. We onderzoeken alles, van sjabloonaanmaak en gegevensverwerking tot geavanceerde functies zoals dynamische lijsten, tabellen, en het invoegen van afbeeldingen.</p> <h2 id="google-docs-gebruiken">Google Docs Gebruiken</h2> <p>Google Docs biedt <a href="https://developers.google.com/workspace/docs/api/how-tos/merge" target="_blank" rel="nofollow noopener">documentgeneratie</a>-mogelijkheden via de API, waarmee ontwikkelaars programmatisch documenten kunnen maken en wijzigen. Het proces omvat doorgaans verschillende stappen:</p> <p><strong>1. Sjabloon Maken</strong>: U begint met het maken van een sjabloondocument in Google Docs met placeholdertekst die wordt vervangen door daadwerkelijke data.</p> <p><img src="https://www.docugenerate.com/assets/posts/022-google-docs-compare/google-docs-template.jpg" alt="Google Docs-sjabloon met placeholders"/></p> <p><strong>2. Document Dupliceren</strong>: Bij het genereren van een nieuw document moet u eerst een kopie van het sjabloon maken met de methode <a href="https://developers.google.com/workspace/drive/api/reference/rest/v3/files/copy" target="_blank" rel="nofollow noopener">files.copy</a> van de Google Drive API.</p> <p><strong>3. Tekstvervanging</strong>: Na het kopiëren van het sjabloon gebruikt u de methode <a href="https://developers.google.com/workspace/docs/api/reference/rest/v1/documents/batchUpdate" target="_blank" rel="nofollow noopener">batchUpdate</a> van de Google Docs API met <a href="https://developers.google.com/workspace/docs/api/reference/rest/v1/documents/request#replacealltextrequest" target="_blank" rel="nofollow noopener">ReplaceAllTextRequest</a> om placeholdertekst te vervangen door echte data.</p> <p><strong>4. Document Ophalen</strong>: Ten slotte haalt u het voltooide document op voor distributie of opslag.</p> <p>Zo ziet een typische workflow met de Google Docs API eruit:</p> <div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  <span class="kd">let</span> <span class="nx">date</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">Date</span><span class="p">();</span>
  <span class="kd">let</span> <span class="nx">requests</span> <span class="o">=</span> <span class="p">[</span>
    <span class="p">{</span>
      <span class="na">replaceAllText</span><span class="p">:</span> <span class="p">{</span>
        <span class="na">containsText</span><span class="p">:</span> <span class="p">{</span>
          <span class="na">text</span><span class="p">:</span> <span class="dl">'</span><span class="s1">{{customer-name}}</span><span class="dl">'</span><span class="p">,</span>
          <span class="na">matchCase</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span>
        <span class="p">},</span>
        <span class="na">replaceText</span><span class="p">:</span> <span class="dl">'</span><span class="s1">Alice</span><span class="dl">'</span>
      <span class="p">},</span>
    <span class="p">},</span>
    <span class="p">{</span>
      <span class="na">replaceAllText</span><span class="p">:</span> <span class="p">{</span>
        <span class="na">containsText</span><span class="p">:</span> <span class="p">{</span>
          <span class="na">text</span><span class="p">:</span> <span class="dl">'</span><span class="s1">{{date}}</span><span class="dl">'</span><span class="p">,</span>
          <span class="na">matchCase</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span>
        <span class="p">},</span>
        <span class="na">replaceText</span><span class="p">:</span> <span class="nx">date</span><span class="p">.</span><span class="nf">toDateString</span><span class="p">(),</span>
      <span class="p">},</span>
    <span class="p">},</span>
  <span class="p">];</span>

  <span class="nx">google</span><span class="p">.</span><span class="nf">options</span><span class="p">({</span><span class="na">auth</span><span class="p">:</span> <span class="nx">auth</span><span class="p">});</span>
  <span class="nx">google</span>
      <span class="p">.</span><span class="nf">discoverAPI</span><span class="p">(</span>
          <span class="dl">'</span><span class="s1">https://docs.googleapis.com/$discovery/rest?version=v1&amp;key={YOUR_API_KEY}</span><span class="dl">'</span><span class="p">)</span>
      <span class="p">.</span><span class="nf">then</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">docs</span><span class="p">)</span> <span class="p">{</span>
        <span class="nx">docs</span><span class="p">.</span><span class="nx">documents</span><span class="p">.</span><span class="nf">batchUpdate</span><span class="p">(</span>
            <span class="p">{</span>
              <span class="na">documentId</span><span class="p">:</span> <span class="dl">'</span><span class="s1">DOCUMENT_ID</span><span class="dl">'</span><span class="p">,</span>
              <span class="na">resource</span><span class="p">:</span> <span class="p">{</span>
                <span class="nx">requests</span><span class="p">,</span>
              <span class="p">},</span>
            <span class="p">},</span>
            <span class="p">(</span><span class="nx">err</span><span class="p">,</span> <span class="p">{</span><span class="nx">data</span><span class="p">})</span> <span class="o">=&gt;</span> <span class="p">{</span>
              <span class="k">if </span><span class="p">(</span><span class="nx">err</span><span class="p">)</span> <span class="k">return</span> <span class="nx">console</span><span class="p">.</span><span class="nf">log</span><span class="p">(</span><span class="dl">'</span><span class="s1">The API returned an error: </span><span class="dl">'</span> <span class="o">+</span> <span class="nx">err</span><span class="p">);</span>
              <span class="nx">console</span><span class="p">.</span><span class="nf">log</span><span class="p">(</span><span class="nx">data</span><span class="p">);</span>
            <span class="p">});</span>
      <span class="p">});</span>
</code></pre></div></div> <h3 id="beperkingen-van-google-docs">Beperkingen van Google Docs</h3> <p>Hoewel Google Docs ongelooflijk krachtig is voor documentsamenwerking en -bewerking, kent het verschillende beperkingen als het gaat om geautomatiseerde documentgeneratie:</p> <ul> <li> <p><strong>Alleen Eenvoudige Tekstvervanging</strong>: De Google Docs API ondersteunt voornamelijk basisbewerkingen voor tekstvervanging. U kunt placeholdertekst zoeken en vervangen door daadwerkelijke waarden, maar het maken van dynamische contentstructuren vereist programmeren.</p> </li> <li> <p><strong>Beperkte Sjabloonlogica</strong>: Google Docs-sjablonen kunnen geen voorwaardelijke logica, lussen, of dynamische structuren binnen het sjabloon zelf bevatten. Alle logica moet worden geïmplementeerd in uw applicatiecode.</p> </li> <li> <p><strong>Complexiteit van Afbeeldingsverwerking</strong>: Hoewel u afbeeldingen kunt invoegen met de API, moeten afbeeldingen publiekelijk toegankelijk zijn via URL, en moet u de positionering en formaataanpassing van afbeeldingen via code beheren in plaats van via sjabloonopmaak.</p> </li> <li> <p><strong>Proces met Meerdere Stappen</strong>: Elke documentgeneratie vereist meerdere API-aanroepen - eerst om het sjabloon te kopiëren, dan om de vervangingen uit te voeren, en mogelijk extra aanroepen voor complexe opmaak- of structuurwijzigingen.</p> </li> <li> <p><strong>Technische Expertise Vereist</strong>: Het implementeren van documentgeneratie op basis van Google Docs vereist aanzienlijke programmeerkennis en begrip van zowel de Google Docs API als de Google Drive API.</p> </li> </ul> <h2 id="docugenerate-gebruiken">DocuGenerate Gebruiken</h2> <p>DocuGenerate hanteert een fundamenteel andere aanpak voor documentgeneratie. In plaats van imperatief programmeren te vereisen om documenten te wijzigen, gebruikt het een declaratief sjabloonsysteem waarin alle logica en structuur rechtstreeks in het sjabloon zelf worden gedefinieerd.</p> <ul> <li> <p><strong>Sjabloongericht Ontwerp</strong>: Met DocuGenerate maakt u uw sjablonen met vertrouwde Word-documenten en voegt u <a href="https://www.docugenerate.com/nl/hulp/articles/wat-zijn-merge-tags/">merge-tags</a> rechtstreeks toe in het sjabloon. Deze tags definiëren niet alleen eenvoudige tekstvervangingen, maar ook complexe datastructuren zoals lijsten, tabellen, en voorwaardelijke content.</p> </li> <li> <p><strong>Eén API-aanroep</strong>: Documentgeneratie gebeurt met <a href="https://api.docugenerate.com/#/Document/generateDocument" target="_blank">één API-aanroep</a> of via de webinterface. U geeft uw sjabloon-ID en data op, en DocuGenerate verzorgt intern alle verwerking, opmaak, en generatie.</p> </li> <li> <p><strong>Uitgebreide Ondersteuning voor Datastructuren</strong>: DocuGenerate ondersteunt van nature complexe datastructuren, waaronder dynamische lijsten, tabellen, voorwaardelijke content, het invoegen van afbeeldingen, QR-codes, en geavanceerde opmaak.</p> </li> </ul> <p>Zo eenvoudig is de aanpak van DocuGenerate:</p> <div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">const</span> <span class="nx">date</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">Date</span><span class="p">();</span>
<span class="kd">const</span> <span class="nx">response</span> <span class="o">=</span> <span class="k">await</span> <span class="nf">fetch</span><span class="p">(</span><span class="dl">'</span><span class="s1">https://api.docugenerate.com/v1/document</span><span class="dl">'</span><span class="p">,</span> <span class="p">{</span>
  <span class="na">method</span><span class="p">:</span> <span class="dl">'</span><span class="s1">POST</span><span class="dl">'</span><span class="p">,</span>
  <span class="na">headers</span><span class="p">:</span> <span class="p">{</span>
    <span class="dl">'</span><span class="s1">Authorization</span><span class="dl">'</span><span class="p">:</span> <span class="dl">'</span><span class="s1">YOUR_API_KEY</span><span class="dl">'</span><span class="p">,</span>
    <span class="dl">'</span><span class="s1">Content-Type</span><span class="dl">'</span><span class="p">:</span> <span class="dl">'</span><span class="s1">application/json</span><span class="dl">'</span>
  <span class="p">},</span>
  <span class="na">body</span><span class="p">:</span> <span class="nx">JSON</span><span class="p">.</span><span class="nf">stringify</span><span class="p">({</span>
    <span class="na">template_id</span><span class="p">:</span> <span class="dl">'</span><span class="s1">TEMPLATE_ID</span><span class="dl">'</span><span class="p">,</span>
    <span class="na">data</span><span class="p">:</span> <span class="p">{</span>
        <span class="dl">"</span><span class="s2">customer-name</span><span class="dl">"</span><span class="p">:</span> <span class="dl">"</span><span class="s2">Alice</span><span class="dl">"</span><span class="p">,</span>
        <span class="dl">"</span><span class="s2">date</span><span class="dl">"</span><span class="p">:</span> <span class="nx">date</span><span class="p">.</span><span class="nf">toDateString</span><span class="p">()</span>
    <span class="p">},</span>
    <span class="na">output_format</span><span class="p">:</span> <span class="dl">'</span><span class="s1">.pdf</span><span class="dl">'</span>
  <span class="p">})</span>
<span class="p">});</span>

<span class="kd">const</span> <span class="nb">document</span> <span class="o">=</span> <span class="k">await</span> <span class="nx">response</span><span class="p">.</span><span class="nf">json</span><span class="p">();</span>
<span class="nx">console</span><span class="p">.</span><span class="nf">log</span><span class="p">(</span><span class="dl">'</span><span class="s1">Document generated:</span><span class="dl">'</span><span class="p">,</span> <span class="nb">document</span><span class="p">.</span><span class="nx">document_uri</span><span class="p">);</span>
</code></pre></div></div> <h2 id="functievergelijking">Functievergelijking</h2> <p>Om u te helpen de praktische verschillen tussen Google Docs en DocuGenerate voor documentgeneratie te begrijpen, hebben we de belangrijkste functies onderverdeeld in vier hoofdcategorieën. Elke vergelijkingstabel toont hoe de twee platforms essentiële aspecten van documentautomatisering afhandelen, van sjabloonbeheer tot uitvoerkwaliteit.</p> <h3 id="sjabloonaanmaak-en-beheer">Sjabloonaanmaak en -beheer</h3> <table class="table table-bordered"> <thead> <tr> <th>Functie</th> <th>Google Docs</th> <th>DocuGenerate</th> </tr> </thead> <tbody> <tr> <td><strong>Sjabloonaanmaak</strong></td> <td>Sjablonen gemaakt in de Google Docs-interface</td> <td>Sjablonen gemaakt in Microsoft Word of geüpload als DOCX-bestanden</td> </tr> <tr> <td><strong>Placeholdersyntax</strong></td> <td>Eenvoudige tekstreeksen met dubbele accolades als scheidingstekens</td> <td>Uitgebreide merge-tag-syntax die complexe datastructuren en <a href="https://www.docugenerate.com/nl/hulp/articles/hoe-werk-ik-de-scheidingstekens-van-tags-bij/">aangepaste scheidingstekens</a> ondersteunt</td> </tr> <tr> <td><strong>Versiebeheer</strong></td> <td>Herzieningsgeschiedenis van Google Docs</td> <td>Ingebouwd <a href="https://www.docugenerate.com/nl/hulp/articles/hoe-herstel-ik-een-sjabloonversie/">sjabloonversiebeheer</a></td> </tr> <tr> <td><strong>Sjabloonbeheer</strong></td> <td>Beheerd via Google Drive</td> <td>Speciaal sjabloonbeheer met deelmogelijkheden</td> </tr> <tr> <td><strong>Toegangscontrole</strong></td> <td>Google Drive-delen en -machtigingen</td> <td>Rolgebaseerde toegangscontrole voor <a href="https://www.docugenerate.com/nl/hulp/articles/introductie-tot-teamsamenwerking/">teamsamenwerking</a></td> </tr> </tbody> </table> <h3 id="gegevensverwerking-en-integratie">Gegevensverwerking en Integratie</h3> <table class="table table-bordered"> <thead> <tr> <th>Functie</th> <th>Google Docs</th> <th>DocuGenerate</th> </tr> </thead> <tbody> <tr> <td><strong>Gegevensverwerking</strong></td> <td>Vereist aangepaste code om data te structureren en op te maken</td> <td>Accepteert data in meerdere formaten: <a href="https://www.docugenerate.com/nl/hulp/articles/documenten-genereren-vanuit-json-data/">JSON</a>, <a href="https://www.docugenerate.com/nl/hulp/articles/documenten-genereren-vanuit-een-excel-of-csv-bestand/">Excel of CSV</a></td> </tr> <tr> <td><strong>Gegevensvoorbereiding</strong></td> <td>Data moet worden verwerkt en opgemaakt vóór API-aanroepen</td> <td>Automatische detectie van datatypes en <a href="https://www.docugenerate.com/nl/hulp/articles/data-opmaken-met-filters/">opmaak</a></td> </tr> <tr> <td><strong>Complexe Structuren</strong></td> <td>Beperkte ondersteuning zonder uitgebreide programmering</td> <td>Native ondersteuning voor geneste datastructuren</td> </tr> <tr> <td><strong>Verwerking van Datatypes</strong></td> <td>Elk datatype vereist andere API-verwerking</td> <td>Uniforme verwerking voor alle datatypes</td> </tr> <tr> <td><strong>Platformintegratie</strong></td> <td>Ingebouwde integraties met alle belangrijke platforms</td> <td>Ingebouwde integraties met <a href="https://www.docugenerate.com/nl/integraties/zapier/">Zapier</a>, <a href="https://www.docugenerate.com/nl/integraties/make/">Make</a>, <a href="https://www.docugenerate.com/nl/integraties/bubble/">Bubble</a> en meer</td> </tr> </tbody> </table> <h3 id="dynamische-contentgeneratie">Dynamische Contentgeneratie</h3> <table class="table table-bordered"> <thead> <tr> <th>Functie</th> <th>Google Docs</th> <th>DocuGenerate</th> </tr> </thead> <tbody> <tr> <td><strong>Dynamische Lijsten</strong></td> <td>Vereist programmatische <a href="https://developers.google.com/workspace/docs/api/how-tos/lists" rel="nofollow noopener">manipulatie van lijsten</a></td> <td><a href="https://www.docugenerate.com/nl/hulp/articles/lijsten-toevoegen-aan-een-sjabloon/">Dynamische lijsten</a> gemaakt met eenvoudige sjabloonsyntax</td> </tr> <tr> <td><strong>Variabele Tabellen</strong></td> <td>Complexe API-aanroepen nodig om <a href="https://developers.google.com/workspace/docs/api/how-tos/tables" rel="nofollow noopener">tabellen in te voegen en op te maken</a></td> <td><a href="https://www.docugenerate.com/nl/hulp/articles/tabellen-toevoegen-aan-een-sjabloon/">Tabellen</a> automatisch gegenereerd op basis van dataarrays</td> </tr> <tr> <td><strong>Voorwaardelijke Content</strong></td> <td>Applicatielogica vereist om te bepalen wat moet worden opgenomen</td> <td><a href="https://www.docugenerate.com/nl/hulp/articles/voorwaarden-toevoegen-aan-een-sjabloon/">Voorwaardelijke secties</a> rechtstreeks gedefinieerd in sjablonen</td> </tr> <tr> <td><strong>Invoegen van Afbeeldingen</strong></td> <td><a href="https://developers.google.com/workspace/docs/api/how-tos/images" rel="nofollow noopener">Afbeeldingen</a> moeten publiekelijk toegankelijk zijn via URL</td> <td><a href="https://www.docugenerate.com/nl/hulp/articles/afbeeldingen-toevoegen-aan-een-sjabloon/">Afbeeldingsverwerking</a> met formaataanpassing en positionering</td> </tr> </tbody> </table> <h3 id="uitvoerformaten-en-kwaliteit">Uitvoerformaten en Kwaliteit</h3> <table class="table table-bordered"> <thead> <tr> <th>Functie</th> <th>Google Docs</th> <th>DocuGenerate</th> </tr> </thead> <tbody> <tr> <td><strong>Native Formaat</strong></td> <td>Google Docs-formaat</td> <td><a href="https://www.docugenerate.com/nl/hulp/articles/het-exportformaat-selecteren/">Meerdere uitvoerformaten</a>: PDF, DOCX, DOC, ODT, TXT, HTML, PNG</td> </tr> <tr> <td><strong>Exportopties</strong></td> <td>PDF, DOCX, ODT, RTF, TXT, HTML, EPUB</td> <td>Conversie naar doelformaat in één stap</td> </tr> <tr> <td><strong>Uitvoerkwaliteit</strong></td> <td>Afhankelijk van de conversiealgoritmes van Google</td> <td>Nauwkeurige generatie met behoud van originele opmaak</td> </tr> <tr> <td><strong>Consistentie</strong></td> <td>Wisselende kwaliteit bij verschillende exportformaten</td> <td>Consistente uitvoerkwaliteit over alle formaten</td> </tr> <tr> <td><strong>Geavanceerde Functies</strong></td> <td>Beperkte controle over de definitieve opmaak en lay-out</td> <td>Geavanceerde PDF-functies zoals <a href="https://www.docugenerate.com/nl/hulp/articles/een-pdf-samenvoegen-aan-het-einde-van-gegenereerde-documenten/">samenvoegen met bestaande bestanden</a></td> </tr> </tbody> </table> <h2 id="integratie-met-no-code-low-code-platforms">Integratie met No-Code/Low-Code Platforms</h2> <p><img src="https://www.docugenerate.com/assets/posts/022-google-docs-compare/zapier-google-docs.png" alt="Zapier-integratie voor Google Docs"/></p> <p>No-code- en low-code-platforms zoals <a href="https://www.docugenerate.com/nl/hulp/articles/documentgeneratie-automatiseren-met-zapier/">Zapier</a> hebben een revolutie teweeggebracht in hoe bedrijven documentgeneratieworkflows automatiseren. Deze platforms stellen gebruikers in staat geavanceerde automatisering te creëren zonder code te schrijven, waardoor documentgeneratie toegankelijk wordt voor niet-technische teamleden. De integratie-ervaring verschilt echter aanzienlijk tussen <a href="https://zapier.com/apps/google-docs/integrations">Google Docs</a> en <a href="https://zapier.com/apps/docugenerate/integrations">DocuGenerate</a>, met name als het gaat om de flexibiliteit van sjablonen en de verwerking van merge-tags.</p> <p>De Google Docs-integratie van Zapier toont zowel de kracht als de beperkingen van het gebruik van Google Docs voor geautomatiseerde documentgeneratie. Zoals beschreven in <a href="https://zapier.com/blog/create-autopopulate-google-docs-template/" target="_blank" rel="nofollow noopener">Zapier’s gids</a> over het maken en automatisch invullen van Google Docs-sjablonen, detecteert het platform automatisch merge-tags in uw Google Docs-sjablonen die de standaard <code class="language-plaintext highlighter-rouge">{{ }}</code>-syntax gebruiken.</p> <p><img src="https://www.docugenerate.com/assets/posts/022-google-docs-compare/template-field-names.png" alt="Veldnamen in een voorbeeldsjabloon" class="desktop-width-75"/></p> <p>Wanneer u uw Zap configureert, worden deze placeholders gedetecteerd als formuliervelden, waardoor u data uit uw trigger-app rechtstreeks aan uw sjabloon kunt koppelen zonder handmatige configuratie. Hoewel deze automatische detectiefunctie de Google Docs-integratie naadloos laat lijken, creëert het een aanzienlijke beperking: u zit vast aan de specifieke dubbele accolade <code class="language-plaintext highlighter-rouge">{{ }}</code>-scheidingstekensyntax van Google. Deze beperking wordt problematisch wanneer uw sjablonen moeten samenwerken met andere systemen die mogelijk conflicteren met deze syntax, of wanneer u andere scheidingstekens wilt gebruiken die passen bij de bestaande conventies van uw organisatie.</p> <p><img src="https://www.docugenerate.com/assets/posts/022-google-docs-compare/zapier-field-names.png" alt="Automatische detectie van veldnamen in Zapier" class="desktop-width-75"/></p> <p>DocuGenerate hanteert een flexibelere aanpak voor het configureren van scheidingstekens. Hoewel het standaard de dubbele accolade <code class="language-plaintext highlighter-rouge">{{ }}</code>-syntax ondersteunt, kunt u <a href="https://www.docugenerate.com/nl/hulp/articles/hoe-werk-ik-de-scheidingstekens-van-tags-bij/">de scheidingstekens aanpassen</a> om elk gewenst teken te gebruiken, of dat nu vierkante haken <code class="language-plaintext highlighter-rouge">[ ]</code>, enkele accolades <code class="language-plaintext highlighter-rouge">{ }</code>, of zelfs aangepaste reeksen zoals punthaken <code class="language-plaintext highlighter-rouge">&lt;&lt; &gt;&gt;</code> zijn. De praktische impact van dit verschil wordt duidelijk in complexe automatiseringsscenario’s. Bij Google Docs moet uw hele workflow voldoen aan de standaard met dubbele accolades, wat mogelijk sjabloonaanpassingen en zorgvuldig contentbeheer vereist om conflicten te voorkomen.</p> <h2 id="wanneer-kiest-u-google-docs-of-docugenerate">Wanneer Kiest u Google Docs of DocuGenerate</h2> <h3 id="kies-google-docs-voor">Kies Google Docs Voor</h3> <ul> <li> <p><strong>Native Integratie met Google Workspace</strong>: Als uw organisatie sterk investeert in Google Workspace en u al bestaande Google Docs-workflows heeft, kan het zinvol zijn om hierop voort te bouwen.</p> </li> <li> <p><strong>Alleen Eenvoudige Tekstvervanging</strong>: Voor basale documentgeneratie die alleen eenvoudige zoek-en-vervang-bewerkingen vereist, zonder dynamische contentstructuren.</p> </li> <li> <p><strong>Gezamenlijke Sjabloonbewerking</strong>: Wanneer meerdere teamleden moeten samenwerken aan het maken van sjablonen, en u de realtime samenwerkingsfuncties van Google Docs wilt benutten.</p> </li> <li> <p><strong>Aangepaste Documentverwerking</strong>: Als u zeer aangepaste logica voor documentverwerking nodig heeft die verder gaat dan standaardpatronen voor documentgeneratie.</p> </li> </ul> <h3 id="kies-docugenerate-voor">Kies DocuGenerate Voor</h3> <ul> <li> <p><strong>Complexe Documentsjablonen</strong>: Wanneer uw documenten dynamische lijsten, tabellen, voorwaardelijke content, of het invoegen van afbeeldingen vereisen.</p> </li> <li> <p><strong>Snelle Implementatie</strong>: Als u documentgeneratie snel aan de praat wilt krijgen zonder uitgebreide ontwikkelinspanning.</p> </li> <li> <p><strong>Bulkdocumentgeneratie</strong>: Voor het genereren van grote hoeveelheden documenten op basis van datasets (Excel, CSV, JSON).</p> </li> <li> <p><strong>Sjabloonbeheer</strong>: Wanneer u versiebeheer, delen, en beheerfuncties nodig heeft die specifiek zijn ontworpen voor documentsjablonen.</p> </li> <li> <p><strong>Meerdere Uitvoerformaten</strong>: Als u documenten in verschillende formaten (PDF, Word, enz.) moet genereren op basis van hetzelfde sjabloon.</p> </li> </ul> <h2 id="conclusie">Conclusie</h2> <p>Zowel Google Docs als DocuGenerate bieden bruikbare benaderingen voor documentgeneratie, maar ze dienen verschillende behoeften en gebruiksgevallen. <a href="#google-docs-gebruiken">Google Docs</a> blinkt uit wanneer u diepe integratie met Google Workspace nodig heeft en over de technische middelen beschikt om aangepaste oplossingen voor documentgeneratie te bouwen. Het vereist echter aanzienlijke programmeerexpertise en doorlopend onderhoud voor complexe documentsjablonen.</p> <p><a href="#docugenerate-gebruiken">DocuGenerate</a> daarentegen is specifiek ontworpen voor documentgeneratie en biedt een meer declaratieve, sjabloongerichte aanpak die complexiteit en ontwikkelingsoverhead vermindert. Het is bijzonder geschikt voor organisaties die snel complexe documenten moeten genereren, willen integreren met no-code platforms, of grootschalige documentgeneratieworkflows willen beheren.</p> <p>Als u momenteel Google Docs gebruikt voor documentgeneratie en DocuGenerate overweegt, is het migratieproces doorgaans eenvoudiger dan u zou verwachten. Uw bestaande Google Docs-sjablonen kunnen worden omgezet naar Word-formaat en verrijkt met de merge-tag-syntax van DocuGenerate, en dit proces onthult vaak mogelijkheden om complexe logica te vereenvoudigen die voorheen in code was ingebed.</p> <h3 id="bronnen">Bronnen</h3> <ul> <li><a href="https://developers.google.com/workspace/docs/api/how-tos/merge" target="_blank" rel="nofollow noopener">Google Docs Merge text into a document</a> voor de aanpak van Google voor documentgeneratie.</li> <li><a href="https://zapier.com/blog/create-autopopulate-google-docs-template/" target="_blank" rel="nofollow noopener">How to create and autopopulate a Google Docs template</a> tutorial van Zapier.</li> <li><a href="https://www.docugenerate.com/nl/sjablonen/">Sjabloonbibliotheek van DocuGenerate</a> met kant-en-klare sjablonen voor veelvoorkomende gebruiksgevallen.</li> <li><a href="https://www.docugenerate.com/nl/hulp/">Hulpcentrum van DocuGenerate</a> met geavanceerde functies van DocuGenerate en integratiegidsen.</li> </ul>]]></content> <author> <name>DocuGenerate</name> <email>support@docugenerate.com</email> </author> <category term="Compare"/> <category term="Google Docs"/> <category term="No-Code"/> <summary type="html"><![CDATA[Ontdek de belangrijkste verschillen tussen Google Docs en DocuGenerate voor geautomatiseerde documentgeneratie. Leer welke oplossing beter is voor het maken van dynamische sjablonen met lijsten, tabellen, afbeeldingen, en complexe datasamenvoeging voor uw bedrijfsworkflows.]]></summary> <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.docugenerate.com/assets/posts/022-google-docs-compare/cover-image.png"/> <media:content medium="image" url="https://www.docugenerate.com/assets/posts/022-google-docs-compare/cover-image.png" xmlns:media="http://search.yahoo.com/mrss/"/> </entry> <entry> <title type="html">Introductie van Sjabloonversiegeschiedenis</title> <link href="https://www.docugenerate.com/nl/blog/introductie-van-sjabloonversiegeschiedenis/" rel="alternate" type="text/html" title="Introductie van Sjabloonversiegeschiedenis"/> <published>2025-05-27T00:00:00+00:00</published> <updated>2025-05-27T00:00:00+00:00</updated> <id>https://www.docugenerate.com/nl/blog/introductie-van-sjabloonversiegeschiedenis</id> <content type="html" xml:base="https://www.docugenerate.com/nl/blog/introductie-van-sjabloonversiegeschiedenis/"><![CDATA[<h2 id="wat-is-sjabloonversiegeschiedenis">Wat is Sjabloonversiegeschiedenis?</h2> <p>Sjabloonversiegeschiedenis is een krachtige nieuwe functie die automatisch eerdere versies van uw sjablonen opslaat telkens wanneer u wijzigingen aanbrengt. Dit geeft u een volledige geschiedenis van hoe uw sjablonen zich in de loop van de tijd hebben ontwikkeld, en stelt u in staat eerdere versies te herstellen indien nodig.</p> <p>Tot nu toe werd, telkens wanneer u een sjabloonbestand in DocuGenerate bijwerkte, de vorige versie permanent overschreven. Veel van onze gebruikers omzeilden deze beperking door versies handmatig bij te houden, door toevoegingen zoals V1, V2, enz. of andere nummeringsschema’s aan hun sjabloonnamen toe te voegen. Deze aanpak werkte, maar was omslachtig en foutgevoelig.</p> <p>Op basis van gebruikersfeedback en functieverzoeken hebben we een robuust systeem voor versiegeschiedenis ontwikkeld dat automatisch alle wijzigingen aan uw sjablonen in DocuGenerate bijhoudt, waardoor handmatig bijhouden van versies niet meer nodig is.</p> <h2 id="waarom-versiegeschiedenis-belangrijk-is">Waarom Versiegeschiedenis Belangrijk Is</h2> <p>Sjabloonversiebeheer lost verschillende cruciale uitdagingen op waarmee documentmakers dagelijks te maken hebben. Naarmate organisaties steeds meer vertrouwen op sjablonen voor consistentie en efficiëntie in hun documentworkflows, wordt de behoefte aan betrouwbare versiebeheersing essentieel. Met deze functie kunt u de integriteit van uw sjablonen behouden en tegelijkertijd noodzakelijke wijzigingen en verbeteringen in de loop van de tijd doorvoeren.</p> <p><strong>1. Bescherming Tegen Onbedoelde Wijzigingen</strong><br/> Iedereen maakt fouten. Of het nu gaat om het per ongeluk uploaden van het verkeerde bestand, of het aanbrengen van onbedoelde wijzigingen aan een sjabloon, versiegeschiedenis biedt een vangnet, waarmee u snel een eerdere versie kunt herstellen.</p> <p><strong>2. Bijhouden van Sjabloonevolutie</strong><br/> Naarmate uw bedrijfsprocessen evolueren, evolueren ook uw sjablonen. Versiegeschiedenis biedt u inzicht in hoe uw sjablonen in de loop van de tijd zijn veranderd, wat helpt bij het begrijpen van de evolutie van uw documentgeneratieproces.</p> <p><strong>3. Naleving en Auditvereisten</strong><br/> Voor organisaties in gereguleerde sectoren kan het bijhouden van sjabloonwijzigingen cruciaal zijn voor naleving en auditdoeleinden. Versiegeschiedenis biedt documentatie van wat er is veranderd, en wanneer het is veranderd.</p> <h2 id="hoe-sjabloonversiegeschiedenis-werkt">Hoe Sjabloonversiegeschiedenis Werkt</h2> <h3 id="versiegeschiedenis-inschakelen">Versiegeschiedenis Inschakelen</h3> <p>Deze functie is uitsluitend beschikbaar in onze nieuwe Premium- en Business-plannen, zoals beschreven op onze <a href="https://www.docugenerate.com/nl/prijzen/">prijzenpagina</a>. Als u een ouder plan heeft, kunt u dit onbeperkt blijven gebruiken. Om echter te profiteren van sjabloonversiegeschiedenis, moet u upgraden naar een van deze nieuwere plannen.</p> <p>Voor bestaande sjablonen is versiebeheer niet standaard ingeschakeld, maar kan worden ingeschakeld via de <a href="https://www.docugenerate.com/nl/hulp/articles/hoe-schakel-ik-de-versiegeschiedenis-in/">sjabloon-instellingen</a> in de webapp:</p> <p><img src="https://www.docugenerate.com/assets/posts/021-template-version-history/enable-versioning.png" alt="Schakelaar voor het inschakelen van versiebeheer in sjabloon-instellingen" class="desktop-width-75"/></p> <p>Als u onze API gebruikt, kunt u versiebeheer ook inschakelen door de parameter <code class="language-plaintext highlighter-rouge">versioning_enabled</code> in te stellen op <code class="language-plaintext highlighter-rouge">true</code> bij het <a href="https://api.docugenerate.com/#/Template/updateTemplate" target="_blank">bijwerken van een sjabloon</a>:</p> <p><img src="https://www.docugenerate.com/assets/posts/021-template-version-history/update-template-api.png" alt="Parameters voor het eindpunt update template"/></p> <p>Voor nieuwe sjablonen is versiebeheer standaard ingeschakeld als uw account toegang heeft tot deze functie. Bij het <a href="https://api.docugenerate.com/#/Template/createTemplate" target="_blank">maken van een sjabloon</a> via de API kunt u de parameter <code class="language-plaintext highlighter-rouge">versioning_enabled</code> expliciet instellen op <code class="language-plaintext highlighter-rouge">true</code> of <code class="language-plaintext highlighter-rouge">false</code>.</p> <p><img src="https://www.docugenerate.com/assets/posts/021-template-version-history/create-template-api.png" alt="Parameters voor het eindpunt create template"/></p> <h3 id="wanneer-nieuwe-versies-worden-gemaakt">Wanneer Nieuwe Versies Worden Gemaakt</h3> <p>Zodra versiebeheer is ingeschakeld voor een sjabloon, wordt automatisch een nieuwe versie opgeslagen telkens wanneer u <strong>het sjabloonbestand bijwerkt</strong>. Het is belangrijk op te merken dat wijzigingen aan sjabloonmetadata (zoals de naam of andere instellingen) geen nieuwe versies creëren. Alleen daadwerkelijke wijzigingen aan het sjabloonbestand zelf activeren het maken van een nieuwe versie.</p> <p>Deze gerichte aanpak zorgt ervoor dat uw versiegeschiedenis relevant blijft en niet wordt overspoeld met kleine metadatawijzigingen die geen invloed hebben op de uitvoer van de documentgeneratie. Door alleen substantiële wijzigingen aan de sjabloon-content bij te houden, helpen we u een overzichtelijke, betekenisvolle versiegeschiedenis te behouden die de daadwerkelijke evolutie van uw sjabloonontwerp en -functionaliteit belicht, waardoor het eenvoudiger wordt om te identificeren wanneer en hoe belangrijke wijzigingen zijn doorgevoerd.</p> <h3 id="sjabloonversies-beheren">Sjabloonversies Beheren</h3> <p>In de detailweergave van het sjabloon vindt u een nieuw paneel <strong>Versions</strong> dat alle opgeslagen versies van uw sjabloon toont. De huidige actieve versie wordt gemarkeerd met een stericoon:</p> <p><img src="https://www.docugenerate.com/assets/posts/021-template-version-history/versions-panel.png" alt="Paneel Versions in detailweergave van sjabloon" class="desktop-width-75"/></p> <p>Als u op een versie in de lijst klikt, wordt een voorbeeld van die versie weergegeven in het linkerpaneel, zodat u de content kunt bekijken voordat u actie onderneemt. Voor elke versie kunt u de volgende acties uitvoeren:</p> <ul> <li> <p><strong>Restore:</strong> Deze actie vervangt het huidige sjabloonbestand door de geselecteerde versie en werkt ook alle sjabloon-instellingen bij (naam, scheidingstekens, tags, enz.) die bij die versie horen. Na het herstellen wordt de geselecteerde versie de huidige actieve versie.</p> </li> <li> <p><strong>Download:</strong> Met deze actie kunt u een specifieke versie van het sjabloonbestand downloaden naar uw lokale apparaat. Dit is nuttig als u een eerdere versie offline wilt bekijken of bewerken.</p> </li> <li> <p><strong>Delete:</strong> Als u een specifieke versie niet meer nodig heeft, kunt u deze eenvoudig verwijderen uit uw geschiedenis. Let op: deze actie is permanent en kan niet ongedaan worden gemaakt, dus gebruik deze met voorzichtigheid.</p> </li> </ul> <p>Er is geen limiet aan het aantal versies dat voor een sjabloon kan worden opgeslagen, wat u een uitgebreid historisch overzicht biedt van de evolutie van uw sjabloon.</p> <h2 id="overwegingen-bij-multi-regio">Overwegingen bij Multi-Regio</h2> <p>Als u onze functie voor <a href="https://www.docugenerate.com/nl/blog/introductie-van-multi-regioverwerking-en-opslag/">multi-regioverwerking en -opslag</a> gebruikt, is het belangrijk om te begrijpen hoe sjabloonversiebeheer omgaat met regio-instellingen. Deze interactie beïnvloedt waar uw historische sjabloonversies worden opgeslagen en hoe ze worden beheerd wanneer u de regio van uw sjabloon wijzigt, wat gevolgen kan hebben voor nalevingsvereisten en beleid voor gegevensbeheer.</p> <p>Sjabloonversies worden altijd opgeslagen in de huidige regio van het sjabloon. Als u de regio van een sjabloon wijzigt (bijv. van VS naar EU), wordt alleen het huidige sjabloonbestand verplaatst naar de nieuwe regio. Eerdere versies blijven in de oorspronkelijke regio.</p> <p>Elke nieuwe versie die na de regiowijziging wordt opgeslagen, wordt echter opgeslagen in de nieuwe regio. Dit betekent dat de versiegeschiedenis van uw sjabloon na verloop van tijd meerdere regio’s kan omvatten. Deze aanpak minimaliseert gegevensoverdracht, terwijl uw huidige sjabloon altijd in de door u opgegeven regio blijft.</p> <h2 id="machtigingen-voor-teamleden">Machtigingen voor Teamleden</h2> <p>Voor gebruikers die sjablonen delen met <a href="https://www.docugenerate.com/nl/hulp/articles/introductie-tot-teamsamenwerking/">teamleden</a>, verbetert versiegeschiedenis de samenwerking op verschillende manieren, afhankelijk van het machtigingsniveau:</p> <ul> <li> <p>Teamleden met <strong>write</strong>-machtiging kunnen sjablonen bijwerken, eerdere versies herstellen, en versies uit de geschiedenis verwijderen. Ze hebben uitgebreide controle over sjabloonbeheer, vergelijkbaar met de sjablooneigenaar, met als enige uitzondering dat ze het sjabloon zelf niet kunnen verwijderen.</p> </li> <li> <p>Teamleden met <strong>read</strong>-machtiging kunnen sjabloonversies alleen bekijken en downloaden. Ze kunnen geen wijzigingen aanbrengen aan het huidige sjabloon of eerdere versies herstellen. Bij het bekijken van een sjabloon met alleen-lezen-machtiging zien ze een vereenvoudigde versie van het paneel Versions, zoals hieronder weergegeven:</p> <p><img src="https://www.docugenerate.com/assets/posts/021-template-version-history/team-member-read-v2.png" alt="Weergave van het paneel Versions voor een teamlid met alleen-lezen-machtiging" class="desktop-width-75"/></p> </li> </ul> <p>Deze op machtigingen gebaseerde aanpak zorgt ervoor dat teamleden passende toegang hebben tot versiegeschiedenis, gebaseerd op hun rol in het samenwerkingsproces. Teamleiders kunnen met vertrouwen sjabloonbewerkingsverantwoordelijkheden delegeren terwijl ze toezicht behouden, en teamleden met alleen-lezen-toegang kunnen nog steeds profiteren van het zien van de ontwikkelingsgeschiedenis van het sjabloon, zonder het risico op onbedoelde wijzigingen.</p> <h2 id="api-beperkingen">API-Beperkingen</h2> <p>Om onze API eenvoudig en gericht te houden, is sjabloonversiebeheer alleen beschikbaar via de webapp. Bij gebruik van de API interageert u altijd met de huidige versie van een sjabloon. Dit betekent:</p> <ul> <li>U kunt sjabloonversies niet weergeven, herstellen, of verwijderen via de API.</li> <li>Documentgeneratie gebruikt altijd de nieuwste versie van het sjabloon.</li> <li>U kunt versiebeheer voor een sjabloon in- of uitschakelen via de API, maar u kunt de versies zelf niet beheren.</li> </ul> <p>Deze ontwerpkeuze houdt de API eenvoudig, terwijl toch de flexibiliteit wordt geboden om versiebeheer in te schakelen voor sjablonen die via de API zijn gemaakt of bijgewerkt.</p> <h2 id="gebruiksscenarios">Gebruiksscenario’s</h2> <p>Laten we enkele praktijkscenario’s verkennen waarin sjabloonversiegeschiedenis aanzienlijke waarde kan bieden:</p> <h3 id="scenario-1-herstellen-van-onbedoelde-wijzigingen">Scenario 1: Herstellen van Onbedoelde Wijzigingen</h3> <p>Een lid van een <strong>marketingteam</strong> uploadt per ongeluk het verkeerde bestand bij het bijwerken van een cruciaal sjabloon voor klantcommunicatie, waardoor de juiste versie wordt overschreven met een onvolledig concept.</p> <p>De teamleider ontdekt de fout en opent simpelweg het sjabloon in DocuGenerate, navigeert naar het paneel Versions, vindt de laatste juiste versie, en klikt op <strong>Restore</strong>. Binnen enkele seconden is het sjabloon weer in de juiste staat, <strong>zonder verstoring</strong> van de bedrijfsactiviteiten.</p> <p>Zonder versiegeschiedenis zou het team het sjabloon opnieuw vanaf nul moeten maken, of hopen dat iemand een lokale kopie van de juiste versie heeft, wat mogelijk vertragingen in klantcommunicatie zou veroorzaken.</p> <h3 id="scenario-2-sjabloonevolutie-en-naleving">Scenario 2: Sjabloonevolutie en Naleving</h3> <p>Een bedrijf in de <strong>financiële dienstverlening</strong> moet gegevens bijhouden over hoe hun klantovereenkomstsjablonen in de loop van de tijd zijn veranderd, om te voldoen aan wettelijke nalevingsvereisten.</p> <p>Met versiebeheer ingeschakeld kan het nalevingsteam de <strong>volledige geschiedenis</strong> van sjabloonwijzigingen bekijken, specifieke versies downloaden voor <strong>auditdoeleinden</strong>, en een duidelijke tijdlijn van sjabloonevolutie aantonen aan regelgevers.</p> <p>Zonder versiegeschiedenis zou het bedrijf een handmatig proces moeten implementeren om sjabloonwijzigingen bij te houden, mogelijk met kopieën van sjablonen met verschillende bestandsnamen of op verschillende locaties, wat het auditproces complexer en foutgevoeliger maakt.</p> <h3 id="scenario-3-gezamenlijke-sjabloonontwikkeling">Scenario 3: Gezamenlijke Sjabloonontwikkeling</h3> <p>Een <strong>juridisch team</strong> ontwikkelt gezamenlijk een nieuw contractsjabloon, waarbij meerdere teamleden gedurende verschillende weken bijdragen leveren en verfijningen aanbrengen.</p> <p>Terwijl teamleden <strong>wijzigingen aanbrengen</strong>, wordt elke update automatisch opgeslagen als een nieuwe versie. Als een bepaalde wijziging problemen veroorzaakt of niet aan de vereisten voldoet, is het eenvoudig om een <strong>eerdere versie</strong> te herstellen. Het team kan ook de evolutie van het sjabloon in de loop van de tijd bekijken om te begrijpen hoe het zich heeft ontwikkeld.</p> <p>Zonder versiegeschiedenis zou het team wijzigingen handmatig moeten coördineren en mogelijk meerdere kopieën van het sjabloon met verschillende bestandsnamen moeten bijhouden, wat verwarring zou veroorzaken over welke versie de nieuwste of meest accurate is.</p> <h2 id="best-practices-voor-sjabloonversiebeheer">Best Practices voor Sjabloonversiebeheer</h2> <p>Om het meeste uit deze functie te halen, houdt u rekening met deze best practices, die u helpen een georganiseerde, efficiënte, en nuttige sjabloonversiegeschiedenis te behouden:</p> <ol> <li> <p><strong>Schakel Versiebeheer In voor Kritieke Sjablonen</strong><br/> Hoewel u versiebeheer mogelijk niet voor elk sjabloon nodig heeft, is het bijzonder waardevol voor sjablonen die vaak worden gebruikt, complexe logica bevatten, of cruciaal zijn voor uw bedrijfsactiviteiten.</p> </li> <li> <p><strong>Gebruik Betekenisvolle Sjabloonupdates</strong><br/> Probeer bij het aanbrengen van wijzigingen aan een sjabloon gerelateerde wijzigingen samen te groeperen, in plaats van veel kleine, stapsgewijze updates te maken. Dit helpt uw versiegeschiedenis overzichtelijk en betekenisvol te houden.</p> </li> <li> <p><strong>Bekijk de Versiegeschiedenis Periodiek</strong><br/> Neem af en toe de tijd om uw sjabloonversiegeschiedenis te bekijken en onnodige versies op te ruimen. Hoewel er momenteel geen limiet is aan het aantal versies, maakt het beperken van uw geschiedenis tot belangrijke wijzigingen het eenvoudiger om te navigeren.</p> </li> <li> <p><strong>Documenteer Belangrijke Wijzigingen</strong><br/> Hoewel DocuGenerate automatisch bijhoudt wanneer wijzigingen zijn aangebracht, wordt het doel of de intentie achter die wijzigingen niet vastgelegd. Overweeg een apart wijzigingslogboek of documentatie bij te houden voor belangrijke sjabloonupdates.</p> </li> <li> <p><strong>Gebruik Teammachtigingen Doordacht</strong><br/> Als u sjablonen deelt met teamleden, overweegt u zorgvuldig welke leden “write”-toegang nodig hebben waarmee ze sjablonen kunnen bijwerken en versies kunnen beheren. Voor gebruikers die alleen documenten hoeven te genereren, is “read”-toegang voldoende.</p> </li> </ol> <h2 id="conclusie">Conclusie</h2> <p>Sjabloonversiegeschiedenis vertegenwoordigt een aanzienlijke verbetering van de mogelijkheden voor sjabloonbeheer van DocuGenerate. Door automatisch wijzigingen bij te houden en tools te bieden om <a href="https://www.docugenerate.com/nl/hulp/articles/hoe-herstel-ik-een-sjabloonversie/">eerdere versies te herstellen</a>, biedt deze functie gemoedsrust, ondersteunt het samenwerking, en helpt het de integriteit van uw documentgeneratieproces te behouden.</p> <p>We kijken ernaar uit om te zien hoe deze functie uw documentgeneratieworkflows verbetert en uw team helpt om efficiënter en met meer vertrouwen met sjablonen te werken. Zoals altijd verwelkomen we uw feedback en suggesties terwijl we de mogelijkheden van DocuGenerate blijven verbeteren en uitbreiden.</p> <h3 id="bronnen">Bronnen</h3> <ul> <li><a href="https://www.docugenerate.com/nl/hulp/articles/hoe-schakel-ik-de-versiegeschiedenis-in/">Hoe schakel ik de versiegeschiedenis in?</a></li> <li><a href="https://www.docugenerate.com/nl/hulp/articles/hoe-herstel-ik-een-sjabloonversie/">Hoe herstel ik een sjabloonversie?</a></li> </ul>]]></content> <author> <name>DocuGenerate</name> <email>support@docugenerate.com</email> </author> <category term="Product Update"/> <category term="Web App"/> <category term="Templates"/> <summary type="html"><![CDATA[De nieuwe functie voor sjabloonversiegeschiedenis biedt de mogelijkheid om eerdere versies van uw sjablonen bij te houden, te herstellen, en te beheren. Deze krachtige toevoeging helpt onbedoelde wijzigingen te voorkomen en biedt een vangnet voor uw belangrijke sjablonen.]]></summary> <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.docugenerate.com/assets/posts/021-template-version-history/cover-image.png"/> <media:content medium="image" url="https://www.docugenerate.com/assets/posts/021-template-version-history/cover-image.png" xmlns:media="http://search.yahoo.com/mrss/"/> </entry> <entry> <title type="html">Automatiseer Event RSVP-Tickets met Xano en DocuGenerate</title> <link href="https://www.docugenerate.com/nl/blog/automatiseer-event-rsvp-tickets-met-xano-en-docugenerate/" rel="alternate" type="text/html" title="Automatiseer Event RSVP-Tickets met Xano en DocuGenerate"/> <published>2025-04-13T00:00:00+00:00</published> <updated>2025-04-13T00:00:00+00:00</updated> <id>https://www.docugenerate.com/nl/blog/automatiseer-event-rsvp-tickets-met-xano-en-docugenerate</id> <content type="html" xml:base="https://www.docugenerate.com/nl/blog/automatiseer-event-rsvp-tickets-met-xano-en-docugenerate/"><![CDATA[<h2 id="introductie">Introductie</h2> <p>Het beheren van RSVP’s voor evenementen is een veelvoorkomende uitdaging voor evenementenorganisatoren, en het bieden van directe bevestigingstickets verbetert de ervaring van deelnemers terwijl u georganiseerd blijft. In deze tutorial leert u hoe u een geautomatiseerd systeem voor evenemententicketing bouwt met <a href="https://www.xano.com/" target="_blank" rel="noopener">Xano</a> voor de backend-logica en <a href="https://www.docugenerate.com">DocuGenerate</a> voor PDF-generatie. We werken met het <a href="https://gitlab.com/xano-marketplace/xano-events" target="_blank" rel="nofollow noopener">Events</a>-sjabloon van Xano uit hun marketplace, dat een kant-en-klaar systeem voor evenementenbeheer biedt met RSVP-mogelijkheden.</p> <p>Aan het einde van deze tutorial genereert uw systeem automatisch gepersonaliseerde PDF-tickets wanneer iemand zich aanmeldt voor een evenement, compleet met evenementdetails en deelnemersinformatie. Deze geautomatiseerde aanpak elimineert het handmatig maken van tickets en zorgt voor consistente, professioneel ogende tickets voor al uw evenementen. De workflow die u maakt, volgt dit proces:</p> <ol> <li>Een deelnemer vult een RSVP-formulier voor een evenement in via een demo-applicatie.</li> <li>De RSVP-data wordt opgeslagen in uw Xano-database.</li> <li>Een databasetrigger detecteert het nieuwe RSVP-record.</li> <li>De trigger haalt de evenementdetails op en genereert een PDF-ticket met DocuGenerate.</li> <li>Het gegenereerde ticket is klaar voor distributie naar de deelnemer.</li> </ol> <p>Het systeem kan meerdere evenementen tegelijk verwerken, waardoor het geschikt is voor organisaties die verschillende gelijktijdige evenementen beheren.</p> <h2 id="het-xano-events-sjabloon-installeren">Het Xano Events-Sjabloon Installeren</h2> <p>De marketplace van Xano biedt vooraf gebouwde sjablonen die u rechtstreeks in uw werkruimte kunt installeren. Het sjabloon <strong>Events</strong> biedt een compleet systeem voor evenementenbeheer, ontworpen voor het verzamelen en beheren van RSVP’s voor evenementen. Het bevat functionaliteit voor het plaatsen van nieuwe evenementen met bannerafbeeldingen, beschrijvingen, en datums, evenals het verzamelen van RSVP-informatie zoals namen en e-mailadressen van deelnemers.</p> <p>Om te beginnen, navigeert u naar de pagina <strong>Marketplace</strong> in uw werkruimte en zoekt u naar het sjabloon <strong>Events</strong> binnen <strong>Starter templates</strong>.</p> <p><img src="https://www.docugenerate.com/assets/posts/020-xano-events-rsvp/xano-events-template.png" alt="Het Events-sjabloon uit de Xano-marketplace"/></p> <p>Klik op <strong>Get Template</strong> om het sjabloon in uw werkruimte te installeren. U zou een succesbericht moeten zien dat bevestigt dat het sjabloon nu beschikbaar is in uw werkruimte.</p> <p><img src="https://www.docugenerate.com/assets/posts/020-xano-events-rsvp/events-template-installed.png" alt="Events-sjabloon geïnstalleerd in werkruimte"/></p> <p>Zodra u het sjabloon installeert, vindt u de volgende onderdelen toegevoegd aan uw werkruimte.</p> <h3 id="sjabloon-databasetabellen">Databasetabellen</h3> <ul> <li><code class="language-plaintext highlighter-rouge">event</code>: Slaat evenementinformatie op, waaronder naam, beschrijving, omslagfoto, startdatum, en einddatum. Het sjabloon bevat 6 voorbeeldevenementrecords.</li> <li><code class="language-plaintext highlighter-rouge">RSVP</code>: Slaat reacties van deelnemers op met naam, e-mail, en een verwijzing naar het evenement. Het sjabloon bevat 13 voorbeeld-RSVP-records.</li> </ul> <p><img src="https://www.docugenerate.com/assets/posts/020-xano-events-rsvp/database-tables.png" alt="De databasetabellen van Events"/></p> <h3 id="sjabloon-api-eindpunten">API-Eindpunten</h3> <p>Het sjabloon maakt een <strong>Events</strong>-API-groep met eindpunten voor het beheren van zowel evenementen als RSVP’s. Deze eindpunten verzorgen alle CRUD-bewerkingen (Create, Read, Update, Delete) voor uw evenementdata. U kunt deze eindpunten bekijken in de <strong>events</strong>-API-groep binnen uw Xano-werkruimte, waar u ook een knop <strong>Copy base URL</strong> vindt die nuttig is bij het verbinden met de <a href="#de-demo-applicatie-verkennen">demo-applicatie</a>.</p> <p><img src="https://www.docugenerate.com/assets/posts/020-xano-events-rsvp/events-api-group.png" alt="De Events-API-groep met eindpunten voor de resources /event en /rsvp"/></p> <h3 id="sjabloon-add-ons">Add-ons</h3> <p>Het sjabloon bevat een add-on <code class="language-plaintext highlighter-rouge">rsvp_count</code> die automatisch het aantal RSVP’s voor elk evenement berekent, waardoor het eenvoudig wordt om de opkomst bij te houden.</p> <h2 id="de-demo-applicatie-verkennen">De Demo-Applicatie Verkennen</h2> <p>Na <a href="#het-xano-events-sjabloon-installeren">installatie</a> klikt u op <strong>Explore live demo</strong> om het Events-sjabloon in actie te zien. Xano biedt de backend-infrastructuur, maar u heeft een frontend-applicatie nodig om met uw API te interageren. De door Xano gebouwde <a href="https://demo.xano.com/xano-events/" target="_blank" rel="nofollow noopener">demo-app</a> stelt u in staat om de volledige functionaliteit te testen.</p> <p>Om de demo-app te verbinden met uw Xano-backend, moet u uw API-URL opgeven. U vindt deze door te navigeren naar de <a href="#sjabloon-api-eindpunten">API-groep</a> <strong>events</strong> in uw werkruimte en te klikken op <strong>Copy base URL</strong>. Plak deze URL in het configuratieveld van de demo-app.</p> <p><img src="https://www.docugenerate.com/assets/posts/020-xano-events-rsvp/xano-events-demo.png" alt="Events Demo-app"/></p> <p>De demo-app biedt verschillende belangrijke functies: alle evenementen bekijken in een kaartlay-out met oneindig scrollen, zoeken naar evenementen op naam, nieuwe evenementen maken met omslagfoto’s en beschrijvingen, volledige evenementdetails bekijken, en RSVP’s indienen met naam en e-mail. De app is volledig functioneel en toont hoe de API-eindpunten samenwerken om een samenhangend systeem voor evenementenbeheer te creëren.</p> <p><img src="https://www.docugenerate.com/assets/posts/020-xano-events-rsvp/xano-events-app.png" alt="Xano Events-app met evenementkaarten"/></p> <p>De evenementen die in de demo-app worden weergegeven, komen rechtstreeks overeen met de records in uw <a href="#sjabloon-databasetabellen">databasetabel</a> <code class="language-plaintext highlighter-rouge">event</code>, die vooraf zijn ingevuld toen u het sjabloon installeerde.</p> <p><img src="https://www.docugenerate.com/assets/posts/020-xano-events-rsvp/event-database-table.png" alt="Databasetabel event met voorbeeldrecords"/></p> <h2 id="de-rsvp-flow-begrijpen">De RSVP-Flow Begrijpen</h2> <p>Klik op een evenement om de details te bekijken. U ziet informatie over het evenement, samen met een knop <strong>Details</strong> voor meer informatie en een knop <strong>RSVP</strong> om uw aanwezigheid door te geven.</p> <p><img src="https://www.docugenerate.com/assets/posts/020-xano-events-rsvp/festival-event-details.png" alt="Details van het evenement &quot;Festival&quot;"/></p> <p>Het RSVP-formulier is bewust eenvoudig gehouden en vraagt alleen om een naam en e-mailadres. Deze minimale aanpak vermindert de drempel en stimuleert meer RSVP’s. Wanneer iemand dit formulier indient, wordt een nieuw record gemaakt in de <a href="#sjabloon-databasetabellen">databasetabel</a> <code class="language-plaintext highlighter-rouge">RSVP</code>.</p> <p><img src="https://www.docugenerate.com/assets/posts/020-xano-events-rsvp/festival-event-rsvp.png" alt="RSVP-formulier voor het evenement &quot;Festival&quot;"/></p> <p>U kunt alle RSVP-records in uw Xano-werkruimte bekijken door te navigeren naar de <a href="#sjabloon-databasetabellen">databasetabel</a> <code class="language-plaintext highlighter-rouge">RSVP</code>, die de vooraf ingevulde voorbeelddata uit de installatie van het sjabloon toont.</p> <p><img src="https://www.docugenerate.com/assets/posts/020-xano-events-rsvp/rsvp-database-table.png" alt="Databasetabel RSVP met voorbeeldrecords"/></p> <p>Nu u begrijpt hoe het Events-sjabloon werkt, gaan we het verbeteren door automatisch PDF-tickets te genereren wanneer iemand zich aanmeldt voor een evenement.</p> <h2 id="de-databasetrigger-maken">De Databasetrigger Maken</h2> <p>Met <a href="https://docs.xano.com/the-function-stack/building-with-visual-development/triggers" target="_blank" rel="nofollow noopener">triggers</a> in Xano kunt u aangepaste workflows uitvoeren wanneer specifieke databasegebeurtenissen plaatsvinden. We maken een trigger die wordt geactiveerd telkens wanneer een nieuw RSVP-record in de database wordt ingevoegd. Deze trigger verzorgt alle logica voor het genereren en mogelijk verspreiden van evenemententickets. Let op: databasetriggers zijn een premiumfunctie in Xano en niet beschikbaar in het gratis plan.</p> <p>Om een trigger te maken, navigeert u naar de tabel <code class="language-plaintext highlighter-rouge">RSVP</code> in uw databaseweergave en klikt u op <strong>+ Trigger</strong>, en selecteert u vervolgens <strong>+ Add database trigger and continue</strong>. Configureer uw trigger met de volgende instellingen:</p> <ul> <li><strong>Name</strong>: Voer bijvoorbeeld “New RSVP Answer” in</li> <li><strong>Data Sources</strong>: Laat leeg (dit betekent dat de trigger wordt uitgevoerd voor alle gegevensbronnen)</li> <li><strong>Actions</strong>: Selecteer alleen <strong>Inserts</strong> (de trigger moet alleen worden geactiveerd wanneer nieuwe RSVP-records worden gemaakt, niet wanneer ze worden bijgewerkt of verwijderd)</li> </ul> <p><img src="https://www.docugenerate.com/assets/posts/020-xano-events-rsvp/new-rsvp-answer-trigger-create.png" alt="De trigger &quot;New RSVP Answer&quot; maken"/></p> <p>Na het maken van de trigger ziet u een eenvoudige workflow met alleen een functie <strong>Inputs</strong>, die data ontvangt over het nieuwe RSVP-record telkens wanneer de trigger wordt geactiveerd. U bouwt hierop voort door functies toe te voegen die evenementdata ophalen en tickets genereren.</p> <p><img src="https://www.docugenerate.com/assets/posts/020-xano-events-rsvp/rsvp-trigger-created.png" alt="Lege trigger New RSVP Answer"/></p> <h2 id="het-docugenerate-snippet-installeren">Het DocuGenerate-Snippet Installeren</h2> <p>Om PDF-generatiemogelijkheden in uw Xano-werkruimte in te schakelen, moet u het <a href="https://www.xano.com/snippet/be03h9xT/" target="_blank" rel="nofollow noopener">DocuGenerate-snippet</a> uit de marketplace van Xano installeren. Snippets zijn vooraf gebouwde functies die de mogelijkheden van Xano uitbreiden door te integreren met externe diensten.</p> <p>Klik op <strong>Add to your Xano Account</strong> en volg de installatiestappen. Log in op uw Xano-account, selecteer de instantie waaraan u het snippet wilt toevoegen, en klik op <strong>Add to Instance</strong>. Na bevestiging kunt u het snippet rechtstreeks in uw werkruimte installeren door deze te selecteren uit een lijst met beschikbare werkruimtes.</p> <p>Eenmaal geïnstalleerd, biedt het DocuGenerate-snippet een functie <a href="https://www.docugenerate.com/nl/hulp/articles/documentgeneratie-automatiseren-met-xano/#generate-document">Generate Document</a> die u in elke workflow kunt gebruiken. Deze functie maakt verbinding met de API van DocuGenerate om documenten te maken op basis van sjablonen.</p> <h3 id="uw-api-sleutel-configureren">Uw API-Sleutel Configureren</h3> <p>Voordat u het DocuGenerate-snippet kunt gebruiken, moet u uw <a href="https://www.docugenerate.com/nl/hulp/articles/waar-vind-ik-mijn-api-sleutel/">API-sleutel</a> configureren in de werkruimte-instellingen. Navigeer naar uw werkruimte-instellingen in Xano en zoek de sectie <strong>Environment Variables</strong>. Klik op de knop <strong>Manage</strong>, en voer vervolgens uw API-sleutel in bij de variabele <code class="language-plaintext highlighter-rouge">docugenerate_api_key</code>. Vergeet niet op <strong>Save</strong> te klikken om de wijzigingen toe te passen.</p> <p><img src="https://www.docugenerate.com/assets/posts/020-xano-events-rsvp/docugenerate-api-key.png" alt="De DocuGenerate API-sleutel configureren"/></p> <h2 id="het-rsvp-ticketsjabloon-maken">Het RSVP-Ticketsjabloon Maken</h2> <p>Vervolgens moet u een Word-sjabloon maken voor uw evenemententickets in DocuGenerate. Het sjabloon moet merge-tags bevatten voor alle datapunten die u op het ticket wilt weergeven. Voor deze tutorial gebruiken we de volgende merge-tags:</p> <ul> <li><code class="language-plaintext highlighter-rouge">[event_name]</code>: De naam van het evenement</li> <li><code class="language-plaintext highlighter-rouge">[start_at]</code>: De start datum en tijd van het evenement</li> <li><code class="language-plaintext highlighter-rouge">[end_at]</code>: De eind datum en tijd van het evenement</li> <li><code class="language-plaintext highlighter-rouge">[event_photo]</code>: De omslagfoto van het evenement</li> <li><code class="language-plaintext highlighter-rouge">[rsvp_name]</code>: De naam van de deelnemer</li> <li><code class="language-plaintext highlighter-rouge">[rsvp_email]</code>: Het e-mailadres van de deelnemer</li> </ul> <p>Maak een nieuw sjabloon in DocuGenerate en upload uw Word-document. Zorg ervoor dat u de <a href="https://www.docugenerate.com/nl/hulp/articles/hoe-schakel-ik-de-uitgebreide-syntax-in/">uitgebreide syntax</a> inschakelt voor dit sjabloon, waarmee u geavanceerde functies kunt gebruiken, zoals het filter voor het aanpassen van afbeeldingsformaat. Let op: bij gebruik van uitgebreide syntax mogen merge-tagnamen geen witruimte bevatten, daarom gebruiken we underscores in plaats van spaties.</p> <p><img src="https://www.docugenerate.com/assets/posts/020-xano-events-rsvp/rsvp-event-ticket-template-v2.png" alt="RSVP Event Ticket-sjabloon in DocuGenerate"/></p> <p>U kunt <a href="https://www.docugenerate.com/assets/posts/020-xano-events-rsvp/RSVP Event Ticket.docx" target="_blank">het sjabloon downloaden</a> dat in deze tutorial is gebruikt en het aanpassen voor uw eigen evenementen. Zodra uw sjabloon is gemaakt, kopieert u de <a href="https://www.docugenerate.com/nl/hulp/articles/hoe-vind-ik-de-sjabloon-id/">sjabloon-ID</a> uit de interface van DocuGenerate, aangezien u deze later nodig heeft bij het configureren van de functie Generate Document in Xano.</p> <h2 id="de-trigger-workflow-bouwen">De Trigger-Workflow Bouwen</h2> <p>Nu uw trigger is gemaakt en DocuGenerate is geïnstalleerd, bent u klaar om de workflow te bouwen die tickets genereert. Deze workflow haalt de evenementdetails op voor de RSVP en gebruikt die data om een gepersonaliseerd PDF-ticket te genereren.</p> <h3 id="documentgeneratie-configureren">Documentgeneratie Configureren</h3> <p>Om de functie <a href="https://www.docugenerate.com/nl/hulp/articles/documentgeneratie-automatiseren-met-xano/#generate-document">Generate Document</a> toe te voegen aan uw workflow, klikt u op <strong>Add function</strong> en zoekt u naar “DocuGenerate” in de functiebibliotheek. Selecteer vervolgens <strong>DocuGenerate/Generate Document</strong> uit de resultaten.</p> <p><img src="https://www.docugenerate.com/assets/posts/020-xano-events-rsvp/search-generate-document-function-v2.png" alt="De functie &quot;DocuGenerate/Generate Document&quot; toevoegen aan de workflow"/></p> <p>De functie Generate Document vereist verschillende invoervelden:</p> <ul> <li><strong>template_id</strong>: Plak de sjabloon-ID van uw sjabloon <a href="#het-rsvp-ticketsjabloon-maken">RSVP Event Ticket</a></li> <li><strong>name</strong>: Stel dit in op een dynamische waarde zoals <code class="language-plaintext highlighter-rouge">Ticket for %s</code>, met de functie <code class="language-plaintext highlighter-rouge">sprintf</code> om de naam van de deelnemer uit <code class="language-plaintext highlighter-rouge">new.name</code> op te nemen</li> <li><strong>output_format</strong>: Stel in op <code class="language-plaintext highlighter-rouge">.pdf</code> om PDF-tickets te genereren</li> <li><strong>data</strong>: Voor de parameter <code class="language-plaintext highlighter-rouge">data</code> selecteert u eerst het objecttype, en gebruikt u vervolgens meerdere keren het filter <code class="language-plaintext highlighter-rouge">set</code> om sleutel-waardeparen toe te voegen. Dit object bevat de merge-tagwaarden voor uw sjabloon: <ul> <li><strong>rsvp_name</strong>: Stel in op <code class="language-plaintext highlighter-rouge">new.name</code> uit het RSVP-record</li> <li><strong>rsvp_email</strong>: Stel in op <code class="language-plaintext highlighter-rouge">new.email</code> uit het RSVP-record</li> </ul> </li> </ul> <p><img src="https://www.docugenerate.com/assets/posts/020-xano-events-rsvp/configure-generate-document-function.png" alt="De functie &quot;DocuGenerate/Generate Document&quot; configureren"/></p> <p>Met deze configuratie wordt het ticket alleen ingevuld met de data van de persoon. We moeten ook de evenementdata op het ticket opnemen.</p> <h3 id="evenementdata-ophalen">Evenementdata Ophalen</h3> <p>Het RSVP-record bevat een veld <code class="language-plaintext highlighter-rouge">event_id</code> dat verwijst naar het bijbehorende evenement. U moet de volledige evenementdetails ophalen voordat u het ticket genereert. Voeg een functie <strong>Query all Records</strong> toe aan uw triggerworkflow vóór <a href="#documentgeneratie-configureren">Generate Document</a> en configureer deze om de tabel <code class="language-plaintext highlighter-rouge">event</code> te bevragen.</p> <p>Om alleen het specifieke evenement voor deze RSVP op te halen, voegt u een filter toe met een aangepaste query: <code class="language-plaintext highlighter-rouge">db:event.id==input:new.event_id</code>. Deze voorwaarde koppelt de evenement-ID uit de database aan de evenement-ID in het nieuwe RSVP-record. Wijzig in de <strong>Return settings</strong> het retourtype naar <strong>single</strong> in plaats van de standaardlijst, aangezien u slechts één evenementrecord verwacht. Stel ten slotte de waarde <strong>Return as</strong> in op <code class="language-plaintext highlighter-rouge">event</code>, zodat u later in de workflow naar deze data kunt verwijzen.</p> <p><img src="https://www.docugenerate.com/assets/posts/020-xano-events-rsvp/query-event-records-by-id.png" alt="De functie &quot;Query all Records&quot; configureren voor de tabel &quot;event&quot;"/></p> <h3 id="evenementdata-toevoegen-aan-het-ticket">Evenementdata Toevoegen aan het Ticket</h3> <p>Nu de evenementdata is opgehaald in de variabele <code class="language-plaintext highlighter-rouge">event</code>, moeten we terug naar het configureren van de functie <a href="#documentgeneratie-configureren">Generate Document</a> en de volgende koppelingen toevoegen aan de invoer <code class="language-plaintext highlighter-rouge">data</code>:</p> <ul> <li><strong>event_name</strong>: Stel in op <code class="language-plaintext highlighter-rouge">event.name</code> uit het evenementrecord dat u <a href="#evenementdata-ophalen">eerder heeft opgehaald</a></li> <li><strong>start_at</strong>: Stel in op <code class="language-plaintext highlighter-rouge">event.start_at</code>, opgemaakt met het filter <a href="https://docs.xano.com/the-function-stack/filters/timestamp" target="_blank" rel="nofollow noopener">format_timestamp</a> met het formaat <code class="language-plaintext highlighter-rouge">M j, Y h:i A</code> om datums weer te geven zoals “Oct 31, 2023 12:00 AM”</li> <li><strong>end_at</strong>: Stel in op <code class="language-plaintext highlighter-rouge">event.end_at</code>, eveneens opgemaakt als <code class="language-plaintext highlighter-rouge">M j, Y h:i A</code></li> <li><strong>event_photo</strong>: Stel in op <code class="language-plaintext highlighter-rouge">event.cover_photo.url</code> om de omslagafbeelding van het evenement op te nemen in het ticket</li> </ul> <p><img src="https://www.docugenerate.com/assets/posts/020-xano-events-rsvp/generate-document-all-params.png" alt="Alle parameters voor de functie &quot;Generate Document&quot; configureren"/></p> <p>Het filter <code class="language-plaintext highlighter-rouge">format_timestamp</code> is hier bijzonder nuttig, omdat het het tijdstempelformaat van Xano omzet naar een leesbaar formaat dat er professioneel uitziet op uw tickets.</p> <h2 id="de-workflow-volledig-testen">De Workflow Volledig Testen</h2> <p>Nu uw triggerworkflow compleet is, is het tijd om het volledige systeem te testen. Navigeer terug naar de <a href="#de-demo-applicatie-verkennen">demo-applicatie</a> en dien een nieuwe RSVP in voor een evenement. Wanneer u het formulier indient, wordt de trigger automatisch op de achtergrond uitgevoerd.</p> <p>Probeer bijvoorbeeld u aan te melden voor het evenement “2 Day Pokemon Dance Party” met uw naam en e-mail. Navigeer vervolgens naar uw sjabloon in DocuGenerate en bekijk de <a href="https://www.docugenerate.com/nl/hulp/articles/waar-vind-ik-de-gegenereerde-documenten/">gegenereerde documenten</a>. U zou een nieuw document moeten zien dat overeenkomt met uw RSVP-reactie.</p> <p><img src="https://www.docugenerate.com/assets/posts/020-xano-events-rsvp/generated-ticket-example.png" alt="Gegenereerd document &quot;Ticket for John Silver.pdf&quot; in DocuGenerate"/></p> <p>Het ticket moet de naam, e-mail, evenementinformatie, datums, en de omslagfoto van het evenement van de deelnemer bevatten. Ter referentie kunt u het voorbeeld-PDF-ticket dat in deze tutorial is gegenereerd <a href="https://www.docugenerate.com/assets/posts/020-xano-events-rsvp/Ticket for John Silver.pdf" target="_blank">downloaden</a>.</p> <h2 id="mogelijke-verbeteringen">Mogelijke Verbeteringen</h2> <p>De huidige workflow genereert succesvol tickets, maar er zijn verschillende manieren waarop u deze kunt verbeteren om een nog krachtiger systeem voor evenementenbeheer te creëren.</p> <p>Een waardevolle verbetering zou zijn om het ticket automatisch naar de deelnemer te e-mailen. Xano ondersteunt e-mailintegratie via verschillende providers, en u zou een e-mailfunctie kunnen toevoegen na de stap voor documentgeneratie. Dit zou de ticket-URL versturen of de PDF rechtstreeks bijvoegen aan een bevestigingsmail, wat directe voldoening biedt aan deelnemers en uw administratieve werklast vermindert.</p> <p>Een andere mogelijkheid is het toevoegen van QR-codes aan uw tickets met de <a href="https://www.docugenerate.com/nl/hulp/articles/qr-codes-en-barcodes-toevoegen/">QR-codefunctie</a> van DocuGenerate. U zou de RSVP-ID of een unieke bevestigingscode kunnen coderen in de QR-code, waardoor het eenvoudig wordt om tickets te scannen bij de incheck van het evenement en de aanwezigheid te verifiëren.</p> <p>Voor evenementen met beperkte capaciteit kunt u logica toevoegen om het huidige aantal RSVP’s te controleren voordat tickets worden gegenereerd. Als het evenement de maximale capaciteit heeft bereikt, zou de workflow ofwel nieuwe RSVP’s kunnen voorkomen, ofwel deelnemers op een wachtlijst kunnen plaatsen in plaats van direct tickets te genereren.</p> <h2 id="conclusie">Conclusie</h2> <p>We hebben succesvol een geautomatiseerd systeem voor evenemententicketing gebouwd dat gepersonaliseerde PDF-tickets genereert wanneer deelnemers zich aanmelden voor uw evenementen. Deze workflow toont de kracht van het combineren van de backend-mogelijkheden van Xano met de documentgeneratiefuncties van DocuGenerate, allemaal zonder traditionele code te schrijven.</p> <p>Het systeem is zowel praktisch als uitbreidbaar, en kan worden aangepast aan andere gebruiksgevallen dan evenemententickets, zoals het genereren van certificaten, facturen, of elk ander document dat automatisch moet worden gemaakt op basis van databasewijzigingen. Het kernconcept van het gebruik van databasetriggers om documentgeneratieworkflows te starten, kan worden toegepast op talloze scenario’s.</p> <p>Terwijl u verder werkt met <a href="https://www.docugenerate.com/nl/integraties/xano/">Xano en DocuGenerate</a>, overweegt u hoe u deze workflow kunt aanpassen aan uw specifieke behoeften. Of u nu kleine gemeenschapsevenementen of grote conferenties beheert, dit geautomatiseerde ticketingsysteem biedt een solide basis die kan meegroeien met uw vereisten.</p> <h3 id="bronnen">Bronnen</h3> <ul> <li>Het <a href="https://www.xano.com/snippet/be03h9xT/" target="_blank" rel="noopener">DocuGenerate Xano Snippet</a> voor documentgeneratiemogelijkheden.</li> <li>De <a href="https://demo.xano.com/xano-events/" target="_blank" rel="nofollow noopener">Events Demo App</a> voor het testen van het systeem voor evenementenbeheer.</li> <li>Het Word-sjabloon <a href="https://www.docugenerate.com/assets/posts/020-xano-events-rsvp/RSVP Event Ticket.docx" target="_blank">RSVP Event Ticket</a> dat in deze tutorial is gebruikt.</li> <li>Een voorbeeld van een <a href="https://www.docugenerate.com/assets/posts/020-xano-events-rsvp/Ticket for John Silver.pdf" target="_blank">gegenereerd PDF-ticket</a> gemaakt door de workflow.</li> <li>De volledige <a href="https://www.docugenerate.com/assets/posts/020-xano-events-rsvp/trigger-xanoscript.txt" target="_blank">XanoScript-workflow</a> voor de databasetrigger.</li> </ul>]]></content> <author> <name>DocuGenerate</name> <email>support@docugenerate.com</email> </author> <category term="Tickets"/> <category term="Xano"/> <category term="No-Code"/> <summary type="html"><![CDATA[Leer hoe u automatisch PDF-evenemententickets genereert wanneer deelnemers zich aanmelden voor uw evenementen met Xano en DocuGenerate. Deze uitgebreide tutorial leidt u door het instellen van databasetriggers en het bouwen van een complete workflow voor evenemententicketing.]]></summary> <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.docugenerate.com/assets/posts/020-xano-events-rsvp/cover-image.png"/> <media:content medium="image" url="https://www.docugenerate.com/assets/posts/020-xano-events-rsvp/cover-image.png" xmlns:media="http://search.yahoo.com/mrss/"/> </entry> <entry> <title type="html">Hoe Maakt u ZUGFeRD / Factur-X PDF-Facturen met DocuGenerate</title> <link href="https://www.docugenerate.com/nl/blog/hoe-maakt-u-zugferd-factur-x-pdf-facturen-met-docugenerate/" rel="alternate" type="text/html" title="Hoe Maakt u ZUGFeRD / Factur-X PDF-Facturen met DocuGenerate"/> <published>2025-03-08T00:00:00+00:00</published> <updated>2025-03-08T00:00:00+00:00</updated> <id>https://www.docugenerate.com/nl/blog/hoe-maakt-u-zugferd-factur-x-pdf-facturen-met-docugenerate</id> <content type="html" xml:base="https://www.docugenerate.com/nl/blog/hoe-maakt-u-zugferd-factur-x-pdf-facturen-met-docugenerate/"><![CDATA[<h2 id="wat-is-elektronisch-factureren">Wat is Elektronisch Factureren?</h2> <p><strong>Elektronisch factureren (e-facturatie)</strong> is de uitwisseling van factuurdocumenten tussen leveranciers en kopers in een gestructureerd elektronisch formaat. In tegenstelling tot traditionele papieren facturen of eenvoudige PDF-bestanden die per e-mail worden verstuurd, bevatten e-facturen gestructureerde data die automatisch kan worden verwerkt door boekhoudsystemen, wat handmatige gegevensinvoer vermindert en de nauwkeurigheid verbetert.</p> <p>De Europese Unie stuurt al geruime tijd aan op de invoering van e-facturatie via verschillende richtlijnen en standaarden. In Duitsland wordt e-facturatie verplicht voor B2B-transacties vanaf 1 januari 2025, terwijl Frankrijk dit vanaf september 2026 zal vereisen. Deze regelgeving is bedoeld om de efficiëntie te verbeteren, de kosten te verlagen, en de fiscale naleving binnen de Europese markt te versterken.</p> <p>E-facturen komen doorgaans in verschillende formaten, maar een van de populairste aanpakken is het <strong>hybride formaat</strong>, dat zowel menselijk leesbare als machineleesbare elementen combineert in één document. Deze aanpak zorgt voor compatibiliteit met bestaande workflows en maakt tegelijkertijd geautomatiseerde verwerking mogelijk. E-factuurgeneratie kan worden geïntegreerd in verschillende bedrijfsworkflows:</p> <ul> <li><strong>ERP-integratie</strong>: Activeer e-factuurgeneratie wanneer facturen worden goedgekeurd in uw ERP-systeem</li> <li><strong>E-commerceplatforms</strong>: Genereer automatisch e-facturen voor online bestellingen</li> <li><strong>Abonnementssystemen</strong>: Maak terugkerende e-facturen voor abonnementsdiensten</li> <li><strong>Projectbeheer</strong>: Genereer e-facturen op basis van voltooide projectmijlpalen</li> </ul> <h2 id="hybride-e-factuurformaten-begrijpen">Hybride E-Factuurformaten Begrijpen</h2> <p>Hybride e-factuurformaten vertegenwoordigen het beste van twee werelden: ze behouden de vertrouwde PDF-presentatie die mensen kunnen lezen en begrijpen, terwijl ze gestructureerde XML-data insluiten die machines automatisch kunnen verwerken. De meest prominente voorbeelden van deze aanpak zijn <a href="https://www.mustangproject.org/zugferd/" target="_blank" rel="nofollow noopener">ZUGFeRD</a> (ontwikkeld in Duitsland) en <a href="https://fnfe-mpe.org/factur-x/" target="_blank" rel="nofollow noopener">Factur-X</a> (ontwikkeld in Frankrijk), die zijn geharmoniseerd en nu in wezen dezelfde standaard vormen.</p> <h3 id="belangrijkste-onderdelen">Belangrijkste Onderdelen van Hybride E-Facturen</h3> <p>Een hybride e-factuur bestaat uit verschillende essentiële onderdelen:</p> <ul> <li> <p><strong>PDF/A-3-document</strong>: De visuele weergave van de factuur die eruitziet als een traditionele factuur. PDF/A-3 wordt specifiek gekozen omdat het ingesloten bestandsbijlagen ondersteunt, terwijl het mogelijkheden voor langdurige archivering behoudt.</p> </li> <li> <p><strong>Ingesloten XML-bestand</strong>: Machineleesbare gestructureerde data die alle factuurinformatie bevat in een gestandaardiseerd formaat. Deze XML volgt internationale standaarden zoals UN/CEFACT Cross Industry Invoice (CII).</p> </li> <li> <p><strong>Metadata</strong>: Speciale metadata die in de PDF is ingesloten en het document identificeert als een e-factuur, en informatie biedt over de ingesloten XML-structuur.</p> </li> <li> <p><strong>Digitale Handtekeningen</strong>: Optionele cryptografische handtekeningen die de integriteit en authenticiteit van het document waarborgen.</p> </li> </ul> <h3 id="standaarden-en-naamgevingsconventies">Standaarden en Naamgevingsconventies</h3> <p>Verschillende e-facturatiestandaarden vereisen specifieke naamgevingsconventies voor de ingesloten XML-bestanden:</p> <ul> <li><strong>ZUGFeRD 1.0</strong>: Het XML-bestand moet <code class="language-plaintext highlighter-rouge">ZUGFeRD-invoice.xml</code> heten</li> <li><strong>ZUGFeRD 2.0</strong>: Het XML-bestand moet <code class="language-plaintext highlighter-rouge">zugferd-invoice.xml</code> heten</li> <li><strong>ZUGFeRD 2.1 en Factur-X</strong>: Het XML-bestand moet <code class="language-plaintext highlighter-rouge">factur-x.xml</code> heten</li> <li><strong>Italiaanse FatturaPA</strong>: Moet overeenkomen met de factuur-ID, bijv. <code class="language-plaintext highlighter-rouge">IT01234567890_00001.xml</code></li> </ul> <p>Voor de meeste Europese implementaties biedt het volgen van de Factur-X-standaard met de bestandsnaam <code class="language-plaintext highlighter-rouge">factur-x.xml</code> de breedste compatibiliteit.</p> <h2 id="de-aanpak-van-docugenerate-voor-e-facturatie">De Aanpak van DocuGenerate voor E-Facturatie</h2> <p>DocuGenerate biedt een praktische oplossing voor het genereren van e-facturen door zich te richten op het aspect van PDF-generatie, terwijl <a href="https://www.docugenerate.com/nl/hulp/articles/is-het-mogelijk-om-bijlagen-toe-te-voegen-aan-pdfs/">XML-bijlagen</a> worden ondersteund via de API. Deze aanpak erkent dat, hoewel de PDF dynamisch kan worden gegenereerd op basis van sjablonen, de XML-structuur vaak gespecialiseerde validatie en nalevingscontrole vereist die het beste wordt verwerkt door daarvoor bestemde systemen.</p> <h3 id="proces-in-twee-stappen">Proces in Twee Stappen</h3> <p>Het maken van conforme e-facturen met DocuGenerate bestaat uit een proces in twee stappen:</p> <p><strong>1. Genereer de XML-Structuur</strong>: Gebruik gespecialiseerde e-facturatiebibliotheken of -diensten om conforme XML-data te maken die voldoet aan de vereiste standaarden (ZUGFeRD, Factur-X, enz.).</p> <p><strong>2. Genereer de PDF met Ingesloten XML</strong>: Gebruik DocuGenerate om de PDF-factuur te maken en daarbij het vooraf gegenereerde XML-bestand bij te voegen.</p> <p>Deze scheiding van verantwoordelijkheden zorgt ervoor dat beide onderdelen aan hun respectievelijke vereisten voldoen: de XML behoudt strikte naleving van de e-facturatiestandaarden, terwijl de PDF zorgt voor professionele presentatie en flexibiliteit in branding.</p> <h3 id="overwegingen-bij-xml-generatie">Overwegingen bij XML-Generatie</h3> <p>Het XML-onderdeel van een e-factuur moet zorgvuldig worden opgesteld om naleving van de gekozen standaard te waarborgen. Belangrijke overwegingen zijn onder andere:</p> <ul> <li><strong>Gegevensnauwkeurigheid</strong>: Alle waarden in de XML moeten exact overeenkomen met die in de PDF.</li> <li><strong>Validatie</strong>: De XML moet worden gevalideerd tegen het juiste XSD-schema en de Schematron-regels.</li> <li><strong>Profielselectie</strong>: Kies het juiste profiel (Minimum, Basic, EN16931, Extended) op basis van uw vereisten.</li> <li><strong>Codelijsten</strong>: Gebruik de juiste codelijsten voor landen, valuta’s, belastingcategorieën, en andere gestandaardiseerde waarden.</li> </ul> <h2 id="e-factuurgeneratie-implementeren">E-Factuurgeneratie Implementeren</h2> <p>Laten we een praktische implementatie van e-factuurgeneratie doornemen met de API van DocuGenerate en PDF-bijlagen.</p> <h3 id="uw-factuursjabloon-voorbereiden">Stap 1: Uw Factuursjabloon Voorbereiden</h3> <p>Maak een professioneel factuursjabloon in Microsoft Word of een ander ondersteund formaat. Het sjabloon moet <a href="https://www.docugenerate.com/nl/hulp/articles/wat-zijn-merge-tags/">merge-tags</a> bevatten voor alle dynamische content die vanuit uw gegevensbron wordt ingevuld. Zoals weergegeven in het onderstaande sjabloon, moet u merge-tags strategisch door het document plaatsen om alle benodigde factuurinformatie vast te leggen.</p> <p><img src="https://www.docugenerate.com/assets/posts/019-e-invoice-pdf-xml/invoice-template.png" alt="Word-sjabloon van de factuur"/></p> <p>Het <a href="https://www.docugenerate.com/assets/posts/019-e-invoice-pdf-xml/Factur-X Invoice.docx">factuursjabloon</a> dat in deze tutorial wordt gebruikt, bevat de volgende merge-tags:</p> <p><strong>Klantinformatie:</strong></p> <ul> <li><code class="language-plaintext highlighter-rouge">[Company Name]</code> - De bedrijfsnaam van de klant</li> <li><code class="language-plaintext highlighter-rouge">[Street Address]</code> - Straatadres van de klant</li> <li><code class="language-plaintext highlighter-rouge">[City]</code> - Stad van de klant</li> <li><code class="language-plaintext highlighter-rouge">[State]</code> - Staat of regio van de klant</li> <li><code class="language-plaintext highlighter-rouge">[Zip Code]</code> - Postcode van de klant</li> </ul> <p><strong>Factuurdetails:</strong></p> <ul> <li><code class="language-plaintext highlighter-rouge">[Invoice No]</code> - Unieke factuuridentificatie</li> <li><code class="language-plaintext highlighter-rouge">[Invoice Date]</code> - Datum waarop de factuur is uitgegeven</li> </ul> <p><strong>Factuurregels (met lijstsyntax):</strong></p> <ul> <li><code class="language-plaintext highlighter-rouge">[#Items]...[/]</code> - Lusstructuur voor meerdere factuurregels</li> <li><code class="language-plaintext highlighter-rouge">[Description]</code> - Beschrijving van product of dienst</li> <li><code class="language-plaintext highlighter-rouge">[Quantity]</code> - Aantal items</li> <li><code class="language-plaintext highlighter-rouge">[Price]</code> - Eenheidsprijs per item</li> <li><code class="language-plaintext highlighter-rouge">[Amount]</code> - Totaalbedrag voor de factuurregel</li> </ul> <p><strong>Totalen:</strong></p> <ul> <li><code class="language-plaintext highlighter-rouge">[Sub Total]</code> - Som van alle factuurregels vóór belasting</li> <li><code class="language-plaintext highlighter-rouge">[Tax Rate]</code> - Belastingpercentage</li> <li><code class="language-plaintext highlighter-rouge">[Tax Total]</code> - Totale belasting</li> <li><code class="language-plaintext highlighter-rouge">[Total]</code> - Definitieve factuurtotaal inclusief belasting</li> </ul> <h3 id="uw-factuurdata-voorbereiden">Stap 2: Uw Factuurdata Voorbereiden</h3> <p>Voordat u de factuur genereert, moet u uw data voorbereiden in JSON-formaat. De JSON-sleutels moeten exact overeenkomen met de merge-tags in uw sjabloon voor een correcte vervanging. Elke sleutel komt overeen met een merge-tag in het sjabloon - bijvoorbeeld, de JSON-sleutel <code class="language-plaintext highlighter-rouge">"Company Name"</code> vervangt de merge-tag <code class="language-plaintext highlighter-rouge">[Company Name]</code> in het document.</p> <p>Hier is de voorbeeld-<a href="https://www.docugenerate.com/assets/posts/019-e-invoice-pdf-xml/invoice-data.json">JSON-data</a> die overeenkomt met ons factuursjabloon:</p> <div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">[</span><span class="w">
  </span><span class="p">{</span><span class="w">
    </span><span class="nl">"Company Name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"TechGear Solutions"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"Invoice No"</span><span class="p">:</span><span class="w"> </span><span class="s2">"INV-2025-001"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"Street Address"</span><span class="p">:</span><span class="w"> </span><span class="s2">"82 Bashford Avenue"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"City"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Chicago"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"State"</span><span class="p">:</span><span class="w"> </span><span class="s2">"IL"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"Zip Code"</span><span class="p">:</span><span class="w"> </span><span class="s2">"60652"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"Invoice Date"</span><span class="p">:</span><span class="w"> </span><span class="s2">"March 8, 2025"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"Items"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
      </span><span class="p">{</span><span class="w">
        </span><span class="nl">"Description"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Wireless Mouse"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"Quantity"</span><span class="p">:</span><span class="w"> </span><span class="s2">"5"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"Price"</span><span class="p">:</span><span class="w"> </span><span class="s2">"$29.99"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"Amount"</span><span class="p">:</span><span class="w"> </span><span class="s2">"$149.95"</span><span class="w">
      </span><span class="p">},</span><span class="w">
      </span><span class="p">{</span><span class="w">
        </span><span class="nl">"Description"</span><span class="p">:</span><span class="w"> </span><span class="s2">"USB-C Cable (2m)"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"Quantity"</span><span class="p">:</span><span class="w"> </span><span class="s2">"10"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"Price"</span><span class="p">:</span><span class="w"> </span><span class="s2">"$12.50"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"Amount"</span><span class="p">:</span><span class="w"> </span><span class="s2">"$125.00"</span><span class="w">
      </span><span class="p">},</span><span class="w">
      </span><span class="p">{</span><span class="w">
        </span><span class="nl">"Description"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Laptop Stand"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"Quantity"</span><span class="p">:</span><span class="w"> </span><span class="s2">"3"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"Price"</span><span class="p">:</span><span class="w"> </span><span class="s2">"$45.00"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"Amount"</span><span class="p">:</span><span class="w"> </span><span class="s2">"$135.00"</span><span class="w">
      </span><span class="p">}</span><span class="w">
    </span><span class="p">],</span><span class="w">
    </span><span class="nl">"Sub Total"</span><span class="p">:</span><span class="w"> </span><span class="s2">"$409.95"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"Tax Rate"</span><span class="p">:</span><span class="w"> </span><span class="s2">"20"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"Tax Total"</span><span class="p">:</span><span class="w"> </span><span class="s2">"$81.99"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"Total"</span><span class="p">:</span><span class="w"> </span><span class="s2">"$491.94"</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">]</span><span class="w">
</span></code></pre></div></div> <p>Merk op hoe de array <code class="language-plaintext highlighter-rouge">Items</code> meerdere objecten bevat, die elk een factuurregel vertegenwoordigen. Deze structuur werkt samen met de lussyntax <code class="language-plaintext highlighter-rouge">[#Items]...[/]</code> in het sjabloon om <a href="https://www.docugenerate.com/nl/hulp/articles/tabellen-toevoegen-aan-een-sjabloon/">meerdere rijen</a> te genereren in de factuurtabel.</p> <h3 id="conforme-xml-genereren">Stap 3: Conforme XML Genereren</h3> <p>Voordat u de PDF maakt, moet u de XML-structuur genereren die in de PDF wordt ingesloten. Alle waarden in het XML-bestand moeten overeenkomen met de bijbehorende waarden in uw JSON-dataset die de PDF invult, zoals factuurnummers, bedragen, datums, factuurregels, en totalen. Eventuele afwijkingen tussen de PDF- en XML-data kunnen leiden tot validatiefouten of verwerkingsproblemen bij ontvangersystemen.</p> <p>Hier is een vereenvoudigd voorbeeld van hoe een Factur-X XML-structuur eruit zou kunnen zien:</p> <div class="language-xml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span>
<span class="nt">&lt;rsm:CrossIndustryInvoice</span> <span class="na">xmlns:rsm=</span><span class="s">"urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100"</span>
                          <span class="na">xmlns:a=</span><span class="s">"urn:un:unece:uncefact:data:standard:QualifiedDataType:100"</span>
                          <span class="na">xmlns:qdt=</span><span class="s">"urn:un:unece:uncefact:data:standard:QualifiedDataType:10"</span>
                          <span class="na">xmlns:ram=</span><span class="s">"urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100"</span>
                          <span class="na">xmlns:udt=</span><span class="s">"urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100"</span>
                          <span class="na">xmlns:xsi=</span><span class="s">"http://www.w3.org/2001/XMLSchema-instance"</span><span class="nt">&gt;</span>
    <span class="nt">&lt;rsm:ExchangedDocumentContext&gt;</span>
        <span class="nt">&lt;ram:GuidelineSpecifiedDocumentContextParameter&gt;</span>
            <span class="nt">&lt;ram:ID&gt;</span>urn:cen.eu:en16931:2017<span class="nt">&lt;/ram:ID&gt;</span>
        <span class="nt">&lt;/ram:GuidelineSpecifiedDocumentContextParameter&gt;</span>
    <span class="nt">&lt;/rsm:ExchangedDocumentContext&gt;</span>
    <span class="nt">&lt;rsm:ExchangedDocument&gt;</span>
        <span class="nt">&lt;ram:ID&gt;</span>INV-2025-001<span class="nt">&lt;/ram:ID&gt;</span>
        <span class="nt">&lt;ram:TypeCode&gt;</span>380<span class="nt">&lt;/ram:TypeCode&gt;</span>
        <span class="nt">&lt;ram:IssueDateTime&gt;</span>
            <span class="nt">&lt;udt:DateTimeString</span> <span class="na">format=</span><span class="s">"102"</span><span class="nt">&gt;</span>20250308<span class="nt">&lt;/udt:DateTimeString&gt;</span>
        <span class="nt">&lt;/ram:IssueDateTime&gt;</span>
    <span class="nt">&lt;/rsm:ExchangedDocument&gt;</span>
    <span class="nt">&lt;rsm:SupplyChainTradeTransaction&gt;</span>
        <span class="nt">&lt;ram:IncludedSupplyChainTradeLineItem&gt;</span>
            <span class="nt">&lt;ram:AssociatedDocumentLineDocument&gt;</span>
                <span class="nt">&lt;ram:LineID&gt;</span>1<span class="nt">&lt;/ram:LineID&gt;</span>
            <span class="nt">&lt;/ram:AssociatedDocumentLineDocument&gt;</span>
            <span class="nt">&lt;ram:SpecifiedTradeProduct&gt;</span>
                <span class="nt">&lt;ram:Name&gt;</span>Wireless Mouse<span class="nt">&lt;/ram:Name&gt;</span>
            <span class="nt">&lt;/ram:SpecifiedTradeProduct&gt;</span>
            <span class="nt">&lt;ram:SpecifiedLineTradeAgreement&gt;</span>
                <span class="nt">&lt;ram:NetPriceProductTradePrice&gt;</span>
                    <span class="nt">&lt;ram:ChargeAmount&gt;</span>29.99<span class="nt">&lt;/ram:ChargeAmount&gt;</span>
                <span class="nt">&lt;/ram:NetPriceProductTradePrice&gt;</span>
            <span class="nt">&lt;/ram:SpecifiedLineTradeAgreement&gt;</span>
            <span class="nt">&lt;ram:SpecifiedLineTradeDelivery&gt;</span>
                <span class="nt">&lt;ram:BilledQuantity</span> <span class="na">unitCode=</span><span class="s">"C62"</span><span class="nt">&gt;</span>5.0000<span class="nt">&lt;/ram:BilledQuantity&gt;</span>
            <span class="nt">&lt;/ram:SpecifiedLineTradeDelivery&gt;</span>
            <span class="nt">&lt;ram:SpecifiedLineTradeSettlement&gt;</span>
                <span class="nt">&lt;ram:ApplicableTradeTax&gt;</span>
                    <span class="nt">&lt;ram:TypeCode&gt;</span>VAT<span class="nt">&lt;/ram:TypeCode&gt;</span>
                    <span class="nt">&lt;ram:CategoryCode&gt;</span>S<span class="nt">&lt;/ram:CategoryCode&gt;</span>
                    <span class="nt">&lt;ram:RateApplicablePercent&gt;</span>20<span class="nt">&lt;/ram:RateApplicablePercent&gt;</span>
                <span class="nt">&lt;/ram:ApplicableTradeTax&gt;</span>
                <span class="nt">&lt;ram:SpecifiedTradeSettlementLineMonetarySummation&gt;</span>
                    <span class="nt">&lt;ram:LineTotalAmount&gt;</span>149.95<span class="nt">&lt;/ram:LineTotalAmount&gt;</span>
                <span class="nt">&lt;/ram:SpecifiedTradeSettlementLineMonetarySummation&gt;</span>
            <span class="nt">&lt;/ram:SpecifiedLineTradeSettlement&gt;</span>
        <span class="nt">&lt;/ram:IncludedSupplyChainTradeLineItem&gt;</span>
        <span class="nt">&lt;ram:IncludedSupplyChainTradeLineItem&gt;</span>
            <span class="nt">&lt;ram:AssociatedDocumentLineDocument&gt;</span>
                <span class="nt">&lt;ram:LineID&gt;</span>2<span class="nt">&lt;/ram:LineID&gt;</span>
            <span class="nt">&lt;/ram:AssociatedDocumentLineDocument&gt;</span>
            <span class="nt">&lt;ram:SpecifiedTradeProduct&gt;</span>
                <span class="nt">&lt;ram:Name&gt;</span>USB-C Cable (2m)<span class="nt">&lt;/ram:Name&gt;</span>
            <span class="nt">&lt;/ram:SpecifiedTradeProduct&gt;</span>
            <span class="nt">&lt;ram:SpecifiedLineTradeAgreement&gt;</span>
                <span class="nt">&lt;ram:NetPriceProductTradePrice&gt;</span>
                    <span class="nt">&lt;ram:ChargeAmount&gt;</span>12.50<span class="nt">&lt;/ram:ChargeAmount&gt;</span>
                <span class="nt">&lt;/ram:NetPriceProductTradePrice&gt;</span>
            <span class="nt">&lt;/ram:SpecifiedLineTradeAgreement&gt;</span>
            <span class="nt">&lt;ram:SpecifiedLineTradeDelivery&gt;</span>
                <span class="nt">&lt;ram:BilledQuantity</span> <span class="na">unitCode=</span><span class="s">"C62"</span><span class="nt">&gt;</span>10.0000<span class="nt">&lt;/ram:BilledQuantity&gt;</span>
            <span class="nt">&lt;/ram:SpecifiedLineTradeDelivery&gt;</span>
            <span class="nt">&lt;ram:SpecifiedLineTradeSettlement&gt;</span>
                <span class="nt">&lt;ram:ApplicableTradeTax&gt;</span>
                    <span class="nt">&lt;ram:TypeCode&gt;</span>VAT<span class="nt">&lt;/ram:TypeCode&gt;</span>
                    <span class="nt">&lt;ram:CategoryCode&gt;</span>S<span class="nt">&lt;/ram:CategoryCode&gt;</span>
                    <span class="nt">&lt;ram:RateApplicablePercent&gt;</span>20<span class="nt">&lt;/ram:RateApplicablePercent&gt;</span>
                <span class="nt">&lt;/ram:ApplicableTradeTax&gt;</span>
                <span class="nt">&lt;ram:SpecifiedTradeSettlementLineMonetarySummation&gt;</span>
                    <span class="nt">&lt;ram:LineTotalAmount&gt;</span>125.00<span class="nt">&lt;/ram:LineTotalAmount&gt;</span>
                <span class="nt">&lt;/ram:SpecifiedTradeSettlementLineMonetarySummation&gt;</span>
            <span class="nt">&lt;/ram:SpecifiedLineTradeSettlement&gt;</span>
        <span class="nt">&lt;/ram:IncludedSupplyChainTradeLineItem&gt;</span>
        <span class="nt">&lt;ram:IncludedSupplyChainTradeLineItem&gt;</span>
            <span class="nt">&lt;ram:AssociatedDocumentLineDocument&gt;</span>
                <span class="nt">&lt;ram:LineID&gt;</span>3<span class="nt">&lt;/ram:LineID&gt;</span>
            <span class="nt">&lt;/ram:AssociatedDocumentLineDocument&gt;</span>
            <span class="nt">&lt;ram:SpecifiedTradeProduct&gt;</span>
                <span class="nt">&lt;ram:Name&gt;</span>Laptop Stand<span class="nt">&lt;/ram:Name&gt;</span>
            <span class="nt">&lt;/ram:SpecifiedTradeProduct&gt;</span>
            <span class="nt">&lt;ram:SpecifiedLineTradeAgreement&gt;</span>
                <span class="nt">&lt;ram:NetPriceProductTradePrice&gt;</span>
                    <span class="nt">&lt;ram:ChargeAmount&gt;</span>45.00<span class="nt">&lt;/ram:ChargeAmount&gt;</span>
                <span class="nt">&lt;/ram:NetPriceProductTradePrice&gt;</span>
            <span class="nt">&lt;/ram:SpecifiedLineTradeAgreement&gt;</span>
            <span class="nt">&lt;ram:SpecifiedLineTradeDelivery&gt;</span>
                <span class="nt">&lt;ram:BilledQuantity</span> <span class="na">unitCode=</span><span class="s">"C62"</span><span class="nt">&gt;</span>3.0000<span class="nt">&lt;/ram:BilledQuantity&gt;</span>
            <span class="nt">&lt;/ram:SpecifiedLineTradeDelivery&gt;</span>
            <span class="nt">&lt;ram:SpecifiedLineTradeSettlement&gt;</span>
                <span class="nt">&lt;ram:ApplicableTradeTax&gt;</span>
                    <span class="nt">&lt;ram:TypeCode&gt;</span>VAT<span class="nt">&lt;/ram:TypeCode&gt;</span>
                    <span class="nt">&lt;ram:CategoryCode&gt;</span>S<span class="nt">&lt;/ram:CategoryCode&gt;</span>
                    <span class="nt">&lt;ram:RateApplicablePercent&gt;</span>20<span class="nt">&lt;/ram:RateApplicablePercent&gt;</span>
                <span class="nt">&lt;/ram:ApplicableTradeTax&gt;</span>
                <span class="nt">&lt;ram:SpecifiedTradeSettlementLineMonetarySummation&gt;</span>
                    <span class="nt">&lt;ram:LineTotalAmount&gt;</span>135.00<span class="nt">&lt;/ram:LineTotalAmount&gt;</span>
                <span class="nt">&lt;/ram:SpecifiedTradeSettlementLineMonetarySummation&gt;</span>
            <span class="nt">&lt;/ram:SpecifiedLineTradeSettlement&gt;</span>
        <span class="nt">&lt;/ram:IncludedSupplyChainTradeLineItem&gt;</span>
        <span class="nt">&lt;ram:ApplicableHeaderTradeAgreement&gt;</span>
            <span class="nt">&lt;ram:SellerTradeParty&gt;</span>
                <span class="nt">&lt;ram:Name&gt;</span>DocuGenerate<span class="nt">&lt;/ram:Name&gt;</span>
                <span class="nt">&lt;ram:PostalTradeAddress&gt;</span>
                    <span class="nt">&lt;ram:PostcodeCode&gt;</span>90013<span class="nt">&lt;/ram:PostcodeCode&gt;</span>
                    <span class="nt">&lt;ram:LineOne&gt;</span>93 East Lassen Street<span class="nt">&lt;/ram:LineOne&gt;</span>
                    <span class="nt">&lt;ram:CityName&gt;</span>Los Angeles<span class="nt">&lt;/ram:CityName&gt;</span>
                    <span class="nt">&lt;ram:CountryID&gt;</span>US<span class="nt">&lt;/ram:CountryID&gt;</span>
                <span class="nt">&lt;/ram:PostalTradeAddress&gt;</span>
                <span class="nt">&lt;ram:SpecifiedTaxRegistration&gt;</span>
                    <span class="nt">&lt;ram:ID</span> <span class="na">schemeID=</span><span class="s">"VA"</span><span class="nt">&gt;</span>US12367623<span class="nt">&lt;/ram:ID&gt;</span>
                <span class="nt">&lt;/ram:SpecifiedTaxRegistration&gt;</span>
            <span class="nt">&lt;/ram:SellerTradeParty&gt;</span>
            <span class="nt">&lt;ram:BuyerTradeParty&gt;</span>
                <span class="nt">&lt;ram:Name&gt;</span>TechGear Solutions<span class="nt">&lt;/ram:Name&gt;</span>
                <span class="nt">&lt;ram:PostalTradeAddress&gt;</span>
                    <span class="nt">&lt;ram:PostcodeCode&gt;</span>60652<span class="nt">&lt;/ram:PostcodeCode&gt;</span>
                    <span class="nt">&lt;ram:LineOne&gt;</span>82 Bashford Avenue<span class="nt">&lt;/ram:LineOne&gt;</span>
                    <span class="nt">&lt;ram:CityName&gt;</span>Chicago<span class="nt">&lt;/ram:CityName&gt;</span>
                    <span class="nt">&lt;ram:CountryID&gt;</span>US<span class="nt">&lt;/ram:CountryID&gt;</span>
                <span class="nt">&lt;/ram:PostalTradeAddress&gt;</span>
            <span class="nt">&lt;/ram:BuyerTradeParty&gt;</span>
        <span class="nt">&lt;/ram:ApplicableHeaderTradeAgreement&gt;</span>
        <span class="nt">&lt;ram:ApplicableHeaderTradeDelivery&gt;</span>
            <span class="nt">&lt;ram:ActualDeliverySupplyChainEvent&gt;</span>
                <span class="nt">&lt;ram:OccurrenceDateTime&gt;</span>
                    <span class="nt">&lt;udt:DateTimeString</span> <span class="na">format=</span><span class="s">"102"</span><span class="nt">&gt;</span>20250308<span class="nt">&lt;/udt:DateTimeString&gt;</span>
                <span class="nt">&lt;/ram:OccurrenceDateTime&gt;</span>
            <span class="nt">&lt;/ram:ActualDeliverySupplyChainEvent&gt;</span>
        <span class="nt">&lt;/ram:ApplicableHeaderTradeDelivery&gt;</span>
        <span class="nt">&lt;ram:ApplicableHeaderTradeSettlement&gt;</span>
            <span class="nt">&lt;ram:InvoiceCurrencyCode&gt;</span>USD<span class="nt">&lt;/ram:InvoiceCurrencyCode&gt;</span>
            <span class="nt">&lt;ram:ApplicableTradeTax&gt;</span>
                <span class="nt">&lt;ram:CalculatedAmount&gt;</span>81.99<span class="nt">&lt;/ram:CalculatedAmount&gt;</span>
                <span class="nt">&lt;ram:TypeCode&gt;</span>VAT<span class="nt">&lt;/ram:TypeCode&gt;</span>
                <span class="nt">&lt;ram:BasisAmount&gt;</span>409.95<span class="nt">&lt;/ram:BasisAmount&gt;</span>
                <span class="nt">&lt;ram:CategoryCode&gt;</span>S<span class="nt">&lt;/ram:CategoryCode&gt;</span>
                <span class="nt">&lt;ram:RateApplicablePercent&gt;</span>20<span class="nt">&lt;/ram:RateApplicablePercent&gt;</span>
            <span class="nt">&lt;/ram:ApplicableTradeTax&gt;</span>
            <span class="nt">&lt;ram:SpecifiedTradePaymentTerms&gt;</span>
                <span class="nt">&lt;ram:DueDateDateTime&gt;</span>
                    <span class="nt">&lt;udt:DateTimeString</span> <span class="na">format=</span><span class="s">"102"</span><span class="nt">&gt;</span>20250308<span class="nt">&lt;/udt:DateTimeString&gt;</span>
                <span class="nt">&lt;/ram:DueDateDateTime&gt;</span>
            <span class="nt">&lt;/ram:SpecifiedTradePaymentTerms&gt;</span>
            <span class="nt">&lt;ram:SpecifiedTradeSettlementHeaderMonetarySummation&gt;</span>
                <span class="nt">&lt;ram:LineTotalAmount&gt;</span>409.95<span class="nt">&lt;/ram:LineTotalAmount&gt;</span>
                <span class="nt">&lt;ram:TaxBasisTotalAmount&gt;</span>409.95<span class="nt">&lt;/ram:TaxBasisTotalAmount&gt;</span>
                <span class="nt">&lt;ram:TaxTotalAmount</span> <span class="na">currencyID=</span><span class="s">"USD"</span><span class="nt">&gt;</span>81.99<span class="nt">&lt;/ram:TaxTotalAmount&gt;</span>
                <span class="nt">&lt;ram:GrandTotalAmount&gt;</span>491.94<span class="nt">&lt;/ram:GrandTotalAmount&gt;</span>
                <span class="nt">&lt;ram:DuePayableAmount&gt;</span>491.94<span class="nt">&lt;/ram:DuePayableAmount&gt;</span>
            <span class="nt">&lt;/ram:SpecifiedTradeSettlementHeaderMonetarySummation&gt;</span>
        <span class="nt">&lt;/ram:ApplicableHeaderTradeSettlement&gt;</span>
    <span class="nt">&lt;/rsm:SupplyChainTradeTransaction&gt;</span>
<span class="nt">&lt;/rsm:CrossIndustryInvoice&gt;</span>
</code></pre></div></div> <p>U kunt zowel uw sjabloon als de XML verrijken met aanvullende bedrijfsinformatie, zoals:</p> <ul> <li><strong>Betalingsinformatie</strong>: IBAN-rekeninggegevens, ACH-routingnummers, betalingsvoorwaarden</li> <li><strong>Contactgegevens</strong>: Contactpersonen voor zowel koper als verkoper</li> <li><strong>Referentienummers</strong>: Inkooporders, referenties van pakbonnen, contractnummers</li> <li><strong>Aanvullende Adressen</strong>: Bezorgadressen, factuuradressen die afwijken van het bedrijfsadres</li> <li><strong>Belastingdetails</strong>: Meerdere belastingtarieven, belastingvrijstellingen, verleggingsregeling-indicatoren</li> </ul> <h3 id="de-pdf-met-ingesloten-xml-maken">Stap 4: De PDF met Ingesloten XML Maken</h3> <p>Zodra uw XML-bestand klaar is, kunt u het bijvoegen aan de PDF met de <a href="https://www.docugenerate.com/nl/hulp/articles/is-het-mogelijk-om-bijlagen-toe-te-voegen-aan-pdfs/">functie voor PDF-bijlagen</a> van DocuGenerate. De API ondersteunt twee methoden om het XML-bestand op te geven:</p> <ol> <li><strong>Directe URL</strong>: Als uw XML-bestand online wordt gehost, kunt u de directe URL opgeven</li> <li><strong>Base64-data-URI</strong>: Voor lokale bestanden, of wanneer u de content rechtstreeks wilt insluiten</li> </ol> <p>Voor de Base64-aanpak moet het data-URI-formaat <code class="language-plaintext highlighter-rouge">data:text/xml;name=factur-x.xml;base64,{BASE64_ENCODED_XML}</code> zijn, en u kunt verschillende <a href="https://www.base64encode.org/" target="_blank" rel="nofollow noopener">online tools</a> of opdrachtregelhulpprogramma’s gebruiken om uw XML-bestand om te zetten naar Base64. Voor de hierboven getoonde voorbeeld-XML kunt u het vooraf gecodeerde <a href="https://www.docugenerate.com/assets/posts/019-e-invoice-pdf-xml/factur-x-base64.txt">Base64 XML-bestand</a> gebruiken dat overeenkomt met onze voorbeelddata.</p> <p>Hier ziet u hoe u de API van DocuGenerate gebruikt om de PDF-factuur te genereren met de XML als bijlage:</p> <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>curl <span class="nt">-X</span> <span class="s1">'POST'</span> <span class="se">\</span>
  <span class="s1">'https://api.docugenerate.com/v1/document'</span> <span class="se">\</span>
  <span class="nt">-H</span> <span class="s1">'accept: application/json'</span> <span class="se">\</span>
  <span class="nt">-H</span> <span class="s1">'Authorization: 491c000c5fad32ed7787005b0723ad55'</span> <span class="se">\</span>
  <span class="nt">-H</span> <span class="s1">'Content-Type: application/json'</span> <span class="se">\</span>
  <span class="nt">-d</span> <span class="s1">'{
  "template_id": "7VYocxLnIupLU3YT4iLr",
  "data": [{
    "Company Name": "TechGear Solutions",
    "Invoice No": "INV-2025-001",
    "Street Address": "82 Bashford Avenue",
    "City": "Chicago",
    "State": "IL",
    "Zip Code": "60652",
    "Invoice Date": "March 8, 2025",
    "Items": [
      {
        "Description": "Wireless Mouse",
        "Quantity": "5",
        "Price": "$29.99",
        "Amount": "$149.95"
      },
      {
        "Description": "USB-C Cable (2m)",
        "Quantity": "10",
        "Price": "$12.50",
        "Amount": "$125.00"
      },
      {
        "Description": "Laptop Stand",
        "Quantity": "3",
        "Price": "$45.00",
        "Amount": "$135.00"
      }
    ],
    "Sub Total": "$409.95",
    "Tax Rate": "20",
    "Tax Total": "$81.99",
    "Total": "$491.94"
  }],
  "output_format": ".pdf/a-3b",
  "attach": "data:text/xml;name=factur-x.xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHJzbTpDcm9zc0luZHVzdHJ5SW52b2ljZSB4bWxuczpyc209InVybjp1bjp1bmVjZTp1bmNlZmFjdDpkYXRhOnN0YW5kYXJkOkNyb3NzSW5kdXN0cnlJbnZvaWNlOjEwMCIKICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxuczphPSJ1cm46dW46dW5lY2U6dW5jZWZhY3Q6ZGF0YTpzdGFuZGFyZDpRdWFsaWZpZWREYXRhVHlwZToxMDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM6cWR0PSJ1cm46dW46dW5lY2U6dW5jZWZhY3Q6ZGF0YTpzdGFuZGFyZDpRdWFsaWZpZWREYXRhVHlwZToxMCIKICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxuczpyYW09InVybjp1bjp1bmVjZTp1bmNlZmFjdDpkYXRhOnN0YW5kYXJkOlJldXNhYmxlQWdncmVnYXRlQnVzaW5lc3NJbmZvcm1hdGlvbkVudGl0eToxMDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM6dWR0PSJ1cm46dW46dW5lY2U6dW5jZWZhY3Q6ZGF0YTpzdGFuZGFyZDpVbnF1YWxpZmllZERhdGFUeXBlOjEwMCIKICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIj4KICAgIDxyc206RXhjaGFuZ2VkRG9jdW1lbnRDb250ZXh0PgogICAgICAgIDxyYW06R3VpZGVsaW5lU3BlY2lmaWVkRG9jdW1lbnRDb250ZXh0UGFyYW1ldGVyPgogICAgICAgICAgICA8cmFtOklEPnVybjpjZW4uZXU6ZW4xNjkzMToyMDE3PC9yYW06SUQ+CiAgICAgICAgPC9yYW06R3VpZGVsaW5lU3BlY2lmaWVkRG9jdW1lbnRDb250ZXh0UGFyYW1ldGVyPgogICAgPC9yc206RXhjaGFuZ2VkRG9jdW1lbnRDb250ZXh0PgogICAgPHJzbTpFeGNoYW5nZWREb2N1bWVudD4KICAgICAgICA8cmFtOklEPklOVi0yMDI1LTAwMTwvcmFtOklEPgogICAgICAgIDxyYW06VHlwZUNvZGU+MzgwPC9yYW06VHlwZUNvZGU+CiAgICAgICAgPHJhbTpJc3N1ZURhdGVUaW1lPgogICAgICAgICAgICA8dWR0OkRhdGVUaW1lU3RyaW5nIGZvcm1hdD0iMTAyIj4yMDI1MDMwODwvdWR0OkRhdGVUaW1lU3RyaW5nPgogICAgICAgIDwvcmFtOklzc3VlRGF0ZVRpbWU+CiAgICA8L3JzbTpFeGNoYW5nZWREb2N1bWVudD4KICAgIDxyc206U3VwcGx5Q2hhaW5UcmFkZVRyYW5zYWN0aW9uPgogICAgICAgIDxyYW06SW5jbHVkZWRTdXBwbHlDaGFpblRyYWRlTGluZUl0ZW0+CiAgICAgICAgICAgIDxyYW06QXNzb2NpYXRlZERvY3VtZW50TGluZURvY3VtZW50PgogICAgICAgICAgICAgICAgPHJhbTpMaW5lSUQ+MTwvcmFtOkxpbmVJRD4KICAgICAgICAgICAgPC9yYW06QXNzb2NpYXRlZERvY3VtZW50TGluZURvY3VtZW50PgogICAgICAgICAgICA8cmFtOlNwZWNpZmllZFRyYWRlUHJvZHVjdD4KICAgICAgICAgICAgICAgIDxyYW06TmFtZT5XaXJlbGVzcyBNb3VzZTwvcmFtOk5hbWU+CiAgICAgICAgICAgIDwvcmFtOlNwZWNpZmllZFRyYWRlUHJvZHVjdD4KICAgICAgICAgICAgPHJhbTpTcGVjaWZpZWRMaW5lVHJhZGVBZ3JlZW1lbnQ+CiAgICAgICAgICAgICAgICA8cmFtOk5ldFByaWNlUHJvZHVjdFRyYWRlUHJpY2U+CiAgICAgICAgICAgICAgICAgICAgPHJhbTpDaGFyZ2VBbW91bnQ+MjkuOTk8L3JhbTpDaGFyZ2VBbW91bnQ+CiAgICAgICAgICAgICAgICA8L3JhbTpOZXRQcmljZVByb2R1Y3RUcmFkZVByaWNlPgogICAgICAgICAgICA8L3JhbTpTcGVjaWZpZWRMaW5lVHJhZGVBZ3JlZW1lbnQ+CiAgICAgICAgICAgIDxyYW06U3BlY2lmaWVkTGluZVRyYWRlRGVsaXZlcnk+CiAgICAgICAgICAgICAgICA8cmFtOkJpbGxlZFF1YW50aXR5IHVuaXRDb2RlPSJDNjIiPjUuMDAwMDwvcmFtOkJpbGxlZFF1YW50aXR5PgogICAgICAgICAgICA8L3JhbTpTcGVjaWZpZWRMaW5lVHJhZGVEZWxpdmVyeT4KICAgICAgICAgICAgPHJhbTpTcGVjaWZpZWRMaW5lVHJhZGVTZXR0bGVtZW50PgogICAgICAgICAgICAgICAgPHJhbTpBcHBsaWNhYmxlVHJhZGVUYXg+CiAgICAgICAgICAgICAgICAgICAgPHJhbTpUeXBlQ29kZT5WQVQ8L3JhbTpUeXBlQ29kZT4KICAgICAgICAgICAgICAgICAgICA8cmFtOkNhdGVnb3J5Q29kZT5TPC9yYW06Q2F0ZWdvcnlDb2RlPgogICAgICAgICAgICAgICAgICAgIDxyYW06UmF0ZUFwcGxpY2FibGVQZXJjZW50PjIwPC9yYW06UmF0ZUFwcGxpY2FibGVQZXJjZW50PgogICAgICAgICAgICAgICAgPC9yYW06QXBwbGljYWJsZVRyYWRlVGF4PgogICAgICAgICAgICAgICAgPHJhbTpTcGVjaWZpZWRUcmFkZVNldHRsZW1lbnRMaW5lTW9uZXRhcnlTdW1tYXRpb24+CiAgICAgICAgICAgICAgICAgICAgPHJhbTpMaW5lVG90YWxBbW91bnQ+MTQ5Ljk1PC9yYW06TGluZVRvdGFsQW1vdW50PgogICAgICAgICAgICAgICAgPC9yYW06U3BlY2lmaWVkVHJhZGVTZXR0bGVtZW50TGluZU1vbmV0YXJ5U3VtbWF0aW9uPgogICAgICAgICAgICA8L3JhbTpTcGVjaWZpZWRMaW5lVHJhZGVTZXR0bGVtZW50PgogICAgICAgIDwvcmFtOkluY2x1ZGVkU3VwcGx5Q2hhaW5UcmFkZUxpbmVJdGVtPgogICAgICAgIDxyYW06SW5jbHVkZWRTdXBwbHlDaGFpblRyYWRlTGluZUl0ZW0+CiAgICAgICAgICAgIDxyYW06QXNzb2NpYXRlZERvY3VtZW50TGluZURvY3VtZW50PgogICAgICAgICAgICAgICAgPHJhbTpMaW5lSUQ+MjwvcmFtOkxpbmVJRD4KICAgICAgICAgICAgPC9yYW06QXNzb2NpYXRlZERvY3VtZW50TGluZURvY3VtZW50PgogICAgICAgICAgICA8cmFtOlNwZWNpZmllZFRyYWRlUHJvZHVjdD4KICAgICAgICAgICAgICAgIDxyYW06TmFtZT5VU0ItQyBDYWJsZSAoMm0pPC9yYW06TmFtZT4KICAgICAgICAgICAgPC9yYW06U3BlY2lmaWVkVHJhZGVQcm9kdWN0PgogICAgICAgICAgICA8cmFtOlNwZWNpZmllZExpbmVUcmFkZUFncmVlbWVudD4KICAgICAgICAgICAgICAgIDxyYW06TmV0UHJpY2VQcm9kdWN0VHJhZGVQcmljZT4KICAgICAgICAgICAgICAgICAgICA8cmFtOkNoYXJnZUFtb3VudD4xMi41MDwvcmFtOkNoYXJnZUFtb3VudD4KICAgICAgICAgICAgICAgIDwvcmFtOk5ldFByaWNlUHJvZHVjdFRyYWRlUHJpY2U+CiAgICAgICAgICAgIDwvcmFtOlNwZWNpZmllZExpbmVUcmFkZUFncmVlbWVudD4KICAgICAgICAgICAgPHJhbTpTcGVjaWZpZWRMaW5lVHJhZGVEZWxpdmVyeT4KICAgICAgICAgICAgICAgIDxyYW06QmlsbGVkUXVhbnRpdHkgdW5pdENvZGU9IkM2MiI+MTAuMDAwMDwvcmFtOkJpbGxlZFF1YW50aXR5PgogICAgICAgICAgICA8L3JhbTpTcGVjaWZpZWRMaW5lVHJhZGVEZWxpdmVyeT4KICAgICAgICAgICAgPHJhbTpTcGVjaWZpZWRMaW5lVHJhZGVTZXR0bGVtZW50PgogICAgICAgICAgICAgICAgPHJhbTpBcHBsaWNhYmxlVHJhZGVUYXg+CiAgICAgICAgICAgICAgICAgICAgPHJhbTpUeXBlQ29kZT5WQVQ8L3JhbTpUeXBlQ29kZT4KICAgICAgICAgICAgICAgICAgICA8cmFtOkNhdGVnb3J5Q29kZT5TPC9yYW06Q2F0ZWdvcnlDb2RlPgogICAgICAgICAgICAgICAgICAgIDxyYW06UmF0ZUFwcGxpY2FibGVQZXJjZW50PjIwPC9yYW06UmF0ZUFwcGxpY2FibGVQZXJjZW50PgogICAgICAgICAgICAgICAgPC9yYW06QXBwbGljYWJsZVRyYWRlVGF4PgogICAgICAgICAgICAgICAgPHJhbTpTcGVjaWZpZWRUcmFkZVNldHRsZW1lbnRMaW5lTW9uZXRhcnlTdW1tYXRpb24+CiAgICAgICAgICAgICAgICAgICAgPHJhbTpMaW5lVG90YWxBbW91bnQ+MTI1LjAwPC9yYW06TGluZVRvdGFsQW1vdW50PgogICAgICAgICAgICAgICAgPC9yYW06U3BlY2lmaWVkVHJhZGVTZXR0bGVtZW50TGluZU1vbmV0YXJ5U3VtbWF0aW9uPgogICAgICAgICAgICA8L3JhbTpTcGVjaWZpZWRMaW5lVHJhZGVTZXR0bGVtZW50PgogICAgICAgIDwvcmFtOkluY2x1ZGVkU3VwcGx5Q2hhaW5UcmFkZUxpbmVJdGVtPgogICAgICAgIDxyYW06SW5jbHVkZWRTdXBwbHlDaGFpblRyYWRlTGluZUl0ZW0+CiAgICAgICAgICAgIDxyYW06QXNzb2NpYXRlZERvY3VtZW50TGluZURvY3VtZW50PgogICAgICAgICAgICAgICAgPHJhbTpMaW5lSUQ+MzwvcmFtOkxpbmVJRD4KICAgICAgICAgICAgPC9yYW06QXNzb2NpYXRlZERvY3VtZW50TGluZURvY3VtZW50PgogICAgICAgICAgICA8cmFtOlNwZWNpZmllZFRyYWRlUHJvZHVjdD4KICAgICAgICAgICAgICAgIDxyYW06TmFtZT5MYXB0b3AgU3RhbmQ8L3JhbTpOYW1lPgogICAgICAgICAgICA8L3JhbTpTcGVjaWZpZWRUcmFkZVByb2R1Y3Q+CiAgICAgICAgICAgIDxyYW06U3BlY2lmaWVkTGluZVRyYWRlQWdyZWVtZW50PgogICAgICAgICAgICAgICAgPHJhbTpOZXRQcmljZVByb2R1Y3RUcmFkZVByaWNlPgogICAgICAgICAgICAgICAgICAgIDxyYW06Q2hhcmdlQW1vdW50PjQ1LjAwPC9yYW06Q2hhcmdlQW1vdW50PgogICAgICAgICAgICAgICAgPC9yYW06TmV0UHJpY2VQcm9kdWN0VHJhZGVQcmljZT4KICAgICAgICAgICAgPC9yYW06U3BlY2lmaWVkTGluZVRyYWRlQWdyZWVtZW50PgogICAgICAgICAgICA8cmFtOlNwZWNpZmllZExpbmVUcmFkZURlbGl2ZXJ5PgogICAgICAgICAgICAgICAgPHJhbTpCaWxsZWRRdWFudGl0eSB1bml0Q29kZT0iQzYyIj4zLjAwMDA8L3JhbTpCaWxsZWRRdWFudGl0eT4KICAgICAgICAgICAgPC9yYW06U3BlY2lmaWVkTGluZVRyYWRlRGVsaXZlcnk+CiAgICAgICAgICAgIDxyYW06U3BlY2lmaWVkTGluZVRyYWRlU2V0dGxlbWVudD4KICAgICAgICAgICAgICAgIDxyYW06QXBwbGljYWJsZVRyYWRlVGF4PgogICAgICAgICAgICAgICAgICAgIDxyYW06VHlwZUNvZGU+VkFUPC9yYW06VHlwZUNvZGU+CiAgICAgICAgICAgICAgICAgICAgPHJhbTpDYXRlZ29yeUNvZGU+UzwvcmFtOkNhdGVnb3J5Q29kZT4KICAgICAgICAgICAgICAgICAgICA8cmFtOlJhdGVBcHBsaWNhYmxlUGVyY2VudD4yMDwvcmFtOlJhdGVBcHBsaWNhYmxlUGVyY2VudD4KICAgICAgICAgICAgICAgIDwvcmFtOkFwcGxpY2FibGVUcmFkZVRheD4KICAgICAgICAgICAgICAgIDxyYW06U3BlY2lmaWVkVHJhZGVTZXR0bGVtZW50TGluZU1vbmV0YXJ5U3VtbWF0aW9uPgogICAgICAgICAgICAgICAgICAgIDxyYW06TGluZVRvdGFsQW1vdW50PjEzNS4wMDwvcmFtOkxpbmVUb3RhbEFtb3VudD4KICAgICAgICAgICAgICAgIDwvcmFtOlNwZWNpZmllZFRyYWRlU2V0dGxlbWVudExpbmVNb25ldGFyeVN1bW1hdGlvbj4KICAgICAgICAgICAgPC9yYW06U3BlY2lmaWVkTGluZVRyYWRlU2V0dGxlbWVudD4KICAgICAgICA8L3JhbTpJbmNsdWRlZFN1cHBseUNoYWluVHJhZGVMaW5lSXRlbT4KICAgICAgICA8cmFtOkFwcGxpY2FibGVIZWFkZXJUcmFkZUFncmVlbWVudD4KICAgICAgICAgICAgPHJhbTpTZWxsZXJUcmFkZVBhcnR5PgogICAgICAgICAgICAgICAgPHJhbTpOYW1lPkRvY3VHZW5lcmF0ZTwvcmFtOk5hbWU+CiAgICAgICAgICAgICAgICA8cmFtOlBvc3RhbFRyYWRlQWRkcmVzcz4KICAgICAgICAgICAgICAgICAgICA8cmFtOlBvc3Rjb2RlQ29kZT45MDAxMzwvcmFtOlBvc3Rjb2RlQ29kZT4KICAgICAgICAgICAgICAgICAgICA8cmFtOkxpbmVPbmU+OTMgRWFzdCBMYXNzZW4gU3RyZWV0PC9yYW06TGluZU9uZT4KICAgICAgICAgICAgICAgICAgICA8cmFtOkNpdHlOYW1lPkxvcyBBbmdlbGVzPC9yYW06Q2l0eU5hbWU+CiAgICAgICAgICAgICAgICAgICAgPHJhbTpDb3VudHJ5SUQ+VVM8L3JhbTpDb3VudHJ5SUQ+CiAgICAgICAgICAgICAgICA8L3JhbTpQb3N0YWxUcmFkZUFkZHJlc3M+CiAgICAgICAgICAgICAgICA8cmFtOlNwZWNpZmllZFRheFJlZ2lzdHJhdGlvbj4KICAgICAgICAgICAgICAgICAgICA8cmFtOklEIHNjaGVtZUlEPSJWQSI+VVMxMjM2NzYyMzwvcmFtOklEPgogICAgICAgICAgICAgICAgPC9yYW06U3BlY2lmaWVkVGF4UmVnaXN0cmF0aW9uPgogICAgICAgICAgICA8L3JhbTpTZWxsZXJUcmFkZVBhcnR5PgogICAgICAgICAgICA8cmFtOkJ1eWVyVHJhZGVQYXJ0eT4KICAgICAgICAgICAgICAgIDxyYW06TmFtZT5UZWNoR2VhciBTb2x1dGlvbnM8L3JhbTpOYW1lPgogICAgICAgICAgICAgICAgPHJhbTpQb3N0YWxUcmFkZUFkZHJlc3M+CiAgICAgICAgICAgICAgICAgICAgPHJhbTpQb3N0Y29kZUNvZGU+NjA2NTI8L3JhbTpQb3N0Y29kZUNvZGU+CiAgICAgICAgICAgICAgICAgICAgPHJhbTpMaW5lT25lPjgyIEJhc2hmb3JkIEF2ZW51ZTwvcmFtOkxpbmVPbmU+CiAgICAgICAgICAgICAgICAgICAgPHJhbTpDaXR5TmFtZT5DaGljYWdvPC9yYW06Q2l0eU5hbWU+CiAgICAgICAgICAgICAgICAgICAgPHJhbTpDb3VudHJ5SUQ+VVM8L3JhbTpDb3VudHJ5SUQ+CiAgICAgICAgICAgICAgICA8L3JhbTpQb3N0YWxUcmFkZUFkZHJlc3M+CiAgICAgICAgICAgIDwvcmFtOkJ1eWVyVHJhZGVQYXJ0eT4KICAgICAgICA8L3JhbTpBcHBsaWNhYmxlSGVhZGVyVHJhZGVBZ3JlZW1lbnQ+CiAgICAgICAgPHJhbTpBcHBsaWNhYmxlSGVhZGVyVHJhZGVEZWxpdmVyeT4KICAgICAgICAgICAgPHJhbTpBY3R1YWxEZWxpdmVyeVN1cHBseUNoYWluRXZlbnQ+CiAgICAgICAgICAgICAgICA8cmFtOk9jY3VycmVuY2VEYXRlVGltZT4KICAgICAgICAgICAgICAgICAgICA8dWR0OkRhdGVUaW1lU3RyaW5nIGZvcm1hdD0iMTAyIj4yMDI1MDMwODwvdWR0OkRhdGVUaW1lU3RyaW5nPgogICAgICAgICAgICAgICAgPC9yYW06T2NjdXJyZW5jZURhdGVUaW1lPgogICAgICAgICAgICA8L3JhbTpBY3R1YWxEZWxpdmVyeVN1cHBseUNoYWluRXZlbnQ+CiAgICAgICAgPC9yYW06QXBwbGljYWJsZUhlYWRlclRyYWRlRGVsaXZlcnk+CiAgICAgICAgPHJhbTpBcHBsaWNhYmxlSGVhZGVyVHJhZGVTZXR0bGVtZW50PgogICAgICAgICAgICA8cmFtOkludm9pY2VDdXJyZW5jeUNvZGU+VVNEPC9yYW06SW52b2ljZUN1cnJlbmN5Q29kZT4KICAgICAgICAgICAgPHJhbTpBcHBsaWNhYmxlVHJhZGVUYXg+CiAgICAgICAgICAgICAgICA8cmFtOkNhbGN1bGF0ZWRBbW91bnQ+ODEuOTk8L3JhbTpDYWxjdWxhdGVkQW1vdW50PgogICAgICAgICAgICAgICAgPHJhbTpUeXBlQ29kZT5WQVQ8L3JhbTpUeXBlQ29kZT4KICAgICAgICAgICAgICAgIDxyYW06QmFzaXNBbW91bnQ+NDA5Ljk1PC9yYW06QmFzaXNBbW91bnQ+CiAgICAgICAgICAgICAgICA8cmFtOkNhdGVnb3J5Q29kZT5TPC9yYW06Q2F0ZWdvcnlDb2RlPgogICAgICAgICAgICAgICAgPHJhbTpSYXRlQXBwbGljYWJsZVBlcmNlbnQ+MjA8L3JhbTpSYXRlQXBwbGljYWJsZVBlcmNlbnQ+CiAgICAgICAgICAgIDwvcmFtOkFwcGxpY2FibGVUcmFkZVRheD4KICAgICAgICAgICAgPHJhbTpTcGVjaWZpZWRUcmFkZVBheW1lbnRUZXJtcz4KICAgICAgICAgICAgICAgIDxyYW06RHVlRGF0ZURhdGVUaW1lPgogICAgICAgICAgICAgICAgICAgIDx1ZHQ6RGF0ZVRpbWVTdHJpbmcgZm9ybWF0PSIxMDIiPjIwMjUwMzA4PC91ZHQ6RGF0ZVRpbWVTdHJpbmc+CiAgICAgICAgICAgICAgICA8L3JhbTpEdWVEYXRlRGF0ZVRpbWU+CiAgICAgICAgICAgIDwvcmFtOlNwZWNpZmllZFRyYWRlUGF5bWVudFRlcm1zPgogICAgICAgICAgICA8cmFtOlNwZWNpZmllZFRyYWRlU2V0dGxlbWVudEhlYWRlck1vbmV0YXJ5U3VtbWF0aW9uPgogICAgICAgICAgICAgICAgPHJhbTpMaW5lVG90YWxBbW91bnQ+NDA5Ljk1PC9yYW06TGluZVRvdGFsQW1vdW50PgogICAgICAgICAgICAgICAgPHJhbTpUYXhCYXNpc1RvdGFsQW1vdW50PjQwOS45NTwvcmFtOlRheEJhc2lzVG90YWxBbW91bnQ+CiAgICAgICAgICAgICAgICA8cmFtOlRheFRvdGFsQW1vdW50IGN1cnJlbmN5SUQ9IlVTRCI+ODEuOTk8L3JhbTpUYXhUb3RhbEFtb3VudD4KICAgICAgICAgICAgICAgIDxyYW06R3JhbmRUb3RhbEFtb3VudD40OTEuOTQ8L3JhbTpHcmFuZFRvdGFsQW1vdW50PgogICAgICAgICAgICAgICAgPHJhbTpEdWVQYXlhYmxlQW1vdW50PjQ5MS45NDwvcmFtOkR1ZVBheWFibGVBbW91bnQ+CiAgICAgICAgICAgIDwvcmFtOlNwZWNpZmllZFRyYWRlU2V0dGxlbWVudEhlYWRlck1vbmV0YXJ5U3VtbWF0aW9uPgogICAgICAgIDwvcmFtOkFwcGxpY2FibGVIZWFkZXJUcmFkZVNldHRsZW1lbnQ+CiAgICA8L3JzbTpTdXBwbHlDaGFpblRyYWRlVHJhbnNhY3Rpb24+CjwvcnNtOkNyb3NzSW5kdXN0cnlJbnZvaWNlPg=="
}'</span>
</code></pre></div></div> <p>De waarde <code class="language-plaintext highlighter-rouge">name=factur-x.xml</code> is een belangrijk onderdeel van de parameter <code class="language-plaintext highlighter-rouge">attach</code>, aangezien deze de bestandsnaam van de bijlage opgeeft om te voldoen aan het door de standaard vereiste <a href="#standaarden-en-naamgevingsconventies">naamgevingsschema</a> van Factur-X. Daarnaast is het gebruik van het uitvoerformaat <code class="language-plaintext highlighter-rouge">.pdf/a-3b</code> noodzakelijk voor het maken van een PDF/A-3-conform document, wat vereist is voor e-facturatiestandaarden, aangezien dit ingesloten bestandsbijlagen ondersteunt terwijl mogelijkheden voor langdurige archivering behouden blijven.</p> <h3 id="het-resultaat-valideren">Stap 5: Het Resultaat Valideren</h3> <p>Na generatie bevat de <a href="https://www.docugenerate.com/assets/posts/019-e-invoice-pdf-xml/Factur-X Invoice.pdf">resulterende PDF</a> een professionele factuur die overeenkomt met uw sjabloon, samen met het ingesloten XML-bestand. U kunt de bijlage controleren door de PDF te openen in een viewer die bijlagen ondersteunt, zoals Adobe Acrobat Reader, waar u het bestand <code class="language-plaintext highlighter-rouge">factur-x.xml</code> vermeld ziet in het paneel <strong>Attachments</strong>.</p> <p><img src="https://www.docugenerate.com/assets/posts/019-e-invoice-pdf-xml/generated-invoice.png" alt="Gegenereerde PDF met zichtbare XML-bijlage"/></p> <h2 id="best-practices-voor-e-factuurimplementatie">Best Practices voor E-Factuurimplementatie</h2> <h3 id="gegevensconsistentie">Gegevensconsistentie</h3> <p>Het behouden van perfecte synchronisatie tussen uw PDF-presentatie en de ingesloten XML-data is een van de meest kritieke aspecten van e-factuurimplementatie. Aangezien ontvangers ofwel de visuele PDF ofwel de gestructureerde XML kunnen gebruiken voor verwerking, kunnen eventuele inconsistenties leiden tot betalingsvertragingen, nalevingsproblemen, of regelrechte afwijzing door geautomatiseerde systemen.</p> <p>Zorg ervoor dat alle bedragen, datums, en andere kritieke informatie identiek zijn tussen de PDF en de ingesloten XML. Besteed speciale aandacht aan berekeningen, belastingbedragen, en totalen, aangezien dit vaak de eerste elementen zijn die door ontvangersystemen worden gevalideerd. Eventuele afwijkingen kunnen leiden tot validatiefouten of verwerkingsproblemen.</p> <h3 id="foutafhandeling">Foutafhandeling</h3> <p>Robuuste foutafhandeling is essentieel voor het behouden van systeembetrouwbaarheid en het waarborgen van soepele werking bij het verwerken van grote hoeveelheden facturen. E-facturatiesystemen staan voor unieke uitdagingen omdat ze moeten coördineren tussen meerdere onderdelen (XML-generatie, PDF-creatie, en bijlageprocessen) terwijl ze voldoen aan strikte nalevingsvereisten. Implementeer uitgebreide foutafhandeling voor zowel XML-generatie als PDF-creatie, met de juiste logging en herstelmechanismen. Veelvoorkomende problemen zijn onder andere:</p> <ul> <li>Ongeldige XML-structuur of ontbrekende verplichte velden</li> <li>Berekeningsfouten tussen PDF- en XML-bedragen</li> <li>Onjuiste bestandsnaamgeving of bijlageparameters</li> <li>Sjabloonweergavefouten</li> </ul> <h3 id="testen-en-validatie">Testen en Validatie</h3> <p>Grondig testen is cruciaal voor e-facturatiesystemen, omdat nalevingsfouten kunnen leiden tot juridische problemen, betalingsvertragingen, en beschadigde zakelijke relaties. In tegenstelling tot traditionele documentgeneratie moeten e-facturen meerdere validatielagen doorstaan, waaronder technische XML-validatie, controle van bedrijfsregels, en verificatie van regelgevingsnaleving. Stel voordat u uw e-facturatiesysteem in gebruik neemt een uitgebreide teststrategie op die zowel technische als zakelijke scenario’s omvat:</p> <ul> <li>Valideer XML-bestanden tegen officiële XSD-schema’s en Schematron-regels</li> <li>Test met verschillende factuurscenario’s (verschillende valuta’s, belastingtarieven, factuurregels)</li> <li>Verifieer PDF/A-3b-naleving met validatietools</li> <li>Test met ontvangersystemen om correcte verwerking te waarborgen</li> </ul> <h2 id="uw-e-factuursysteem-toekomstbestendig-maken">Uw E-Factuursysteem Toekomstbestendig Maken</h2> <h3 id="ontwikkeling-van-standaarden">Ontwikkeling van Standaarden</h3> <p>E-facturatiestandaarden blijven zich snel ontwikkelen, naarmate overheden en internationale organisaties hun vereisten verfijnen. Regelmatige updates van codelijsten en validatieregels vinden in veel rechtsgebieden halfjaarlijks plaats, terwijl nieuwe profielvereisten en optionele functies worden geïntroduceerd om sectorbehoeften en grensoverschrijdende interoperabiliteit te ondersteunen. Ook worden verbeteringen op het gebied van digitale handtekeningen en beveiliging ontwikkeld om cyberbeveiligingsdreigingen aan te pakken en de authenticiteit van documenten te waarborgen.</p> <h3 id="regelgevingswijzigingen">Regelgevingswijzigingen</h3> <p>Overheden wereldwijd voeren e-facturatieverplichtingen in verschillende tempo’s in, waarbij de B2B-vereiste van Duitsland in 2025 van start gaat en Frankrijk in 2026 volgt. Wijzigingen in vereisten voor belastingrapportage gaan vaak gepaard met deze verplichtingen, waarbij realtime verzending van factuurdata naar belastingautoriteiten vereist is. Er worden nieuwe verplichtingen op het gebied van naleving en archivering geïntroduceerd, terwijl maatregelen ter bevordering van grensoverschrijdende handel vereisen dat systemen meerdere standaarden tegelijk ondersteunen.</p> <h3 id="technologische-verbeteringen">Technologische Verbeteringen</h3> <p>Opkomende technologieën hervormen het landschap van e-facturatie met nieuwe mogelijkheden voor automatisering, beveiliging, en efficiëntie. Op blockchain gebaseerde verificatiesystemen bieden onveranderlijke audittrails, terwijl AI-gestuurde tools voor gegevensextractie de verwerkingsnauwkeurigheid verbeteren en handmatige tussenkomst verminderen. Realtime belastingberekeningsmogelijkheden maken automatische naleving in meerdere rechtsgebieden mogelijk, en verbeterde mobiele oplossingen bieden flexibelere factureringsopties. Door systemen met uitbreidbaarheid in gedachten te ontwerpen, kunnen deze ontwikkelingen eenvoudiger worden geïntegreerd naarmate ze volwassener worden.</p> <h2 id="conclusie">Conclusie</h2> <p>Het bouwen van een robuust e-facturatiesysteem met DocuGenerate biedt een praktisch pad naar naleving van Europese en wereldwijde e-facturatievereisten. Door <a href="#conforme-xml-genereren">XML-creatie</a> te scheiden van <a href="#de-pdf-met-ingesloten-xml-maken">PDF-generatie</a>, kunt u zowel technische naleving als flexibiliteit in presentatie waarborgen. Deze hybride aanpak, waarbij gestructureerde XML-data wordt gecombineerd met professionele PDF-presentatie, biedt de beste gebruikerservaring en voldoet tegelijkertijd aan de regelgeving.</p> <p>Of u nu e-facturatie implementeert voor een klein bedrijf of een grote onderneming, de principes en patronen die in deze gids worden beschreven, bieden een solide basis voor succes. Naarmate e-facturatie in meer markten verplicht wordt, zal het hebben van een schaalbaar en conform systeem aanzienlijke concurrentievoordelen opleveren. Onthoud dat u op de hoogte moet blijven van veranderende standaarden, uw implementaties grondig moet valideren, en vanaf het begin moet ontwerpen met schaalbaarheid in gedachten.</p> <h3 id="bronnen">Bronnen</h3> <ul> <li><a href="https://www.docugenerate.com/assets/posts/019-e-invoice-pdf-xml/Factur-X Invoice.docx">Factuursjabloon</a> - Download het Word-sjabloon dat in deze tutorial is gebruikt.</li> <li><a href="https://www.docugenerate.com/assets/posts/019-e-invoice-pdf-xml/invoice-data.json">Voorbeeld-JSON-data</a> - Download de voorbeeldfactuurdata die in deze tutorial is gebruikt.</li> <li><a href="https://www.docugenerate.com/assets/posts/019-e-invoice-pdf-xml/factur-x.xml">Voorbeeld-XML-bestand</a> - Download het XML-bestand dat in deze tutorial is gebruikt.</li> <li><a href="https://www.docugenerate.com/assets/posts/019-e-invoice-pdf-xml/Factur-X Invoice.pdf">Voorbeeld van gegenereerde PDF</a> - Download de volledige PDF met ingesloten XML-bijlage.</li> <li><a href="https://www.docugenerate.com/nl/hulp/articles/is-het-mogelijk-om-bijlagen-toe-te-voegen-aan-pdfs/">Documentatie over PDF-bijlagen</a> - Leer hoe u bestanden insluit in PDF’s.</li> <li><a href="https://www.docugenerate.com/nl/hulp/articles/kan-ik-factur-x-conforme-pdfs-maken/">Documentatie over Factur-X-PDF’s</a> - Leer hoe u Factur-X-conforme PDF’s maakt.</li> <li><a href="https://www.mustangproject.org/zugferd/" target="_blank" rel="nofollow noopener">ZUGFeRD-specificatie</a> - Officiële ZUGFeRD-documentatie.</li> <li><a href="https://fnfe-mpe.org/factur-x/" target="_blank" rel="nofollow noopener">Factur-X-standaard</a> - Specificaties van het Frans-Duitse hybride formaat.</li> </ul>]]></content> <author> <name>DocuGenerate</name> <email>support@docugenerate.com</email> </author> <category term="Invoices"/> <category term="E-Invoicing"/> <category term="XML"/> <summary type="html"><![CDATA[Leer hoe u conforme hybride Factur-X PDF-facturen maakt met ingesloten XML-bestanden. Ontdek de vereisten, standaarden, en implementatiemethoden voor ZUGFeRD, Factur-X, en andere e-facturatieformaten die in heel Europa en wereldwijd worden gebruikt.]]></summary> <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.docugenerate.com/assets/posts/019-e-invoice-pdf-xml/cover-image.png"/> <media:content medium="image" url="https://www.docugenerate.com/assets/posts/019-e-invoice-pdf-xml/cover-image.png" xmlns:media="http://search.yahoo.com/mrss/"/> </entry> <entry> <title type="html">Automatiseer het Maken van Processtukken met Make en DocuGenerate</title> <link href="https://www.docugenerate.com/nl/blog/automatiseer-het-maken-van-processtukken-met-make-en-docugenerate/" rel="alternate" type="text/html" title="Automatiseer het Maken van Processtukken met Make en DocuGenerate"/> <published>2025-02-21T00:00:00+00:00</published> <updated>2025-02-21T00:00:00+00:00</updated> <id>https://www.docugenerate.com/nl/blog/automatiseer-het-maken-van-processtukken-met-make-en-docugenerate</id> <content type="html" xml:base="https://www.docugenerate.com/nl/blog/automatiseer-het-maken-van-processtukken-met-make-en-docugenerate/"><![CDATA[<h2 id="introductie">Introductie</h2> <p>Juridische professionals staan voor een constante uitdaging: het tijdrovende proces van het omzetten van cliëntinformatie in correct opgemaakte gerechtelijke documenten. Een van de meest fundamentele documenten in civiele procedures is het processtuk, dat dient als basis voor het presenteren van zaken aan de rechtbank. Het handmatig maken van deze documenten op basis van intakeformulieren van cliënten brengt repetitieve gegevensinvoer, opmaak, en een aanzienlijk risico op menselijke fouten met zich mee.</p> <p>Een processtuk is een gerechtelijk document dat aan het begin van een zaak wordt ingediend en het standpunt van uw cliënt uiteenzet, of het nu gaat om een vordering of een verweer. Dit document toont duidelijk aan de rechtbank en de tegenpartij wat er zogenaamd is gebeurd, en biedt de feitelijke basis voor uw zaak. Hoewel processtukken niet al het bewijs bevatten dat u tijdens de rechtszaak zult presenteren, leggen ze het essentiële kader vast dat bepaalt wat moet worden bewezen als de zaak voor de rechter komt.</p> <p>Deze tutorial laat zien hoe u een geautomatiseerde workflow maakt die intakedata van cliënten rechtstreeks omzet in professioneel opgemaakte processtukken. We gebruiken drie krachtige tools: <a href="https://www.typeform.com/" target="_blank" rel="nofollow noopener">Typeform</a> voor het verzamelen van cliëntdata, <a href="https://www.make.com/en?utm_source=docugenerate-app&amp;utm_medium=partner&amp;utm_campaign=docugenerate-app-partner-program" target="_blank" rel="nofollow noopener">Make</a> voor workflowautomatisering, en <a href="https://www.docugenerate.com/">DocuGenerate</a> voor documentgeneratie. Het resulterende systeem maakt automatisch PDF-processtukken en slaat deze op in Dropbox voor eenvoudige toegang en distributie naar cliënten.</p> <p>Hoewel praktijktoepassingen mogelijk integreren met gespecialiseerde systemen voor juridisch zaakbeheer, gebruikt deze tutorial toegankelijke tools die de kernprincipes demonstreren. De automatiseringsworkflow die we bouwen, kan eenvoudig worden aangepast om te werken met geavanceerdere juridische softwareplatforms, of gewijzigd om documenten uit te voeren naar andere opslagsystemen op basis van de specifieke behoeften van uw kantoor.</p> <h2 id="de-vereisten-voor-processtukken-begrijpen">De Vereisten voor Processtukken Begrijpen</h2> <p>Voordat we in de automatisering duiken, is het belangrijk om de verschillende soorten processtukken te begrijpen en wanneer ze worden gebruikt in civiele procedures. Verschillende fasen van een zaak vereisen verschillende processtukken, elk met een specifiek juridisch doel.</p> <p>De meest voorkomende processtukken omvatten <strong>Complaints</strong> (klachten), die de zaak van de eiser presenteren met gedetailleerde beschrijvingen van de acties van de gedaagde en verzoeken om schadevergoeding; <strong>Answers</strong> (antwoorden), die binnen bepaalde termijnen reageren op klachten en bevestigende verweren kunnen bevatten; <strong>Counterclaims</strong> (tegenvorderingen), waarbij gedaagden hun eigen schadevergoeding nastreven voor hetzelfde incident; en verschillende <strong>Pre-Trial Motions</strong> (voorlopige verzoekschriften) die betrekking hebben op bewijskwesties of ontslag van de zaak beogen.</p> <p>Elk processtuk moet voldoen aan strikte opmaakvereisten die per rechtsgebied verschillen, maar over het algemeen een specifiek <strong>lettertype</strong> (Times New Roman), <strong>marges</strong> (2,5 cm aan alle zijden voor goede spatiëring), <strong>regelafstand</strong> (dubbele regelafstand voor eenvoudig lezen en annoteren), en andere structurele elementen zoals <strong>regelnummers</strong> omvatten. Het begrijpen van deze vereisten is cruciaal voor het maken van sjablonen die door de rechtbank worden geaccepteerd.</p> <h2 id="het-sjabloon-voor-het-processtuk-maken">Het Sjabloon voor het Processtuk Maken</h2> <p>De basis van ons geautomatiseerde systeem is een correct gestructureerd sjabloon voor het processtuk, met <a href="https://www.docugenerate.com/nl/hulp/articles/wat-zijn-merge-tags/">merge-tags</a> voor het dynamisch invoegen van data. Het maken van dit sjabloon vereist aandacht voor zowel juridische opmaaknormen als technische implementatiedetails.</p> <p>Voor deze tutorial gebruiken we een standaard Microsoft Word-document <a href="https://www.docugenerate.com/assets/posts/018-make-pleading-papers/Pleading Paper.docx">Pleading Paper</a> dat handmatig wordt geüpload om <a href="https://www.docugenerate.com/nl/hulp/articles/hoe-maak-ik-een-nieuw-sjabloon-aan/">een sjabloon te maken</a> in DocuGenerate.</p> <p><img src="https://www.docugenerate.com/assets/posts/018-make-pleading-papers/pleading-paper-template.png" alt="Structuur van het sjabloon voor het processtuk"/></p> <p>De sjabloonstructuur bevat specifieke merge-tags die worden ingevuld met data uit ons intakeformulier voor cliënten. De belangrijkste tags in ons sjabloon zijn:</p> <ul> <li><code class="language-plaintext highlighter-rouge">[ATTORNEY NAME]</code>, <code class="language-plaintext highlighter-rouge">[ATTORNEY ADDRESS]</code>, <code class="language-plaintext highlighter-rouge">[ZIP CODE]</code>, <code class="language-plaintext highlighter-rouge">[COUNTY]</code>, <code class="language-plaintext highlighter-rouge">[EMAIL]</code>, <code class="language-plaintext highlighter-rouge">[PHONE]</code>, en <code class="language-plaintext highlighter-rouge">[FAX]</code> voor de contactgegevens van de advocaat;</li> <li><code class="language-plaintext highlighter-rouge">[COURT NAME]</code> en <code class="language-plaintext highlighter-rouge">[JURISDICTION]</code> voor de gegevens van de rechtbank;</li> <li><code class="language-plaintext highlighter-rouge">[PLAINTIFFS NAME]</code> en <code class="language-plaintext highlighter-rouge">[DEFENDANTS NAME]</code> voor de identificatie van de partijen;</li> <li><code class="language-plaintext highlighter-rouge">[NUMBER]</code> voor het zaaknummer;</li> <li><code class="language-plaintext highlighter-rouge">[PLEADING TITLE]</code> voor het specifieke type processtuk;</li> <li><code class="language-plaintext highlighter-rouge">[BODY OF PLEADING]</code> voor de hoofdinhoud;</li> <li><code class="language-plaintext highlighter-rouge">[DATE]</code> voor de indieningsdatum.</li> </ul> <p>Deze sjabloonstructuur zorgt ervoor dat alle essentiële elementen van juridische documenten aanwezig zijn, terwijl de flexibiliteit behouden blijft om verschillende soorten processtukken te verwerken. De velden met advocaatinformatie bevatten doorgaans statische data die consistent blijft voor alle documenten die door uw kantoor worden gegenereerd, terwijl de zaakspecifieke velden dynamisch worden ingevuld op basis van de reacties op het intakeformulier.</p> <h2 id="het-intakeformulier-opzetten-met-typeform">Het Intakeformulier voor Cliënten Opzetten met Typeform</h2> <p>De volgende stap in onze automatiseringsworkflow is het maken van een intakeformulier voor cliënten dat alle informatie verzamelt die nodig is om processtukken te genereren. We gebruiken de AI-gestuurde formuliercreatiefunctie van Typeform om snel een professioneel intakeformulier te bouwen dat overeenkomt met de merge-tags van ons sjabloon.</p> <h3 id="de-ai-formulierbouwer-van-typeform-gebruiken">De AI-Formulierbouwer van Typeform Gebruiken</h3> <p>Typeform biedt een <a href="https://help.typeform.com/hc/en-us/articles/14955071444244-Use-AI-to-create-forms" target="_blank" rel="nofollow noopener">AI-formuliercreatietool</a> die formulieren kan genereren op basis van beschrijvingen in natuurlijke taal. Deze aanpak is bijzonder nuttig voor juridische professionals die zich willen richten op de inhoud in plaats van op de mechanica van formulierontwerp. Het AI-formuliercreatieproces bestaat uit drie stappen waarin u uw vereisten kunt opgeven via beschrijvende prompts.</p> <p>Voor de eerste stap, <strong>Describe your form</strong>, gebruiken we de volgende prompt: <em>“I want to create a Client Intake Form for my law firm. The form will be used to create a Pleading Paper based on the input values.”</em> Dit geeft de tool de context die het nodig heeft om het juridische doel en het beoogde gebruiksgeval van het formulier te begrijpen.</p> <p><img src="https://www.docugenerate.com/assets/posts/018-make-pleading-papers/typeform-ai-form-v2.png" alt="AI-formuliercreatie-interface van Typeform"/></p> <p>In de tweede stap, <strong>Add important topics</strong>, geven we de exacte benodigde velden op: <em>“The Pleading Paper template will have the following fields: PLEADING TITLE, COURT NAME, JURISDICTION, PLAINTIFFS NAME, DEFENDANTS NAME, NUMBER, BODY OF PLEADING, DATE. Can you make the form to have inputs/questions for each one of these fields?”</em></p> <p>Merk op dat we bewust de velden met advocaatcontactgegevens uitsluiten van het intakeformulier. Deze informatie blijft doorgaans statisch voor elk advocatenkantoor en kan worden hardgecodeerd in onze automatiseringsworkflow in plaats van bij cliënten te worden verzameld, wat de complexiteit van het formulier vermindert terwijl de nauwkeurigheid van de data behouden blijft.</p> <h3 id="structuur-en-testen-van-het-intakeformulier">Structuur en Testen van het Intakeformulier voor Cliënten</h3> <p>De AI van Typeform genereert succesvol een uitgebreid intakeformulier met passende veldtypes voor elk gegevenspunt. De meeste velden gebruiken het invoertype <strong>Short Text</strong> voor namen, nummers, en titels, terwijl het veld <strong>Body of Pleading</strong> een <strong>Long Text</strong>-invoertype gebruikt om meerdere alinea’s juridische content te verwerken die mogelijk meerdere regels beslaan.</p> <p><img src="https://www.docugenerate.com/assets/posts/018-make-pleading-papers/client-intake-form.png" alt="Gegenereerde structuur van het intakeformulier voor cliënten"/></p> <p>Het resulterende formulier biedt een gebruiksvriendelijke interface waarmee cliënten hun zaakinformatie kunnen indienen. Elke vraag is duidelijk gelabeld en komt rechtstreeks overeen met de merge-tags in ons sjabloon voor het processtuk. U kunt de functionaliteit van het formulier testen met deze link naar het <a href="https://form.typeform.com/to/U7qVSqcZ" target="_blank" rel="nofollow noopener">Client Intake Form</a>.</p> <p><img src="https://www.docugenerate.com/assets/posts/018-make-pleading-papers/client-intake-form-v2.gif" alt="Invulproces van het intakeformulier voor cliënten"/></p> <p>Het ontwerp van het formulier legt de nadruk op duidelijkheid en gebruiksgemak, wat cruciaal is bij het verzamelen van informatie van cliënten die mogelijk niet bekend zijn met juridische terminologie. Elk veld bevat nuttige context om ervoor te zorgen dat cliënten de informatie in het juiste formaat aanleveren dat door het rechtssysteem wordt verwacht.</p> <h2 id="het-make-automatiseringsscenario-bouwen">Het Make-Automatiseringsscenario Bouwen</h2> <p>Nu maken we het Make-automatiseringsscenario dat al onze onderdelen met elkaar verbindt. Deze workflow detecteert automatisch nieuwe Typeform-inzendingen, genereert processtukken met DocuGenerate, en slaat de resulterende documenten op in Dropbox. Het volledige scenario bestaat uit vier hoofdonderdelen die in volgorde samenwerken om een volledig geautomatiseerde documentgeneratiepijplijn te creëren.</p> <p><img src="https://www.docugenerate.com/assets/posts/018-make-pleading-papers/make-scenario.png" alt="Volledig Make-automatiseringsscenario"/></p> <h3 id="de-typeform-trigger-instellen">De Typeform-Trigger Instellen</h3> <p>De automatisering begint met de trigger <strong>Watch Responses</strong> van de <a href="https://www.make.com/en/integrations/typeform?utm_source=docugenerate-app&amp;utm_medium=partner&amp;utm_campaign=docugenerate-app-partner-program" target="_blank" rel="nofollow noopener">Typeform-integratie</a>. Deze trigger controleert uw <a href="#structuur-en-testen-van-het-intakeformulier">Client Intake Form</a> op nieuwe inzendingen en start de workflow telkens wanneer een cliënt het formulier invult. Het instellen van deze trigger is eenvoudig en vereist het verbinden van uw Typeform-account met Make.</p> <p><img src="https://www.docugenerate.com/assets/posts/018-make-pleading-papers/typeform-trigger-add.png" alt="Typeform-trigger toevoegen aan Make-scenario"/></p> <p>Configureer na het tot stand brengen van de Typeform-verbinding de trigger <strong>Watch Responses</strong> door uw <strong>Client Intake Form</strong> te selecteren in de vervolgkeuzelijst <strong>Form ID</strong>. De overige parameters kunnen op hun standaardwaarden blijven staan, waardoor er in realtime wordt gecontroleerd op nieuwe reacties. Klik op <strong>Save</strong> om de triggerconfiguratie te voltooien.</p> <p><img src="https://www.docugenerate.com/assets/posts/018-make-pleading-papers/typeform-trigger-configure.png" alt="Watch Responses-trigger van Typeform configureren"/></p> <h3 id="de-action-voor-documentgeneratie-configureren">De Action voor Documentgeneratie Configureren</h3> <p>Het volgende onderdeel in onze workflow is de action <strong>Generate Document</strong> van de <a href="https://www.make.com/en/integrations/docugenerate?utm_source=docugenerate-app&amp;utm_medium=partner&amp;utm_campaign=docugenerate-app-partner-program" target="_blank">DocuGenerate-module</a>. Deze stap zet de verzamelde formulierdata om in een professioneel opgemaakt processtuk. Voordat u deze action configureert, moet u een verbinding met uw DocuGenerate-account tot stand brengen door uw <a href="https://www.docugenerate.com/nl/hulp/articles/waar-vind-ik-mijn-api-sleutel/">API-sleutel</a> op te geven, die u kunt vinden op uw instellingenpagina van DocuGenerate.</p> <p><img src="https://www.docugenerate.com/assets/posts/018-make-pleading-papers/docugenerate-create-connection.png" alt="DocuGenerate-verbinding maken in Make"/></p> <p>De configuratie van de DocuGenerate-action vereist verschillende belangrijke parameters die de documentgeneratie bepalen. Selecteer eerst uw sjabloon <strong>Pleading Paper</strong> in de vervolgkeuzelijst <strong>Template</strong>. Maak voor de documentnaam <strong>Name</strong> een dynamische bestandsnaam door het zaaknummer en de titel van het processtuk uit de formulierreactie te combineren. Stel de <strong>Format</strong> in op <strong>PDF (.pdf)</strong>, aangezien dit het standaardformaat is dat door rechtssystemen wordt geaccepteerd.</p> <p><img src="https://www.docugenerate.com/assets/posts/018-make-pleading-papers/docugenerate-action-config.png" alt="Configuratie van de DocuGenerate-action"/></p> <p>De parameter <strong>Data</strong> vereist zorgvuldige configuratie, aangezien deze formulierreacties koppelt aan de <a href="#het-sjabloon-voor-het-processtuk-maken">merge-tags van het sjabloon</a>. Deze JSON-structuur combineert dynamische waarden uit de Typeform-inzending met statische advocaatinformatie die consistent blijft voor alle documenten.</p> <h3 id="meerregelige-gegevenswaarden-verwerken">Meerregelige Gegevenswaarden Verwerken</h3> <p>Bij het testen van ons scenario met voorbeelddata uit de Typeform-vragenlijst kunt u een specifieke fout tegenkomen die verband houdt met meerregelige content in het veld <strong>Body of Pleading</strong>. Dit is een veelvoorkomende uitdaging bij het werken met juridische documenten die alinea-einden en regelopmaak bevatten. De fout verschijnt doorgaans als volgt:</p> <div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>[400] data must be a valid JSON object or array. Bad control character in string literal in JSON 
at position 591 while parsing near "...JUDGE OF SAID COURT:nnCOMES NOW, MICHAEL..."
</code></pre></div></div> <p><img src="https://www.docugenerate.com/assets/posts/018-make-pleading-papers/multi-line-data-error.gif" alt="Fout met meerregelige data in Make"/></p> <p>Deze fout treedt op omdat het veld <strong>Body of Pleading</strong> meerdere regels en alinea-einden kan bevatten die de JSON-parsing verstoren. Wanneer cliënten gedetailleerde processtukinhoud invoeren met regeleindes, kunnen deze tekens de JSON-structuur verstoren die Make gebruikt om data tussen modules door te geven.</p> <p>De oplossing bestaat uit het vooraf verwerken van de meerregelige tekstdata voordat deze wordt doorgegeven aan DocuGenerate. We moeten regeleindetekens escapen om ervoor te zorgen dat ze correct worden verwerkt binnen de JSON-structuur. Make biedt tekstbewerkingsfuncties speciaal voor dit doel.</p> <p>Om deze oplossing te implementeren, voegen we een tekstverwerkingsstap toe die de functie <code class="language-plaintext highlighter-rouge">replace</code> gebruikt uit de categorie <strong>Text and binary functions</strong> van Make. Deze functie vervangt daadwerkelijke <code class="language-plaintext highlighter-rouge">newline</code>-tekens door geëscapete regeleinde-reeksen <code class="language-plaintext highlighter-rouge">\n</code> die veilig zijn voor JSON-overdracht, terwijl de oorspronkelijke opmaak in het uiteindelijke document behouden blijft.</p> <p><img src="https://www.docugenerate.com/assets/posts/018-make-pleading-papers/replace-newlines-function.png" alt="Replace-functie gebruiken om regeleindes te verwerken"/></p> <p>Na het implementeren van deze voorbewerkingsstap wordt de module <strong>Generate Document</strong> succesvol uitgevoerd zonder JSON-parseerfouten. Het resulterende <a href="https://www.docugenerate.com/assets/posts/018-make-pleading-papers/DC-24-08756 - COMPLAINT FOR PERSONAL INJURY.pdf" target="_blank">Pleading Paper</a> behoudt de oorspronkelijke regeleindes en opmaak van de invoer van de cliënt.</p> <p><img src="https://www.docugenerate.com/assets/posts/018-make-pleading-papers/generate-document-success.png" alt="Succesvolle documentgeneratie"/></p> <h3 id="het-gegenereerde-document-ophalen">Het Gegenereerde Document Ophalen</h3> <p>De laatste onderdelen van onze automatiseringsworkflow betreffen het ophalen van de <a href="#de-action-voor-documentgeneratie-configureren">gegenereerde PDF</a> en het opslaan ervan in Dropbox voor eenvoudige toegang en distributie naar cliënten. Eerst moeten we het gegenereerde PDF-bestand ophalen met de action <strong>Get a file</strong> van de native <a href="https://www.make.com/en/integrations/http?utm_source=docugenerate-app&amp;utm_medium=partner&amp;utm_campaign=docugenerate-app-partner-program" target="_blank" rel="nofollow noopener">HTTP-module</a> van Make.</p> <p>Geef in het veld <strong>URL</strong> de waarde <code class="language-plaintext highlighter-rouge">Document URL</code> op die is geretourneerd door de vorige DocuGenerate-stap. Deze dynamische URL verwijst naar het nieuw gegenereerde PDF-processtuk. De HTTP-module downloadt de bestandsinhoud en maakt deze beschikbaar voor de volgende stap in onze workflow.</p> <p><img src="https://www.docugenerate.com/assets/posts/018-make-pleading-papers/http-getfile-config-v3.png" alt="Configuratie van HTTP Get File"/></p> <h3 id="het-pdf-bestand-opslaan-in-dropbox">Het PDF-Bestand Opslaan in Dropbox</h3> <p>De laatste stap bestaat uit het uploaden van het opgehaalde PDF-bestand naar Dropbox met de action <strong>Upload a File</strong> van de <a href="https://www.make.com/en/integrations/dropbox?utm_source=docugenerate-app&amp;utm_medium=partner&amp;utm_campaign=docugenerate-app-partner-program" target="_blank" rel="nofollow noopener">Dropbox-integratie</a>. Dropbox wordt veel gebruikt in juridische praktijken voor veilige documentopslag en het delen van cliëntbestanden, wat het een ideale keuze maakt voor het opslaan van gegenereerde processtukken.</p> <p>Zorg ervoor dat u een Dropbox-verbinding heeft opgezet in Make voordat u de upload-action configureert. Dit vereist authenticatie met uw Dropbox-account en het verlenen van toestemming aan Make om toegang te krijgen tot uw bestanden. Configureer, zodra de verbinding tot stand is gebracht, de uploadparameters om uw gegenereerde documenten effectief te organiseren.</p> <p>Geef voor de parameter <strong>Folder</strong> een specifieke map op, zoals <code class="language-plaintext highlighter-rouge">/Pleading Papers/</code>, om de gegenereerde documenten georganiseerd en eenvoudig toegankelijk te houden. De parameter <strong>File</strong> moet verwijzen naar de bestandsdata uit de <a href="#het-gegenereerde-document-ophalen">vorige stap</a>, specifiek de uitvoer van <strong>HTTP - Get a file</strong>. Dit zorgt ervoor dat de volledige PDF-inhoud wordt geüpload naar uw Dropbox-opslag.</p> <p><img src="https://www.docugenerate.com/assets/posts/018-make-pleading-papers/dropbox-config.png" alt="Configuratie van Dropbox-upload"/></p> <p>Met deze configuratie is uw automatiseringsworkflow compleet. Elke keer dat een cliënt het intakeformulier indient, genereert het systeem automatisch een correct opgemaakt processtuk en slaat het op in uw aangewezen Dropbox-map, klaar voor beoordeling, bewerking, en indiening bij de betreffende rechtbank.</p> <h2 id="voordelen-en-praktijktoepassingen">Voordelen en Praktijktoepassingen</h2> <p>Dit geautomatiseerde systeem voor het genereren van processtukken levert aanzienlijke voordelen op voor juridische praktijken van elke omvang. Het belangrijkste voordeel is de drastische vermindering van de tijd die nodig is voor documentvoorbereiding. Wat voorheen handmatige gegevensinvoer, opmaak, en correctie vereiste, kan nu automatisch worden voltooid binnen enkele minuten na het ontvangen van cliëntinformatie.</p> <p>De automatisering verbetert ook de nauwkeurigheid door handmatige transcriptiefouten te elimineren. Cliëntinformatie stroomt rechtstreeks van het intakeformulier naar het definitieve document zonder menselijke tussenkomst, wat het risico op typefouten of gegevensinvoerfouten vermindert die mogelijk gevolgen kunnen hebben voor juridische procedures. Deze consistentie is bijzonder waardevol bij het gelijktijdig behandelen van meerdere zaken.</p> <p>De workflow kan eenvoudig worden aangepast voor andere soorten juridische documenten dan processtukken. Dezelfde automatiseringsprincipes gelden voor het genereren van antwoorden, tegenvorderingen, verzoekschriften, en andere gerechtelijke documenten. Voor grotere kantoren kan dit systeem worden geïntegreerd met bestaande software voor zaakbeheer. In plaats van Typeform te gebruiken voor intake, kan de workflow worden geactiveerd door nieuwe vermeldingen in systemen voor juridisch praktijkbeheer, wat een uitgebreidere automatiseringsoplossing creëert.</p> <p>De kostenvoordelen zijn eveneens aanzienlijk. Minder tijd besteed aan documentvoorbereiding stelt advocaten in staat zich te richten op juridisch werk met hogere waarde, wat mogelijk de efficiëntie van declarabele uren verhoogt. Voor kantoren die grote volumes vergelijkbare zaken behandelen, kan de tijdsbesparing zich direct vertalen in verbeterde winstgevendheid.</p> <h2 id="conclusie">Conclusie</h2> <p>Door de intuïtieve formulierbouw van Typeform, de krachtige automatiseringsmogelijkheden van Make, en de professionele documentgeneratie van DocuGenerate te combineren, kunnen juridische praktijken robuuste systemen creëren die routinematige documentvoorbereiding automatisch afhandelen. Deze aanpak bespaart niet alleen tijd en vermindert fouten, maar stelt juridische professionals ook in staat zich te richten op de strategische en analytische aspecten van hun werk die werkelijk menselijke expertise vereisen.</p> <p>Het systeem dat we vandaag hebben gebouwd, kan dienen als basis voor uitgebreidere automatiseringsinitiatieven. Naarmate uw praktijk groeit en uw automatiseringsbehoeften evolueren, kunnen dezelfde principes worden toegepast op andere documenttypes, geïntegreerd worden met geavanceerdere juridische software, of uitgebreid worden met extra workflowstappen zoals e-mailmeldingen, agendaplanning, of updates van het cliëntportaal.</p> <p>Juridische professionals die dit soort automatiseringssystemen implementeren, merken vaak dat de initiële tijdsinvestering zich snel terugbetaalt door verbeterde efficiëntie, verminderde administratieve lasten, en verhoogde klanttevredenheid. In een steeds competitievere juridische markt kunnen deze operationele verbeteringen aanzienlijke voordelen bieden, terwijl de hoge normen van nauwkeurigheid en professionaliteit die de juridische praktijk vereist behouden blijven.</p> <h2 id="bronnen">Bronnen</h2> <ul> <li>Het <a href="https://www.docugenerate.com/assets/posts/018-make-pleading-papers/Pleading Paper.docx" target="_blank">Pleading Paper</a> sjabloon dat in deze tutorial is gebruikt.</li> <li>Een voorbeeld van een <a href="https://www.docugenerate.com/assets/posts/018-make-pleading-papers/DC-24-08756 - COMPLAINT FOR PERSONAL INJURY.pdf" target="_blank">gegenereerde PDF</a> met de data van het Client Intake Form.</li> <li>Het interactieve <a href="https://form.typeform.com/to/U7qVSqcZ" target="_blank" rel="nofollow noopener">Client Intake Form</a> gemaakt op Typeform.</li> <li>De officiële pagina van de Make <a href="https://www.make.com/en/integrations/typeform?utm_source=docugenerate-app&amp;utm_medium=partner&amp;utm_campaign=docugenerate-app-partner-program" target="_blank" rel="nofollow noopener">Typeform-integratie</a>.</li> <li>De officiële pagina van de Make <a href="https://www.make.com/en/integrations/docugenerate?utm_source=docugenerate-app&amp;utm_medium=partner&amp;utm_campaign=docugenerate-app-partner-program" target="_blank">DocuGenerate-integratie</a>.</li> </ul>]]></content> <author> <name>DocuGenerate</name> <email>support@docugenerate.com</email> </author> <category term="LegalTech"/> <category term="Make"/> <category term="No-Code"/> <summary type="html"><![CDATA[Transformeer uw juridische praktijk met geautomatiseerde generatie van processtukken. Leer hoe u een efficiënte workflow bouwt met Make, Typeform, en DocuGenerate die intakedata van cliënten omzet in correct opgemaakte processtukken die voldoen aan professionele standaarden.]]></summary> <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.docugenerate.com/assets/posts/018-make-pleading-papers/cover-image.png"/> <media:content medium="image" url="https://www.docugenerate.com/assets/posts/018-make-pleading-papers/cover-image.png" xmlns:media="http://search.yahoo.com/mrss/"/> </entry> <entry> <title type="html">Erkend als Winter 2025 Top Performer door SourceForge</title> <link href="https://www.docugenerate.com/nl/blog/erkend-als-winter-2025-top-performer-door-sourceforge/" rel="alternate" type="text/html" title="Erkend als Winter 2025 Top Performer door SourceForge"/> <published>2025-01-24T00:00:00+00:00</published> <updated>2025-01-24T00:00:00+00:00</updated> <id>https://www.docugenerate.com/nl/blog/erkend-als-winter-2025-top-performer-door-sourceforge</id> <content type="html" xml:base="https://www.docugenerate.com/nl/blog/erkend-als-winter-2025-top-performer-door-sourceforge/"><![CDATA[<h2 id="top-performer">Top Performer in PDF Generators</h2> <p>DocuGenerate is er trots op te zijn benoemd tot <strong>Winter 2025 Top Performer</strong> in de categorie <strong>PDF Generators</strong> door SourceForge, de grootste website voor softwarebeoordelingen en -vergelijkingen ter wereld. Deze award erkent uitzonderlijke bedrijven en producten met een groot aantal recente uitstekende gebruikersbeoordelingen, waardoor ze behoren tot de top 10% van de best beoordeelde producten op SourceForge.</p> <p>Om de Winter 2025 Top Performer-award te winnen, moest elke ontvanger voldoende hoog beoordeelde gebruikersbeoordelingen krijgen om het winnende product in de <strong>top 10%</strong> van <strong>positief beoordeelde producten</strong> te plaatsen, van de 100.000 producten op SourceForge, wat de uitmuntende kwaliteit aantoont die DocuGenerate aan klanten levert.</p> <h2 id="waarom-kiezen-voor-docugenerate">Waarom Kiezen voor DocuGenerate voor PDF-Generatie?</h2> <p>DocuGenerate is een krachtige tool voor documentgeneratie, ontworpen om bedrijven en professionals te helpen moeiteloos <strong>hoogwaardige PDF’s</strong> te maken. Of u nu contracten, facturen, overeenkomsten, of rapporten moet genereren, met DocuGenerate kunt u het proces automatiseren met behulp van Word-sjablonen en dynamische data. Met de focus op <strong>betrouwbaarheid en schaalbaarheid</strong> is DocuGenerate ideaal voor teams die hun documentworkflows willen stroomlijnen zonder handmatige bewerking.</p> <p>DocuGenerate is gebouwd voor automatisering, waardoor gebruikers grote hoeveelheden documenten efficiënt kunnen verwerken. Het biedt ook naadloze integraties met no-code platforms zoals <a href="/nl/integraties/make/">Make</a>, <a href="/nl/integraties/zapier/">Zapier</a>, en <a href="/nl/integraties/bubble/">Bubble</a>, evenals backend-diensten zoals <a href="/nl/integraties/xano/">Xano</a>. Daarnaast ondersteunt ons product geavanceerde opmaakopties, batchgeneratie, en PDF/A-export voor langdurige documentbewaring.</p> <p>Of u nu een startup, een advocatenkantoor, of een onderneming bent die duizenden documenten per maand beheert, DocuGenerate biedt een flexibele en <strong>kosteneffectieve oplossing</strong> die aansluit bij uw documentgeneratiebehoeften.</p> <h2 id="wat-onze-gebruikers-zeggen">Wat Onze Gebruikers Zeggen</h2> <p>DocuGenerate heeft een algehele <strong>5-sterren</strong>-beoordeling ontvangen van gebruikers op SourceForge:</p> <p><img src="https://www.docugenerate.com/assets/posts/017-sourceforge-top-performer/docugenerate-review.png" alt="5-sterrenbeoordeling op SourceForge"/></p> <div class="ud-blog-quote"> <i class="lni lni-quotation"></i> <p> De software is eenvoudig en doet precies wat hij moet doen. Snel en gemakkelijk - geen leercurve. De ondersteuning was ook fantastisch toen ik vragen had. </p> <h6> Bron: <a href="https://sourceforge.net/software/product/DocuGenerate/#review-6789eab3a8cb1d9217711d42" target="_blank"> SourceForge </a> </h6> </div> <div class="ud-blog-quote"> <i class="lni lni-quotation"></i> <p> Een van de beste klantenservices en technische ondersteuningen die ik ooit heb ervaren... Het is fijn om dat 'warme gevoel' te hebben dat een partner op wiens infrastructuur je vertrouwt om je eigen klanten te bedienen, echt geeft om de service die ze leveren. </p> <h6> Bron: <a href="https://sourceforge.net/software/product/DocuGenerate/#review-677ead59bf467c8617412b27" target="_blank"> SourceForge </a> </h6> </div> <div class="ud-blog-quote"> <i class="lni lni-quotation"></i> <p> De interface is intuïtief en gebruiksvriendelijk, waardoor het gemakkelijk te leren en te navigeren is, zelfs voor beginners. DocuGenerate is een essentieel onderdeel geworden van ons dagelijkse werk en ik kan me niet voorstellen wat ik zonder zou moeten doen. </p> <h6> Bron: <a href="https://sourceforge.net/software/product/DocuGenerate/#review-671fcf6f8c9144fa306b2bb1" target="_blank"> SourceForge </a> </h6> </div> <p>Als DocuGenerate heeft geholpen uw documentworkflows te stroomlijnen, horen we graag uw feedback! Deel uw ervaring op SourceForge <a href="https://sourceforge.net/software/product/DocuGenerate/reviews/new" target="_blank" rel="nofollow noopener">hier</a>.</p> <h2 id="over-sourceforge">Over SourceForge</h2> <p><a href="https://sourceforge.net/" target="_blank" rel="nofollow noopener">SourceForge.net</a> is de grootste softwarevergelijkingsdirectory ter wereld, met bijna 20 miljoen gebruikers per maand, en biedt gebruikersbeoordelingen, productvergelijkingen, softwaregidsen, en meer. De missie van SourceForge is om bedrijven te helpen de beste software te vinden die past bij hun behoeften en budget. Er is een grote verscheidenheid aan softwaretools beschikbaar voor bedrijven, met tools in vrijwel elke categorie en niche, elk met een net iets ander doel.</p>]]></content> <author> <name>DocuGenerate</name> <email>support@docugenerate.com</email> </author> <category term="PDF Generators"/> <category term="Award"/> <category term="SourceForge"/> <summary type="html"><![CDATA[DocuGenerate is er trots op winnaar te zijn van de Top Performer-award in de categorie PDF Generators van SourceForge, de grootste website voor softwarebeoordelingen en -vergelijkingen ter wereld. We voelen ons vereerd dat onze klanten ons waarderen en dat we deze award ontvangen.]]></summary> <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.docugenerate.com/assets/posts/017-sourceforge-top-performer/cover-image.png"/> <media:content medium="image" url="https://www.docugenerate.com/assets/posts/017-sourceforge-top-performer/cover-image.png" xmlns:media="http://search.yahoo.com/mrss/"/> </entry> <entry> <title type="html">Een Vereenvoudigde Versie van DocuGenerate Bouwen met Bubble</title> <link href="https://www.docugenerate.com/nl/blog/een-vereenvoudigde-versie-van-docugenerate-bouwen-met-bubble/" rel="alternate" type="text/html" title="Een Vereenvoudigde Versie van DocuGenerate Bouwen met Bubble"/> <published>2024-12-18T00:00:00+00:00</published> <updated>2024-12-18T00:00:00+00:00</updated> <id>https://www.docugenerate.com/nl/blog/een-vereenvoudigde-versie-van-docugenerate-bouwen-met-bubble</id> <content type="html" xml:base="https://www.docugenerate.com/nl/blog/een-vereenvoudigde-versie-van-docugenerate-bouwen-met-bubble/"><![CDATA[<h2 id="introductie">Introductie</h2> <p>Het automatiseren van documentgeneratie kan uw productiviteit aanzienlijk verhogen, vooral bij het beheren van meerdere sjablonen en datasets. Hoewel de <a href="https://app.docugenerate.com/" target="_blank">webapp</a> van DocuGenerate een uitgebreide oplossing biedt, wilt u mogelijk documentgeneratiemogelijkheden integreren in uw eigen Bubble-applicatie.</p> <p>Daarom hebben we een <a href="https://www.docugenerate.com/nl/integraties/bubble/">Bubble-plugin</a> gemaakt waarmee u de kracht van de API van DocuGenerate rechtstreeks binnen uw Bubble-apps kunt benutten. In deze tutorial laten we zien hoe we een vereenvoudigde versie van DocuGenerate hebben gebouwd met Bubble en onze plugin - zonder te programmeren!</p> <h2 id="hoe-de-app-werkt">Hoe de App Werkt</h2> <p>Om een beter beeld te krijgen van wat we gaan bouwen, kunt u de Bubble <a href="https://docugenerate-demo-app.bubbleapps.io/version-test/" target="_blank">demo-app</a> bekijken. De onderstaande animatie toont een volledig gebruikerstraject door de applicatie, van sjabloonaanmaak tot documentgeneratie en download.</p> <p><img src="https://www.docugenerate.com/assets/images/integrations/bubble/bubble-test-app-v2.gif" alt="Demo-app met de plugin van DocuGenerate op Bubble"/></p> <p>Het typische gebruikerstraject volgt deze stappen:</p> <ol> <li><strong>Sjabloon Maken</strong>: Upload een Word-sjabloon met merge-tags en geef het een naam.</li> <li><strong>Sjablonen Doorbladeren</strong>: Blader vanaf het dashboard door alle beschikbare sjablonen.</li> <li><strong>Sjabloon Selecteren</strong>: Klik op een sjabloon om de details en eerder gegenereerde documenten te bekijken.</li> <li><strong>Document Genereren</strong>: Navigeer met de knop “+” naar het formulier voor documentgeneratie.</li> <li><strong>Gegevensinvoer</strong>: Geef een documentnaam op, selecteer een uitvoerformaat, en voer de JSON-data in.</li> <li><strong>Genereren</strong>: Na het klikken op “Generate” wordt het document gemaakt met de API van DocuGenerate.</li> <li><strong>Documenttoegang</strong>: Ga terug naar de detailpagina van het sjabloon en bekijk het nieuwe document.</li> </ol> <p>Deze workflow weerspiegelt de kernfunctionaliteit van de webapp van DocuGenerate, maar is volledig geïmplementeerd binnen Bubble. De naadloze integratie tussen het visuele ontwikkelplatform van Bubble en de API van DocuGenerate creëert een krachtige maar toegankelijke oplossing voor documentgeneratie.</p> <h2 id="uw-bubble-project-instellen">Uw Bubble-Project Instellen</h2> <p>Voordat we onze app gaan bouwen, moet u uw ontwikkelomgeving voorbereiden. Het visuele platform van Bubble maakt dit proces eenvoudig, maar er zijn een paar essentiële stappen om te voltooien:</p> <ol> <li>Registreer voor een <a href="https://bubble.io/" target="_blank" rel="nofollow noopener">Bubble-account</a> als u er nog geen heeft.</li> <li><a href="https://manual.bubble.io/help-guides/getting-started/creating-and-managing-apps" target="_blank" rel="nofollow noopener">Maak een app</a> in Bubble en geef deze een naam.</li> <li>Installeer de <a href="https://bubble.io/plugin/docugenerate-1730225425528x319288222630019100" target="_blank">DocuGenerate-plugin</a> in uw nieuwe app.</li> <li><a href="https://www.docugenerate.com/nl/hulp/articles/documentgeneratie-automatiseren-met-bubble/#install-the-plugin">Configureer</a> de plugin met uw DocuGenerate-<a href="https://www.docugenerate.com/nl/hulp/articles/waar-vind-ik-mijn-api-sleutel/">API-sleutel</a>.</li> </ol> <p><img src="https://www.docugenerate.com/assets/posts/016-bubble-demo-app/install-new-plugin.png" alt="De DocuGenerate API-sleutel installeren in Bubble"/></p> <h2 id="wat-zit-er-in-de-docugenerate-plugin">Wat Zit er in de DocuGenerate-Plugin?</h2> <p>De DocuGenerate Bubble-plugin biedt een uitgebreide set API-aanroepen die de functionaliteit van onze REST API weerspiegelen. Deze zijn onderverdeeld in twee types:</p> <h3 id="data-calls">Data Calls</h3> <p>Deze worden gebruikt om informatie op te halen uit uw DocuGenerate-account:</p> <ul> <li><a href="https://www.docugenerate.com/nl/hulp/articles/documentgeneratie-automatiseren-met-bubble/#list-templates">List Templates</a>: Retourneert alle sjablonen die beschikbaar zijn in uw account.</li> <li><a href="https://www.docugenerate.com/nl/hulp/articles/documentgeneratie-automatiseren-met-bubble/#get-template">Get Template</a>: Haalt gedetailleerde informatie op over een specifiek sjabloon.</li> <li><a href="https://www.docugenerate.com/nl/hulp/articles/documentgeneratie-automatiseren-met-bubble/#list-documents">List Documents</a>: Retourneert alle documenten die zijn gegenereerd op basis van een specifiek sjabloon.</li> <li><a href="https://www.docugenerate.com/nl/hulp/articles/documentgeneratie-automatiseren-met-bubble/#get-document">Get Document</a>: Haalt gedetailleerde informatie op over een specifiek document.</li> </ul> <h3 id="actions">Actions</h3> <p>Deze worden gebruikt om bronnen te maken, wijzigen, of verwijderen in uw DocuGenerate-account:</p> <ul> <li><a href="https://www.docugenerate.com/nl/hulp/articles/documentgeneratie-automatiseren-met-bubble/#create-template">Create Template</a>: Uploadt een nieuw sjabloonbestand.</li> <li><a href="https://www.docugenerate.com/nl/hulp/articles/documentgeneratie-automatiseren-met-bubble/#update-template">Update Template</a>: Wijzigt een bestaand sjabloon.</li> <li><a href="https://www.docugenerate.com/nl/hulp/articles/documentgeneratie-automatiseren-met-bubble/#delete-template">Delete Template</a>: Verwijdert een sjabloon uit uw account.</li> <li><a href="https://www.docugenerate.com/nl/hulp/articles/documentgeneratie-automatiseren-met-bubble/#generate-document">Generate Document</a>: Maakt een nieuw document op basis van een sjabloon en data.</li> <li><a href="https://www.docugenerate.com/nl/hulp/articles/documentgeneratie-automatiseren-met-bubble/#update-document">Update Document</a>: Wijzigt documenteigenschappen.</li> <li><a href="https://www.docugenerate.com/nl/hulp/articles/documentgeneratie-automatiseren-met-bubble/#delete-document">Delete Document</a>: Verwijdert een document uit uw account.</li> </ul> <p>Het begrijpen van deze API-aanroepen is essentieel, aangezien ze de ruggengraat vormen van onze demo-applicatie. Gedurende deze tutorial gebruiken we de meeste van deze aanroepen om een volledig functionele documentgeneratieworkflow te maken.</p> <h2 id="de-app-navigatie-ontwerpen">De App-Navigatie Ontwerpen</h2> <p>Voordat we in elke pagina duiken, stellen we eerst de navigatiestructuur in die alle delen van onze applicatie met elkaar verbindt. Een consistent navigatiesysteem is cruciaal voor een soepele gebruikerservaring in de hele app. We hebben een eenvoudige navigatiebalk gemaakt die bovenaan elke pagina verschijnt, met daarin:</p> <ul> <li>Het DocuGenerate-logo aan de linkerkant, dat dient als home-knop en verwijst naar het <a href="#de-dashboardpagina">dashboard</a>.</li> <li>Een knop <strong>New Template</strong> aan de rechterkant die gebruikers rechtstreeks naar de pagina voor <a href="#de-pagina-voor-sjabloon-maken">sjabloon maken</a> leidt.</li> </ul> <p><img src="https://www.docugenerate.com/assets/posts/016-bubble-demo-app/navigation-bar.png" alt="Navigatiebalk met logo en New Template-knop"/></p> <p>Deze navigatiestructuur weerspiegelt de aanpak die wordt gebruikt in de daadwerkelijke webapp van DocuGenerate, wat een vertrouwde ervaring biedt voor gebruikers die ons hoofdplatform al hebben gebruikt. De vertrouwde lay-out helpt gebruikers intuïtief te begrijpen hoe ze door de applicatie moeten navigeren, zonder dat er extra instructies nodig zijn.</p> <h2 id="de-dashboardpagina">De Dashboardpagina</h2> <p>De dashboardpagina dient als het centrale knooppunt van onze applicatie, en biedt gebruikers een direct overzicht van al hun beschikbare sjablonen. Dit is het eerste scherm dat gebruikers zien wanneer ze de app openen, dus is het ontworpen om zowel informatief als intuïtief te zijn, met snelle toegang tot de belangrijkste functionaliteit.</p> <p><img src="https://www.docugenerate.com/assets/posts/016-bubble-demo-app/index-page.png" alt="Dashboardpagina met sjablonen in rasterweergave"/></p> <p>Net als bij de webinterface van DocuGenerate hebben we sjablonen georganiseerd in een visueel aantrekkelijke rasterlay-out die sjabloonvoorbeelden samen met hun namen toont. Deze visuele aanpak maakt het voor gebruikers eenvoudig om snel het sjabloon te vinden dat ze zoeken, zelfs bij het beheren van tientallen verschillende sjablonen.</p> <h3 id="zo-bouwt-u-het">Zo Bouwt U Het:</h3> <ol> <li><strong>Maak een RepeatingGroup-element</strong> om de sjablonen weer te geven.</li> <li><strong>Stel de Data Source in</strong> op de data call <a href="https://www.docugenerate.com/nl/hulp/articles/documentgeneratie-automatiseren-met-bubble/#list-templates">List Templates</a> van de DocuGenerate-plugin. <img src="https://www.docugenerate.com/assets/posts/016-bubble-demo-app/dashboard-repeating-group.png" alt="RepeatingGroup-element voor het weergeven van de sjablonen"/></li> <li><strong>Ontwerp elk rasteritem</strong> met daarin: <ul> <li>Een tekstelement voor de sjabloonnaam</li> <li>Een afbeeldingselement voor het sjabloonvoorbeeld <img src="https://www.docugenerate.com/assets/posts/016-bubble-demo-app/dashboard-template-image.png" alt="Afbeeldingselement voor het sjabloonvoorbeeld"/></li> </ul> </li> <li><strong>Voeg een workflow toe</strong> aan het afbeeldingselement, zodat bij aanklikken wordt genavigeerd naar de detailpagina van het sjabloon, waarbij de sjabloon-ID als URL-parameter wordt meegegeven. <img src="https://www.docugenerate.com/assets/posts/016-bubble-demo-app/workflow-template-image.png" alt="Workflow bij het aanklikken van de sjabloonafbeelding"/></li> </ol> <p>Het belangrijkste onderdeel hier is de RepeatingGroup, die automatisch wordt gevuld met alle sjablonen uit uw DocuGenerate-account. Deze dynamische aanpak zorgt ervoor dat het dashboard altijd de meest actuele lijst met sjablonen toont, zonder dat handmatige updates nodig zijn.</p> <p>Elk sjabloon in het raster is aanklikbaar en navigeert naar een <a href="#de-pagina-met-sjabloondetails">gedetailleerde weergave</a> van dat specifieke sjabloon. Dit interactiepatroon creëert een natuurlijke doorstroming door de applicatie, en leidt gebruikers met één klik van het overzicht naar meer gedetailleerde informatie.</p> <p>Het dashboard integreert ook naadloos met onze navigatiebalk, die de knop “New Template” bevat voor snelle toegang tot <a href="#de-pagina-voor-sjabloon-maken">sjabloon maken</a>. Dit zorgt ervoor dat gebruikers vanaf deze centrale locatie eenvoudig het documentgeneratieproces kunnen starten.</p> <h2 id="de-pagina-voor-sjabloon-maken">De Pagina voor Sjabloon Maken</h2> <p>Op deze pagina beginnen gebruikers het documentgeneratieproces door een Word-document te uploaden dat als sjabloon dient. Deze cruciale stap legt de basis voor alle volgende documentgeneratie, aangezien het geüploade sjabloon de structuur, opmaak, en merge-tags bevat die worden gebruikt bij het genereren van documenten.</p> <p>We hebben deze pagina eenvoudig en gericht ontworpen, waarbij onnodige afleidingen zijn weggelaten en gebruikers door het sjabloonaanmaakproces worden geleid. De interface communiceert duidelijk wat vereist is (een Word-document en een naam) en biedt directe feedback wanneer het sjabloon succesvol is gemaakt.</p> <p><img src="https://www.docugenerate.com/assets/posts/016-bubble-demo-app/new-template-page.png" alt="Pagina voor nieuw sjabloon met file-uploader en formulier"/></p> <h3 id="zo-bouwt-u-het-1">Zo Bouwt U Het:</h3> <ol> <li><strong>Voeg een FileUploader-element toe</strong> waarmee gebruikers hun Word-document kunnen selecteren. <img src="https://www.docugenerate.com/assets/posts/016-bubble-demo-app/new-template-file-uploader.png" alt="FileUploader-element waarmee gebruikers hun Word-document kunnen selecteren"/></li> <li><strong>Voeg een invoerveld toe</strong> voor het invoeren van de sjabloonnaam.</li> <li><strong>Voeg een knop “Create Template” toe</strong> met de volgende workflow: <ul> <li>Bij aanklikken wordt de action <a href="https://www.docugenerate.com/nl/hulp/articles/documentgeneratie-automatiseren-met-bubble/#create-template">Create Template</a> van de DocuGenerate-plugin aangeroepen</li> <li>Geef het bestand uit de FileUploader door als de parameter <code class="language-plaintext highlighter-rouge">file</code>, met behulp van de optie voor dynamische koppeling</li> <li>Geef de naam uit het invoerveld door als de parameter <code class="language-plaintext highlighter-rouge">name</code> <img src="https://www.docugenerate.com/assets/posts/016-bubble-demo-app/new-template-workflow-create-template.png" alt="Workflowstap sjabloon maken"/></li> <li>Nadat het sjabloon is gemaakt, wordt genavigeerd naar de detailpagina van het sjabloon met de nieuwe sjabloon-ID <img src="https://www.docugenerate.com/assets/posts/016-bubble-demo-app/new-template-workflow-template-detail.png" alt="Workflowstap naar sjabloondetail gaan"/></li> </ul> </li> </ol> <p>Dit gestroomlijnde formulier verzorgt alles wat nodig is om een sjabloon te maken in DocuGenerate. Het FileUploader-component biedt een native manier voor gebruikers om bestanden van hun apparaat te selecteren, compleet met ondersteuning voor slepen en neerzetten en duidelijke visuele feedback. Dit maakt het proces intuïtief, zelfs voor niet-technische gebruikers die mogelijk niet bekend zijn met documentautomatisering.</p> <p>Nadat het sjabloon is gemaakt, creëert de automatische navigatie naar de pagina met <a href="#de-pagina-met-sjabloondetails">sjabloondetails</a> een naadloze overgang naar de volgende stap in de workflow. Dit doordachte gebruikerstraject elimineert de noodzaak voor gebruikers om handmatig tussen pagina’s te navigeren, wat wrijving vermindert en de algehele ervaring verbetert.</p> <h2 id="de-pagina-met-sjabloondetails">De Pagina met Sjabloondetails</h2> <p>De pagina met sjabloondetails dient als het centrale knooppunt voor het beheren van een specifiek sjabloon en alle documenten die daarmee zijn gegenereerd. Deze pagina combineert essentiële sjabloongegevens met mogelijkheden voor documentbeheer, en biedt een uitgebreid overzicht van het gebruik en de uitvoer van elk sjabloon.</p> <p>In tegenstelling tot de eenvoudigere pagina’s die we tot nu toe hebben gemaakt, integreert de pagina met sjabloondetails meerdere gegevensbronnen en interactieve elementen om een complexere en functionelere interface te creëren. We hebben deze elementen zorgvuldig georganiseerd om duidelijkheid te behouden ondanks de toegenomen complexiteit, zodat gebruikers de functies die ze nodig hebben eenvoudig kunnen vinden en gebruiken.</p> <p><img src="https://www.docugenerate.com/assets/posts/016-bubble-demo-app/template-detail-page.png" alt="Pagina met sjabloondetails met voorbeeld en documentenlijst"/></p> <h3 id="zo-bouwt-u-het-2">Zo Bouwt U Het:</h3> <ol> <li><strong>Maak een Group-element</strong> als container voor de paginacontent.</li> <li><strong>Stel de Data Source van de Group in</strong> op de data call <a href="https://www.docugenerate.com/nl/hulp/articles/documentgeneratie-automatiseren-met-bubble/#get-template">Get Template</a> van de DocuGenerate-plugin, met de parameter <code class="language-plaintext highlighter-rouge">id</code> ingesteld op de template_id uit de URL. <img src="https://www.docugenerate.com/assets/posts/016-bubble-demo-app/template-detail-group-content.png" alt="RepeatingGroup-element voor het weergeven van de paginacontent"/></li> <li><strong>Voeg een tekstelement toe</strong> om de sjabloonnaam weer te geven.</li> <li><strong>Voeg een afbeeldingselement toe</strong> om het sjabloonvoorbeeld weer te geven. <img src="https://www.docugenerate.com/assets/posts/016-bubble-demo-app/template-detail-template-image.png" alt="Afbeeldingselement voor het weergeven van het sjabloonvoorbeeld"/></li> <li><strong>Voeg een RepeatingGroup toe</strong> voor de documentenlijst met: <ul> <li>Data source ingesteld op de aanroep <a href="https://www.docugenerate.com/nl/hulp/articles/documentgeneratie-automatiseren-met-bubble/#list-documents">List Documents</a> met de parameter <code class="language-plaintext highlighter-rouge">template_id</code></li> <li>Elk item toont de documentnaam als link naar de <code class="language-plaintext highlighter-rouge">document_uri</code> om te downloaden <img src="https://www.docugenerate.com/assets/posts/016-bubble-demo-app/template-detail-document-repeating-group.png" alt="RepeatingGroup voor het weergeven van de documentenlijst"/></li> </ul> </li> <li><strong>Voeg een knop “+” toe</strong> die navigeert naar de pagina voor nieuwe documenten. <img src="https://www.docugenerate.com/assets/posts/016-bubble-demo-app/template-detail-workflow-new-document.png" alt="Workflow voor het navigeren naar de pagina voor nieuwe documenten"/></li> </ol> <p>Het krachtigste aspect van deze pagina is hoe deze de gegevensbron van het Group-element gebruikt om alle sjabloondata beschikbaar te maken voor onderliggende elementen. Dit patroon, in Bubble soms “data-overerving” genoemd, zorgt ervoor dat alle elementen op de pagina automatisch worden bijgewerkt wanneer een ander sjabloon wordt geselecteerd. Deze aanpak vereenvoudigt de logica van de pagina en verbetert de prestaties door overbodige API-aanroepen te verminderen.</p> <p>De documentenlijst biedt een chronologisch overzicht van alle documenten die op basis van dit sjabloon zijn gegenereerd, met de meest recente documenten bovenaan. Elke documentvermelding bevat een directe downloadlink, zodat gebruikers snel toegang hebben tot hun gegenereerde bestanden zonder naar extra pagina’s te navigeren.</p> <p>De prominente “+”-knop dient als een duidelijke call-to-action, die gebruikers naar het documentgeneratieproces leidt. Bij aanklikken navigeert deze knop naar de pagina voor <a href="#de-pagina-voor-documentgeneratie">documentgeneratie</a>, waarbij de sjabloon-ID wordt meegegeven om de context te behouden. Dit doordachte interactieontwerp zorgt ervoor dat gebruikers eenvoudig kunnen wisselen tussen het bekijken van sjabloondetails en het genereren van nieuwe documenten.</p> <h2 id="de-pagina-voor-documentgeneratie">De Pagina voor Documentgeneratie</h2> <p>Hier komt de echte kracht van documentgeneratie tot leven, waardoor gebruikers hun data kunnen koppelen aan sjablonen om aangepaste documenten te maken. We hebben deze pagina krachtig maar toegankelijk ontworpen, met een balans tussen geavanceerde functionaliteit en een duidelijke interface.</p> <p>Deze pagina behoudt visuele consistentie met de pagina met <a href="#de-pagina-met-sjabloondetails">sjabloondetails</a>, en toont dezelfde sjabloongegevens bovenaan om context te bieden. Dit helpt gebruikers te bevestigen dat ze met het juiste sjabloon werken voordat ze verdergaan met documentgeneratie, wat mogelijke fouten of verwarring voorkomt.</p> <p><img src="https://www.docugenerate.com/assets/posts/016-bubble-demo-app/new-document-page.png" alt="Pagina voor nieuw document met invoerformulier voor JSON-data"/></p> <h3 id="zo-bouwt-u-het-3">Zo Bouwt U Het:</h3> <ol> <li><strong>Toon de sjabloongegevens</strong> (naam en voorbeeld), vergelijkbaar met de pagina met sjabloondetails.</li> <li><strong>Maak een formulier met:</strong> <ul> <li>Een tekstinvoer voor de documentnaam</li> <li>Een vervolgkeuzelijst voor het selecteren van het uitvoerformaat (PDF, DOCX, DOC, ODT, TXT, HTML, PNG)</li> <li>Een MultiLine Input voor het invoeren van de JSON-data <img src="https://www.docugenerate.com/assets/posts/016-bubble-demo-app/new-document-form.png" alt="Formulier voor het genereren van documenten"/></li> </ul> </li> <li><strong>Voeg een knop “Generate” toe</strong> die: <ul> <li>De action <a href="https://www.docugenerate.com/nl/hulp/articles/documentgeneratie-automatiseren-met-bubble/#generate-document">Generate Document</a> van de DocuGenerate-plugin aanroept</li> <li>Alle formulierwaarden als parameters doorgeeft, samen met de <code class="language-plaintext highlighter-rouge">template_id</code> uit de URL <img src="https://www.docugenerate.com/assets/posts/016-bubble-demo-app/new-document-workflow-generate-document.png" alt="Workflowstap om een document te genereren"/></li> <li>Na de generatie terugnavigeert naar de detailpagina van het sjabloon <img src="https://www.docugenerate.com/assets/posts/016-bubble-demo-app/new-document-workflow-template-detail.png" alt="Workflowstap naar sjabloondetail gaan"/></li> </ul> </li> </ol> <p>Het MultiLine Input-veld is bijzonder belangrijk, omdat het een flexibele manier biedt voor gebruikers om hun JSON-data in te voeren. Deze aanpak ondersteunt zowel eenvoudige datastructuren voor basisdocumenten als complexe geneste objecten of arrays voor meer geavanceerde generatiescenario’s. Voor gevorderde gebruikers biedt deze directe JSON-bewerkingsmogelijkheid nauwkeurige controle over de data die in hun sjablonen wordt samengevoegd.</p> <p>De vervolgkeuzelijst voor het uitvoerformaat toont een van de belangrijkste voordelen van DocuGenerate: de mogelijkheid om documenten in meerdere formaten te genereren vanuit één sjabloon. Gebruikers kunnen het formaat kiezen dat het beste bij hun behoeften past, of het nu een PDF is voor formele distributie, een DOCX voor verdere bewerking, of een ander formaat voor specifieke gebruiksgevallen.</p> <p>Nadat het document is gegenereerd, navigeert de pagina automatisch terug naar de pagina met <a href="#de-pagina-met-sjabloondetails">sjabloondetails</a>, waar het nieuw gemaakte document bovenaan de lijst verschijnt. Deze directe feedback bevestigt dat de generatie succesvol was en biedt snelle toegang tot het gegenereerde document.</p> <h2 id="mogelijkheden-voor-verbetering">Mogelijkheden voor Verbetering</h2> <p>Hoewel onze demo-app de essentiële functionaliteit voor documentgeneratie biedt, zijn er veel manieren waarop deze kan worden verbeterd om een nog krachtigere en gebruiksvriendelijkere applicatie te creëren:</p> <ul> <li><strong>PDF-voorbeeld</strong>: Vervang statische afbeeldingen door ingesloten <a href="https://www.docugenerate.com/nl/hulp/articles/hoe-bekijk-ik-een-gegenereerd-document/">PDF-voorbeelden</a> van sjablonen en documenten.</li> <li><strong>Alternatieve Weergaven</strong>: Voeg opties toe om sjablonen <a href="https://www.docugenerate.com/nl/hulp/articles/hoe-schakel-ik-weergaveopties-in-of-uit/#list-view">als lijst</a> weer te geven in plaats van als raster.</li> <li><strong>Sjabloonbewerking</strong>: Sta gebruikers toe <a href="https://www.docugenerate.com/nl/hulp/articles/hoe-werk-ik-een-sjabloon-bij/">sjablonen bij te werken</a> met nieuwe bestanden of instellingen te wijzigen.</li> <li><strong>Sjabloonnavigatie</strong>: Voeg een vervolgkeuzelijst of een <a href="https://www.docugenerate.com/nl/hulp/articles/hoe-maak-ik-een-nieuw-sjabloon-aan/">zoekbalk</a> toe om eenvoudig tussen sjablonen te navigeren.</li> <li><strong>Ondersteuning voor Spreadsheets</strong>: Voeg de mogelijkheid toe om <a href="https://www.docugenerate.com/nl/hulp/articles/documenten-genereren-vanuit-een-excel-of-csv-bestand/">Excel- of CSV</a> -bestanden te uploaden voor documentgeneratie.</li> </ul> <p>Deze verbeteringen zouden onze demo-app transformeren van een proof of concept naar een volwaardige oplossing voor documentgeneratie, afgestemd op specifieke zakelijke behoeften. Het mooie van het gebruik van het visuele ontwikkelplatform van Bubble is dat deze functies geleidelijk kunnen worden toegevoegd, waardoor de applicatie kan meegroeien met de behoeften van gebruikers.</p> <h2 id="conclusie">Conclusie</h2> <p>Het bouwen van een documentgeneratie-app met Bubble en de DocuGenerate-plugin toont de kracht van no-code ontwikkeling in combinatie met gespecialiseerde API’s. De demo-app die we hebben gebouwd dient zowel als proof of concept als startpunt voor uw eigen documentautomatiseringsprojecten. Door gebruik te maken van het visuele ontwikkelplatform van Bubble en de documentgeneratiemogelijkheden van DocuGenerate, kunt u aangepaste oplossingen creëren die zijn afgestemd op uw specifieke behoeften, zonder één regel code te schrijven.</p> <p>Deze aanpak is bijzonder waardevol voor bedrijven zonder toegewijde ontwikkelteams, of bedrijven die snel willen prototypen en itereren op documentgeneratieworkflows. De visuele aard van Bubble maakt het toegankelijk voor business analisten, operations specialisten, en andere niet-technische teamleden, waardoor zij oplossingen kunnen creëren die rechtstreeks hun documentautomatiseringsuitdagingen aanpakken.</p> <p>Of u nu interne tools voor uw team bouwt of klantgerichte applicaties, deze aanpak biedt een snelle en flexibele manier om documentgeneratiefunctionaliteit te implementeren. De combinatie van de intuïtieve interface van Bubble en de krachtige API van DocuGenerate creëert een synergie die geavanceerde documentautomatisering binnen bereik brengt van organisaties van elke omvang.</p> <h3 id="bronnen">Bronnen</h3> <ul> <li>Live versie van de <a href="https://docugenerate-demo-app.bubbleapps.io/version-test/" target="_blank">Bubble Demo App</a> die we in deze tutorial hebben gebouwd.</li> <li>Installatielink voor de <a href="https://bubble.io/plugin/docugenerate-1730225425528x319288222630019100" target="_blank">DocuGenerate-plugin</a> in de Bubble-marketplace.</li> <li>Stapsgewijze instructies uit ons Hulpcentrum voor het <a href="https://www.docugenerate.com/nl/hulp/articles/documentgeneratie-automatiseren-met-bubble/">configureren van de plugin</a>.</li> </ul>]]></content> <author> <name>DocuGenerate</name> <email>support@docugenerate.com</email> </author> <category term="Web App"/> <category term="Bubble"/> <category term="No-Code"/> <summary type="html"><![CDATA[Leer hoe u een vereenvoudigde documentgeneratie-app bouwt met Bubble en de DocuGenerate-plugin. Deze stapsgewijze tutorial laat zien hoe u een werkende demo maakt waarmee u sjablonen kunt uploaden, documenten kunt genereren, en uw documentbibliotheek kunt beheren.]]></summary> <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.docugenerate.com/assets/posts/016-bubble-demo-app/cover-image.png"/> <media:content medium="image" url="https://www.docugenerate.com/assets/posts/016-bubble-demo-app/cover-image.png" xmlns:media="http://search.yahoo.com/mrss/"/> </entry> <entry> <title type="html">Bewaar Gegenereerde Bestanden in Dropbox met Zapier</title> <link href="https://www.docugenerate.com/nl/blog/bewaar-gegenereerde-bestanden-in-dropbox-met-zapier/" rel="alternate" type="text/html" title="Bewaar Gegenereerde Bestanden in Dropbox met Zapier"/> <published>2024-11-11T00:00:00+00:00</published> <updated>2024-11-11T00:00:00+00:00</updated> <id>https://www.docugenerate.com/nl/blog/bewaar-gegenereerde-bestanden-in-dropbox-met-zapier</id> <content type="html" xml:base="https://www.docugenerate.com/nl/blog/bewaar-gegenereerde-bestanden-in-dropbox-met-zapier/"><![CDATA[<h2 id="introductie">Introductie</h2> <p>In de digitale werkplek van vandaag bespaart het automatiseren van documentworkflows waardevolle tijd en zorgt het voor consistentie binnen uw organisatie. Of u nu arbeidscertificaten, contracten, facturen, of andere zakelijke documenten genereert, het automatisch opslaan ervan in cloudopslag elimineert handmatig bestandsbeheer en creëert een betrouwbaar back-upsysteem.</p> <p>Deze tutorial laat zien hoe u een krachtige automatisering bouwt die arbeidscertificaten genereert met DocuGenerate en deze automatisch opslaat in Dropbox via Zapier. Door deze drie tools te verbinden, creëert u een naadloze workflow die data omzet in professionele documenten en deze opslaat in georganiseerde cloudmappen.</p> <p><a href="https://zapier.com/" target="_blank" rel="nofollow noopener">Zapier</a> fungeert als de automatiseringsbrug, die verschillende apps verbindt zonder dat er codeerkennis nodig is. <a href="https://www.docugenerate.com/">DocuGenerate</a> verzorgt de documentgeneratie op basis van uw sjablonen en data, terwijl <a href="https://www.dropbox.com/" target="_blank" rel="nofollow noopener">Dropbox</a> veilige cloudopslag biedt met eenvoudige mogelijkheden om te delen.</p> <h2 id="zapier-tabel">Uw Gegevensbron Instellen met Zapier Tables</h2> <p>Voor deze tutorial gebruiken we het sjabloon <strong>Certificate of Employment</strong> uit de <a href="https://www.docugenerate.com/nl/sjablonen/">Sjabloonbibliotheek</a> van DocuGenerate. Dit sjabloon bevat zowel een Word-documentsjabloon als voorbeelddata die we importeren in Zapier Tables voor eenvoudige automatisering.</p> <p>We beginnen met het maken van een datatabel in Zapier die de werknemersinformatie bevat die nodig is voor het genereren van certificaten. Zapier Tables biedt een handige manier om gestructureerde data op te slaan en te beheren, die automatiseringen kan activeren wanneer records worden toegevoegd of bijgewerkt.</p> <p>Navigeer eerst naar <a href="https://tables.zapier.com/" target="_blank" rel="nofollow noopener">Zapier Tables</a> en maak een nieuwe tabel aan. We importeren onze voorbeelddata vanuit een <a href="https://www.docugenerate.com/assets/posts/015-zapier-save-to-dropbox/Certificate of Employment.csv">CSV-bestand</a> met de volgende kolommen:</p> <ul> <li><strong>Company Name</strong>: De organisatie die het certificaat uitgeeft</li> <li><strong>First Name</strong>: Voornaam van de werknemer</li> <li><strong>Last Name</strong>: Achternaam van de werknemer</li> <li><strong>Job Title</strong>: Functie van de werknemer</li> <li><strong>Start Date</strong>: Startdatum van het dienstverband</li> <li><strong>End Date</strong>: Einddatum van het dienstverband (indien van toepassing)</li> <li><strong>Certificate Date</strong>: Datum waarop het certificaat wordt uitgegeven</li> </ul> <p>Om de data te importeren, klikt u op <strong>Import data</strong> en selecteert u <strong>Start with data from a CSV file or another platform</strong>. Upload het CSV-bestand met uw werknemersdata, en Zapier maakt automatisch de tabelstructuur aan en vult deze met uw records.</p> <p><img src="https://www.docugenerate.com/assets/posts/015-zapier-save-to-dropbox/zapier-csv-import.png" alt="CSV-data importeren in Zapier Tables"/></p> <p>Na het importeren zou uw tabel 10 voorbeeldrecords met werknemersinformatie moeten bevatten. Geef uw tabel een beschrijvende naam, zoals “Certificate of Employment”, zodat u deze gemakkelijk kunt herkennen in uw Zaps.</p> <p><img src="https://www.docugenerate.com/assets/posts/015-zapier-save-to-dropbox/zapier-data-table.png" alt="Certificate of Employment-tabel in Zapier"/></p> <p>Deze tabel dient als trigger voor onze automatisering — telkens wanneer een nieuw record wordt toegevoegd of een bestaand record wordt bijgewerkt, genereert onze Zap automatisch een certificaat en slaat het op in Dropbox.</p> <h2 id="het-sjabloon-maken">Het Sjabloon Maken in DocuGenerate</h2> <p>Voordat we de Zapier-automatisering instellen, moeten we ons documentsjabloon voorbereiden in DocuGenerate. Log in op uw DocuGenerate-account en <a href="https://www.docugenerate.com/nl/hulp/articles/hoe-maak-ik-een-nieuw-sjabloon-aan/">maak een nieuw sjabloon</a> met het Word-document <a href="https://www.docugenerate.com/assets/posts/015-zapier-save-to-dropbox/Certificate of Employment.docx">Certificate of Employment</a>.</p> <p>Het sjabloon bevat merge-tags die overeenkomen met de kolomnamen in onze <a href="#zapier-tabel">Zapier Table</a>. Deze worden automatisch gedetecteerd door DocuGenerate, waardoor het eenvoudig wordt om de data te koppelen tijdens de documentgeneratie.</p> <p><img src="https://www.docugenerate.com/assets/posts/015-zapier-save-to-dropbox/docugenerate-template.png" alt="Certificate of Employment-sjabloon in DocuGenerate"/></p> <p>De <a href="https://www.docugenerate.com/nl/hulp/articles/wat-zijn-merge-tags/">merge-tags</a> in het sjabloon omvatten <code class="language-plaintext highlighter-rouge">[Company Name]</code>, <code class="language-plaintext highlighter-rouge">[First Name]</code>, <code class="language-plaintext highlighter-rouge">[Last Name]</code>, <code class="language-plaintext highlighter-rouge">[Start Date]</code>, <code class="language-plaintext highlighter-rouge">[End Date]</code>, <code class="language-plaintext highlighter-rouge">[Job Title]</code> en <code class="language-plaintext highlighter-rouge">[Certificate Date]</code>. Deze tags worden vervangen door daadwerkelijke werknemersdata wanneer het document wordt gegenereerd via onze Zapier-automatisering.</p> <h2 id="de-zapier-tables-trigger-instellen">De Zapier Tables-Trigger Instellen</h2> <p>Nu maken we onze Zap om het volledige proces te automatiseren. Begin met het maken van een nieuwe Zap in Zapier en selecteer <strong>Zapier Tables</strong> als trigger-app. Kies de trigger <strong>New or Updated Record</strong>. Dit zorgt ervoor dat onze automatisering wordt uitgevoerd telkens wanneer werknemersdata wordt toegevoegd of gewijzigd in onze tabel.</p> <p><img src="https://www.docugenerate.com/assets/posts/015-zapier-save-to-dropbox/trigger-new-record.png" alt="New or Updated Record-trigger in Zapier Tables"/></p> <p>Verbind in de triggerconfiguratie uw Zapier Tables-account als u dat nog niet heeft gedaan, en selecteer vervolgens de tabel <strong>Certificate of Employment</strong> die we <a href="#zapier-tabel">eerder hebben gemaakt</a>.</p> <p><img src="https://www.docugenerate.com/assets/posts/015-zapier-save-to-dropbox/trigger-table-selection.png" alt="Zapier Tables-trigger configureren"/></p> <p>Test de trigger om te controleren of deze correct werkt. Zapier toont u de meest recente records uit uw tabel, zodat u er een kunt selecteren om de volgende stappen in uw Zap te testen.</p> <p><img src="https://www.docugenerate.com/assets/posts/015-zapier-save-to-dropbox/trigger-test-data.png" alt="Zapier Tables-trigger testen"/></p> <p>Selecteer een van de werknemersrecords en ga verder. Dit testrecord wordt gebruikt om een voorbeeld te tonen van de datakoppeling in de volgende stappen van onze automatisering.</p> <h2 id="de-action-generate-document-configureren">De Action Generate Document Configureren</h2> <p>Vervolgens voegen we DocuGenerate toe aan onze Zap om de documentgeneratie te verzorgen. Zoek naar de <a href="https://zapier.com/apps/docugenerate/integrations" target="_blank" rel="noopener">DocuGenerate-app</a> en voeg de action <strong>Generate Document</strong> toe.</p> <p><img src="https://www.docugenerate.com/assets/posts/015-zapier-save-to-dropbox/docugenerate-account.png" alt="Action Generate Document toevoegen"/></p> <p>Als dit de eerste keer is dat u DocuGenerate verbindt met Zapier, moet u authenticeren met uw <a href="https://www.docugenerate.com/nl/hulp/articles/documentgeneratie-automatiseren-met-zapier/#connect-to-zapier">DocuGenerate API-sleutel</a>. U vindt uw API-sleutel in uw accountinstellingen van DocuGenerate.</p> <p>Selecteer in de actionconfiguratie het sjabloon <strong>Certificate of Employment</strong> in de vervolgkeuzelijst. Voor de documentnaam gebruiken we dynamische waarden uit onze Zapier Table: <code class="language-plaintext highlighter-rouge">Certificate of [First Name] [Last Name]</code>. Op deze manier wordt de naam van het gegenereerde document gepersonaliseerd met de naam van de persoon. Stel het exportformaat in op <strong>PDF</strong> om ervoor te zorgen dat de certificaten worden gegenereerd in een professioneel, afdrukklaar formaat.</p> <p>Het belangrijkste onderdeel is het koppelen van de data uit uw <a href="#de-zapier-tables-trigger-instellen">Zapier Table</a> aan de merge-tags van het sjabloon. Zorg ervoor dat u in het veld <strong>Data</strong> voor elke sleutel de daadwerkelijke veldwaarden uit de vorige stap selecteert. De dynamische veldinvoeging vult deze waarden automatisch in wanneer de Zap wordt uitgevoerd.</p> <p><img src="https://www.docugenerate.com/assets/posts/015-zapier-save-to-dropbox/docugenerate-configure.png" alt="Parameters van Generate Document configureren"/></p> <p>Test deze stap om te controleren of de documentgeneratie correct werkt. Bij succes ziet u een JSON-antwoord van DocuGenerate met de documentdetails, zoals de document-ID, naam, formaat, en <strong>Document URL</strong>, die verwijst naar het gegenereerde PDF-bestand dat we in de volgende stap gebruiken. U zult zien dat de documentnaam en bestandsnaam zoals bedoeld zijn gepersonaliseerd met de waarden van het geselecteerde record.</p> <p><img src="https://www.docugenerate.com/assets/posts/015-zapier-save-to-dropbox/docugenerate-test.png" alt="Action Generate Document testen"/></p> <h2 id="de-dropbox-upload-action-toevoegen">De Dropbox Upload-Action Toevoegen</h2> <p>De laatste stap in onze automatisering is het opslaan van het gegenereerde certificaat in Dropbox. Voeg de <a href="https://zapier.com/apps/dropbox/integrations" target="_blank" rel="noopener">Dropbox-app</a> toe aan uw Zap en selecteer de action <strong>Upload File</strong>. Verbind uw Dropbox-account met Zapier als u dat nog niet heeft gedaan. Hiermee kan Zapier bestanden uploaden naar uw Dropbox-opslag.</p> <p><img src="https://www.docugenerate.com/assets/posts/015-zapier-save-to-dropbox/dropbox-upload-file.png" alt="Action Dropbox Upload File toevoegen"/></p> <p>In de actionconfiguratie moet u twee belangrijke parameters opgeven:</p> <ul> <li> <p><strong>Folder</strong>: Kies waar u de certificaten wilt opslaan in uw Dropbox. Voor deze tutorial gebruiken we het statische pad <code class="language-plaintext highlighter-rouge">/DocuGenerate/Certificates</code>. Dit creëert een georganiseerde mapstructuur voor eenvoudig documentbeheer. U kunt ook dynamische mapnamen gebruiken op basis van data uit uw tabel, zoals organiseren op bedrijfsnaam of datum.</p> </li> <li> <p><strong>File</strong>: Hier geeft u het te uploaden bestand op. Selecteer de <strong>Document URL</strong> uit de DocuGenerate-stap. Hiermee wordt Dropbox verteld het bestand te downloaden vanuit de opslag van DocuGenerate en op te slaan in uw opgegeven map.</p> </li> </ul> <p><img src="https://www.docugenerate.com/assets/posts/015-zapier-save-to-dropbox/dropbox-configure.png" alt="Dropbox-uploadparameters configureren"/></p> <p>Laat de velden <strong>Specify File Name</strong> en <strong>Specify File Extension</strong> leeg. Hierdoor gebruikt Dropbox de oorspronkelijke bestandsnaam en extensie van het gegenereerde document, wat voor het geselecteerde voorbeeldrecord <code class="language-plaintext highlighter-rouge">Certificate of Conrado Fearnyhough.pdf</code> is.</p> <p>Test deze stap om te controleren of het bestand succesvol wordt geüpload naar uw Dropbox-map.</p> <p><img src="https://www.docugenerate.com/assets/posts/015-zapier-save-to-dropbox/dropbox-test.png" alt="Dropbox-upload testen"/></p> <p>Als de test succesvol is, ziet u een bevestiging dat het bestand is geüpload naar uw opgegeven Dropbox-map. U kunt dit controleren door rechtstreeks uw Dropbox-account te bekijken.</p> <p><img src="https://www.docugenerate.com/assets/posts/015-zapier-save-to-dropbox/dropbox-file.png" alt="Dropbox-bestanden in de map &quot;Certificates&quot;"/></p> <h2 id="uw-automatisering-verbeteren">Uw Automatisering Verbeteren</h2> <p>Zodra uw basisautomatisering werkt, kunt u deze verbeteringen overwegen om deze nog krachtiger te maken. Deze extra functies kunnen u helpen geavanceerdere workflows te creëren en uw documentbeheersysteem beter te organiseren.</p> <h3 id="dynamische-maporganisatie">Dynamische Maporganisatie</h3> <p>In plaats van een statisch mappad te gebruiken, kunt u certificaten organiseren op bedrijf, afdeling, of datum. Bijvoorbeeld:</p> <ul> <li><code class="language-plaintext highlighter-rouge">/DocuGenerate/Certificates/[Company Name]</code></li> <li><code class="language-plaintext highlighter-rouge">/DocuGenerate/Certificates/[Certificate Date]</code></li> <li><code class="language-plaintext highlighter-rouge">/DocuGenerate/Certificates/[Job Title]</code></li> </ul> <h3 id="voorwaardelijke-logica">Voorwaardelijke Logica</h3> <p>Gebruik de functies <a href="https://zapier.com/blog/filter-by-zapier-guide/" target="_blank" rel="nofollow noopener">Filter</a> of <a href="https://zapier.com/features/paths" target="_blank" rel="nofollow noopener">Paths</a> van Zapier om verschillende documenttypes of goedkeuringsworkflows te verwerken:</p> <ul> <li>Genereer verschillende certificaatsjablonen op basis van functietitel</li> <li>Leid documenten door goedkeuringsprocessen voordat ze definitief worden opgeslagen</li> <li>Pas verschillende mapstructuren toe voor verschillende bedrijfsafdelingen</li> </ul> <h3 id="meldingssystemen">Meldingssystemen</h3> <p>Voeg e-mailmeldingen toe om HR-managers te informeren wanneer certificaten zijn gegenereerd en opgeslagen. U kunt de acties <a href="https://zapier.com/apps/email/integrations" target="_blank" rel="nofollow noopener">Zapier’s Email</a> of <a href="https://zapier.com/apps/gmail/integrations" target="_blank" rel="nofollow noopener">Gmail</a> gebruiken om geautomatiseerde meldingen te versturen.</p> <h2 id="overwegingen-voor-beveiliging-en-naleving">Overwegingen voor Beveiliging en Naleving</h2> <p>Bij het automatiseren van documentworkflows, vooral voor HR-documenten zoals arbeidscertificaten, houdt u rekening met deze beveiligingsaspecten:</p> <h3 id="gegevensprivacy">Gegevensprivacy</h3> <ul> <li>Zorg ervoor dat uw Zapier Tables alleen noodzakelijke werknemersinformatie bevatten</li> <li>Overweeg bewaartermijnen voor zowel gegenereerde documenten als brondata</li> <li>Controleer de deelinstellingen van Dropbox om ongeautoriseerde toegang te voorkomen</li> </ul> <h3 id="toegangscontrole">Toegangscontrole</h3> <ul> <li>Beperk toegang tot uw Zapier-automatiseringen tot bevoegd personeel</li> <li>Gebruik de teamfuncties van Dropbox om te bepalen wie toegang heeft tot certificaatmappen</li> <li>Controleer regelmatig gebruikersmachtigingen en verwijder toegang voor voormalige werknemers</li> </ul> <h3 id="auditsporen">Auditsporen</h3> <ul> <li>Zapier houdt automatisch logs bij van alle automatiseringsuitvoeringen</li> <li>Overweeg extra logging- of meldingsstappen toe te voegen voor nalevingsvereisten</li> <li>Documenteer uw automatiseringsproces voor interne auditdoeleinden</li> </ul> <h2 id="conclusie">Conclusie</h2> <p>Het automatiseren van documentgeneratie en cloudopslag met DocuGenerate, Zapier, en Dropbox creëert een krachtige workflow die tijd bespaart en tegelijkertijd consistente, professionele resultaten waarborgt. Deze automatisering elimineert handmatig bestandsbeheer, vermindert fouten, en creëert een georganiseerd systeem voor documentopslag en -ophaling.</p> <p>Door deze tutorial te volgen, heeft u een basis gecreëerd die kan worden aangepast voor veel verschillende documenttypes en bedrijfsprocessen. Of u nu HR-documenten, verkoopvoorstellen, of administratief papierwerk beheert, deze automatiseringsaanpak kan uw workflows stroomlijnen en de operationele efficiëntie verbeteren.</p> <p>Overweeg deze automatisering uit te breiden om andere documenttypes te verwerken of te integreren met aanvullende zakelijke tools. De flexibiliteit van Zapier maakt het eenvoudig om nieuwe stappen toe te voegen, verschillende apps te verbinden, of geavanceerdere workflows te creëren naarmate uw behoeften evolueren.</p> <h3 id="bronnen">Bronnen</h3> <ul> <li>Download het <a href="https://www.docugenerate.com/assets/posts/015-zapier-save-to-dropbox/Certificate of Employment.docx">Certificate of Employment-sjabloon</a> dat in deze tutorial is gebruikt</li> <li>Krijg toegang tot de <a href="https://www.docugenerate.com/assets/posts/015-zapier-save-to-dropbox/Certificate of Employment.csv">voorbeeld-CSV-data</a> voor import in Zapier Tables</li> <li>Lees meer over de <a href="https://www.docugenerate.com/nl/hulp/articles/documentgeneratie-automatiseren-met-zapier/">Zapier-integratie van DocuGenerate</a> in ons Hulpcentrum</li> <li>Verken de <a href="https://community.zapier.com/p/zapier-tables" target="_blank" rel="nofollow noopener">documentatie van Zapier Tables</a> voor geavanceerde functies voor gegevensbeheer</li> </ul>]]></content> <author> <name>DocuGenerate</name> <email>support@docugenerate.com</email> </author> <category term="Dropbox"/> <category term="Zapier"/> <category term="No-Code"/> <summary type="html"><![CDATA[Leer hoe u documentgeneratie en bestandsopslag automatiseert door DocuGenerate te verbinden met Dropbox via Zapier. Deze gids leidt u door het maken van arbeidscertificaten en het automatisch opslaan ervan in georganiseerde mappen in Dropbox.]]></summary> <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.docugenerate.com/assets/posts/015-zapier-save-to-dropbox/cover-image.png"/> <media:content medium="image" url="https://www.docugenerate.com/assets/posts/015-zapier-save-to-dropbox/cover-image.png" xmlns:media="http://search.yahoo.com/mrss/"/> </entry> <entry> <title type="html">Waarom Word-Gebaseerde Sjablonen Gebruiken in Plaats van HTML-Gebaseerde?</title> <link href="https://www.docugenerate.com/nl/blog/waarom-word-gebaseerde-sjablonen-gebruiken-in-plaats-van-html-gebaseerde/" rel="alternate" type="text/html" title="Waarom Word-Gebaseerde Sjablonen Gebruiken in Plaats van HTML-Gebaseerde?"/> <published>2024-10-14T00:00:00+00:00</published> <updated>2024-10-14T00:00:00+00:00</updated> <id>https://www.docugenerate.com/nl/blog/waarom-word-gebaseerde-sjablonen-gebruiken-in-plaats-van-html-gebaseerde</id> <content type="html" xml:base="https://www.docugenerate.com/nl/blog/waarom-word-gebaseerde-sjablonen-gebruiken-in-plaats-van-html-gebaseerde/"><![CDATA[<h2 id="het-landschap-van-documentgeneratie">Het Landschap van Documentgeneratie</h2> <p>Als het gaat om oplossingen voor documentgeneratie, staan bedrijven vaak voor een cruciale keuze tussen platforms die Word-sjablonen gebruiken en platforms die zijn gebaseerd op HTML-sjablonen. Deze beslissing lijkt op het eerste gezicht misschien triviaal, maar kan een aanzienlijke invloed hebben op de efficiëntie van uw workflow, documentkwaliteit, en flexibiliteit op de lange termijn.</p> <p>DocuGenerate is gebouwd rond Microsoft Word-sjablonen, maar er zijn andere oplossingen op de markt die HTML-gebaseerde aanpakken gebruiken. Hoewel beide hun verdiensten hebben, zijn er overtuigende redenen waarom Word-gebaseerde sjablonen vaak superieure resultaten bieden voor bedrijven van elke omvang.</p> <p>In dit artikel verkennen we de belangrijkste verschillen tussen Word- en HTML-sjablonen, onderzoeken we de voordelen van elke aanpak, en leggen we uit waarom het bezitten van uw sjablonen belangrijk is voor bedrijfscontinuïteit en flexibiliteit.</p> <h2 id="de-fundamentele-verschillen-begrijpen">De Fundamentele Verschillen Begrijpen</h2> <p>Voordat we ingaan op de voor- en nadelen, laten we eerst de belangrijkste verschillen tussen Word-gebaseerde en HTML-gebaseerde systemen voor documentgeneratie verduidelijken:</p> <p><strong>Word-Gebaseerde Sjablonen</strong> gebruiken standaard documentformaten (DOCX, ODT) als sjablonen, compatibel met zowel <a href="https://www.microsoft.com/fr-fr/microsoft-365/word" target="_blank">Microsoft Word</a> als <a href="https://www.libreoffice.org/" target="_blank">LibreOffice</a>. Ze benutten de volledige opmaakmogelijkheden van deze krachtige tekstverwerkers en maken directe bewerking mogelijk met vertrouwde tools die de meeste zakelijke gebruikers al kennen. Ze ondersteunen complexe documentstructuren en kunnen uitvoer genereren in meerdere formaten (DOCX, PDF, enz.).</p> <p><strong>HTML-Gebaseerde Sjablonen</strong> gebruiken HTML en CSS voor sjabloonontwerp en vereisen vaak kennis van webontwikkelingstechnologieën. Ze bevatten meestal een WYSIWYG-editor (staat voor <em>“What You See Is What You Get”</em>), richten zich voornamelijk op PDF-uitvoer, en gebruiken mogelijk sjabloontalen zoals <a href="https://handlebarsjs.com/" target="_blank" rel="nofollow noopener">Handlebars</a>, <a href="https://mustache.github.io/" target="_blank" rel="nofollow noopener">Mustache</a>, of <a href="https://jinja.palletsprojects.com/en/stable/" target="_blank" rel="nofollow noopener">Jinja</a>.</p> <p>Met deze verschillen in gedachten, laten we verkennen waarom Word-sjablonen vaak een superieure oplossing bieden voor bedrijven.</p> <h2 id="sjablooneigendom-en-overdraagbaarheid">Sjablooneigendom en Overdraagbaarheid</h2> <p>Een van de belangrijkste voordelen van Word-gebaseerde sjablonen is het echte eigendom van uw documentontwerpen. Met DocuGenerate en andere Word-gebaseerde oplossingen zijn uw sjablonen standaard DOCX-bestanden die u kunt downloaden, offline kunt bewerken, en indien nodig zelfs kunt gebruiken met andere systemen.</p> <p>Dit biedt belangrijke voordelen, zoals het vermijden van vendor lock-in, het toekomstbestendig maken van uw sjablooninvestering, offline toegang voor bewerking, en eenvoudig delen met collega’s of klanten als standaard Word-documenten.</p> <p>HTML-gebaseerde oplossingen slaan uw sjablonen vaak op in propriëtaire formaten die alleen binnen hun specifieke platform kunnen worden bewerkt en gebruikt. Dit brengt uitdagingen met zich mee, waaronder migratieproblemen (het opnieuw maken van alle sjablonen bij het overstappen naar een andere leverancier), beperkte controle (alleen wijzigingen aanbrengen die hun editor toestaat), afhankelijkheidsrisico’s (als de leverancier zijn systeem wijzigt), en verborgen kosten bij het opnieuw maken van sjablonen.</p> <h2 id="superieure-opmaakmogelijkheden">Superieure Opmaakmogelijkheden</h2> <p>Microsoft Word is decennialang verfijnd om precieze controle over documentopmaak te bieden. HTML-gebaseerde oplossingen verbeteren weliswaar, maar kunnen nog steeds niet tippen aan de uitgebreide opmaakmogelijkheden van Word.</p> <h3 id="complexe-lay-outs">Complexe Documentlay-outs</h3> <p>Word blinkt uit in het verwerken van complexe documentformaten die vaak voorkomen in zakelijke omgevingen. Het biedt geavanceerde controle over kop- en voetteksten in meerdere secties, complexe paginanummeringsschema’s, meerkoloms-lay-outs, geavanceerde tabelopmaak, precieze tekstomloop rond afbeeldingen, en sectie-einden waarmee verschillende paginaoriëntaties binnen één document mogelijk zijn.</p> <p><img src="https://www.docugenerate.com/assets/posts/014-word-html-templates/word-layout-tab.png" alt="Word-lay-outmenu"/></p> <h3 id="typografie-en-branding">Typografie en Branding</h3> <p>Word biedt superieure typografische controles die essentieel zijn voor het behouden van merkconsistentie. Dit omvat uitgebreid lettertypebeheer met toegang tot elk <a href="https://www.docugenerate.com/nl/hulp/articles/hoe-gebruik-ik-aangepaste-lettertypen/">geïnstalleerd lettertype</a>, geavanceerde typografische functies zoals ligaturen en kapitalen, precieze controle over tekenspatiëring, en stijlsystemen die zorgen voor consistente opmaak in documenten.</p> <h3 id="pixelperfecte-precisie">Pixelperfecte Precisie</h3> <p>Als het gaat om documentgeneratie, is precisie belangrijk — vooral voor juridische documenten, contracten, en formele zakelijke correspondentie. Word-sjablonen bieden pixelperfecte controle die HTML-sjablonen vaak moeilijk consistent kunnen evenaren over verschillende uitvoerformaten.</p> <h2 id="gebruiksgemak-en-adoptie">Gebruiksgemak en Adoptie</h2> <p>Wellicht een van de meest overtuigende voordelen van Word-gebaseerde sjablonen is de vertrouwdheid en het gebruiksgemak. De meeste zakelijke professionals zijn al gewend aan Microsoft Word. Deze bestaande vaardigheden betekenen dat er minimale training nodig is, meer medewerkers kunnen bijdragen aan het maken en onderhouden van sjablonen, en organisaties kunnen oplossingen voor documentgeneratie sneller implementeren.</p> <p>HTML-gebaseerde oplossingen vereisen vaak kennis van webtechnologieën die veel zakelijke gebruikers niet bezitten. Hoewel WYSIWYG-editors proberen deze kloof te overbruggen, bieden ze doorgaans beperkte opmaakcontrole in vergelijking met wat beschikbaar is in de onderliggende HTML en CSS.</p> <p>Neem <a href="https://ckeditor.com/" target="_blank" rel="nofollow noopener">CKEditor</a>, een van de populairste WYSIWYG-editors die worden gebruikt door webapplicaties. Hoewel het een rijke en gebruiksvriendelijke interface biedt, schiet het nog steeds tekort ten opzichte van de uitgebreide functionaliteit van Word. Gebruikers ondervinden vaak beperkingen bij complexe opmaak, tabelverwerking, en controle over de paginalay-out.</p> <p><img src="https://www.docugenerate.com/assets/posts/014-word-html-templates/ck-editor.png" alt="CKEditor-interface"/></p> <p>Zelfs met geavanceerde WYSIWYG-editors zoals deze, hebben gebruikers doorgaans slechts toegang tot een subset van de opmaakmogelijkheden die beschikbaar zijn in Word. De bewerkingservaring voelt beperkt aan in vergelijking met een dedicated tekstverwerker, en de uiteindelijke uitvoer komt niet altijd overeen met wat gebruikers in de editor zien.</p> <h2 id="enkele-praktische-voorbeelden">Enkele Praktische Voorbeelden</h2> <p>Verschillende soorten zakelijke documenten hebben uiteenlopende vereisten voor opmaak en structuur. Laten we bekijken hoe Word- en HTML-sjablonen zich verhouden voor veelvoorkomende documenttypes.</p> <p><strong>Juridische Documenten</strong> hebben vaak strikte opmaakvereisten, waaronder complexe nummeringsschema’s, precieze alinea-inspringing, specifieke regelafstand, conventies voor sectie- en paginanummering, en zorgvuldige plaatsing van handtekeningblokken. Word-sjablonen blinken uit in het consistent handhaven van deze precieze opmaakvereisten, terwijl HTML-gebaseerde systemen vaak moeite hebben met de exacte spatiëring en opmaakbehoeften van juridische documenten.</p> <p><img src="https://www.docugenerate.com/assets/posts/014-word-html-templates/legal-document.png" alt="Sjablonen voor rechtbankdocumenten"/></p> <p><strong>Facturen en Rekeningoverzichten</strong> kunnen door beide aanpakken worden verwerkt, maar Word-sjablonen bieden voordelen voor complexe lay-outs met precieze positionering van elementen, complexe tabelstructuren voor factuurregels, voorwaardelijke secties op basis van bedrijfsregels, en consistente paginering voor meerpagina-facturen.</p> <p><strong>Lange Documenten</strong>, zoals rapporten, profiteren aanzienlijk van essentiële Word-functies zoals automatisch gegenereerde en bijgewerkte inhoudsopgaven, dynamische kruisverwijzingen naar andere secties, betere controle over pagina-einden en sectieopmaak, en de mogelijkheid om verschillende kop- en voetteksten te hebben voor verschillende secties.</p> <h2 id="technische-overwegingen">Technische Overwegingen</h2> <p>Naast de gebruikerservaring onderscheiden verschillende technische factoren Word- en HTML-sjablonen. Hoewel beide benaderingen professioneel ogende documenten kunnen produceren, beïnvloeden de onderliggende technologieën alles, van uitvoeropties tot hoe content over pagina’s stroomt. Het begrijpen van deze verschillen helpt u de oplossing te kiezen die het beste aansluit bij de specifieke vereisten van uw organisatie.</p> <h3 id="flexibiliteit-van-uitvoerformaten">Flexibiliteit van Uitvoerformaten</h3> <p>Een belangrijk voordeel van Word-gebaseerde sjablonen is de mogelijkheid om documenten te genereren in <a href="https://www.docugenerate.com/nl/hulp/articles/het-exportformaat-selecteren/">meerdere formaten</a>, waaronder bewerkbare Word-documenten (DOCX), PDF’s voor definitieve distributie, en andere formaten. Deze veelzijdigheid stelt bedrijven in staat content te verspreiden in welk formaat ook het beste bij hun behoeften past, terwijl de mogelijkheid behouden blijft om documenten na generatie te bewerken.</p> <p>HTML-gebaseerde systemen richten zich doorgaans voornamelijk op PDF-uitvoer, wat de flexibiliteit beperkt wanneer ontvangers content moeten bewerken of hergebruiken. Wanneer wijzigingen nodig zijn, moet het volledige documentgeneratieproces worden herhaald in plaats van simpelweg het uitvoerbestand te bewerken. Dit kan leiden tot inefficiënties in workflows waarbij documenten regelmatig aanpassingen nodig hebben, of wanneer content voor andere doeleinden moet worden geëxtraheerd.</p> <h3 id="pagina-einden-en-documentstructuur">Pagina-einden en Documentstructuur</h3> <p>Het controleren van hoe content over pagina’s stroomt, is cruciaal voor professionele documenten. Word verwerkt pagina-einden, sectie-einden, en contentstroom op natuurlijke wijze, terwijl HTML-gebaseerde systemen vaak moeite hebben met deze concepten, aangezien HTML is ontworpen voor doorlopende content in plaats van gepagineerde documenten.</p> <p>Dit wordt bijzonder belangrijk wanneer documenten specifieke paginanummeringsschema’s nodig hebben, verschillende secties verschillende lay-outs of oriëntaties vereisen, kop- en voetteksten door het hele document heen moeten variëren, of content niet over pagina’s mag worden onderbroken.</p> <h3 id="scheidingstekens-en-sjabloonsyntax-aanpassen">Scheidingstekens en Sjabloonsyntax Aanpassen</h3> <p>Bij HTML-gebaseerde sjabloonsystemen zit u doorgaans vast aan hun specifieke sjabloontaal en -syntax. De meeste gebruiken vaste scheidingstekens zoals <code class="language-plaintext highlighter-rouge">{{ }}</code> of <code class="language-plaintext highlighter-rouge">{% %}</code> voor variabelen en logica.</p> <p>Met DocuGenerate kunt u <a href="https://www.docugenerate.com/nl/hulp/articles/hoe-werk-ik-de-scheidingstekens-van-tags-bij/">uw sjabloonscheidingstekens aanpassen</a>, wat u helpt conflicten met andere syntax in uw documenten te vermijden, sjablonen te maken die aansluiten bij de voorkeuren van uw team, het sjabloonaanmaakproces te vereenvoudigen, en migratie vanuit andere systemen te ondersteunen door hun syntax te evenaren.</p> <p><img src="https://www.docugenerate.com/assets/posts/014-word-html-templates/tag-delimiters.png" alt="Aanpasbare scheidingstekens" class="desktop-width-75"/></p> <h2 id="de-juiste-keuze-maken-voor-uw-bedrijf">De Juiste Keuze Maken voor Uw Bedrijf</h2> <p>Bij het evalueren van oplossingen voor documentgeneratie, houdt u rekening met deze belangrijke factoren:</p> <ol> <li><strong>Sjablooneigendom</strong>: Wilt u uw sjablonen bezitten in een standaardformaat?</li> <li><strong>Opmaakvereisten</strong>: Hoe complex zijn uw behoeften voor documentopmaak?</li> <li><strong>Vaardigheden van Gebruikers</strong>: Wat is de technische expertise van uw team?</li> <li><strong>Uitvoerflexibiliteit</strong>: Heeft u bewerkbare documenten nodig, of alleen PDF’s?</li> <li><strong>Integratie</strong>: Hoe past de oplossing bij uw bestaande documentworkflows?</li> </ol> <p>Voor veel bedrijven biedt Word-gebaseerde documentgeneratie de optimale balans tussen kracht, flexibiliteit, en gebruiksgemak. Het integreert naadloos met bestaande bedrijfsprocessen, en biedt functies zoals bijgehouden wijzigingen voor gezamenlijke bewerking, opmerkingen voor feedback, hulpmiddelen voor documentvergelijking, en compatibiliteit met veel e-handtekeningplatforms die rechtstreeks met Word-bestanden werken.</p> <h2 id="conclusie">Conclusie</h2> <p>Hoewel zowel Word-gebaseerde als HTML-gebaseerde oplossingen voor documentgeneratie hun plaats hebben, bieden Word-sjablonen aanzienlijke voordelen voor de meeste zakelijke scenario’s, waaronder echt eigendom van uw sjablonen, superieure opmaakmogelijkheden, een vertrouwde bewerkingservaring, flexibiliteit van uitvoerformaten, en opties om na generatie te bewerken.</p> <p>DocuGenerate bouwt voort op deze voordelen met extra functies zoals aanpasbare scheidingstekens, en een intuïtieve aanpak voor het maken van sjablonen. Bij het evalueren van oplossingen voor documentgeneratie voor uw bedrijf, houdt u niet alleen rekening met de directe functionaliteit, maar ook met de implicaties op de lange termijn voor sjablooneigendom, gebruikersadoptie, en workflowintegratie. De juiste keuze kan uw team talloze uren besparen en ervoor zorgen dat uw documenten altijd aan uw exacte normen voldoen.</p> <h3 id="bronnen">Bronnen</h3> <ul> <li><a href="https://www.docugenerate.com/nl/sjablonen/">Sjabloonbibliotheek</a> - Bekijk professioneel ontworpen sjablonen die klaar zijn voor gebruik</li> <li><a href="https://www.docugenerate.com/nl/hulp/articles/het-exportformaat-selecteren/">Gids voor Exportformaten</a> - Verken de verschillende beschikbare uitvoerformaten</li> <li><a href="https://www.docugenerate.com/nl/hulp/articles/hoe-werk-ik-de-scheidingstekens-van-tags-bij/">Scheidingstekens voor Tags Aanpassen</a> - Leer hoe u uw eigen aangepaste scheidingstekens instelt</li> </ul>]]></content> <author> <name>DocuGenerate</name> <email>support@docugenerate.com</email> </author> <category term="Templates"/> <category term="Microsoft Word"/> <category term="HTML"/> <summary type="html"><![CDATA[Ontdek waarom Word-gebaseerde sjablonen aanzienlijke voordelen bieden ten opzichte van HTML-gebaseerde alternatieven voor documentgeneratie. Leer hoe sjablooneigendom, opmaakcontrole, en flexibiliteit bij het bewerken van documenten uw bedrijfsworkflow ten goede kunnen komen.]]></summary> <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.docugenerate.com/assets/posts/014-word-html-templates/cover-image.png"/> <media:content medium="image" url="https://www.docugenerate.com/assets/posts/014-word-html-templates/cover-image.png" xmlns:media="http://search.yahoo.com/mrss/"/> </entry> <entry> <title type="html">Introductie van Multi-Regioverwerking en -Opslag</title> <link href="https://www.docugenerate.com/nl/blog/introductie-van-multi-regioverwerking-en-opslag/" rel="alternate" type="text/html" title="Introductie van Multi-Regioverwerking en -Opslag"/> <published>2024-09-30T00:00:00+00:00</published> <updated>2024-09-30T00:00:00+00:00</updated> <id>https://www.docugenerate.com/nl/blog/introductie-van-multi-regioverwerking-en-opslag</id> <content type="html" xml:base="https://www.docugenerate.com/nl/blog/introductie-van-multi-regioverwerking-en-opslag/"><![CDATA[<h2 id="wat-is-multi-regio">Wat is Multi-Regioverwerking en -Opslag?</h2> <p>In de kern is multi-regioverwerking en -opslag de mogelijkheid om te kiezen waar uw data wordt verwerkt. Of het nu gaat om naleving van regelgeving zoals de AVG, het verbeteren van de prestaties voor gebruikers in verschillende regio’s, of simpelweg meer controle bieden over gegevenslocatie, deze nieuwe functie is een game-changer.</p> <p>Vóór deze update werden alle sjablonen en documenten opgeslagen en verwerkt in één enkele regio (de Verenigde Staten), die als standaard diende voor alle gebruikers. Nu kunt u de fysieke locatie kiezen waar uw sjablonen en de bijbehorende documenten worden verwerkt en opgeslagen, wat de beveiliging en snelheid verbetert. De volgende regio’s zijn beschikbaar:</p> <ul> <li><strong>Verenigde Staten</strong></li> <li><strong>Europese Unie</strong></li> <li><strong>Verenigd Koninkrijk</strong></li> <li><strong>Australië</strong></li> </ul> <p>U kunt <a href="#web-accountregio">een standaardregio kiezen</a> voor uw account, en ook <a href="#web-sjabloonregio">regio’s instellen op sjabloonniveau</a>. Voor geavanceerde gebruikers die onze API gebruiken, is het mogelijk om de verwerkingsregio op te geven via API-aanroepen en <a href="#api-eindpunten-regio">regionale eindpunten</a> te gebruiken voor documentgeneratie. We leiden u door alles wat u moet weten over deze update en hoe u <a href="#migratiegids">uw bestaande sjablonen kunt migreren</a> om te profiteren van deze functie.</p> <h2 id="wijzigingen-in-de-webapp">Wijzigingen in de Webapp</h2> <p>Ons doel met deze update is om regioselectie zo eenvoudig mogelijk te maken voor gebruikers van de webapp. We hebben een aantal belangrijke wijzigingen doorgevoerd om het proces van het selecteren van regio’s te stroomlijnen, zowel op accountniveau als op sjabloonniveau.</p> <h3 id="web-accountregio">Standaardregio’s op Accountniveau</h3> <p>Om het beheren van meerdere sjablonen te vereenvoudigen, kunt u nu <a href="https://www.docugenerate.com/nl/hulp/articles/hoe-selecteert-u-de-accountregio/">een standaardregio instellen</a> in de accountinstellingen. Deze standaardinstelling geldt voor alle nieuw gemaakte sjablonen, zodat ze worden verwerkt en opgeslagen in de regio van uw keuze, zonder dat u telkens de regio hoeft te selecteren wanneer u een nieuw sjabloon maakt.</p> <p><img src="https://www.docugenerate.com/assets/posts/013-multi-region-processing/account-region-v2.png" alt="De standaardregio van het account bijwerken"/></p> <p>Standaard is de regio ingesteld op <strong>Verenigde Staten</strong>, maar u kunt deze wijzigen naar de regio van uw voorkeur, afhankelijk van uw behoeften. Deze functie is ideaal voor gebruikers die actief zijn in een specifieke regio en willen zorgen dat al hun sjablonen en documenten dienovereenkomstig worden verwerkt.</p> <p>Als u bijvoorbeeld voornamelijk actief bent in Europa en <strong>Europese Unie</strong> selecteert als uw standaardregio, worden alle nieuwe sjablonen automatisch verwerkt en opgeslagen in de EU. Uiteraard kunt u deze instelling nog steeds per sjabloon overschrijven, maar het hebben van een standaard kan u tijd besparen en uw workflow stroomlijnen.</p> <h3 id="web-sjabloonregio">Regioselectie voor Sjablonen</h3> <p>Wanneer u een sjabloon maakt of bewerkt in de webapp, ziet u nu een vervolgkeuzelijst voor de regio waarmee u <a href="https://www.docugenerate.com/nl/hulp/articles/hoe-werk-ik-de-regio-van-een-sjabloon-bij/">de fysieke locatie kunt kiezen</a> waar uw sjabloon en de bijbehorende documenten worden verwerkt en opgeslagen. Deze selectie zorgt ervoor dat alle documenten die op basis van dat sjabloon worden gegenereerd, binnen de geselecteerde regio worden verwerkt.</p> <p><img src="https://www.docugenerate.com/assets/posts/013-multi-region-processing/template-region.png" alt="De opslag- en verwerkingsregio van het sjabloon bijwerken"/></p> <p>Als u bijvoorbeeld <strong>Europese Unie</strong> selecteert, wordt niet alleen het sjabloon zelf opgeslagen in ons EU-datacenter, maar worden ook alle documenten die op basis van dat sjabloon worden gegenereerd daar verwerkt en opgeslagen. Dit is bijzonder belangrijk voor gebruikers die moeten voldoen aan regionale regelgeving, zoals de AVG, die vereist dat data van Europese ingezetenen binnen de EU moet blijven.</p> <p>Als u besluit de regio van een bestaand sjabloon te wijzigen, kunt u erop vertrouwen dat alleen nieuwe documenten die na de wijziging worden gegenereerd, worden beïnvloed. Uw bestaande documenten blijven in de regio waarin ze oorspronkelijk zijn opgeslagen.</p> <h2 id="wijzigingen-op-api-niveau">Wijzigingen op API-Niveau</h2> <p>Voor onze meer geavanceerde gebruikers die via de API met DocuGenerate interageren, hebben we verschillende belangrijke updates doorgevoerd die u meer controle geven over hoe en waar uw data wordt verwerkt. Of u nu documenten maakt, bijwerkt, of genereert, de API is bijgewerkt om multi-regiofunctionaliteit te ondersteunen.</p> <h3 id="api-eindpunten-regio">Multi-Region API-Eindpunten</h3> <p>Naast het hoofdeindpunt van de API dat u al gebruikte, hebben we verschillende <a href="https://www.docugenerate.com/nl/hulp/articles/kan-ik-regionale-api-eindpunten-gebruiken/">regionale API-eindpunten</a> geïntroduceerd waarmee u uw data kunt verwerken en opslaan op specifieke geografische locaties. Deze nieuwe eindpunten omvatten:</p> <ul> <li><strong>Verenigde Staten</strong> (gehost in San Francisco): <a href="https://api.docugenerate.com/" target="_blank">https://api.docugenerate.com/</a></li> <li><strong>Europese Unie</strong> (gehost in Frankfurt): <a href="https://api.eu.docugenerate.com/" target="_blank">https://api.eu.docugenerate.com/</a></li> <li><strong>Verenigd Koninkrijk</strong> (gehost in Londen): <a href="https://api.uk.docugenerate.com/" target="_blank">https://api.uk.docugenerate.com/</a></li> <li><strong>Australië</strong> (gehost in Sydney): <a href="https://api.au.docugenerate.com/" target="_blank">https://api.au.docugenerate.com/</a></li> </ul> <p>Door deze regionale eindpunten te gebruiken, kunt u ervoor zorgen dat alle documentgeneratie en sjabloonopslag plaatsvinden binnen de regio van uw keuze. Dit is bijzonder nuttig voor nalevingsdoeleinden, zodat uw data volledig binnen een specifiek rechtsgebied wordt verwerkt.</p> <p>Overschakelen naar een regionaal eindpunt is eenvoudig — u hoeft alleen de basis-URL in uw API-aanroepen te wijzigen naar het juiste regionale eindpunt. Als u bijvoorbeeld wilt dat uw documenten in de EU worden verwerkt, gebruikt u <a href="https://api.eu.docugenerate.com/" target="_blank">https://api.eu.docugenerate.com/</a> in plaats van het standaardeindpunt.</p> <h3 id="api-sjabloonregio">Regiospecificatie voor Sjablonen</h3> <p>Een andere belangrijke API-update stelt u in staat de regio op te geven bij het maken of bijwerken van een sjabloon. Wanneer u <a href="https://api.docugenerate.com/#/Template/createTemplate" target="_blank">een nieuw sjabloon maakt</a> via de API, kunt u het veld <code class="language-plaintext highlighter-rouge">region</code> opnemen in uw verzoekpayload om te bepalen waar dat sjabloon en de bijbehorende documenten worden opgeslagen.</p> <p><img src="https://www.docugenerate.com/assets/posts/013-multi-region-processing/api-create-template.png" alt="De regio opgeven bij het maken van een sjabloon met de API"/></p> <p>Op dezelfde manier kunt u <a href="https://api.docugenerate.com/#/Template/updateTemplate" target="_blank">de regio van een sjabloon bijwerken</a> met de API. Net als in de webapp heeft het wijzigen van de regio van het sjabloon alleen invloed op documenten die na de wijziging worden gegenereerd, waarbij eerder gegenereerde documenten in hun oorspronkelijke regio blijven.</p> <p><img src="https://www.docugenerate.com/assets/posts/013-multi-region-processing/api-update-template.png" alt="De regio opgeven bij het bijwerken van een sjabloon met de API"/></p> <h2 id="migratiegids">Migratiegids</h2> <p>Om de overgang naar multi-regioverwerking zo soepel mogelijk te maken, hebben we een migratiegids opgesteld voor zowel gebruikers van de webapp als van de API. Zo zorgt u ervoor dat uw sjablonen en documenten volledig profiteren van deze nieuwe functie.</p> <h3 id="migratie-webapp">Voor Gebruikers van de Webapp</h3> <p>Als u voornamelijk de webapp gebruikt, is dit wat u moet doen:</p> <ol> <li> <p><strong>Stel uw Regio op Accountniveau in:</strong><br/> Ga naar uw accountinstellingen en <a href="#web-accountregio">selecteer de standaardregio</a> waar nieuwe sjablonen worden opgeslagen en verwerkt. Deze instelling wordt automatisch toegepast op alle sjablonen die na de wijziging worden gemaakt.</p> </li> <li> <p><strong>Bestaande Sjablonen Bijwerken (Optioneel):</strong><br/> Als u bestaande sjablonen naar een nieuwe regio wilt verplaatsen, gaat u naar de sjabloon-instellingen en <a href="#web-sjabloonregio">selecteert u een nieuwe regio voor het sjabloon</a>. Onthoud dat dit alleen invloed heeft op documenten die na de wijziging worden gegenereerd. Bestaande documenten blijven in hun oorspronkelijke regio.</p> </li> </ol> <h3 id="migratie-api">Voor API-Gebruikers</h3> <p>Als u de API gebruikt, volgt u deze stappen om soepel te migreren:</p> <ol> <li> <p><strong>Schakel over naar een Regionaal API-Eindpunt:</strong><br/> Werk uw API-basis-URL bij naar het juiste regionale eindpunt (bijv. <a href="https://api.eu.docugenerate.com/" target="_blank">https://api.eu.docugenerate.com/</a> voor EU-verwerking). Dit zorgt ervoor dat uw sjablonen en documenten worden verwerkt in de regio die het beste bij uw behoeften past.</p> </li> <li> <p><strong>Bestaande Sjablonen Bijwerken (Optioneel):</strong><br/> Gebruik de API om de regio van uw sjabloon bij te werken door het veld <code class="language-plaintext highlighter-rouge">region</code> op te nemen in uw API-verzoeken. Alle nieuwe documenten die na deze update worden gegenereerd, worden opgeslagen in de nieuwe regio van het sjabloon.</p> </li> </ol> <h2 id="waarom-dit-belangrijk-is">Waarom Dit Belangrijk Is</h2> <p>De introductie van multi-regioverwerking en -opslag brengt aanzienlijke voordelen met zich mee voor onze gebruikers. Hier zijn enkele redenen waarom deze functie belangrijk is:</p> <p><strong>1. Naleving van Lokale Regelgeving</strong><br/> Als u actief bent in regio’s met strikte wetten voor gegevensresidentie (bijv. de AVG van de Europese Unie), biedt deze functie u de mogelijkheid ervoor te zorgen dat uw data binnen het vereiste rechtsgebied blijft. U heeft nu controle over waar uw sjablonen en documenten worden verwerkt, wat u helpt te voldoen aan lokale wetgeving.</p> <p><strong>2. Verbeterde Prestaties</strong><br/> Door data te verwerken en op te slaan dichter bij de locatie van uw gebruikers, kunt u de latentie verminderen en de algehele prestaties van documentgeneratie verbeteren. Als de meeste van uw gebruikers bijvoorbeeld in Europa zitten, resulteert het opslaan van sjablonen en verwerken van documenten in de EU in snellere responstijden.</p> <p><strong>3. Meer Flexibiliteit en Controle</strong><br/> Of u nu een klein bedrijf bent dat actief is in een specifieke regio, of een wereldwijde onderneming met gebruikers over de hele wereld, deze functie biedt u de flexibiliteit om uw gegevensopslag- en verwerkingsbehoeften af te stemmen op uw unieke omstandigheden.</p> <h2 id="gebruiksscenarios">Gebruiksscenario’s</h2> <p><strong>1. Klein Bedrijf met Lokale Klanten</strong><br/> Als u een klein bedrijf bent dat uitsluitend actief is in het VK, kunt u nu <strong>Verenigd Koninkrijk</strong> selecteren als uw standaardregio. Dit zorgt ervoor dat uw sjablonen en documenten worden verwerkt en opgeslagen binnen het VK, wat uw klanten geruststelt over gegevensresidentie en u helpt te voldoen aan lokale wetten voor gegevensbescherming.</p> <p><strong>2. In de Europese Unie Gevestigd Bedrijf met Internationale Klanten</strong><br/> Een bedrijf gevestigd in de <strong>Europese Unie</strong> met klanten over de hele wereld kan verschillende sjablonen opzetten voor verschillende regio’s. U kunt bijvoorbeeld sjablonen opslaan en documenten verwerken voor Europese klanten in de EU, terwijl u de regio <strong>Verenigde Staten</strong> kiest voor Noord-Amerikaanse klanten. Deze flexibiliteit optimaliseert niet alleen de prestaties, maar zorgt ook voor naleving van de AVG-regelgeving voor uw Europese klanten.</p> <p><strong>3. Wereldwijde Onderneming met Gebruikers op Meerdere Continenten</strong><br/> Voor een wereldwijd bedrijf dat klanten op verschillende continenten bedient, maakt multi-regioverwerking efficiënte documentgeneratie mogelijk. U kunt uw standaard accountregio instellen op <strong>Australië</strong> voor activiteiten in Azië-Pacific, terwijl u de regio’s <strong>Europese Unie</strong> en <strong>Verenigde Staten</strong> gebruikt voor specifieke klantbehoeften in die gebieden. Dit vermindert de latentie en zorgt ervoor dat documentverwerking gelokaliseerd is voor betere prestaties.</p> <h2 id="conclusie">Conclusie</h2> <p>Multi-regioverwerking en -opslag is een krachtige nieuwe functie die flexibiliteit, naleving, en prestatieverbeteringen biedt voor alle gebruikers van DocuGenerate. Of u nu onze webapp of API gebruikt, we hebben het eenvoudig gemaakt om de regio te selecteren die het beste bij uw behoeften past en ervoor te zorgen dat uw sjablonen en documenten dienovereenkomstig worden verwerkt. We moedigen u aan deze nieuwe functie te verkennen en te profiteren van de voordelen die zij biedt.</p>]]></content> <author> <name>DocuGenerate</name> <email>support@docugenerate.com</email> </author> <category term="Product Update"/> <category term="API"/> <category term="Templates"/> <summary type="html"><![CDATA[Het is nu mogelijk om de fysieke locatie te kiezen waar uw sjablonen en documenten worden verwerkt en opgeslagen door DocuGenerate. Ontdek hoe deze krachtige nieuwe functie u kan helpen te voldoen aan lokale nalevingsregelgeving en de prestaties te verbeteren.]]></summary> <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.docugenerate.com/assets/posts/013-multi-region-processing/cover-image.png"/> <media:content medium="image" url="https://www.docugenerate.com/assets/posts/013-multi-region-processing/cover-image.png" xmlns:media="http://search.yahoo.com/mrss/"/> </entry> <entry> <title type="html">Stroomlijn NDA-E-Handtekeningen met DocuGenerate en SignRequest</title> <link href="https://www.docugenerate.com/nl/blog/stroomlijn-nda-e-handtekeningen-met-docugenerate-en-signrequest/" rel="alternate" type="text/html" title="Stroomlijn NDA-E-Handtekeningen met DocuGenerate en SignRequest"/> <published>2024-08-11T00:00:00+00:00</published> <updated>2024-08-11T00:00:00+00:00</updated> <id>https://www.docugenerate.com/nl/blog/stroomlijn-nda-e-handtekeningen-met-docugenerate-en-signrequest</id> <content type="html" xml:base="https://www.docugenerate.com/nl/blog/stroomlijn-nda-e-handtekeningen-met-docugenerate-en-signrequest/"><![CDATA[<h2 id="wat-is-een-nda">Wat is een NDA?</h2> <p>Een <strong>Non-Disclosure Agreement (NDA)</strong> is een juridisch bindend contract dat een vertrouwelijke relatie vaststelt tussen partijen. NDA’s zijn essentieel voor het beschermen van gevoelige informatie, en zorgen ervoor dat partijen die betrokken zijn bij zakelijke onderhandelingen, partnerschappen, of arbeidsrelaties geen bedrijfseigen informatie delen met onbevoegde derden.</p> <p>Het beheren van NDA’s was lange tijd een handmatig, tijdrovend proces waarbij documenten heen en weer werden geprint, ondertekend, gescand, en gemaild. Met de komst van geavanceerde documentgeneratie- en elektronische handtekeningtechnologieën kan dit proces echter worden geautomatiseerd en gestroomlijnd. In deze blogpost verkennen we hoe u NDA-e-handtekeningen automatiseert met <a href="https://www.docugenerate.com/">DocuGenerate</a> en <a href="https://signrequest.com/" target="_blank" rel="nofollow noopener">SignRequest</a>, een oplossing voor elektronische handtekeningen die is ontworpen om het ondertekenen van documenten eenvoudig, snel, veilig, en juridisch bindend te maken.</p> <h2 id="belangrijkste-elementen">Belangrijkste Elementen van een NDA</h2> <ul> <li> <p><strong>Definitie van Vertrouwelijke Informatie</strong>: Specificeert duidelijk wat als vertrouwelijke informatie geldt. Dit omvat bedrijfsgeheimen, businessplannen, financiële gegevens, klantenlijsten, bedrijfseigen technologie, en andere gevoelige data die niet openbaar bekend is. Het moet alle vormen van informatie omvatten, zoals schriftelijke documenten, elektronische bestanden, en mondelinge communicatie.</p> </li> <li> <p><strong>Verplichtingen van de Ontvangende Partij</strong>: Beschrijft de verantwoordelijkheden van de partij die de vertrouwelijke informatie ontvangt. Dit omvat het alleen gebruiken van de informatie voor de doeleinden die in de NDA zijn gespecificeerd, het beperken van toegang tot bevoegde personen, en het nemen van redelijke stappen om de informatie te beschermen tegen ongeautoriseerde toegang of openbaarmaking. Beveiligingsmaatregelen zoals versleuteling en veilige opslag kunnen worden gespecificeerd.</p> </li> <li> <p><strong>Uitsluitingen van Vertrouwelijke Informatie</strong>: Definieert welke informatie niet als vertrouwelijk wordt beschouwd. Veelvoorkomende uitsluitingen zijn informatie die openbaar bekend is, al bekend was bij de ontvangende partij, onafhankelijk is ontwikkeld door de ontvangende partij, of is verstrekt door een derde partij zonder vertrouwelijkheidsverplichtingen.</p> </li> <li> <p><strong>Looptijd van de Overeenkomst</strong>: Geeft aan hoe lang de vertrouwelijkheidsverplichtingen van toepassing zijn. Dit kan variëren, maar wordt vaak gespecificeerd als een vaste periode, zoals één tot vijf jaar, of kan onbeperkt doorlopen totdat de vertrouwelijke informatie niet langer als zodanig geldt.</p> </li> <li> <p><strong>Gevolgen van Schending</strong>: Specificeert de sancties voor het schenden van de voorwaarden van de NDA. Dit kan juridische stappen, financiële schadevergoeding, en gerechtelijke bevelen omvatten om verdere openbaarmaking te voorkomen. Het duidelijk beschrijven van de gevolgen helpt schendingen te ontmoedigen en biedt een duidelijk handelingsplan als er toch een schending plaatsvindt.</p> </li> </ul> <h2 id="de-voordelen-van-automatisering">De Voordelen van het Automatiseren van NDA-E-Handtekeningen</h2> <p>Het handmatig verwerken van NDA’s kan omslachtig zijn en foutgevoelig. Het traditionele proces omvat verschillende stappen: het opstellen van de NDA, het printen en ondertekenen ervan, het scannen en versturen ervan, en vervolgens het opslaan van het document. Dit handmatige proces is niet alleen tijdrovend, maar verhoogt ook het risico op fouten, zoals ontbrekende handtekeningen of verloren documenten.</p> <p>Het automatiseren van het NDA-proces met e-handtekeningtechnologie biedt talrijke voordelen. Allereerst bespaart het tijd door het aantal stappen te verminderen dat nodig is om NDA’s te genereren, te ondertekenen, en op te slaan. Automatisering minimaliseert ook fouten, en zorgt ervoor dat alle benodigde velden zijn ingevuld en handtekeningen zijn verkregen. Deze verbeterde efficiëntie stelt uw team in staat zich te richten op strategischere taken. Daarnaast bieden elektronische handtekeningen een veilige en manipulatiebestendige manier om documenten te ondertekenen, wat de algehele beveiliging verbetert. Ten slotte ondersteunt het verminderen van de behoefte aan papieren documenten milieuvriendelijke bedrijfspraktijken.</p> <h2 id="het-nda-sjabloon-maken">Het NDA-Sjabloon Maken in DocuGenerate</h2> <p>Voor deze tutorial gebruiken we het <a href="https://www.docugenerate.com/assets/posts/012-nda-e-signature/Non Disclosure Agreement.docx">NDA Template</a> uit de <a href="https://www.docugenerate.com/nl/sjablonen/#contracten">Sjabloonbibliotheek</a>. Dit sjabloon bevat alle benodigde secties en placeholders voor dynamische informatie, zodat elke gegenereerde NDA volledig en nauwkeurig is.</p> <p><img src="https://www.docugenerate.com/assets/posts/012-nda-e-signature/nda-template.png" alt="NDA-sjabloon op DocuGenerate"/></p> <h2 id="docugenerate-integreren-met-signrequest-via-zapier">DocuGenerate Integreren met SignRequest via Zapier</h2> <p>Om het NDA-ondertekeningsproces te automatiseren, gebruiken we Zapier, een no-code automatiseringstool waarmee we <a href="https://zapier.com/apps/docugenerate/integrations" target="_blank" rel="noopener">DocuGenerate</a> naadloos kunnen integreren met <a href="https://zapier.com/apps/signrequest/integrations" target="_blank" rel="noopener">SignRequest</a>. De Zapier-app van SignRequest biedt flexibiliteit bij het versturen van documenten voor e-handtekening, wat het een uitstekende keuze maakt voor ons gebruiksgeval. Terwijl andere apps voor e-handtekening vereisen dat u een sjabloon maakt en een document genereert op basis van dat sjabloon, kan SignRequest het te ondertekenen document opgeven als URL, wat zeer praktisch is.</p> <p>Deze integratie automatiseert het volledige NDA-ondertekeningsproces zonder dat u code hoeft te schrijven. We stellen een Zap in met de volgende stappen:</p> <h3 id="new-document-trigger">1. New Document (Trigger)</h3> <p>De workflow begint met de trigger <a href="https://www.docugenerate.com/nl/hulp/articles/documentgeneratie-automatiseren-met-zapier/#new-document-trigger">New Document</a> in DocuGenerate, die wordt geactiveerd telkens wanneer een nieuw document wordt gegenereerd op basis van het NDA-sjabloon. Dit zorgt ervoor dat het proces start zodra de NDA klaar is.</p> <p><img src="https://www.docugenerate.com/assets/posts/012-nda-e-signature/new-document-trigger.png" alt="New Document-trigger op DocuGenerate"/></p> <p>Hoewel deze tutorial zich richt op een eenvoudige workflow, kunt u deze verder uitbreiden door stappen toe te voegen om formulierreacties op te halen, het document te genereren, en het ondertekeningsverzoek te versturen binnen dezelfde flow. In plaats van de trigger <a href="https://www.docugenerate.com/nl/hulp/articles/documentgeneratie-automatiseren-met-zapier/#new-document-trigger">New Document</a> in DocuGenerate te gebruiken, zou u de action <a href="https://www.docugenerate.com/nl/hulp/articles/documentgeneratie-automatiseren-met-zapier/#generate-document-action">Generate Document</a> kunnen gebruiken voor een meer geïntegreerde automatisering.</p> <h3 id="text-formatter-action">2. Text Formatter (Action)</h3> <p>Aangezien we de workflow vereenvoudigen door de eerste stappen van formulierinzending en documentgeneratie over te slaan, hebben we een manier nodig om het e-mailadres van de NDA-ontvanger te achterhalen. Eén methode is om het e-mailadres op te nemen in de documentnaam, zoals <em>“NDA - john.smith@gmail.com”</em>. De action <a href="https://zapier.com/apps/formatter/integrations" target="_blank" rel="nofollow noopener">Text Formatter</a> van Zapier kan vervolgens het e-mailadres uit de documentnaam halen door het deel <em>“NDA - “</em> te verwijderen. We kunnen deze action bijvoorbeeld <strong>Extract email address</strong> noemen:</p> <p><img src="https://www.docugenerate.com/assets/posts/012-nda-e-signature/text-formatter-action.png" alt="Text Formatter-action om het e-mailadres te extraheren"/></p> <h3 id="send-signrequest-action">3. Send SignRequest (Action)</h3> <p>Gebruik de action <strong>Send SignRequest</strong> in SignRequest om de NDA te versturen voor e-handtekening. Stel de parameters als volgt in:</p> <ul> <li><code class="language-plaintext highlighter-rouge">File From URL</code> ontvangt de <code class="language-plaintext highlighter-rouge">Document URL</code> van DocuGenerate.</li> <li><code class="language-plaintext highlighter-rouge">SignRequest Name</code> ontvangt de <code class="language-plaintext highlighter-rouge">File Name</code> van DocuGenerate.</li> <li><code class="language-plaintext highlighter-rouge">Signer Email</code> ontvangt de <code class="language-plaintext highlighter-rouge">Output</code> van de Text Formatter.</li> </ul> <p><img src="https://www.docugenerate.com/assets/posts/012-nda-e-signature/signrequest-action.gif" alt="Configuratie van de action Send SignRequest"/></p> <p>Deze opzet zorgt ervoor dat zodra een NDA is gegenereerd, deze automatisch wordt verstuurd voor e-handtekening, wat het proces stroomlijnt en handmatige tussenkomst vermindert.</p> <h2 id="e-mail-en-ondertekeningsproces">E-mail- en Ondertekeningsproces</h2> <p>Zodra de workflow is geactiveerd, ontvangt de ontvanger een e-mail met de NDA klaar voor e-handtekening. Laten we bekijken hoe het document verschijnt op het SignRequest-dashboard, hoe de e-mail eruitziet die de ontvanger krijgt, en hoe het ondertekeningsproces zelf verloopt.</p> <h3 id="signrequest-dashboardweergave">1. SignRequest-Dashboardweergave</h3> <p>Nadat het document is gegenereerd en verstuurd voor ondertekening, verschijnt het op uw <a href="https://signrequest.com/#/documents" target="_blank" rel="nofollow noopener">SignRequest-dashboard</a>. Hier kunt u eenvoudig de status van al uw documenten volgen, zien wie heeft getekend, en wie nog moet tekenen. Dit dashboard biedt een gecentraliseerd overzicht, waardoor het eenvoudig wordt om al uw ondertekende documenten te beheren.</p> <p><img src="https://www.docugenerate.com/assets/posts/012-nda-e-signature/signrequest-dashboard.png" alt="Screenshot van het SignRequest-dashboard met het NDA-document"/></p> <h3 id="e-mailmelding-voor-de-ontvanger">2. E-mailmelding voor de Ontvanger</h3> <p>De ontvanger ontvangt een e-mailmelding van SignRequest, waarin wordt aangegeven dat er een document klaarstaat voor hun handtekening. Deze e-mail bevat een beveiligde link naar het document, zodat alleen de beoogde ontvanger toegang heeft tot de NDA en deze kan ondertekenen.</p> <p><img src="https://www.docugenerate.com/assets/posts/012-nda-e-signature/signrequest-email.png" alt="Screenshot van de e-mail die de ontvanger krijgt"/></p> <h3 id="ondertekeningsproces">3. Ondertekeningsproces</h3> <p>Door op de link in de e-mail te klikken, komt de ontvanger op het SignRequest-platform, waar hij of zij de NDA kan bekijken en ondertekenen. Het ondertekeningsproces is intuïtief en eenvoudig, en vereist slechts een paar klikken. De ontvanger kan het document elektronisch ondertekenen, en zodra het is ondertekend, ontvangen beide partijen een kopie van de ondertekende NDA.</p> <p><img src="https://www.docugenerate.com/assets/posts/012-nda-e-signature/signrequest-signature.gif" alt="Animatie van het ondertekeningsproces"/></p> <p>Deze naadloze ervaring zorgt ervoor dat de NDA snel en veilig wordt ondertekend, zonder dat fysieke documenten moeten worden geprint, gescand, of verstuurd.</p> <h2 id="voorbeeldgebruiksgevallen">Voorbeeldgebruiksgevallen</h2> <p>Het automatiseren van NDA-generatie en e-handtekeningen kan bijzonder waardevol zijn in verschillende scenario’s. Hier zijn enkele voorbeelden:</p> <ul> <li> <p><strong>Verkoopproces</strong><br/> In een verkoopproces moet u mogelijk, voordat u een gesprek boekt met een potentiële klant, deze een NDA laten ondertekenen om gevoelige bedrijfsinformatie te beschermen. U kunt een formulier maken dat de klant invult met de basisinformatie die nodig is om de NDA in te vullen. Deze formulierinzending activeert het genereren van de NDA met DocuGenerate, waarna deze wordt verstuurd voor e-handtekening via SignRequest. Voor meer gedetailleerde instructies over het maken van zo’n formulier, raadpleegt u ons blogartikel over <a href="https://www.docugenerate.com/nl/blog/gebruik-tally-en-make-om-rapporten-te-genereren-op-basis-van-formulierinzendingen/">Rapporten Genereren op Basis van Formulierinzendingen</a> (hoewel die tutorial Make gebruikt in plaats van Zapier, blijft het principe hetzelfde).</p> </li> <li> <p><strong>Onboarding van Medewerkers</strong><br/> Tijdens de onboarding van nieuwe medewerkers vereisen bedrijven vaak het ondertekenen van een NDA om bedrijfseigen informatie te beschermen. Het automatiseren van dit proces zorgt ervoor dat elke nieuwe medewerker de NDA snel ontvangt en ondertekent. Nieuwe medewerkers kunnen hun gegevens invullen via een online formulier, wat het genereren en versturen van de NDA activeert, wat de HR-workflow stroomlijnt en naleving waarborgt.</p> </li> <li> <p><strong>Partnerschapsovereenkomsten</strong><br/> Bij het aangaan van partnerschappen met andere bedrijven of freelancers is het essentieel om een NDA te hebben om gedeelde informatie te beschermen. Het automatiseren van het genereren en ondertekenen van de NDA zorgt ervoor dat deze overeenkomsten efficiënt en veilig worden verwerkt. Partners kunnen de NDA eenvoudig elektronisch ondertekenen, wat het proces versnelt en de administratieve last vermindert.</p> </li> <li> <p><strong>Inzet van Consultants</strong><br/> Bedrijven schakelen vaak consultants in om aan gevoelige projecten te werken. Een NDA is essentieel om intellectueel eigendom en vertrouwelijke data te beschermen. Het automatiseren van het NDA-proces stelt bedrijven in staat om snel NDA’s te genereren en te versturen naar consultants, zodat alle benodigde juridische bescherming aanwezig is voordat het werk begint.</p> </li> <li> <p><strong>Fusies en Overnames</strong><br/> Bij fusies en overnames zijn NDA’s cruciaal om gevoelige financiële en strategische informatie te beschermen tijdens onderhandelingen. Het automatiseren van het genereren en e-ondertekenen van NDA’s zorgt ervoor dat alle betrokken partijen snel de benodigde overeenkomsten kunnen ondertekenen en benaderen, wat zorgt voor soepelere en snellere transacties.</p> </li> </ul> <h2 id="conclusie">Conclusie</h2> <p>Het automatiseren van NDA-e-handtekeningen met DocuGenerate en SignRequest biedt aanzienlijke voordelen, waaronder tijdsbesparing, foutvermindering, verbeterde efficiëntie, verbeterde beveiliging, en milieuvoordelen. Door de stappen in deze gids te volgen, kunt u uw NDA-workflow stroomlijnen, zodat u zich kunt richten op strategischere taken en de algehele productiviteit kunt verbeteren.</p> <p>Het opnemen van DocuGenerate en SignRequest in uw documentbeheerproces is een slimme zet voor elk bedrijf dat zijn activiteiten wil moderniseren en voorop wil blijven lopen in het huidige competitieve landschap. Begin vandaag nog met het automatiseren van uw NDA-e-handtekeningen en ervaar de transformerende impact van deze krachtige tools.</p> <h3 id="bronnen">Bronnen</h3> <ul> <li>Het <a href="https://www.docugenerate.com/assets/posts/012-nda-e-signature/Non Disclosure Agreement.docx">NDA Template</a> dat in deze tutorial is gebruikt.</li> <li>De <a href="https://zapier.com/apps/signrequest/integrations" target="_blank" rel="noopener">SignRequest-app</a> op Zapier.</li> </ul>]]></content> <author> <name>DocuGenerate</name> <email>support@docugenerate.com</email> </author> <category term="NDA"/> <category term="Zapier"/> <category term="No-Code"/> <summary type="html"><![CDATA[Leer hoe u e-handtekeningen automatiseert en NDA's efficiënt beheert in verschillende bedrijfsscenario's. Ontdek de voordelen van het integreren van geavanceerde documentgeneratie en elektronische handtekeningtechnologieën om de beveiliging te verbeteren, tijd te besparen, en de productiviteit te verhogen.]]></summary> <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.docugenerate.com/assets/posts/012-nda-e-signature/cover-image-v2.png"/> <media:content medium="image" url="https://www.docugenerate.com/assets/posts/012-nda-e-signature/cover-image-v2.png" xmlns:media="http://search.yahoo.com/mrss/"/> </entry> <entry> <title type="html">Genereer een Script met SQL-Instructies vanuit Excel-Data</title> <link href="https://www.docugenerate.com/nl/blog/genereer-een-script-met-sql-instructies-vanuit-excel-data/" rel="alternate" type="text/html" title="Genereer een Script met SQL-Instructies vanuit Excel-Data"/> <published>2024-07-05T00:00:00+00:00</published> <updated>2024-07-05T00:00:00+00:00</updated> <id>https://www.docugenerate.com/nl/blog/genereer-een-script-met-sql-instructies-vanuit-excel-data</id> <content type="html" xml:base="https://www.docugenerate.com/nl/blog/genereer-een-script-met-sql-instructies-vanuit-excel-data/"><![CDATA[<h2 id="introductie">Introductie</h2> <p>Het genereren van SQL-scripts vereist vaak diepgaande codeerkennis of nauwgezette handmatige gegevensinvoer. Met de juiste tools kan dit proces echter worden vereenvoudigd en voor iedereen toegankelijk worden gemaakt. DocuGenerate biedt een krachtige oplossing die het maken van SQL-scripts vanuit Excel- of CSV-bestanden automatiseert, waardoor handmatig coderen niet meer nodig is.</p> <p>Deze blogpost leidt u door het proces van het maken van een geparametriseerd SQL-script, het voorbereiden van uw gegevensbron, en het gebruiken van DocuGenerate om scriptgeneratie te automatiseren. We verkennen ook praktische gebruiksgevallen om de veelzijdigheid en efficiëntie van deze aanpak te demonstreren.</p> <h2 id="wat-u-zult-leren">Wat u Zult Leren</h2> <ol> <li><a href="#sql-script">Een Geparametriseerd SQL-Script Maken</a><br/> Leer hoe u een SQL-script schrijft met placeholders in plaats van hardgecodeerde waarden.</li> <li><a href="#gegevensbron">Uw Gegevensbron Voorbereiden</a><br/> Begrijp hoe u uw data structureert in een Excel- of CSV-bestand.</li> <li><a href="#docugenerate-automatisering">DocuGenerate Gebruiken voor Automatisering</a><br/> Zie hoe DocuGenerate het proces kan automatiseren, waardoor het eenvoudig wordt voor niet-technische gebruikers.</li> <li><a href="#gebruiksgevallen">Praktische Gebruiksgevallen</a><br/> Ontdek hoe deze techniek kan worden toegepast in verschillende scenario’s, van gegevensmigratie tot rapportgeneratie.</li> </ol> <h2 id="sql-script">Een Geparametriseerd SQL-Script Maken</h2> <p>Voordat we dieper ingaan op het maken van geparametriseerde SQL-scripts, laten we eerst begrijpen wat ze zijn en hoe ze worden gebruikt.</p> <p><strong>SQL (Structured Query Language)</strong> is een gestandaardiseerde taal die wordt gebruikt om relationele databases te beheren en te bewerken. Met SQL-commando’s kunnen gebruikers taken uitvoeren zoals data opvragen, records bijwerken, nieuwe records invoegen, en records verwijderen uit een database. SQL is essentieel voor het efficiënt interageren met de database om data op te halen en te beheren.</p> <p>Een <strong>SQL-script</strong> is een bestand met een reeks SQL-commando’s. Deze scripts worden gebruikt om meerdere SQL-commando’s in een batch uit te voeren, waardoor automatisering van databasebewerkingen mogelijk wordt. SQL-scripts kunnen worden gebruikt voor verschillende taken, waaronder gegevensbewerking, het aanmaken van databaseschema’s, en gegevensmigratie.</p> <p>Het maken van een SQL-script vereist vaak het schrijven van repetitieve instructies met verschillende waarden. Beschouw ter illustratie het volgende niet-geparametriseerde SQL-script voor het invoegen van data in een tabel <code class="language-plaintext highlighter-rouge">customer</code>:</p> <div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">INSERT</span> <span class="k">INTO</span> <span class="n">customer</span> <span class="p">(</span><span class="n">customer_id</span><span class="p">,</span> <span class="n">first_name</span><span class="p">,</span> <span class="n">last_name</span><span class="p">,</span> <span class="n">email</span><span class="p">,</span> <span class="n">phone_number</span><span class="p">,</span> <span class="n">created_at</span><span class="p">)</span>
<span class="k">VALUES</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="s1">'John'</span><span class="p">,</span> <span class="s1">'Doe'</span><span class="p">,</span> <span class="s1">'john.doe@example.com'</span><span class="p">,</span> <span class="s1">'123-456-7890'</span><span class="p">,</span> <span class="s1">'2024-01-01 10:00:00'</span><span class="p">);</span>

<span class="k">INSERT</span> <span class="k">INTO</span> <span class="n">customer</span> <span class="p">(</span><span class="n">customer_id</span><span class="p">,</span> <span class="n">first_name</span><span class="p">,</span> <span class="n">last_name</span><span class="p">,</span> <span class="n">email</span><span class="p">,</span> <span class="n">phone_number</span><span class="p">,</span> <span class="n">created_at</span><span class="p">)</span>
<span class="k">VALUES</span> <span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="s1">'Jane'</span><span class="p">,</span> <span class="s1">'Smith'</span><span class="p">,</span> <span class="s1">'jane.smith@example.com'</span><span class="p">,</span> <span class="s1">'098-765-4321'</span><span class="p">,</span> <span class="s1">'2024-01-02 11:00:00'</span><span class="p">);</span>

<span class="k">INSERT</span> <span class="k">INTO</span> <span class="n">customer</span> <span class="p">(</span><span class="n">customer_id</span><span class="p">,</span> <span class="n">first_name</span><span class="p">,</span> <span class="n">last_name</span><span class="p">,</span> <span class="n">email</span><span class="p">,</span> <span class="n">phone_number</span><span class="p">,</span> <span class="n">created_at</span><span class="p">)</span>
<span class="k">VALUES</span> <span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="s1">'Michael'</span><span class="p">,</span> <span class="s1">'Brown'</span><span class="p">,</span> <span class="s1">'michael.brown@example.com'</span><span class="p">,</span> <span class="s1">'234-567-8901'</span><span class="p">,</span> <span class="s1">'2024-01-03 12:00:00'</span><span class="p">);</span>
</code></pre></div></div> <p>Dit script voegt een nieuw record toe aan de customer-tabel met specifieke waarden voor elke kolom. Bij meerdere records kunnen SQL-scripts meerdere <code class="language-plaintext highlighter-rouge">INSERT</code>-instructies bevatten om verschillende records aan de database toe te voegen.</p> <p>Zoals u kunt zien, lijkt elke rij op elkaar, maar met verschillende waarden. Dit proces kan omslachtig en foutgevoelig worden bij grote datasets. Om dit aan te pakken, gebruiken we <a href="https://www.docugenerate.com/nl/hulp/articles/wat-zijn-merge-tags/">placeholders</a> voor de waarden, waardoor het script geparametriseerd wordt:</p> <div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">INSERT</span> <span class="k">INTO</span> <span class="n">customer</span> <span class="p">(</span><span class="n">customer_id</span><span class="p">,</span> <span class="n">first_name</span><span class="p">,</span> <span class="n">last_name</span><span class="p">,</span> <span class="n">email</span><span class="p">,</span> <span class="n">phone_number</span><span class="p">,</span> <span class="n">created_at</span><span class="p">)</span>
<span class="k">VALUES</span> <span class="p">({</span><span class="n">customer_id</span><span class="p">},</span> <span class="s1">'{first_name}'</span><span class="p">,</span> <span class="s1">'{last_name}'</span><span class="p">,</span> <span class="s1">'{email}'</span><span class="p">,</span> <span class="s1">'{phone_number}'</span><span class="p">,</span> <span class="s1">'{created_at}'</span><span class="p">);</span>
</code></pre></div></div> <p>In dit script worden de placeholders <code class="language-plaintext highlighter-rouge">{customer_id}</code>, <code class="language-plaintext highlighter-rouge">{first_name}</code>, <code class="language-plaintext highlighter-rouge">{last_name}</code>, <code class="language-plaintext highlighter-rouge">{email}</code>, <code class="language-plaintext highlighter-rouge">{phone_number}</code>, en <code class="language-plaintext highlighter-rouge">{created_at}</code> vervangen door daadwerkelijke waarden uit onze gegevensbron.</p> <h2 id="gegevensbron">Uw Gegevensbron Voorbereiden</h2> <p>Vervolgens moeten we een Excel- of CSV-bestand voorbereiden met de data die wordt gebruikt om ons SQL-script in te vullen. Hieronder ziet u een voorbeeld van de structuur van een <a href="https://www.docugenerate.com/assets/posts/011-sql-script-from-excel-data/SQL Data.csv">CSV-bestand</a> die overeenkomt met onze placeholders:</p> <div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>customer_id,first_name,last_name,email,phone_number,created_at
1,John,Doe,john.doe@example.com,123-456-7890,2024-01-01 10:00:00
2,Jane,Smith,jane.smith@example.com,098-765-4321,2024-01-02 11:00:00
3,Michael,Brown,michael.brown@example.com,234-567-8901,2024-01-03 12:00:00
4,Emily,Davis,emily.davis@example.com,345-678-9012,2024-01-04 13:00:00
5,Daniel,Wilson,daniel.wilson@example.com,456-789-0123,2024-01-05 14:00:00
6,Amy,Johnson,amy.johnson@example.com,567-890-1234,2024-01-06 15:00:00
7,David,Martinez,david.martinez@example.com,678-901-2345,2024-01-07 16:00:00
8,Susan,Lee,susan.lee@example.com,789-012-3456,2024-01-08 17:00:00
9,James,Clark,james.clark@example.com,890-123-4567,2024-01-09 18:00:00
10,Mary,Lopez,mary.lopez@example.com,901-234-5678,2024-01-10 19:00:00
11,Robert,Garcia,robert.garcia@example.com,012-345-6789,2024-01-11 20:00:00
12,Linda,Hernandez,linda.hernandez@example.com,123-456-7890,2024-01-12 21:00:00
13,William,Martinez,william.martinez@example.com,234-567-8901,2024-01-13 22:00:00
14,Patricia,Robinson,patricia.robinson@example.com,345-678-9012,2024-01-14 23:00:00
15,Charles,Hall,charles.hall@example.com,456-789-0123,2024-01-15 08:00:00
16,Barbara,Allen,barbara.allen@example.com,567-890-1234,2024-01-16 09:00:00
17,Thomas,Young,thomas.young@example.com,678-901-2345,2024-01-17 10:00:00
18,Jennifer,Hernandez,jennifer.hernandez@example.com,789-012-3456,2024-01-18 11:00:00
19,Christopher,King,christopher.king@example.com,890-123-4567,2024-01-19 12:00:00
20,Karen,Wright,karen.wright@example.com,901-234-5678,2024-01-20 13:00:00
</code></pre></div></div> <p>U kunt uw data ook voorbereiden in een <a href="https://www.docugenerate.com/assets/posts/011-sql-script-from-excel-data/SQL Data.xlsx">Excel-bestand</a> met dezelfde structuur:</p> <p><img src="https://www.docugenerate.com/assets/posts/011-sql-script-from-excel-data/excel-data.png" alt="Voorbeeld Excel-data"/></p> <p>Elke rij in het CSV- of Excel-bestand komt overeen met een nieuw record dat wordt ingevoegd in de customer-tabel. Deze structuur zorgt ervoor dat onze data georganiseerd en klaar is om te worden samengevoegd met het SQL-scriptsjabloon.</p> <h2 id="docugenerate-automatisering">DocuGenerate Gebruiken voor Automatisering</h2> <p>Met DocuGenerate kunt u het proces van het genereren van SQL-scripts automatiseren met behulp van een sjabloon en een gegevensbron. Hier is een stapsgewijze gids om dit te bereiken:</p> <h3 id="1-een-sjabloon-maken">1. Een Sjabloon Maken</h3> <p>Sla eerst uw geparametriseerde SQL-script op als een sjabloonbestand. Het bestand <a href="https://www.docugenerate.com/assets/posts/011-sql-script-from-excel-data/SQL Template.sql">SQL Template.sql</a> bevat bijvoorbeeld het script dat in dit artikel wordt gebruikt.</p> <p><img src="https://www.docugenerate.com/assets/posts/011-sql-script-from-excel-data/sql-template-v3.png" alt="SQL-sjabloon"/></p> <h3 id="2-het-sjabloon-uploaden">2. Het Sjabloon Uploaden</h3> <p>Log vervolgens in op uw DocuGenerate-account en upload uw SQL-bestand om <a href="https://www.docugenerate.com/nl/hulp/articles/hoe-maak-ik-een-nieuw-sjabloon-aan/">een nieuw sjabloon te maken</a>.</p> <p><img src="https://www.docugenerate.com/assets/posts/011-sql-script-from-excel-data/docugenerate-template.png" alt="SQL-sjabloon op DocuGenerate"/></p> <h3 id="3-de-gegevensbron-uploaden">3. De Gegevensbron Uploaden</h3> <p>Vervolgens <a href="https://www.docugenerate.com/nl/hulp/articles/documenten-genereren-vanuit-een-excel-of-csv-bestand/">uploadt u uw CSV- of Excel-bestand</a> met de klantdata. Gebruik de intuïtieve interface van DocuGenerate om het SQL-script te genereren.</p> <p>Zorg ervoor dat u de optie selecteert om <a href="https://www.docugenerate.com/nl/hulp/articles/de-gegenereerde-documenten-samenvoegen-tot-een-bestand/">de gegenereerde documenten samen te voegen</a> tot één bestand, en geen pagina-einden in te voegen na elk document. Zo worden de gegenereerde documenten, in dit geval de SQL-instructies, achter elkaar samengevoegd, zonder pagina-einden ertussen.</p> <p><img src="https://www.docugenerate.com/assets/posts/011-sql-script-from-excel-data/generate-script.gif" alt="SQL-script genereren"/></p> <h3 id="4-het-sql-script-genereren">4. Het SQL-Script Genereren</h3> <p>Bij het genereren van het document worden de placeholders in het sjabloon vervangen door daadwerkelijke waarden uit het CSV- of Excel-bestand.</p> <p>Exporteer het gegenereerde document als een <strong>Plain text (.txt)</strong>-bestand, en hernoem het geëxporteerde bestand vervolgens naar een <code class="language-plaintext highlighter-rouge">.sql</code>-extensie in plaats van <code class="language-plaintext highlighter-rouge">.txt</code>. Zo wordt het SQL-script herkend door databasebeheersystemen die de SQL-instructies in bulk kunnen uitvoeren.</p> <p><img src="https://www.docugenerate.com/assets/posts/011-sql-script-from-excel-data/sql-script-v3.png" alt="SQL-script"/></p> <p>Door deze stappen te volgen, kunt u snel meerdere SQL-instructies genereren zonder handmatige tussenkomst. U kunt het resulterende bestand <a href="https://www.docugenerate.com/assets/posts/011-sql-script-from-excel-data/SQL Script.sql">hier downloaden</a>. Dit bespaart niet alleen tijd, maar vermindert ook de kans op fouten die kunnen ontstaan bij handmatige gegevensinvoer.</p> <h2 id="gebruiksgevallen">Praktische Gebruiksgevallen</h2> <p>Deze techniek kan buitengewoon nuttig zijn in verschillende scenario’s:</p> <ul> <li> <p><strong>Gegevensmigratie</strong>: Bij het migreren van data van het ene systeem naar het andere, kunt u SQL-scripts genereren om grote hoeveelheden data nauwkeurig en efficiënt in te voegen. Als u bijvoorbeeld klantdata verplaatst van een oud CRM-systeem naar een nieuw <a href="https://www.emailvendorselection.com/crm-with-email-marketing/" target="_blank">CRM met e-mailmarketingsoftware</a>, kan het genereren van de benodigde SQL-scripts ervoor zorgen dat de gegevensoverdracht naadloos en nauwkeurig verloopt.</p> </li> <li> <p><strong>Rapportgeneratie</strong>: Automatiseer het maken van SQL-query’s voor rapportgeneratie op basis van dynamische gegevensinvoer. Dit kan bijzonder nuttig zijn voor het genereren van maandelijkse of driemaandelijkse rapporten waarbij de data regelmatig verandert. Door het gegevensbronbestand bij te werken, kunt u actuele SQL-scripts genereren zonder de query’s handmatig te herschrijven.</p> </li> <li> <p><strong>Database Seeding</strong>: Genereer voor ontwikkel- en testomgevingen SQL-scripts om databases te vullen met voorbeelddata. Hierdoor kunnen ontwikkelaars hun applicaties testen met realistische datasets, wat waarborgt dat de applicatie zich gedraagt zoals verwacht in een productieomgeving.</p> </li> <li> <p><strong>Massale Updates</strong>: Voer massale updates uit op databaserecords door SQL-updatescripts te genereren vanuit een CSV- of Excel-bestand. Dit kan bijzonder nuttig zijn voor het toepassen van bulkwijzigingen, zoals het bijwerken van prijsinformatie voor een grote productvoorraad.</p> </li> <li> <p><strong>Gepersonaliseerde SQL-Scripts</strong>: Maak gepersonaliseerde SQL-scripts voor verschillende klanten of gebruiksgevallen door simpelweg het gegevensbronbestand te wijzigen. Deze flexibiliteit stelt bedrijven in staat om hun databasebewerkingen af te stemmen op specifieke klantbehoeften, zonder uitgebreide handmatige codering.</p> </li> </ul> <h2 id="conclusie">Conclusie</h2> <p>Met DocuGenerate wordt het genereren van SQL-scripts vanuit een Excel- of CSV-bestand een eenvoudig en toegankelijk proces. Deze krachtige tool gaat verder dan traditionele documentgeneratietaken en biedt veelzijdige oplossingen voor gegevensbeheer en automatisering.</p> <p>Of u nu een ontwikkelaar bent die uw workflow wilt stroomlijnen, of een niet-technische gebruiker die repetitieve taken wilt automatiseren, DocuGenerate biedt een gebruiksvriendelijk platform dat aan uw behoeften voldoet. Begin vandaag nog met het benutten van de kracht van DocuGenerate en verander de manier waarop u SQL-scriptgeneratie en andere documentautomatiseringstaken aanpakt.</p> <h3 id="bronnen">Bronnen</h3> <ul> <li>Het <a href="https://www.docugenerate.com/assets/posts/011-sql-script-from-excel-data/SQL Template.sql">SQL Template</a> dat in deze tutorial is gebruikt.</li> <li>De voorbeeldbestanden <a href="https://www.docugenerate.com/assets/posts/011-sql-script-from-excel-data/SQL Data.xlsx">Excel</a> en <a href="https://www.docugenerate.com/assets/posts/011-sql-script-from-excel-data/SQL Data.csv">CSV</a> die in deze tutorial zijn gebruikt.</li> <li>Het gegenereerde <a href="https://www.docugenerate.com/assets/posts/011-sql-script-from-excel-data/SQL Script.sql">SQL Script</a> met de SQL-instructies.</li> </ul>]]></content> <author> <name>DocuGenerate</name> <email>support@docugenerate.com</email> </author> <category term="Script"/> <category term="SQL"/> <category term="Excel"/> <summary type="html"><![CDATA[Ontdek stapsgewijze begeleiding bij het maken van geparametriseerde SQL-scripts, het voorbereiden van gegevensbronnen, en het benutten van de krachtige automatiseringsmogelijkheden van DocuGenerate. Perfect voor zowel ontwikkelaars als niet-technische gebruikers om data eenvoudig te beheren.]]></summary> <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.docugenerate.com/assets/posts/011-sql-script-from-excel-data/cover-image-v3.png"/> <media:content medium="image" url="https://www.docugenerate.com/assets/posts/011-sql-script-from-excel-data/cover-image-v3.png" xmlns:media="http://search.yahoo.com/mrss/"/> </entry> <entry> <title type="html">Hoe Maakt u Evenemententickets met Barcodes met Make</title> <link href="https://www.docugenerate.com/nl/blog/hoe-maakt-u-evenemententickets-met-barcodes-met-make/" rel="alternate" type="text/html" title="Hoe Maakt u Evenemententickets met Barcodes met Make"/> <published>2024-06-14T00:00:00+00:00</published> <updated>2024-06-14T00:00:00+00:00</updated> <id>https://www.docugenerate.com/nl/blog/hoe-maakt-u-evenemententickets-met-barcodes-met-make</id> <content type="html" xml:base="https://www.docugenerate.com/nl/blog/hoe-maakt-u-evenemententickets-met-barcodes-met-make/"><![CDATA[<h2 id="overzicht-van-het-scenario">Overzicht van het Scenario</h2> <p>Het maken van evenemententickets met barcodes kan een game-changer zijn voor het stroomlijnen van toegangsbeheer en het verbeteren van de klantervaring. Automatisering bespaart niet alleen tijd, maar vermindert ook fouten en zorgt voor een professionele uitstraling. In deze gids gebruiken we <a href="https://www.make.com/en?utm_source=docugenerate-app&amp;utm_medium=partner&amp;utm_campaign=docugenerate-app-partner-program" target="_blank" rel="nofollow noopener">Make</a> (voorheen Integromat) om het volledige proces te automatiseren. We integreren <a href="https://stripe.com/en-fr" target="_blank" rel="nofollow noopener">Stripe</a> om betalingen te verwerken, genereren tickets met <a href="https://www.docugenerate.com/">DocuGenerate</a>, en versturen deze per e-mail naar uw klanten. Dit is wat u zult leren:</p> <ul> <li><a href="#stripe-instellen">Stripe Instellen</a>: Hoe u Stripe configureert voor betalingsverwerking.</li> <li><a href="#docugenerate-instellen">DocuGenerate Instellen</a>: Het ontwerpen en uploaden van een ticketsjabloon.</li> <li><a href="#het-make-scenario-maken">Het Make-Scenario Maken</a>: Het automatiseren van ticketgeneratie en e-mailbezorging.</li> </ul> <p>Laten we het stap-voor-stap proces bekijken.</p> <h2 id="stripe-instellen">Stripe Instellen</h2> <p>Stripe is een krachtig platform voor betalingsverwerking waarmee u eenvoudig online betalingen kunt accepteren. Voor ons evenemententicketsysteem verwerkt Stripe de betalingen voor het product <a href="#het-product-event-admission-maken">Event Admission</a> dat we hieronder maken. Zo stelt u het in:</p> <h3 id="een-stripe-verbinding-maken-in-make">1. Een Stripe-Verbinding Maken in Make</h3> <p>Voeg eerst de <a href="https://www.make.com/en/integrations/stripe?utm_source=docugenerate-app&amp;utm_medium=partner&amp;utm_campaign=docugenerate-app-partner-program" target="_blank" rel="nofollow noopener">Stripe-app</a> toe aan uw scenario en gebruik de trigger <strong>Watch Events</strong>, die wordt geactiveerd wanneer een bepaalde gebeurtenis plaatsvindt. Om een Stripe-verbinding te maken in Make, moet u ook een beperkte API-sleutel genereren. Ga naar de pagina <a href="https://dashboard.stripe.com/apikeys" target="_blank" rel="nofollow noopener">Developers</a> in Stripe, klik op <strong>Create restricted key</strong> en configureer de volgende machtigingen:</p> <ul> <li><strong>Balance</strong>: <code class="language-plaintext highlighter-rouge">Read</code></li> <li><strong>Checkout Sessions</strong>: <code class="language-plaintext highlighter-rouge">Read</code></li> <li><strong>Webhook Endpoints</strong>: <code class="language-plaintext highlighter-rouge">Write</code></li> </ul> <p>Met deze API-sleutel kan Make veilig interageren met uw Stripe-account, de benodigde informatie over de transacties ophalen, en ervoor zorgen dat de juiste data wordt gebruikt voor ticketgeneratie.</p> <p><img src="https://www.docugenerate.com/assets/posts/009-tickets-barcode-make/stripe-restricted-api-key.png" alt="Stripe-verbinding maken in Make"/></p> <p>Voor gedetailleerde instructies over het instellen van de Stripe-verbinding, raadpleegt u de <a href="https://www.make.com/en/help/app/stripe" target="_blank" rel="nofollow noopener">documentatie</a> van de Stripe-integratie. Deze gids biedt een stapsgewijze handleiding voor het verbinden van Stripe met Make.</p> <h3 id="een-webhook-maken-voor-checkout-session-completed">2. Een Webhook Maken voor Checkout Session Completed</h3> <p>Vervolgens moet u een webhook maken in Stripe. Webhooks zijn cruciaal omdat ze uw systeem informeren wanneer bepaalde gebeurtenissen plaatsvinden in uw Stripe-account. Voor deze opzet zijn we geïnteresseerd in het event <strong>Checkout Session completed</strong>, dat wordt geactiveerd wanneer een klant een aankoop succesvol voltooit.</p> <p><img src="https://www.docugenerate.com/assets/posts/009-tickets-barcode-make/stripe-create-webhook.png" alt="Stripe-webhook maken voor checkout session completed"/></p> <p>Zodra deze is ingesteld, is deze webhook zichtbaar op de pagina <a href="https://dashboard.stripe.com/webhooks" target="_blank" rel="nofollow noopener">Developers</a> van Stripe. Deze zichtbaarheid zorgt ervoor dat u uw webhooks effectief kunt volgen en beheren, wat u helpt bij het oplossen van eventuele problemen.</p> <p><img src="https://www.docugenerate.com/assets/posts/009-tickets-barcode-make/stripe-make-webhook.png" alt="Make-webhook zichtbaar op de Developers-pagina van Stripe"/></p> <h3 id="het-product-event-admission-maken">3. Het Product “Event Admission” Maken</h3> <p>Maak nu een product in Stripe genaamd <strong>Event Admission</strong>. Dit product vertegenwoordigt het ticket voor uw evenement. Wanneer klanten dit product kopen, activeert dit het volledige ticketingproces.</p> <p>Het maken van een product in Stripe is eenvoudig. Zorg ervoor dat alle relevante details, zoals prijs en beschrijving, correct zijn ingevuld om duidelijke informatie te bieden aan uw klanten.</p> <p><img src="https://www.docugenerate.com/assets/posts/009-tickets-barcode-make/stripe-event-product.png" alt="Het product &quot;Event Admission&quot; op Stripe"/></p> <h3 id="een-betalingslink-maken-voor-uw-product">4. Een Betalingslink Maken voor Uw Product</h3> <p>Zodra uw product is ingesteld, is de volgende stap om <a href="https://docs.stripe.com/payment-links/create" target="_blank" rel="nofollow noopener">een betalingslink te maken</a>. Deze link gebruiken uw klanten om hun evenemententickets te kopen. Stripe maakt het eenvoudig om deze links te genereren, die u vervolgens kunt delen via e-mail, sociale media, of uw website. De betalingslink leidt klanten naar een beveiligde checkoutpagina waar ze hun aankoop kunnen voltooien.</p> <p><img src="https://www.docugenerate.com/assets/posts/009-tickets-barcode-make/stripe-create-payment-link.png" alt="Betalingslink maken voor het product &quot;Event Admission&quot;"/></p> <p>U kunt het betalingsproces testen met de <a href="https://buy.stripe.com/test_8wM3eEcTF0Jxb2oeUV" target="_blank" rel="nofollow noopener">Payment Link</a> voor het product <strong>Event Admission</strong>. Voer uw e-mailadres in en gebruik voor de kaartgegevens <code class="language-plaintext highlighter-rouge">4242 4242 4242 4242</code>, wat een testcreditcardnummer van Stripe is. Voor de vervaldatum en CVC-waarden kunt u dummywaarden gebruiken, zolang de vervaldatum in de toekomst ligt. Als u vervolgens op <strong>Pay</strong> klikt, ontvangt u een e-mail met uw test-PDF-ticket, zoals <a href="#het-volledige-make-scenario">verderop beschreven</a>.</p> <h2 id="docugenerate-instellen">DocuGenerate Instellen</h2> <p>DocuGenerate is een krachtige tool voor <a href="/nl/product/">het automatiseren van documentcreatie</a>. In deze stap stellen we DocuGenerate in om een ticketsjabloon te maken. Dit sjabloon wordt gebruikt om gepersonaliseerde tickets te genereren voor elke klant.</p> <h3 id="uw-ticketsjabloon-ontwerpen">1. Uw Ticketsjabloon Ontwerpen</h3> <p>Begin met het ontwerpen van een ticketsjabloon in Microsoft Word. Het sjabloon moet placeholders bevatten (ook bekend als <a href="/nl/hulp/articles/wat-zijn-merge-tags/">merge-tags</a>) voor de volgende velden: <code class="language-plaintext highlighter-rouge">ticket_number</code>, <code class="language-plaintext highlighter-rouge">full_name</code>, <code class="language-plaintext highlighter-rouge">event_date</code>, <code class="language-plaintext highlighter-rouge">event_time</code>, en <code class="language-plaintext highlighter-rouge">event_address</code>. Deze placeholders worden vervangen door daadwerkelijke data bij het genereren van de tickets.</p> <p><img src="https://www.docugenerate.com/assets/posts/009-tickets-barcode-make/ticket-word-template.png" alt="De &quot;Event Ticket Template&quot; in Word"/></p> <h3 id="het-sjabloon-uploaden-naar-docugenerate">2. Het Sjabloon Uploaden naar DocuGenerate</h3> <p>Zodra uw sjabloon klaar is, <a href="/nl/hulp/articles/hoe-maak-ik-een-nieuw-sjabloon-aan/">uploadt u het naar DocuGenerate</a>. Deze stap is cruciaal, omdat deze het sjabloon voorbereidt voor geautomatiseerde documentgeneratie. DocuGenerate gebruikt dit sjabloon om unieke tickets te maken voor elke klant, op basis van de data die van Stripe wordt ontvangen.</p> <p>Zorg ervoor dat u de <a href="/nl/hulp/articles/hoe-schakel-ik-de-uitgebreide-syntax-in/">uitgebreide syntax</a> inschakelt, wat nodig is om het filter <code class="language-plaintext highlighter-rouge">barcode</code> te gebruiken om <a href="/nl/hulp/articles/qr-codes-en-barcodes-toevoegen/#barcodes-toevoegen">een barcode toe te voegen</a> aan het ticket. Let er ook op dat de merge-tags geen witruimte bevatten, omdat deze niet compatibel zijn met de uitgebreide syntax. In plaats daarvan gebruiken we het underscore-teken (<code class="language-plaintext highlighter-rouge">_</code>) om woorden binnen de merge-tags te scheiden.</p> <p><img src="https://www.docugenerate.com/assets/posts/009-tickets-barcode-make/docugenerate-ticket-template.png" alt="De &quot;Event Ticket Template&quot; op DocuGenerate"/></p> <p>Voel u vrij om <a href="https://www.docugenerate.com/assets/posts/009-tickets-barcode-make/Event Ticket Template.docx">het sjabloon te downloaden</a> en het aan te passen aan de branding en details van uw evenement.</p> <h2 id="het-make-scenario-maken">Het Make-Scenario Maken</h2> <p>Nu Stripe en DocuGenerate zijn ingesteld, maken we een scenario in Make om het proces van ticketgeneratie en e-mailverzending te automatiseren. Dit scenario verbindt alle onderdelen met elkaar, voor een naadloze workflow van betaling tot ticketbezorging.</p> <h3 id="de-action-generate-a-document-instellen">1. De Action “Generate a Document” Instellen</h3> <p>Stel in Make de action <a href="/nl/hulp/articles/documentgeneratie-automatiseren-met-make/#generate-document-action">Generate a Document</a> in door de <a href="https://www.make.com/en/integrations/docugenerate?utm_source=docugenerate-app&amp;utm_medium=partner&amp;utm_campaign=docugenerate-app-partner-program" target="_blank" rel="noopener">DocuGenerate-app</a> te verbinden. Deze action neemt de data van de Stripe checkout session en gebruikt deze om een ticket te genereren. Zorg ervoor dat alle placeholders in uw ticketsjabloon correct zijn gekoppeld aan de datavelden van Stripe.</p> <p><img src="https://www.docugenerate.com/assets/posts/009-tickets-barcode-make/docugenerate-new-document.png" alt="De action &quot;Generate a Document&quot; instellen in Make"/></p> <p>Voor deze tutorial hebben we de event-ID gebruikt als ticketnummer, maar u kunt elke waarde gebruiken die bij uw behoeften past. We hebben ook de eigenschap <code class="language-plaintext highlighter-rouge">customer_details: name</code> uit de Stripe-eventpayload gebruikt om de documentnaam en de tag <code class="language-plaintext highlighter-rouge">full_name</code> in het document in te vullen.</p> <h3 id="de-http-module-gebruiken-om-de-bestandsinhoud-op-te-halen">2. De HTTP-Module Gebruiken om de Bestandsinhoud op te Halen</h3> <p>Nadat het document is gegenereerd, gebruikt u de <a href="https://www.make.com/en/help/tools/http" target="_blank" rel="noopener">HTTP-module</a> in Make om de inhoud van het gegenereerde PDF-bestand op te halen. Deze module haalt het ticket op bij DocuGenerate, klaar om via e-mail te worden verzonden.</p> <p><img src="https://www.docugenerate.com/assets/posts/009-tickets-barcode-make/http-get-document.png" alt="De HTTP-module gebruiken om de gegenereerde bestandsinhoud op te halen"/></p> <h3 id="de-action-send-an-email-instellen-in-make">3. De Action “Send an Email” Instellen in Make</h3> <p>Configureer vervolgens de action “Send an Email” van de officiële <a href="https://www.make.com/en/integrations/email?utm_source=docugenerate-app&amp;utm_medium=partner&amp;utm_campaign=docugenerate-app-partner-program" target="_blank" rel="noopener">Email-app</a>. Deze action verstuurt de gegenereerde ticket-PDF naar het e-mailadres van de klant. Zorg ervoor dat u de inhoud van de e-mail aanpast om evenementdetails en andere relevante informatie op te nemen.</p> <p><img src="https://www.docugenerate.com/assets/posts/009-tickets-barcode-make/send-email.png" alt="De action &quot;Send an Email&quot; instellen in Make"/></p> <p>De waarde van <strong>To Email Address</strong> wordt ingevuld met de eigenschap <code class="language-plaintext highlighter-rouge">customer_details: email</code> uit de Stripe-eventpayload die is ontvangen door de <a href="#een-webhook-maken-voor-checkout-session-completed">webhook</a> na een succesvolle betaling.</p> <p>Wat de <strong>Attachment</strong> betreft, de waarde hiervan wordt geleverd door de action <strong>HTTP - Get a file</strong> <a href="#de-http-module-gebruiken-om-de-bestandsinhoud-op-te-halen">die eerder is geconfigureerd</a>.</p> <p>Voor een geavanceerdere e-mailmarketingoplossing kunt u overwegen <a href="https://www.mailmodo.com/" target="_blank" rel="nofollow noopener">Mailmodo</a> te gebruiken als alternatief voor de generieke Email-app in Make. Met de <a href="https://www.make.com/en/integrations/mailmodo?utm_source=docugenerate-app&amp;utm_medium=partner&amp;utm_campaign=docugenerate-app-partner-program" target="_blank" rel="nofollow noopener">Make-app</a> van Mailmodo kunt u eenvoudig interactieve, dynamische e-mails maken en verzenden rechtstreeks vanuit uw workflow. Deze optie is bijzonder nuttig als u functies zoals AMP-e-mails, tracking, of analytics wilt integreren.</p> <h3 id="het-volledige-make-scenario">4. Het Volledige Make-Scenario</h3> <p>De visuele weergave van het volledige scenario toont hoe elke stap met elkaar verbonden is, voor een soepele doorstroming van data en acties. Elke module in het scenario speelt een cruciale rol:</p> <ul> <li>De trigger <strong>Watch Events</strong> controleert Stripe op voltooide checkouts.</li> <li>De action <strong>Generate a Document</strong> maakt het ticket met het DocuGenerate-sjabloon.</li> <li>De action <strong>Get a File</strong> haalt het gegenereerde PDF-ticket op.</li> <li>De action <strong>Send an Email</strong> bezorgt het ticket aan de klant.</li> </ul> <p><img src="https://www.docugenerate.com/assets/posts/009-tickets-barcode-make/make-scenario.gif" alt="Het volledige Make-scenario"/></p> <p>Zodra het scenario wordt geactiveerd en het ticket is gegenereerd, ontvangt de klant een e-mail met het ticket als bijlage. Dit geautomatiseerde proces zorgt ervoor dat klanten hun tickets snel en zonder enige handmatige tussenkomst ontvangen.</p> <p><img src="https://www.docugenerate.com/assets/posts/009-tickets-barcode-make/email-ticket.png" alt="E-mail met het gegenereerde PDF-ticket als bijlage"/></p> <p>Hier is een voorbeeld van een gegenereerd ticket, dat u <a href="https://www.docugenerate.com/assets/posts/009-tickets-barcode-make/Ticket for Charlie Bucket.pdf">hier kunt downloaden</a> als u geïnteresseerd bent.</p> <p><img src="https://www.docugenerate.com/assets/posts/009-tickets-barcode-make/Ticket for Charlie Bucket.png" alt="Voorbeeld van gegenereerd PDF-ticket"/></p> <h2 id="conclusie">Conclusie</h2> <p>Door deze gids te volgen, kunt u het volledige proces van het maken en verzenden van evenemententickets met barcodes automatiseren met Make. Dit bespaart niet alleen tijd, maar zorgt ook voor een soepele en professionele ervaring voor uw evenementbezoekers. De integratie van Stripe, DocuGenerate, en Make biedt een krachtige oplossing om ticketbeheer voor elk evenement te stroomlijnen.</p> <p>Het automatiseren van ticketgeneratie en -bezorging verbetert de efficiëntie en vermindert fouten, waardoor het eenvoudiger wordt om uw evenementen te beheren. Bovendien verbetert het de klantervaring door directe toegang tot tickets te bieden en ervoor te zorgen dat ze alle benodigde informatie binnen handbereik hebben.</p> <h3 id="bronnen">Bronnen</h3> <ul> <li>De <a href="https://buy.stripe.com/test_8wM3eEcTF0Jxb2oeUV" target="_blank" rel="nofollow noopener">Payment Link</a> voor het testen van de productaankoop.</li> <li>De <a href="https://www.docugenerate.com/assets/posts/009-tickets-barcode-make/Event Ticket Template.docx">Event Ticket Template</a> die in deze tutorial is gebruikt.</li> <li>Een voorbeeld <a href="https://www.docugenerate.com/assets/posts/009-tickets-barcode-make/Ticket for Charlie Bucket.pdf" target="_blank">PDF-ticket</a> gegenereerd met dit scenario.</li> </ul>]]></content> <author> <name>DocuGenerate</name> <email>support@docugenerate.com</email> </author> <category term="Tickets"/> <category term="Make"/> <category term="No-Code"/> <summary type="html"><![CDATA[Automatiseer het maken van evenemententickets met barcodes met Make. Door Stripe te integreren voor betalingsverwerking en DocuGenerate voor PDF-generatie, kunt u een scenario ontwerpen dat aangepaste tickets maakt en per e-mail naar uw klanten verzendt.]]></summary> <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.docugenerate.com/assets/posts/009-tickets-barcode-make/cover-image.png"/> <media:content medium="image" url="https://www.docugenerate.com/assets/posts/009-tickets-barcode-make/cover-image.png" xmlns:media="http://search.yahoo.com/mrss/"/> </entry> <entry> <title type="html">Automatiseer Contracten met Zapier en Google Sheets</title> <link href="https://www.docugenerate.com/nl/blog/automatiseer-contracten-met-zapier-en-google-sheets/" rel="alternate" type="text/html" title="Automatiseer Contracten met Zapier en Google Sheets"/> <published>2024-05-24T00:00:00+00:00</published> <updated>2024-05-24T00:00:00+00:00</updated> <id>https://www.docugenerate.com/nl/blog/automatiseer-contracten-met-zapier-en-google-sheets</id> <content type="html" xml:base="https://www.docugenerate.com/nl/blog/automatiseer-contracten-met-zapier-en-google-sheets/"><![CDATA[<h2 id="introductie">Introductie</h2> <p>In de snelle digitale wereld van vandaag bespaart het automatiseren van repetitieve taken tijd en minimaliseert het het risico op fouten. Dit geldt vooral voor documentgeneratie. Stel u voor dat u een spreadsheet vol data heeft en met minimale inspanning automatisch professionele documenten kunt genereren. In deze tutorial laten we zien hoe u dit kunt bereiken met drie krachtige tools: Google Sheets, Zapier, en DocuGenerate.</p> <p><a href="https://www.google.com/sheets/about/" target="_blank" rel="nofollow noopener">Google Sheets</a> is een veelzijdige tool voor het beheren en organiseren van data. <a href="https://zapier.com/" target="_blank" rel="nofollow noopener">Zapier</a> is een automatiseringsplatform dat uw favoriete apps verbindt, zodat ze naadloos kunnen samenwerken. <a href="https://www.docugenerate.com/">DocuGenerate</a> is gespecialiseerd in geautomatiseerde documentgeneratie, waarmee u documenten zoals facturen, contracten, en meer kunt maken.</p> <p>Deze automatiseringsopzet kan bijzonder nuttig zijn in verschillende scenario’s:</p> <ul> <li><strong>Sales en Facturering</strong>: Genereer automatisch facturen op basis van verkoopdata die is opgeslagen in Google Sheets.</li> <li><strong>HR en Werving</strong>: Maak arbeidscontracten of aanbiedingsbrieven op basis van kandidaatdata.</li> <li><strong>Juridische Documentatie</strong>: Maak juridische overeenkomsten of contracten op basis van gestructureerde data.</li> </ul> <p>Laten we meteen aan de slag gaan!</p> <h2 id="de-data-importeren-in-google-sheets">De Data Importeren in Google Sheets</h2> <p>We bouwen een scenario waarin we contracten genereren op basis van data die is opgeslagen in Google Sheets. We gebruiken de asset <a href="https://www.docugenerate.com/assets/templates/contracts/accounting/Accounting Contract.zip">Accounting Contract</a> uit de Sjabloonbibliotheek van DocuGenerate, die een Word-sjabloon voor het contract en een voorbeelddataset in Excel-formaat bevat.</p> <p>Eerst moeten we ons Excel-bestand met de voorbeelddata importeren in Google Sheets. Open Google Sheets, maak een nieuwe spreadsheet aan, en klik op <strong>File -&gt; Import</strong>.</p> <p><img src="https://www.docugenerate.com/assets/posts/008-zapier-google-sheets/new-sheet-import.png" alt="De optie File -&gt; Import selecteren in Google Sheets"/></p> <p>Kies het tabblad <strong>Upload</strong>, selecteer vervolgens en upload het Excel-bestand <a href="https://www.docugenerate.com/assets/templates/contracts/accounting/Accounting Contract.xlsx">Accounting Contract.xlsx</a>.</p> <p><img src="https://www.docugenerate.com/assets/posts/008-zapier-google-sheets/import-excel-to-google-sheet.gif" alt="Excel-bestand importeren in Google Sheets"/></p> <p>Nadat het uploaden is voltooid, zou u uw data in Google Sheets moeten zien. Geef de spreadsheet een naam, bijvoorbeeld <strong>Accounting Contract</strong>, en u bent klaar!</p> <p><img src="https://www.docugenerate.com/assets/posts/008-zapier-google-sheets/accounting-spreadsheet-v2.png" alt="Nieuwe Google Sheet"/></p> <h2 id="de-google-sheets-trigger-instellen">De Google Sheets-Trigger Instellen</h2> <p>Begin met het maken van een nieuwe Zap en selecteer de app Google Sheets als startpunt. Voeg vervolgens de trigger <strong>New or Updated Spreadsheet Row in Google Sheets</strong> toe in Zapier.</p> <p><img src="https://www.docugenerate.com/assets/posts/008-zapier-google-sheets/google-sheets-event.png" alt="New or Updated Spreadsheet Row in Google Sheets-event"/></p> <p>Verbind vervolgens uw Google-account dat is gebruikt om de data in Google Sheets te importeren. Selecteer op het tabblad <strong>Trigger</strong> de Spreadsheet en Worksheet die overeenkomen met uw Google Sheets-document:</p> <p><img src="https://www.docugenerate.com/assets/posts/008-zapier-google-sheets/google-sheets-trigger.png" alt="De trigger instellen op de Google Sheets-app"/></p> <p>Ten slotte kunt u bij de stap <strong>Test</strong> controleren of de verbinding is gelukt. De lijst toont de drie meest recente records van uw data. Selecteer er een en klik op <strong>Continue with selected record</strong> om deze stap te voltooien. Het geselecteerde record wordt gebruikt bij het instellen van de andere apps in de Zap om een voorbeeld te tonen van de data die van de Google Sheets-app zal komen.</p> <p><img src="https://www.docugenerate.com/assets/posts/008-zapier-google-sheets/google-sheets-test.png" alt="De Google Sheets-app testen in de Zap"/></p> <h2 id="het-sjabloon-maken-in-docugenerate">Het Sjabloon Maken in DocuGenerate</h2> <p>Log in op DocuGenerate en maak een nieuw sjabloon met het voorbeeldbestand <a href="https://www.docugenerate.com/assets/templates/contracts/accounting/Accounting Contract.docx">Accounting Contract.docx</a>. Volg de gids in ons <a href="https://www.docugenerate.com/nl/hulp/articles/hoe-maak-ik-een-nieuw-sjabloon-aan/">Hulpcentrum</a> als u hulp nodig heeft. Uw scherm zou er ongeveer zo uit moeten zien:</p> <p><img src="https://www.docugenerate.com/assets/posts/008-zapier-google-sheets/accounting-contract-template.png" alt="Nieuw sjabloon in DocuGenerate"/></p> <h2 id="de-action-generate-document-instellen">De Action “Generate Document” Instellen</h2> <p>Zoek naar de <a href="https://zapier.com/apps/docugenerate/integrations" target="_blank" rel="noopener">DocuGenerate-app</a> en voeg deze toe aan de Zap. Selecteer vervolgens de action <strong>Generate Document</strong>. Voor meer informatie over het verbinden van Zapier met DocuGenerate, bekijkt u de gids in ons <a href="https://www.docugenerate.com/nl/hulp/articles/documentgeneratie-automatiseren-met-zapier/">Hulpcentrum</a>.</p> <p><img src="https://www.docugenerate.com/assets/posts/008-zapier-google-sheets/generate-document-action-v3.png" alt="De action Generate Document toevoegen aan de Zap"/></p> <p>Nadat u uw DocuGenerate-account heeft verbonden met Zapier, moet u de aanroepparameters configureren op het tabblad <strong>Action</strong>. Selecteer in de vervolgkeuzelijst het sjabloon <strong>Accounting Contract</strong> dat is gemaakt in de <a href="#het-sjabloon-maken-in-docugenerate">vorige stap</a>. Geef een <strong>Name</strong> op, zoals <code class="language-plaintext highlighter-rouge">Contract for [Client Name]</code>, waarbij <code class="language-plaintext highlighter-rouge">[Client Name]</code> een dynamisch veld is dat door Zapier wordt ingevoegd tijdens de API-aanroep naar DocuGenerate. Voor het formaat kunt u <strong>PDF</strong> kiezen.</p> <p>Bij het selecteren van het sjabloon wordt de parameter <strong>Data</strong> vooraf ingevuld met een leeg JSON-object dat overeenkomt met de merge-tags in het sjabloon. Voor elke sleutel moet u de waarden koppelen aan de Google Sheet-app. Zorg ervoor dat u de dubbele aanhalingstekens rond elke waarde behoudt, anders is de JSON ongeldig en mislukt de API-aanroep.</p> <p><img src="https://www.docugenerate.com/assets/posts/008-zapier-google-sheets/generate-document-params-v2.png" alt="De parameters van de action Generate Document instellen"/></p> <p>Neem bijvoorbeeld de eerste sleutel, dit is de juiste manier om het te doen:<br/> <code class="language-plaintext highlighter-rouge">"Effective Date": "1. Effective Date 12/13/2023"</code><br/> Dit zou daarentegen onjuist zijn, omdat de dubbele aanhalingstekens ontbreken:<br/> <code class="language-plaintext highlighter-rouge">"Effective Date": 1. Effective Date 12/13/2023</code></p> <p>Nadat de koppeling is voltooid, kunt u deze stap testen. Als alles correct is ingesteld, is de API-aanroep succesvol en ziet u het JSON-antwoord van de API van DocuGenerate:</p> <p><img src="https://www.docugenerate.com/assets/posts/008-zapier-google-sheets/generate-document-test-v2.png" alt="De action Generate Document testen"/></p> <p>U bent helemaal klaar! Klik op de knop <strong>Publish</strong> om uw Zap op te slaan en te publiceren.</p> <h2 id="verder-gaan-meerregelige-gegevenswaarden-verwerken">Verder Gaan: Meerregelige Gegevenswaarden Verwerken</h2> <p>Soms zijn de waarden uit de gegevensbron, in dit geval de Google Sheet, meerregelige tekenreeksen. Dit is meestal niet het geval, aangezien de meeste tekstwaarden uit één regel bestaan. Maar het is het beste om deze uitzondering te verwerken om problemen te voorkomen tijdens het uitvoeren van de Zap.</p> <p>Beschouw bijvoorbeeld dezelfde dataset, maar met het <code class="language-plaintext highlighter-rouge">Client Address</code> in de laatste rij gewijzigd in een meerregelige waarde:</p> <div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>83902 Karstens Junction
Suite C
</code></pre></div></div> <p><img src="https://www.docugenerate.com/assets/posts/008-zapier-google-sheets/multi-line-data-v2.png" alt="Dataset met meerregelige waarden"/></p> <p>Als we de Zap opnieuw zouden testen met dit bijgewerkte record, zou de stap Generate Document mislukken met de volgende foutmelding:</p> <div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>data must be a valid JSON object or array. Bad control character in string literal in 
JSON at position 199 while parsing near "...02 Karstens Junction Suite C", "End Da..."
</code></pre></div></div> <p>En zo zou het eruitzien in de interface van Zapier:</p> <p><img src="https://www.docugenerate.com/assets/posts/008-zapier-google-sheets/invalid-json-error-v2.png" alt="Generate Document-fout: data must be a valid JSON object or array"/></p> <p>Om dit probleem op te lossen, moeten we een nieuwe stap toevoegen aan onze Zap om de waarde van <code class="language-plaintext highlighter-rouge">Client Address</code> op te maken. Voeg de app <a href="https://zapier.com/apps/formatter/help" target="_blank" rel="nofollow noopener">Formatter by Zapier</a> toe vóór de stap <strong>Generate Document</strong> en kies het event <strong>Text</strong>.</p> <p><img src="https://www.docugenerate.com/assets/posts/008-zapier-google-sheets/text-formatter-action.png" alt="De Text Formatter by Zapier instellen"/></p> <p>Selecteer vervolgens de action <strong>Replace</strong> en kies voor de invoer het veld <code class="language-plaintext highlighter-rouge">Client Address</code>. Voer voor de waarde <strong>Find</strong> <code class="language-plaintext highlighter-rouge">[:newline:]</code> in, wat overeenkomt met regeleindetekens. En voer voor de waarde <strong>Replace</strong> <code class="language-plaintext highlighter-rouge">\n</code> in. Hiermee worden alle regeleindes in de tekst vervangen door het teken <code class="language-plaintext highlighter-rouge">\n</code>.</p> <p>Voor meer informatie over het vinden, vervangen, of splitsen van speciale tekens, bekijkt u dit <a href="https://help.zapier.com/hc/en-us/articles/8496278339725-Find-and-replace-values-in-your-Zaps" target="_blank" rel="nofollow noopener">uitgebreide artikel</a> op Zapier. Deze gids biedt uitgebreide instructies en voorbeelden over hoe u verschillende tekstopmaaktaken in Zapier kunt uitvoeren, zodat uw automatiseringsworkflows soepel blijven werken, zelfs bij complexe tekstdata.</p> <p><img src="https://www.docugenerate.com/assets/posts/008-zapier-google-sheets/text-formatter-params.png" alt="Regeleindetekens vinden en vervangen door het teken \n"/></p> <p>Verder naar de stap <strong>Test</strong>. Zoals u kunt zien, wordt de waarde succesvol vervangen door:</p> <div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>83902 Karstens Junction\nSuite C
</code></pre></div></div> <p><img src="https://www.docugenerate.com/assets/posts/008-zapier-google-sheets/text-formatter-test.gif" alt="De action Text Formatter succesvol testen"/></p> <p>Ten slotte moeten we de action <strong>Generate Document</strong> bijwerken om de opgemaakte waarde te gebruiken voor het veld <code class="language-plaintext highlighter-rouge">Client Address</code>. Op deze manier gebruiken we niet langer rechtstreeks de waarde uit de Google Sheet, maar de uitvoer van de stap <strong>Formatter</strong>, die het probleem met de regeleindes oplost.</p> <p><img src="https://www.docugenerate.com/assets/posts/008-zapier-google-sheets/generate-document-update.png" alt="De opgemaakte waarde gebruiken in de action Generate Document"/></p> <p>We hebben de opmaak slechts voor één veld toegepast, maar u kunt extra opmaakstappen toevoegen als andere waarden uit de dataset ook meerregelige tekenreeksen kunnen zijn.</p> <p>Met deze wijziging mislukt de documentgeneratie niet meer wanneer we de laatste stap testen, en wordt het document succesvol gegenereerd.</p> <p><img src="https://www.docugenerate.com/assets/posts/008-zapier-google-sheets/generate-document-success.gif" alt="Het document zonder fouten genereren"/></p> <h2 id="conclusie">Conclusie</h2> <p>Het automatiseren van documentgeneratie met Google Sheets, Zapier, en DocuGenerate kan uw workflow aanzienlijk stroomlijnen. Deze opzet bespaart niet alleen tijd, maar vermindert ook fouten en zorgt voor consistentie in uw documenten. Of u nu facturen, contracten, of certificaten genereert, deze krachtige automatisering kan het allemaal aan.</p> <p>Door deze tools te integreren, kunt u zich richten op belangrijkere taken terwijl uw documenten naadloos op de achtergrond worden gemaakt. We moedigen u aan om deze opzet te proberen en de mogelijkheden te verkennen van wat u kunt automatiseren met DocuGenerate en Zapier.</p> <h3 id="bronnen">Bronnen</h3> <ul> <li>Het <a href="https://www.docugenerate.com/assets/templates/contracts/accounting/Accounting Contract.docx">Accounting Contract</a> Word-sjabloon en het <a href="https://www.docugenerate.com/assets/templates/contracts/accounting/Accounting Contract.xlsx">Excel-bestand</a> met de data die in deze tutorial is gebruikt.</li> <li>Het artikel <a href="https://help.zapier.com/hc/en-us/articles/8496278339725-Find-and-replace-values-in-your-Zaps" target="_blank" rel="nofollow noopener">Modify text formats in Zaps</a> op Zapier, waarnaar wordt verwezen in de sectie <a href="#verder-gaan-meerregelige-gegevenswaarden-verwerken">Meerregelige Gegevenswaarden Verwerken</a>.</li> </ul>]]></content> <author> <name>DocuGenerate</name> <email>support@docugenerate.com</email> </author> <category term="Contracts"/> <category term="Zapier"/> <category term="No-Code"/> <summary type="html"><![CDATA[Leer hoe u contractgeneratie automatiseert met Zapier, Google Sheets, en DocuGenerate. Deze gids leidt u door het opzetten van een workflow om spreadsheetrijen om te zetten in opgemaakte documenten, met speciale aandacht voor het verwerken van meerregelige gegevenswaarden.]]></summary> <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.docugenerate.com/assets/posts/008-zapier-google-sheets/cover-image.png"/> <media:content medium="image" url="https://www.docugenerate.com/assets/posts/008-zapier-google-sheets/cover-image.png" xmlns:media="http://search.yahoo.com/mrss/"/> </entry> <entry> <title type="html">Documenten Genereren vanuit Airtable met een Scripting Extensie</title> <link href="https://www.docugenerate.com/nl/blog/documenten-genereren-vanuit-airtable-met-een-scripting-extensie/" rel="alternate" type="text/html" title="Documenten Genereren vanuit Airtable met een Scripting Extensie"/> <published>2024-04-19T00:00:00+00:00</published> <updated>2024-04-19T00:00:00+00:00</updated> <id>https://www.docugenerate.com/nl/blog/documenten-genereren-vanuit-airtable-met-een-scripting-extensie</id> <content type="html" xml:base="https://www.docugenerate.com/nl/blog/documenten-genereren-vanuit-airtable-met-een-scripting-extensie/"><![CDATA[<h2 id="aan-de-slag-met-airtable">Aan de Slag met Airtable</h2> <p>In de huidige werkprocessen moeten managers soms omgaan met een veelheid aan tools, wat de productiviteit vermindert en het risico op fouten vergroot bij het overzetten van data van de ene tool naar de andere. Het is daarom in hun belang om de juiste combinatie van tools te vinden, voor een eenvoudig en efficiënt proces.</p> <p>Daarom maken we in dit artikel een handige workflow waarmee u automatisch documenten kunt genereren vanuit uw Airtable-interface, zonder dat u uw data van de ene applicatie naar de andere hoeft over te zetten. Daarnaast gebruikt u een Word-sjabloon, dat eenvoudig kan worden bewerkt met de tekstverwerkingssoftware waarmee u het meest vertrouwd bent.</p> <p>Dit zijn de diensten die nodig zijn om deze workflow te creëren:</p> <ol> <li> <p><a href="https://airtable.com/" target="_blank" rel="nofollow noopener">Airtable</a>: is een no-code samenwerkingsplatform waarmee gebruikers eenvoudig kunnen interageren met een database, onder meer via een spreadsheet-achtige interface, webformulieren voor invoer, en gebruiksvriendelijke datarapporten en datavisualisatie-interfaces voor uitvoer.</p> </li> <li> <p><a href="https://www.docugenerate.com">DocuGenerate</a>: is een webapp en API ontworpen voor het genereren van documenten op basis van Word-sjablonen en JSON-data, door merge-tags in sjablonen te vervangen door dynamische data.</p> </li> </ol> <p>Dit artikel is voornamelijk bedoeld voor mensen die al minimale kennis hebben van de basisfuncties van Airtable. We gaan niet in detail in op de functionaliteiten ervan, en richten ons alleen op de aspecten die nodig zijn om ons proces in te stellen.</p> <h2 id="airtables-page-designer-gebruiken">Airtable’s Page Designer Gebruiken</h2> <p>U kunt de <a href="https://support.airtable.com/docs/page-designer-extension-overview" target="_blank" rel="nofollow noopener">page designer-extensie</a> van Airtable gebruiken om uw eigen aangepaste sjabloon te maken voor facturen, visitekaartjes, catalogi, en meer — allemaal met de data rechtstreeks uit uw records. Zodra alles er mooi uitziet, kunt u uw records afdrukken of omzetten in PDF’s.</p> <p><img src="https://www.docugenerate.com/assets/posts/007-airtable-scripting-extension/page-designer-v2.png" alt="Page designer-extensie"/></p> <p>Er zijn nog een paar andere beperkingen om rekening mee te houden voor ons gebruiksgeval:</p> <ul> <li>De bestanden worden één voor één gegenereerd.</li> <li>Er kunnen alleen PDF-bestanden worden gegenereerd.</li> <li>De gegenereerde bestanden kunnen niet worden opgeslagen in uw Airtable-database.</li> </ul> <p>De lay-outeditor van de page designer is niet slecht, maar u zult nooit zo productief zijn als met uw gebruikelijke tekstverwerkingssoftware. Bovendien moet u opnieuw beginnen als u een nieuwe lay-out wilt maken in een andere base.</p> <h2 id="het-word-sjabloon-maken">Het Word-Sjabloon Maken</h2> <p>Gezien de beperkingen van de page designer, gebruiken we in plaats daarvan een Word-sjabloon. Een sjabloon is een document dat <a href="https://www.docugenerate.com/nl/hulp/articles/wat-zijn-merge-tags/">merge-tags</a> bevat, wat placeholders zijn die bedoeld zijn om te worden vervangen door dynamische data. Hiermee kunt u eenvoudig documenten maken die visueel erg op elkaar lijken, maar die verschillen op basis van de dataset die wordt gebruikt om de placeholders in te vullen.</p> <p>Ons sjabloon is een <a href="https://www.docugenerate.com/assets/posts/007-airtable-scripting-extension/Certificate of Completion.docx">licht aangepaste versie</a> van het sjabloon Certificate of Completion uit de <a href="https://www.docugenerate.com/nl/sjablonen/#certificaten">Sjabloonbibliotheek</a>. De belangrijkste wijzigingen waren de <strong>toevoeging van een profielfoto</strong> om onze functie voor <a href="https://www.docugenerate.com/nl/hulp/articles/afbeeldingen-toevoegen-aan-een-sjabloon/">afbeeldingen vergroten/verkleinen</a> te benadrukken, en de <strong>integratie van een vaardighedenlijst</strong>, om het gebruik van <a href="https://support.airtable.com/docs/linked-record-field" target="_blank" rel="nofollow noopener">gekoppelde recordvelden</a> van Airtable te demonstreren, samen met de <a href="https://www.docugenerate.com/nl/hulp/articles/lijsten-toevoegen-aan-een-sjabloon/">lijstsyntax</a> van DocuGenerate.</p> <p><img src="https://www.docugenerate.com/assets/posts/007-airtable-scripting-extension/Certificate of Completion.png" alt="Sjabloon Certificate of Completion"/></p> <p>Dit sjabloon bevat de volgende tags: <code class="language-plaintext highlighter-rouge">{Company_Name}</code>, <code class="language-plaintext highlighter-rouge">{First_Name}</code>, <code class="language-plaintext highlighter-rouge">{Last_Name}</code>, <code class="language-plaintext highlighter-rouge">{Program}</code>, <code class="language-plaintext highlighter-rouge">{Photo}</code>, <code class="language-plaintext highlighter-rouge">{Start_Date}</code>, <code class="language-plaintext highlighter-rouge">{End_Date}</code>, <code class="language-plaintext highlighter-rouge">{Certificate_Date}</code> en <code class="language-plaintext highlighter-rouge">{Skills}</code> (met de volgende syntax om een vaardighedenlijst te maken):</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>{#Skills}
- {.}
{/Skills}
</code></pre></div></div> <p><strong>💡 Verder gaan</strong> De <a href="https://www.docugenerate.com/nl/hulp/articles/meer-mogelijkheden-met-uitgebreide-syntax/">uitgebreide syntax</a> is ingeschakeld voor dit sjabloon om het formaat van afbeeldingen aan te kunnen passen. U moet <a href="https://www.docugenerate.com/nl/hulp/articles/meer-mogelijkheden-met-uitgebreide-syntax/#beperking-van-witruimte">witruimte</a> in uw tagnamen vermijden om dit te kunnen gebruiken. Daarom gebruiken tagnamen die uit twee woorden bestaan een underscore ertussen.</p> <h2 id="de-database-ontwerpen">De Database Ontwerpen</h2> <p>Voor ons voorbeeld zijn we begonnen met het sjabloon en hebben we vervolgens een passende databasestructuur gemaakt. Een echt proces verloopt natuurlijk andersom: aangezien uw data waarschijnlijk al consistent is, maakt u een sjabloon dat aansluit bij uw data en uw basestructuur om de documenten te genereren die u nodig heeft, en niet een databasestructuur op basis van uw sjabloon.</p> <p>Onze base bevat hier drie tabellen:</p> <ul> <li> <p>De tabel <strong>Skills</strong> bevat de vaardigheden die zijn opgedaan in de verschillende programma’s, gesorteerd op categorie.</p> </li> <li> <p>De tabel <strong>Programs</strong> bevat data over elk programma: naam, startdatum, einddatum, en de opgedane vaardigheden (veld gekoppeld aan de tabel <strong>Skills</strong>).</p> </li> <li> <p>De tabel <strong>Attendees</strong> bevat data over elke deelnemer aan de verschillende programma’s, zoals voornaam, achternaam en foto, en ook een veldkoppeling naar het gevolgde programma, waaruit verschillende lookup-velden worden gemaakt om de data van het programma rechtstreeks te benaderen in de tabel <strong>Attendees</strong>. Dit is nodig omdat het script dat wordt gebruikt om documenten te genereren momenteel slechts <strong>één enkele tabelselectie</strong> toestaat, dus alle data moet aanwezig zijn in deze tabel.</p> </li> </ul> <p><img src="https://www.docugenerate.com/assets/posts/007-airtable-scripting-extension/base-structure.png" alt="Volledige basestructuur"/></p> <p>Let op: de <strong>certificaatdatum</strong> die nodig is in het sjabloon wordt niet opgeslagen in de data. Maakt u zich daar geen zorgen over, deze wordt ingevuld met <a href="#documenten-genereren-en-opslaan">de datum van vandaag</a> wanneer het document wordt gegenereerd.</p> <p>Als u wilt zien hoe onze base eruitziet, of ermee wilt experimenteren, kunt u eenvoudig de <a href="https://airtable.com/appLSLnJfZrkdAqz8/shruEBCW3StTQjxIk/tblej46yoReMAFar1/viw3bonO9CVF4TPj0" target="_blank" rel="noopener">DocuGenerate-scripttrainingsdata</a> verkennen.</p> <h2 id="de-database-vullen">De Database Vullen</h2> <p>Onze base is al gevuld met data waarmee u onze workflow kunt testen, maar in een daadwerkelijk proces heeft u een mechanisme nodig om deze data te verzamelen. Een van de eenvoudigste manieren om dit te bereiken, is het maken van formulieren die gebruikers zelf rechtstreeks kunnen invullen.</p> <p>Een formulier is in wezen een webpagina die u toegankelijk maakt voor iedereen, met verschillende invoervelden gekoppeld aan de velden van uw tabel, zodat het invullen van het formulier een nieuw record in uw tabel aanmaakt. Het proces voor het maken van een formulier voor de tabel <strong>Attendees</strong> is bijvoorbeeld vrij eenvoudig:</p> <ul> <li><strong>Maak een nieuw formulier</strong> in de zijbalk Views.</li> <li><strong>Upload een logo</strong> en/of een omslagafbeelding voor uw formulier.</li> <li><strong>Kies welke velden</strong> u de gebruiker wilt laten invullen.</li> <li><strong>Geef voor elk veld</strong> aan of het verplicht is, en voeg vervolgens een titel en beschrijving toe.</li> <li><strong>Publiceer uw formulier</strong> om een openbare URL te krijgen die u kunt delen.</li> </ul> <p><img src="https://www.docugenerate.com/assets/posts/007-airtable-scripting-extension/create-form.gif" alt="Een formulier maken"/></p> <p><strong>💡 Verder gaan</strong> Voor meer informatie over het bouwen en delen van formulieren in Airtable, raadpleegt u de <a href="https://support.airtable.com/docs/building-and-sharing-forms-in-airtable" target="_blank" rel="nofollow noopener">officiële documentatie</a>.</p> <h2 id="de-scripting-extensie-instellen">De Scripting Extensie Instellen</h2> <p>Nu ons sjabloon en onze base klaar zijn, stellen we het script in dat wordt gebruikt om de documenten te genereren. Hiervoor moet u een <a href="https://support.airtable.com/docs/en/scripting-extension-overview" target="_blank" rel="nofollow noopener">Scripting Extension</a> toevoegen aan een van uw dashboards. Vergeet niet dat <strong>extensies alleen beschikbaar zijn in betaalde plannen</strong>.</p> <p><img src="https://www.docugenerate.com/assets/posts/007-airtable-scripting-extension/add-scripting-extension.png" alt="Scripting-extensie toevoegen"/></p> <p>Vervolgens kopieert u deze <a href="https://www.docugenerate.com/assets/posts/007-airtable-scripting-extension/docugenerate-script.txt" target="_blank">JavaScript-code</a> en plakt u deze in de scripting-extensie:</p> <div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// Click the "gear" icon in the top right to view settings</span>
<span class="kd">const</span> <span class="nx">config</span> <span class="o">=</span> <span class="nx">input</span><span class="p">.</span><span class="nf">config</span><span class="p">({</span>
    <span class="na">title</span><span class="p">:</span> <span class="dl">'</span><span class="s1">Generate Document</span><span class="dl">'</span><span class="p">,</span>
    <span class="na">description</span><span class="p">:</span> <span class="dl">'</span><span class="s1">Automate document generation using DocuGenerate</span><span class="dl">'</span><span class="p">,</span>
    <span class="na">items</span><span class="p">:</span> <span class="p">[</span>
        <span class="nx">input</span><span class="p">.</span><span class="nx">config</span><span class="p">.</span><span class="nf">text</span><span class="p">(</span><span class="dl">'</span><span class="s1">api_key</span><span class="dl">'</span><span class="p">,</span> <span class="p">{</span>
            <span class="na">label</span><span class="p">:</span> <span class="dl">'</span><span class="s1">API Key</span><span class="dl">'</span><span class="p">,</span>
             <span class="na">description</span><span class="p">:</span> <span class="dl">'</span><span class="s1">Get your unique key from the Settings page in DocuGenerate</span><span class="dl">'</span>
        <span class="p">}),</span>
        <span class="nx">input</span><span class="p">.</span><span class="nx">config</span><span class="p">.</span><span class="nf">text</span><span class="p">(</span><span class="dl">'</span><span class="s1">template_id</span><span class="dl">'</span><span class="p">,</span> <span class="p">{</span>
            <span class="na">label</span><span class="p">:</span> <span class="dl">'</span><span class="s1">Template ID</span><span class="dl">'</span><span class="p">,</span>
            <span class="na">description</span><span class="p">:</span> <span class="dl">"</span><span class="s2">ID of the template to use for generating the document</span><span class="dl">"</span>
        <span class="p">}),</span>
        <span class="nx">input</span><span class="p">.</span><span class="nx">config</span><span class="p">.</span><span class="nf">table</span><span class="p">(</span><span class="dl">'</span><span class="s1">table</span><span class="dl">'</span><span class="p">,</span> <span class="p">{</span>
            <span class="na">label</span><span class="p">:</span> <span class="dl">'</span><span class="s1">Table</span><span class="dl">'</span><span class="p">,</span>
            <span class="na">description</span><span class="p">:</span> <span class="dl">'</span><span class="s1">Source table for your records</span><span class="dl">'</span>
        <span class="p">}),</span>
        <span class="nx">input</span><span class="p">.</span><span class="nx">config</span><span class="p">.</span><span class="nf">field</span><span class="p">(</span><span class="dl">'</span><span class="s1">storage_field</span><span class="dl">'</span><span class="p">,</span> <span class="p">{</span>
            <span class="na">label</span><span class="p">:</span> <span class="dl">'</span><span class="s1">Storage</span><span class="dl">'</span><span class="p">,</span>
            <span class="na">description</span><span class="p">:</span> <span class="dl">'</span><span class="s1">Field for storing the generated documents (URL or Attachment)</span><span class="dl">'</span><span class="p">,</span>
            <span class="na">parentTable</span><span class="p">:</span> <span class="dl">'</span><span class="s1">table</span><span class="dl">'</span><span class="p">,</span>
        <span class="p">}),</span>
        <span class="nx">input</span><span class="p">.</span><span class="nx">config</span><span class="p">.</span><span class="nf">select</span><span class="p">(</span><span class="dl">'</span><span class="s1">output_format</span><span class="dl">'</span><span class="p">,</span> <span class="p">{</span>
            <span class="na">label</span><span class="p">:</span> <span class="dl">'</span><span class="s1">Format</span><span class="dl">'</span><span class="p">,</span>
            <span class="na">description</span><span class="p">:</span> <span class="dl">'</span><span class="s1">Output format of the generated documents</span><span class="dl">'</span><span class="p">,</span>
            <span class="na">options</span><span class="p">:</span> <span class="p">[</span>
                <span class="p">{</span><span class="na">label</span><span class="p">:</span> <span class="dl">'</span><span class="s1">PDF (.pdf)</span><span class="dl">'</span><span class="p">,</span> <span class="na">value</span><span class="p">:</span> <span class="dl">'</span><span class="s1">.pdf</span><span class="dl">'</span><span class="p">},</span>
                <span class="p">{</span><span class="na">label</span><span class="p">:</span> <span class="dl">'</span><span class="s1">Microsoft Word (.docx)</span><span class="dl">'</span><span class="p">,</span> <span class="na">value</span><span class="p">:</span> <span class="dl">'</span><span class="s1">.docx</span><span class="dl">'</span><span class="p">},</span>
                <span class="p">{</span><span class="na">label</span><span class="p">:</span> <span class="dl">'</span><span class="s1">Microsoft Word 2007 (.doc)</span><span class="dl">'</span><span class="p">,</span> <span class="na">value</span><span class="p">:</span> <span class="dl">'</span><span class="s1">.doc</span><span class="dl">'</span><span class="p">},</span>
                <span class="p">{</span><span class="na">label</span><span class="p">:</span> <span class="dl">'</span><span class="s1">OpenDocument Format (.odt)</span><span class="dl">'</span><span class="p">,</span> <span class="na">value</span><span class="p">:</span> <span class="dl">'</span><span class="s1">.odt</span><span class="dl">'</span><span class="p">},</span>
                <span class="p">{</span><span class="na">label</span><span class="p">:</span> <span class="dl">'</span><span class="s1">Plain Text (.txt)</span><span class="dl">'</span><span class="p">,</span> <span class="na">value</span><span class="p">:</span> <span class="dl">'</span><span class="s1">.txt</span><span class="dl">'</span><span class="p">},</span>
                <span class="p">{</span><span class="na">label</span><span class="p">:</span> <span class="dl">'</span><span class="s1">HTML (.html)</span><span class="dl">'</span><span class="p">,</span> <span class="na">value</span><span class="p">:</span> <span class="dl">'</span><span class="s1">.html</span><span class="dl">'</span><span class="p">},</span>
                <span class="p">{</span><span class="na">label</span><span class="p">:</span> <span class="dl">'</span><span class="s1">PNG (.png)</span><span class="dl">'</span><span class="p">,</span> <span class="na">value</span><span class="p">:</span> <span class="dl">'</span><span class="s1">.png</span><span class="dl">'</span><span class="p">}</span>
            <span class="p">]</span>
        <span class="p">})</span>
    <span class="p">]</span>
<span class="p">});</span>

<span class="c1">// Prompt the user to pick a record </span>
<span class="c1">// If this script is run from a button field, this will use the button's record instead</span>
<span class="kd">let</span> <span class="nx">record</span> <span class="o">=</span> <span class="k">await</span> <span class="nx">input</span><span class="p">.</span><span class="nf">recordAsync</span><span class="p">(</span><span class="dl">'</span><span class="s1">Select a record to use</span><span class="dl">'</span><span class="p">,</span> <span class="nx">config</span><span class="p">.</span><span class="nx">table</span><span class="p">);</span>

<span class="k">if </span><span class="p">(</span><span class="nx">record</span><span class="p">)</span> <span class="p">{</span>
    <span class="c1">// Customize this section to handle the selected record</span>
    <span class="c1">// You can use record.getCellValue("Field name") to access cell values from the record</span>
    <span class="nx">output</span><span class="p">.</span><span class="nf">markdown</span><span class="p">(</span><span class="s2">`Generating document for **</span><span class="p">${</span><span class="nx">record</span><span class="p">.</span><span class="nx">name</span><span class="p">}</span><span class="s2">**`</span><span class="p">);</span>

    <span class="c1">// Get the program name</span>
    <span class="kd">const</span> <span class="nx">programsTable</span> <span class="o">=</span> <span class="nx">base</span><span class="p">.</span><span class="nf">getTable</span><span class="p">(</span><span class="dl">"</span><span class="s2">Programs</span><span class="dl">"</span><span class="p">);</span>
    <span class="kd">const</span> <span class="nx">programRecord</span> <span class="o">=</span> <span class="nx">record</span><span class="p">.</span><span class="nf">getCellValue</span><span class="p">(</span><span class="dl">"</span><span class="s2">Program</span><span class="dl">"</span><span class="p">)[</span><span class="mi">0</span><span class="p">];</span>
    <span class="kd">const</span> <span class="nx">program</span> <span class="o">=</span> <span class="k">await</span> <span class="nx">programsTable</span><span class="p">.</span><span class="nf">selectRecordAsync</span><span class="p">(</span><span class="nx">programRecord</span><span class="p">.</span><span class="nx">id</span><span class="p">);</span>

    <span class="c1">// Construct the data object based on the selected record's values</span>
    <span class="kd">const</span> <span class="nx">data</span> <span class="o">=</span> <span class="p">[{</span>
        <span class="dl">"</span><span class="s2">Company Name</span><span class="dl">"</span><span class="p">:</span> <span class="nx">record</span><span class="p">.</span><span class="nf">getCellValue</span><span class="p">(</span><span class="dl">"</span><span class="s2">Company_Name</span><span class="dl">"</span><span class="p">),</span>
        <span class="dl">"</span><span class="s2">First Name</span><span class="dl">"</span><span class="p">:</span> <span class="nx">record</span><span class="p">.</span><span class="nf">getCellValue</span><span class="p">(</span><span class="dl">"</span><span class="s2">First_Name</span><span class="dl">"</span><span class="p">),</span>
        <span class="dl">"</span><span class="s2">Last Name</span><span class="dl">"</span><span class="p">:</span> <span class="nx">record</span><span class="p">.</span><span class="nf">getCellValue</span><span class="p">(</span><span class="dl">"</span><span class="s2">Last_Name</span><span class="dl">"</span><span class="p">),</span>
        <span class="dl">"</span><span class="s2">Program</span><span class="dl">"</span><span class="p">:</span> <span class="nx">program</span><span class="p">?.</span><span class="nf">getCellValue</span><span class="p">(</span><span class="dl">"</span><span class="s2">Name</span><span class="dl">"</span><span class="p">),</span>
        <span class="dl">"</span><span class="s2">Start Date</span><span class="dl">"</span><span class="p">:</span> <span class="nx">record</span><span class="p">.</span><span class="nf">getCellValue</span><span class="p">(</span><span class="dl">"</span><span class="s2">Start_Date</span><span class="dl">"</span><span class="p">),</span>
        <span class="dl">"</span><span class="s2">End Date</span><span class="dl">"</span><span class="p">:</span> <span class="nx">record</span><span class="p">.</span><span class="nf">getCellValue</span><span class="p">(</span><span class="dl">"</span><span class="s2">End_Date</span><span class="dl">"</span><span class="p">),</span>
        <span class="dl">"</span><span class="s2">Certificate Date</span><span class="dl">"</span><span class="p">:</span> <span class="nx">record</span><span class="p">.</span><span class="nf">getCellValue</span><span class="p">(</span><span class="dl">"</span><span class="s2">End_Date</span><span class="dl">"</span><span class="p">)</span>
    <span class="p">}];</span>

    <span class="kd">const</span> <span class="nx">options</span> <span class="o">=</span> <span class="p">{</span>
        <span class="na">method</span><span class="p">:</span> <span class="dl">'</span><span class="s1">POST</span><span class="dl">'</span><span class="p">,</span>
        <span class="na">headers</span><span class="p">:</span> <span class="p">{</span>
            <span class="dl">'</span><span class="s1">Accept</span><span class="dl">'</span><span class="p">:</span> <span class="dl">'</span><span class="s1">application/json</span><span class="dl">'</span><span class="p">,</span>
            <span class="dl">'</span><span class="s1">Content-Type</span><span class="dl">'</span><span class="p">:</span> <span class="dl">'</span><span class="s1">application/json</span><span class="dl">'</span><span class="p">,</span>
            <span class="dl">'</span><span class="s1">Authorization</span><span class="dl">'</span><span class="p">:</span> <span class="nx">config</span><span class="p">.</span><span class="nx">api_key</span>
        <span class="p">},</span>
        <span class="na">body</span><span class="p">:</span> <span class="nx">JSON</span><span class="p">.</span><span class="nf">stringify</span><span class="p">({</span>
            <span class="na">template_id</span><span class="p">:</span> <span class="nx">config</span><span class="p">.</span><span class="nx">template_id</span><span class="p">,</span>
            <span class="na">name</span><span class="p">:</span> <span class="s2">`Certificate for </span><span class="p">${</span><span class="nx">record</span><span class="p">.</span><span class="nf">getCellValue</span><span class="p">(</span><span class="dl">"</span><span class="s2">First_Name</span><span class="dl">"</span><span class="p">)}</span><span class="s2"> </span><span class="p">${</span><span class="nx">record</span><span class="p">.</span><span class="nf">getCellValue</span><span class="p">(</span><span class="dl">"</span><span class="s2">Last_Name</span><span class="dl">"</span><span class="p">)}</span><span class="s2">`</span><span class="p">,</span>
            <span class="na">output_format</span><span class="p">:</span> <span class="nx">config</span><span class="p">.</span><span class="nx">output_format</span><span class="p">,</span>
            <span class="na">data</span><span class="p">:</span> <span class="nx">data</span>
        <span class="p">})</span>
    <span class="p">};</span>

    <span class="kd">let</span> <span class="nx">status</span><span class="p">;</span>
    <span class="kd">const</span> <span class="nx">response</span> <span class="o">=</span> <span class="k">await</span> <span class="nf">fetch</span><span class="p">(</span><span class="dl">'</span><span class="s1">https://api.docugenerate.com/v1/document</span><span class="dl">'</span><span class="p">,</span> <span class="nx">options</span><span class="p">)</span>
        <span class="p">.</span><span class="nf">then</span><span class="p">(</span><span class="nx">response</span> <span class="o">=&gt;</span> <span class="p">{</span>
            <span class="nx">status</span> <span class="o">=</span> <span class="nx">response</span><span class="p">.</span><span class="nx">status</span><span class="p">;</span>
            <span class="k">return</span> <span class="nx">response</span><span class="p">.</span><span class="nf">json</span><span class="p">();</span>
        <span class="p">})</span>
        <span class="p">.</span><span class="k">catch</span><span class="p">(</span><span class="nx">err</span> <span class="o">=&gt;</span> <span class="nx">output</span><span class="p">.</span><span class="nf">text</span><span class="p">(</span><span class="nx">err</span><span class="p">));</span>

    <span class="k">if </span><span class="p">(</span><span class="nx">status</span> <span class="o">!==</span> <span class="mi">201</span><span class="p">)</span> <span class="p">{</span>
        <span class="nx">output</span><span class="p">.</span><span class="nf">markdown</span><span class="p">(</span><span class="dl">'</span><span class="s1">Error generating document: </span><span class="dl">'</span> <span class="o">+</span> <span class="nx">response</span><span class="p">.</span><span class="nx">message</span><span class="p">);</span>
    <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
        <span class="kd">const</span> <span class="nx">storageFieldValue</span> <span class="o">=</span> <span class="p">(</span><span class="nx">config</span><span class="p">.</span><span class="nx">storage_field</span><span class="p">.</span><span class="nx">type</span> <span class="o">===</span> <span class="dl">'</span><span class="s1">multipleAttachments</span><span class="dl">'</span><span class="p">)</span> <span class="p">?</span> <span class="p">[{</span><span class="na">url</span><span class="p">:</span> <span class="nx">response</span><span class="p">.</span><span class="nx">document_uri</span><span class="p">}]</span> <span class="p">:</span> <span class="nx">response</span><span class="p">.</span><span class="nx">document_uri</span><span class="p">;</span>
        <span class="k">await</span> <span class="nx">config</span><span class="p">.</span><span class="nx">table</span><span class="p">.</span><span class="nf">updateRecordsAsync</span><span class="p">([{</span>
            <span class="na">id</span><span class="p">:</span> <span class="nx">record</span><span class="p">.</span><span class="nx">id</span><span class="p">,</span>
            <span class="na">fields</span><span class="p">:</span> <span class="p">{[</span><span class="nx">config</span><span class="p">.</span><span class="nx">storage_field</span><span class="p">.</span><span class="nx">name</span><span class="p">]:</span> <span class="nx">storageFieldValue</span><span class="p">}</span>
        <span class="p">}]);</span>
        <span class="nx">output</span><span class="p">.</span><span class="nf">markdown</span><span class="p">(</span><span class="dl">'</span><span class="s1">Document generated successfully! 🎉</span><span class="dl">'</span><span class="p">);</span>
    <span class="p">}</span>
<span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
    <span class="nx">output</span><span class="p">.</span><span class="nf">markdown</span><span class="p">(</span><span class="dl">'</span><span class="s1">No record was selected</span><span class="dl">'</span><span class="p">);</span>
<span class="p">}</span>
</code></pre></div></div> <p>Als alles goed gaat, zou u nu toegang moeten hebben tot de instellingenpagina van het script door op het tandwielicoon te klikken dat verschijnt wanneer u met de muis over de rechterbovenhoek van uw extensie beweegt. Aarzel niet om het icoon voor volledig scherm naast het instellingenicoon te gebruiken, voor beter overzicht.</p> <p><img src="https://www.docugenerate.com/assets/posts/007-airtable-scripting-extension/extension-settings.png" alt="Extensie-instellingen"/></p> <p>Dit zijn de beschikbare instellingen:</p> <ul> <li> <p><strong>API Key</strong>: uw DocuGenerate API-sleutel, die u kunt verkrijgen op uw <a href="https://app.docugenerate.com/settings" target="_blank">instellingenpagina</a> zodra u uw account heeft aangemaakt. <a href="https://www.docugenerate.com/nl/hulp/articles/waar-vind-ik-mijn-api-sleutel/">Kopieer de API-sleutel</a> eenvoudig naar het klembord door erop te klikken.</p> </li> <li> <p><strong>Template ID</strong>: de ID van uw sjabloon, die <a href="https://www.docugenerate.com/nl/hulp/articles/hoe-vind-ik-de-sjabloon-id/">u kunt kopiëren</a> van de pagina van uw sjabloon. Let op: deze verschijnt ook rechtstreeks in de URL van de pagina van uw sjabloon, in de vorm <code class="language-plaintext highlighter-rouge">https://app.docugenerate.com/templates/:template_id</code></p> </li> <li> <p><strong>Table</strong>: de tabel met de records die u gebruikt om de tags van uw sjabloon te vervangen.</p> </li> <li> <p><strong>Storage</strong>: het veld dat wordt gebruikt om het gegenereerde document op te slaan. Dit kan zowel een URL-veld zijn (waarin een link naar het document wordt opgeslagen) als een veld van het type File (waarin het daadwerkelijke bestand wordt opgeslagen).</p> </li> <li> <p><strong>Format</strong>: uitvoerformaat van het gegenereerde document. De opties zijn <code class="language-plaintext highlighter-rouge">.docx</code>, <code class="language-plaintext highlighter-rouge">.pdf</code>, <code class="language-plaintext highlighter-rouge">.doc</code>, <code class="language-plaintext highlighter-rouge">.odt</code>, <code class="language-plaintext highlighter-rouge">.txt</code>, <code class="language-plaintext highlighter-rouge">.html</code>, of <code class="language-plaintext highlighter-rouge">.png</code>.</p> </li> </ul> <p>Met al deze parameters ingesteld, zijn we nu klaar om het documentcreatieproces te automatiseren!</p> <h2 id="de-generate-knop-toevoegen">De Generate-Knop Toevoegen</h2> <p>De <a href="#de-scripting-extensie-instellen">scripting-extensie</a> wacht tot de gebruiker een specifiek record invoert om te verwerken. Maar om het de eindgebruiker gemakkelijker te maken, willen we het document eenvoudig genereren door op een knop te klikken. Hiervoor moeten we een nieuw <a href="https://support.airtable.com/docs/button-field" target="_blank" rel="nofollow noopener">Button Field</a> toevoegen, dat wordt geconfigureerd om ons script uit te voeren wanneer erop wordt geklikt. Op deze manier wordt het record waarvan de knop is aangeklikt automatisch geselecteerd voor het uitvoeren van het script.</p> <p><img src="https://www.docugenerate.com/assets/posts/007-airtable-scripting-extension/edit-generate-button.png" alt="De Generate-knop toevoegen"/></p> <h2 id="documenten-genereren-en-opslaan">Documenten Genereren en Opslaan</h2> <p>Nu alles is ingesteld, bekijken we hoe het documentgeneratieproces werkt. Wanneer u op de knop <strong>Generate</strong> klikt bij een record, voert het script verschillende acties uit:</p> <ol> <li>Het verzamelt alle benodigde data uit het huidige record.</li> <li>Het stuurt die data samen met uw sjabloon-ID naar de API van DocuGenerate.</li> <li>DocuGenerate verwerkt het verzoek en vervangt alle merge-tags door uw data.</li> <li>Het gegenereerde document wordt geretourneerd en automatisch opgeslagen in uw database.</li> </ol> <p>Het resultaat is een professioneel ogend certificaat dat klaar is om te worden gedeeld met deelnemers.</p> <p><img src="https://www.docugenerate.com/assets/posts/007-airtable-scripting-extension/docugenerate-demo.gif" alt="Certificaatgeneratie"/></p> <h2 id="verder-gaan-met-airtable-automatiseringen">Verder Gaan met Airtable-Automatiseringen</h2> <p>Hoewel ons knop-gestuurde script al behoorlijk krachtig is, kunt u documentgeneratie naar een hoger niveau tillen door het te integreren met <a href="https://support.airtable.com/docs/getting-started-with-airtable-automations" target="_blank" rel="nofollow noopener">Airtable Automations</a>. Dit maakt volledig handsfree documentworkflows mogelijk die worden geactiveerd op basis van specifieke voorwaarden in uw database.</p> <p>Hier zijn enkele krachtige automatiseringsscenario’s die u zou kunnen implementeren:</p> <ul> <li> <p><strong>Automatische Certificaatgeneratie</strong>: Genereer automatisch certificaten wanneer de status van een deelnemer verandert in “Completed” of wanneer een einddatum van een programma wordt bereikt, waardoor handmatige knopklikken overbodig worden.</p> </li> <li> <p><strong>E-mailbezorging</strong>: Stuur certificaten rechtstreeks naar deelnemers via e-mail zodra ze zijn gegenereerd, voor een naadloze ervaring voor programmadeelnemers.</p> </li> <li> <p><strong>Batchverwerking</strong>: Stel wekelijkse of maandelijkse automatiseringen in die certificaten genereren voor alle deelnemers die programma’s hebben afgerond in die periode.</p> </li> <li> <p><strong>Voorwaardelijke Documentgeneratie</strong>: Maak verschillende soorten documenten op basis van criteria zoals programmatype, prestatieniveau, of geografische locatie.</p> </li> <li> <p><strong>Meldingssysteem</strong>: Informeer programmabeheerders wanneer certificaten zijn gegenereerd en verzonden, om het proces te helpen volgen.</p> </li> </ul> <p>Om deze automatiseringen in te stellen, moet u de scriptcode die we eerder hebben verstrekt aanpassen tot een “Run script”-automatiseringsstap. De kernintegratie met de API blijft hetzelfde, maar u moet aanpassen hoe records worden geselecteerd en verwerkt op basis van uw triggervoorwaarden.</p> <h2 id="conclusie">Conclusie</h2> <p>In deze tutorial hebben we laten zien hoe u uw Airtable-database kunt omzetten in een krachtig documentgeneratiesysteem met behulp van de API van DocuGenerate en de Scripting Extension van Airtable. Door deze tools te combineren, kunt u met één klik professionele documenten genereren rechtstreeks vanuit uw Airtable-data, en gegenereerde documenten opslaan in uw database voor eenvoudige toegang en organisatie.</p> <p>Hoewel automatiseringstools zoals deze uw productiviteit drastisch kunnen verbeteren, is het belangrijk om te onthouden dat ze moeten dienen als procesfacilitators. Verlies uzelf niet in complexe automatiseringsontwikkeling wanneer een eenvoudigere aanpak effectiever zou kunnen zijn! Het herkennen van deze balans is essentieel voor het creëren van werkelijk effectieve workflows. Begin met de basisimplementatie die we hebben verstrekt, en breid uw automatisering vervolgens geleidelijk uit naarmate uw behoeften groeien en veranderen.</p> <h3 id="bronnen">Bronnen</h3> <ul> <li><a href="https://airtable.com/appLSLnJfZrkdAqz8/shruEBCW3StTQjxIk/tblej46yoReMAFar1/viw3bonO9CVF4TPj0" target="_blank" rel="noopener">DocuGenerate Test Base</a> in Airtable, met de tabellen Skills, Programs en Attendees.</li> <li><a href="https://github.com/basteks/airtable-docugenerate" target="_blank" rel="noopener">Airtable DocuGenerate</a> GitHub-repository gemaakt door Benjamin Hatton, met de eerste versie van Airtable-scripts voor het genereren van documenten met de API van DocuGenerate.</li> <li>Alle profielfoto’s zijn royaltyvrij en afkomstig van <a href="https://pixabay.com/" target="_blank" rel="nofollow noopener">Pixabay</a>, de website voor royaltyvrije afbeeldingen en stockfoto’s.</li> <li>Het <a href="https://www.docugenerate.com/assets/posts/007-airtable-scripting-extension/Certificate of Completion.docx">Certificate of Completion</a> sjabloon dat in deze tutorial is gebruikt.</li> <li>Een voorbeeld van een <a href="https://www.docugenerate.com/assets/posts/007-airtable-scripting-extension/Certificate of Completion.pdf" target="_blank">PDF-certificaat</a> gegenereerd op basis van Airtable-data.</li> </ul>]]></content> <author> <name>DocuGenerate</name> <email>support@docugenerate.com</email> </author> <category term="Certificates"/> <category term="Airtable"/> <category term="No-Code"/> <summary type="html"><![CDATA[Leer hoe DocuGenerate documentgeneratie kan automatiseren op basis van de data die in uw tabellen is opgeslagen, zodat u zich kunt richten op de meest waardevolle stappen van uw proces. Volg onze tutorial en creëer een no-code documentgeneratieworkflow in Airtable.]]></summary> <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.docugenerate.com/assets/posts/007-airtable-scripting-extension/cover-image.png"/> <media:content medium="image" url="https://www.docugenerate.com/assets/posts/007-airtable-scripting-extension/cover-image.png" xmlns:media="http://search.yahoo.com/mrss/"/> </entry> <entry> <title type="html">Best Beoordeelde Betaalbare Contractbeheersoftware van GetApp</title> <link href="https://www.docugenerate.com/nl/blog/best-beoordeelde-betaalbare-contractbeheersoftware-van-getapp/" rel="alternate" type="text/html" title="Best Beoordeelde Betaalbare Contractbeheersoftware van GetApp"/> <published>2024-04-16T00:00:00+00:00</published> <updated>2024-04-16T00:00:00+00:00</updated> <id>https://www.docugenerate.com/nl/blog/best-beoordeelde-betaalbare-contractbeheersoftware-van-getapp</id> <content type="html" xml:base="https://www.docugenerate.com/nl/blog/best-beoordeelde-betaalbare-contractbeheersoftware-van-getapp/"><![CDATA[<h2 id="contractbeheersoftware">Contractbeheersoftware</h2> <p><a href="https://www.getapp.com/" target="_blank" rel="nofollow noopener">GetApp</a>, een bedrijf dat bedrijven helpt bij het navigeren door het softwareaankoopproces, heeft DocuGenerate opgenomen in de lijst <a href="https://www.getapp.com/resources/top-affordable-contract-management-software/" target="_blank" rel="nofollow noopener">“7 Top-Rated Affordable Contract Management Software”</a>, waarin zeven best beoordeelde betaalbare contractbeheersoftware-oplossingen worden geëvalueerd op basis van geverifieerde gebruikersbeoordelingen en prijzen die op de websites van leveranciers zijn gevonden.</p> <p>Deze erkenning is een bewijs van de uitstekende kwaliteit van ons product en de onwrikbare toewijding om een gebruiksvriendelijke en betrouwbare oplossing te bieden die aansluit bij de diverse behoeften van onze klanten. Ons team zet zich in voor continue verbetering en innovatie, zodat onze gebruikers altijd over de beste tools kunnen beschikken.</p> <p><img src="https://www.docugenerate.com/assets/posts/010-getapp-top-rated-software/top-affordable-contract-management-software.png" alt="7 Top-Rated Affordable Contract Management Software"/></p> <h2 id="gebruikersbeoordelingen">Gebruikersbeoordelingen</h2> <p><a href="https://www.getapp.com/resources/top-affordable-contract-management-software/#4-docugenerate" target="_blank" rel="nofollow noopener">DocuGenerate</a> behoorde tot de best beoordeelde producten met een uitstekende beoordeling van <a href="https://www.getapp.com/collaboration-software/a/docugenerate/reviews/" target="_blank" rel="nofollow noopener">4,8 op 5</a>. Aangezien het rapport is gebaseerd op echte gebruikersbeoordelingen, willen we onze gewaardeerde gebruikers bedanken die van ons product houden!</p> <p><img src="https://www.docugenerate.com/assets/posts/010-getapp-top-rated-software/docugenerate-getapp-snippet-v2.png" alt="DocuGenerate-beoordelingen op GetApp"/></p> <p>Dit is wat gebruikers over ons product hebben gezegd:</p> <div class="ud-blog-quote"> <i class="lni lni-quotation"></i> <p> De klantenservice was geweldig. Ze spraken met mij alsof ik een echt mens was en gaven geen standaardantwoorden die het gesprek nog verwarrender maakten. Nadat ik mijn probleem met de klantenservice had opgelost, was werken met het gegenereerde document extreem eenvoudig. </p> <h6> Bron: <a href="https://www.getapp.com/collaboration-software/a/docugenerate/reviews/9f16950ccb/" target="_blank"> GetApp </a> </h6> </div> <div class="ud-blog-quote"> <i class="lni lni-quotation"></i> <p> Ik had een eenvoudige manier nodig om PDF-bestanden te genereren vanuit JSON-data, en DocuGenerate maakte dat eenvoudig. De ondersteuning was ook geweldig. Ik ben geen ontwikkelaar, maar ik kon dit binnen enkele uren implementeren met hun API. </p> <h6> Bron: <a href="https://www.getapp.com/collaboration-software/a/docugenerate/reviews/c31e5e9bc0/" target="_blank"> GetApp </a> </h6> </div> <div class="ud-blog-quote"> <i class="lni lni-quotation"></i> <p> Documentsjablonen zijn erg eenvoudig te gebruiken, we hebben geen enkel gebruiksgeval gevonden dat ze niet ondersteunen. De eenvoudige API maakte de integratie van ons product moeiteloos. </p> <h6> Bron: <a href="https://www.getapp.com/collaboration-software/a/docugenerate/reviews/b6e61422f5/" target="_blank"> GetApp </a> </h6> </div> <p>Help ons de toekomst van Contractbeheer vorm te geven door DocuGenerate te beoordelen op GetApp <a href="https://reviews.getapp.com/products/new/f02a2815-804f-4a33-8e75-dae92de9d9a1" target="_blank" rel="nofollow noopener">hier</a>.</p> <h2 id="over-ons">Over Ons</h2> <p>DocuGenerate is een toonaangevende aanbieder van geautomatiseerde documentgeneratie-oplossingen. Ons platform stelt bedrijven in staat om eenvoudig PDF-documenten zoals facturen, brieven, contracten, overeenkomsten, en certificaten te maken met behulp van onze intuïtieve webapp of <a href="/nl/ontwikkelaars/snelstart/">REST API</a>.</p> <p>Door het documentcreatieproces te stroomlijnen, helpen we bedrijven tijd en middelen te besparen terwijl nauwkeurigheid en consistentie worden gewaarborgd. Met flexibele <a href="/nl/prijzen/">prijsplannen</a> en volledige API-toegang, bedient DocuGenerate bedrijven van elke omvang, van startups tot grote ondernemingen.</p> <h2 id="over-getapp">Over GetApp</h2> <p>GetApp is de aanbevelingsengine die kleine bedrijven nodig hebben om de juiste softwarekeuze te maken. Met meer dan 2 miljoen geverifieerde gebruikersbeoordelingen stelt GetApp mkb-bedrijven in staat hun missie te bereiken door de op maat gemaakte, datagedreven aanbevelingen en inzichten te bieden die nodig zijn om weloverwogen softwareaankoopbeslissingen te nemen. Ga voor meer informatie naar <a href="https://www.getapp.com/" target="_blank" rel="nofollow noopener">GetApp.com</a>.</p>]]></content> <author> <name>DocuGenerate</name> <email>support@docugenerate.com</email> </author> <category term="Contracts"/> <category term="Review"/> <category term="GetApp"/> <summary type="html"><![CDATA[DocuGenerate is door GetApp erkend als een van de best beoordeelde betaalbare contractbeheersoftware. Onze beoordeling van 4,8 op 5 weerspiegelt de kwaliteit van ons product, wat DocuGenerate positioneert als een leider in geautomatiseerde documentgeneratie-oplossingen.]]></summary> <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.docugenerate.com/assets/posts/010-getapp-top-rated-software/cover-image.png"/> <media:content medium="image" url="https://www.docugenerate.com/assets/posts/010-getapp-top-rated-software/cover-image.png" xmlns:media="http://search.yahoo.com/mrss/"/> </entry> <entry> <title type="html">Gebruik Tally en Make om Rapporten te Genereren op Basis van Formulierinzendingen</title> <link href="https://www.docugenerate.com/nl/blog/gebruik-tally-en-make-om-rapporten-te-genereren-op-basis-van-formulierinzendingen/" rel="alternate" type="text/html" title="Gebruik Tally en Make om Rapporten te Genereren op Basis van Formulierinzendingen"/> <published>2024-03-16T00:00:00+00:00</published> <updated>2024-03-16T00:00:00+00:00</updated> <id>https://www.docugenerate.com/nl/blog/gebruik-tally-en-make-om-rapporten-te-genereren-op-basis-van-formulierinzendingen</id> <content type="html" xml:base="https://www.docugenerate.com/nl/blog/gebruik-tally-en-make-om-rapporten-te-genereren-op-basis-van-formulierinzendingen/"><![CDATA[<h2 id="de-workflow-die-we-bouwen">De Workflow die We Bouwen</h2> <p>In de snelle zakenwereld van vandaag is <strong>automatisering essentieel</strong> om efficiëntie en nauwkeurigheid te maximaliseren. Stel u een scenario voor waarin uw salesteam rapporten moet maken na het afronden van verkoopgesprekken – dit proces kan tijdrovend en foutgevoelig zijn als het handmatig wordt gedaan. In dit artikel laten we zien hoe u de kracht van Tally, Make, en DocuGenerate kunt benutten om <strong>de generatie van rapporten te automatiseren</strong> op basis van formulierinzendingen. Door deze tools te combineren, kunt u uw workflow verbeteren en ervoor zorgen dat uw rapporten consistent nauwkeurig en tijdig zijn.</p> <p>In de kern bestaat de workflow die we bouwen uit een sales vertegenwoordiger die een formulier invult met informatie over een verkoopgesprek. Deze informatie bevat details over het bedrijf, de contactpersoon, en de uitkomst van het gesprek. Na het indienen van het formulier genereert het systeem automatisch een PDF-rapport met behulp van een sjabloon dat is geconfigureerd in DocuGenerate. Laten we de belangrijkste onderdelen van deze workflow doornemen:</p> <ol> <li> <p><a href="https://tally.so/" target="_blank" rel="nofollow noopener">Tally</a>: Tally dient als platform voor het maken van het gebruiksvriendelijke formulier. Het biedt een gebruikersinterface voor het ontwerpen van rijke formulieren met verschillende velden. Daarnaast biedt Tally functies die verder gaan dan het maken van formulieren, waardoor het een veelzijdige tool is voor het naadloos verzamelen van data.</p> </li> <li> <p><a href="https://www.make.com/en?utm_source=docugenerate-app&amp;utm_medium=partner&amp;utm_campaign=docugenerate-app-partner-program" target="_blank" rel="nofollow noopener">Make</a>: Make (voorheen bekend als Integromat) fungeert als de lijm die Tally en DocuGenerate met elkaar verbindt. Met Make kunt u automatiseringsscenario’s, of “scenario’s”, maken die acties activeren op basis van specifieke gebeurtenissen. In dit geval luistert Make naar nieuwe formulierinzendingen op Tally en roept automatisch de API van DocuGenerate aan om rapporten te genereren.</p> </li> <li> <p><a href="https://www.docugenerate.com">DocuGenerate</a>: DocuGenerate is een webapp en API ontworpen voor het genereren van documenten op basis van sjablonen en data. Het biedt de mogelijkheid om merge-tags in sjablonen te vervangen door data die via API-verzoeken wordt aangeleverd. Dit is essentieel voor het dynamisch invullen van rapportsjablonen met nauwkeurige informatie.</p> </li> </ol> <h2 id="het-rapportsjabloon-maken">Het Rapportsjabloon Maken</h2> <p>Om het proces te starten, heeft u een sjabloon <a href="https://www.docugenerate.com/assets/posts/006-make-tally-sales-call-report/Sales Call Report.docx">Sales Call Report</a> nodig in DocuGenerate. Dit sjabloon dient als blauwdruk voor de gegenereerde rapporten. Het sjabloon bevat placeholders die bekend staan als <a href="https://www.docugenerate.com/nl/hulp/articles/wat-zijn-merge-tags/">merge-tags</a>, die worden vervangen door daadwerkelijke data wanneer het document wordt gegenereerd.</p> <p>Uw sjabloon kan bijvoorbeeld merge-tags bevatten voor verschillende velden, zoals <code class="language-plaintext highlighter-rouge">[city]</code>, <code class="language-plaintext highlighter-rouge">[state]</code>, <code class="language-plaintext highlighter-rouge">[zip]</code>, <code class="language-plaintext highlighter-rouge">[country]</code>, <code class="language-plaintext highlighter-rouge">[company_name]</code>, <code class="language-plaintext highlighter-rouge">[address]</code>, <code class="language-plaintext highlighter-rouge">[phone]</code>, <code class="language-plaintext highlighter-rouge">[email]</code>, <code class="language-plaintext highlighter-rouge">[project]</code>, <code class="language-plaintext highlighter-rouge">[date]</code>, <code class="language-plaintext highlighter-rouge">[author]</code>, <code class="language-plaintext highlighter-rouge">[representative_name]</code>, <code class="language-plaintext highlighter-rouge">[representative_title]</code>, <code class="language-plaintext highlighter-rouge">[receptivity]</code>, <code class="language-plaintext highlighter-rouge">[summary]</code> en <code class="language-plaintext highlighter-rouge">[action]</code>.</p> <p>Deze tags dienen als placeholders die worden ingevuld met de data die via het formulier wordt aangeleverd. Zoals u kunt zien, bevatten ze <a href="https://www.docugenerate.com/nl/hulp/articles/meer-mogelijkheden-met-uitgebreide-syntax/#beperking-van-witruimte">geen witruimte</a>, wat een vereiste is als we later voorwaarden en expressies willen toevoegen aan het sjabloon met behulp van de <a href="https://www.docugenerate.com/nl/hulp/articles/meer-mogelijkheden-met-uitgebreide-syntax/">uitgebreide syntax</a>.</p> <p><img src="https://www.docugenerate.com/assets/posts/006-make-tally-sales-call-report/Sales Call Report.png" alt="Sales Call Report" class="desktop-width-75"/></p> <h2 id="het-formulier-ontwerpen-in-tally">Het Formulier Ontwerpen in Tally</h2> <p>Met het sjabloon op zijn plaats, maakt u een <strong>bijbehorend formulier in Tally</strong>. Het formulier verzamelt de benodigde informatie voor het genereren van het rapport. Het formulier is verdeeld in twee pagina’s: één voor het verzamelen van bedrijfsinformatie en de andere voor het vastleggen van details over het gesprek (wie de contactpersoon was, wat de samenvatting van het gesprek is, en wat de actiepunten zijn).</p> <p>De <strong>intuïtieve interface van Tally maakt</strong> het eenvoudig om het formulier naar wens te ontwerpen. U koppelt elk formulierveld aan een specifieke merge-tag in het sjabloon. Deze koppeling zorgt ervoor dat de data die via het formulier wordt verzameld perfect aansluit bij de placeholders in het rapportsjabloon.</p> <p><img src="https://www.docugenerate.com/assets/posts/006-make-tally-sales-call-report/tally-form-submission-v2.gif" alt="Tally formulierinzending"/></p> <p>Zodra het formulier is ontworpen, vindt u de <strong>Share Link</strong> voor het formulier, waarmee gebruikers het kunnen openen en indienen. Voor de Sales Call Report heeft u toegang tot het formulier via deze URL: <a href="https://tally.so/r/n99oAQ" target="_blank" rel="nofollow noopener">https://tally.so/r/n99oAQ</a></p> <p><img src="https://www.docugenerate.com/assets/posts/006-make-tally-sales-call-report/tally-share-form.png" alt="Tally share-link" class="desktop-width-75"/></p> <h2 id="tally-verbinden-met-make">Tally Verbinden met Make</h2> <p>Het integreren van Tally en Make is een cruciale stap bij het automatiseren van de workflow. Deze integratie stelt Make in staat om nieuwe formulierinzendingen te controleren en vervolgacties te activeren. U vindt nuttige handleidingen over het verbinden van de twee in het <a href="https://tally.so/help/integromat-integration" target="_blank" rel="nofollow noopener">Tally help center</a> of in het <a href="https://www.make.com/en/help/app/tally" target="_blank" rel="nofollow noopener">Make help center</a>.</p> <p>Klik om te beginnen op de knop <strong>Plus</strong> en zoek naar de applicatie <strong>Tally</strong>, klik er vervolgens op:</p> <p><img src="https://www.docugenerate.com/assets/posts/006-make-tally-sales-call-report/make-new-scenario-tally.png" alt="Tally toevoegen aan een Make-scenario"/></p> <p>Selecteer vervolgens de trigger <strong>Watch New Responses</strong>, die wordt uitgevoerd telkens wanneer een nieuwe formulierreactie wordt ingediend.</p> <p><img src="https://www.docugenerate.com/assets/posts/006-make-tally-sales-call-report/tally-watch-new-responses.png" alt="Nieuwe reactie van Tally bekijken"/></p> <p>De volgende video toont hoe het verbinden van Make met Tally werkt:<br/> 1. Klik op <strong>Create a webhook</strong><br/> 2. Klik vervolgens op <strong>Create a connection</strong><br/> 3. Er verschijnt een pop-upvenster - u moet op <strong>Accept</strong> klikken om Make toegang te geven tot uw Tally-account 4. En ten slotte selecteert u het formulier <strong>Sales Call Report</strong> uit de lijst met beschikbare Tally-formulieren</p> <p><img src="https://www.docugenerate.com/assets/posts/006-make-tally-sales-call-report/create-tally-connection.gif" alt="Tally verbinden met Make"/></p> <p>U ziet de toegewezen <strong>webhook-URL</strong> in Make. Een webhook is een mechanisme waarmee de ene applicatie (Tally) in real-time data naar een andere applicatie (Make) kan sturen. In dit geval stuurt Tally een webhook naar Make telkens wanneer een nieuwe formulierreactie wordt ontvangen.</p> <p><img src="https://www.docugenerate.com/assets/posts/006-make-tally-sales-call-report/tally-webhook-in-make.png" alt="Nieuwe reactie-webhook in Make"/></p> <p>Zodra de verbinding tot stand is gebracht, ziet u op het tabblad <strong>Integration</strong> van het formulier in Tally dezelfde webhook-URL als in Make, waarmee u kunt bevestigen dat alles correct is ingesteld.</p> <p><img src="https://www.docugenerate.com/assets/posts/006-make-tally-sales-call-report/tally-webhook-to-make.png" alt="Tally webhook-integratie met Make"/></p> <h2 id="docugenerate-verbinden-met-make">DocuGenerate Verbinden met Make</h2> <p>Met de Tally-Make-verbinding op zijn plaats, is het tijd om <strong>DocuGenerate te integreren in de workflow</strong>. De flexibiliteit van Make stelt u in staat om modules toe te voegen aan het scenario, en in dit geval voegt u een HTTP-module toe om de API van DocuGenerate aan te roepen en het rapport te maken.</p> <p>Het configureren van de <strong>HTTP-module</strong> houdt in dat u het API-eindpunt voor DocuGenerate opgeeft. Daarnaast moet u autorisatie verstrekken met een API-sleutel, die u kunt verkrijgen op de instellingenpagina van DocuGenerate. De API-sleutel is essentieel voor veilige communicatie tussen Make en DocuGenerate.</p> <p><img src="https://www.docugenerate.com/assets/posts/006-make-tally-sales-call-report/make-add-http.png" alt="HTTP-module toevoegen in Make"/></p> <p>Selecteer eerst de optie <strong>Make an API Key Auth request</strong>. Hiermee wordt een HTTPS-verzoek verzonden naar een opgegeven URL die API Key Auth-autorisatie vereist, en wordt het antwoord verwerkt.</p> <p><img src="https://www.docugenerate.com/assets/posts/006-make-tally-sales-call-report/make-api-key-auth-request.png" alt="Een API Key Auth-verzoek maken"/></p> <p>Klik vervolgens op <strong>Create a keychain</strong> in de sectie <strong>Credentials</strong>. Hiermee wordt een dialoogvenster geopend voor het toevoegen van een nieuwe keychain.</p> <p><img src="https://www.docugenerate.com/assets/posts/006-make-tally-sales-call-report/make-create-keychain.png" alt="Een keychain maken"/></p> <p>U moet een <strong>Name</strong> geven aan de nieuwe keychain, bijvoorbeeld <code class="language-plaintext highlighter-rouge">DocuGenerate API Key</code>. Voor de waarde <strong>Key</strong> voert u uw API-sleutel in, die u kunt vinden op de <a href="https://www.docugenerate.com/nl/hulp/articles/waar-vind-ik-mijn-api-sleutel/">Settings-pagina</a> van DocuGenerate. Voor <strong>API Key placement</strong> kunt u de standaardwaarde <code class="language-plaintext highlighter-rouge">In the header</code> behouden. En ten slotte voert u voor <strong>API Key parameter name</strong> <code class="language-plaintext highlighter-rouge">Authorization</code> in, zoals aangegeven op de pagina <a href="https://api.docugenerate.com/" target="_blank">API Reference</a>.</p> <p><img src="https://www.docugenerate.com/assets/posts/006-make-tally-sales-call-report/make-docugenerate-api-key.png" alt="Dialoogvenster nieuwe keychain toevoegen"/></p> <p>Na het configureren van de sectie <strong>Credentials</strong>, moet u het API-eindpunt opgeven dat wordt aangeroepen op DocuGenerate. Voer de volgende waarden in voor de betreffende velden:<br/> 1. <strong>URL</strong> = <code class="language-plaintext highlighter-rouge">https://api.docugenerate.com/v1/document</code><br/> 2. <strong>Method</strong> = <code class="language-plaintext highlighter-rouge">POST</code><br/> 3. <strong>Body type</strong> = <code class="language-plaintext highlighter-rouge">Multipart/form-data</code></p> <p><img src="https://www.docugenerate.com/assets/posts/006-make-tally-sales-call-report/make-docugenerate-api-call.png" alt="Configuratie van het HTTP-eindpunt"/></p> <p>Het volgende onderdeel is het configureren van de velden voor het HTTP-verzoek. De volledige lijst met mogelijke parameters voor het eindpunt <strong>Create Document</strong> vindt u op de pagina <a href="https://api.docugenerate.com/#/Document/generateDocument" target="_blank">API Reference</a>. Voor deze tutorial gebruiken we alleen de parameters <strong>template_id</strong>, <strong>output_format</strong> en <strong>data</strong>.</p> <p>Voer eerst voor het veld <strong>template_id</strong> de ID in van het sjabloon dat we eerder hebben gemaakt in de sectie <a href="#het-rapportsjabloon-maken">Het rapportsjabloon maken</a>. Gebruik vervolgens voor <strong>output_format</strong> <code class="language-plaintext highlighter-rouge">.pdf</code>, maar elk van de volgende waarden kan ook worden gebruikt: <code class="language-plaintext highlighter-rouge">.docx</code>, <code class="language-plaintext highlighter-rouge">.pdf</code>, <code class="language-plaintext highlighter-rouge">.doc</code> of <code class="language-plaintext highlighter-rouge">.odt</code> of <code class="language-plaintext highlighter-rouge">.txt</code>.</p> <p><img src="https://www.docugenerate.com/assets/posts/006-make-tally-sales-call-report/make-docugenerate-template-id.png" alt="De velden template_id en output_format configureren"/></p> <p>Vervolgens configureren we het veld <strong>data</strong> voor het HTTP-verzoek. Dit is de data die wordt gebruikt om de mail merge uit te voeren en de documenten te genereren op basis van het sjabloon. Het verwachte formaat is een array van JSON-objecten, en er wordt een document gegenereerd voor elk object in de array, door de tags uit het sjabloon te vervangen door de waarden van het object.</p> <p>Om het verwachte formaat van het JSON-object te verkrijgen, kunt u proberen <a href="https://www.docugenerate.com/nl/hulp/articles/documenten-genereren-vanuit-json-data/">documenten te genereren vanuit JSON-data</a> in de webapp en de vooraf ingevulde JSON met lege waarden te kopiëren. U kunt deze vervolgens plakken in Make als waarde voor het veld data.</p> <p>Zodra u dat heeft, kunt u de velden uit de Tally-reactie koppelen aan de bijbehorende sleutels in het JSON-object. Plaats uw cursor in de waarde <strong>”“</strong> die u wilt invullen met een formulierveld, en klik vervolgens op een van de roze velden in het linkerpaneel om het als waarde te gebruiken. Zorg ervoor dat de velden uit Tally tussen aanhalingstekens staan, zoals in <strong>”{{1.fields.City}}“</strong>, anders wordt de datapayload niet correct opgemaakt en retourneert de aanroep voor het genereren van een document een foutstatuscode <code class="language-plaintext highlighter-rouge">400</code>.</p> <p><img src="https://www.docugenerate.com/assets/posts/006-make-tally-sales-call-report/make-field-mapping.gif" alt="Het veld data configureren"/></p> <p>Zo zou de datawaarde eruit moeten zien nadat alle velden zijn gekoppeld aan de bijbehorende JSON-waarden. Met Make kunt u <strong>de formuliervelden koppelen</strong> aan de bijbehorende merge-tagwaarden in de datapayload, zodat het gegenereerde document nauwkeurig de formulierinvoer weerspiegelt.</p> <p><img src="https://www.docugenerate.com/assets/posts/006-make-tally-sales-call-report/make-docugenerate-data.png" alt="Datawaarden gekoppeld aan de JSON"/></p> <h2 id="het-scenario-volledig-uitvoeren">Het Scenario Volledig Uitvoeren</h2> <p>Zodra zowel Tally als de HTTP-module zijn ingesteld in het Make-scenario, kunt u <strong>de planning van het scenario activeren</strong>. Deze planning zorgt ervoor dat de workflow automatisch wordt uitgevoerd zodra nieuwe formulierdata binnenkomt. Het scenario kan worden uitgebreid met extra stappen, zoals het verzenden van een e-mail met het gegenereerde document als bijlage, maar voor deze tutorial beperken we het scenario tot deze 2 acties.</p> <p><img src="https://www.docugenerate.com/assets/posts/006-make-tally-sales-call-report/make-scheduling.png" alt="make-scheduling"/></p> <p>Om de workflow te testen, vult u het <a href="https://tally.so/r/n99oAQ" target="_blank" rel="nofollow noopener">Tally-formulier</a> in met relevante informatie. Het formulier heeft 2 pagina’s die na elkaar worden weergegeven, maar de afbeelding hieronder toont beide pagina’s samen zodat u de formulierwaarden gemakkelijker kunt zien.</p> <p><img src="https://www.docugenerate.com/assets/posts/006-make-tally-sales-call-report/tally-form-submission-example.png" alt="Voorbeeld van Tally-formulierinzending"/></p> <p>In de volgende video ziet u hoe een nieuw document <strong>automatisch verschijnt</strong> in DocuGenerate nadat het formulier is ingediend. U kunt op de knop <strong>View</strong> klikken om het document weer te geven en te zien dat het de waarden bevat die in het formulier zijn ingevoerd:</p> <p><img src="https://www.docugenerate.com/assets/posts/006-make-tally-sales-call-report/docugenerate-new-document.gif" alt="docugenerate-new-document"/></p> <p>Na het indienen genereert de integratie tussen Tally, Make, en DocuGenerate naadloos de <strong>Sales Call Report</strong>. Dit rapport bevat de data die u in het formulier heeft ingevoerd, waarbij de merge-tags in het sjabloon zijn vervangen, zoals u kunt zien in het gegenereerde PDF.</p> <object data="/assets/posts/006-make-tally-sales-call-report/Sales Call Report.pdf" type="application/pdf" class="inline-pdf-blog"></object> <h2 id="conclusie">Conclusie</h2> <p>In dit artikel hebben we een krachtige workflow verkend die gebruikmaakt van de mogelijkheden van Tally, Make, en DocuGenerate. Door <strong>een gestroomlijnd proces te creëren voor het genereren van rapporten</strong> op basis van formulierinzendingen, kunt u tijd besparen, fouten verminderen, en een consistente rapportkwaliteit waarborgen.</p> <p>De integratie van deze tools opent nieuwe mogelijkheden voor het automatiseren van verschillende taken en het verbeteren van de efficiëntie van uw organisatie. Of u nu een salesteam bent dat uw rapportage wilt stroomlijnen, of een bedrijf dat repetitieve processen wil automatiseren, deze workflow toont het potentieel van <strong>no-code-oplossingen</strong> in het huidige, technologiegedreven landschap.</p> <h3 id="bronnen">Bronnen</h3> <ul> <li>Het <a href="https://tally.so/r/n99oAQ" target="_blank" rel="nofollow noopener">Tally-formulier</a> voor het testen van deze workflow.</li> <li>Het <a href="https://www.docugenerate.com/assets/posts/006-make-tally-sales-call-report/Sales Call Report.docx">Sales Call Report</a> sjabloon dat in deze tutorial is gebruikt.</li> <li>Een voorbeeld van een gegenereerd <a href="https://www.docugenerate.com/assets/posts/006-make-tally-sales-call-report/Sales Call Report.pdf" target="_blank">PDF-rapport</a>.</li> </ul>]]></content> <author> <name>DocuGenerate</name> <email>support@docugenerate.com</email> </author> <category term="Reports"/> <category term="Make"/> <category term="No-Code"/> <summary type="html"><![CDATA[Ontdek hoe Tally, Make en DocuGenerate rapportgeneratie kunnen automatiseren op basis van formulierinzendingen, waardoor de efficiëntie en nauwkeurigheid van uw workflow verbetert. Bekijk de naadloze integratie van deze tools om uw PDF-generatieproces te stroomlijnen.]]></summary> <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.docugenerate.com/assets/posts/006-make-tally-sales-call-report/cover-image-v3.png"/> <media:content medium="image" url="https://www.docugenerate.com/assets/posts/006-make-tally-sales-call-report/cover-image-v3.png" xmlns:media="http://search.yahoo.com/mrss/"/> </entry> <entry> <title type="html">Personaliseer uw Deelnamecertificaten met Profielfoto’s</title> <link href="https://www.docugenerate.com/nl/blog/personaliseer-uw-deelnamecertificaten-met-profielfotos/" rel="alternate" type="text/html" title="Personaliseer uw Deelnamecertificaten met Profielfoto’s"/> <published>2024-02-02T00:00:00+00:00</published> <updated>2024-02-02T00:00:00+00:00</updated> <id>https://www.docugenerate.com/nl/blog/personaliseer-uw-deelnamecertificaten-met-profielfotos</id> <content type="html" xml:base="https://www.docugenerate.com/nl/blog/personaliseer-uw-deelnamecertificaten-met-profielfotos/"><![CDATA[<h2 id="wat-is-een-deelnamecertificaat">Wat is een Deelnamecertificaat?</h2> <p>Deelnamecertificaten nemen een belangrijke plaats in binnen erkenning en waardering. Ze dienen als tastbare blijken van erkenning, die de actieve betrokkenheid van een persoon bij verschillende evenementen en activiteiten herdenken. Een evenement dat vaak aanleiding geeft tot het uitreiken van deze certificaten is de <strong>Jaarlijkse Teambuildingdag</strong>. Deze bijzondere gelegenheid brengt medewerkers samen in een sfeer van kameraadschap en vaardigheidsontwikkeling, en bevordert een gevoel van eenheid en gedeeld doel binnen de organisatie.</p> <p>In het digitale tijdperk, waarin personalisatie een kenmerk is geworden van boeiende ervaringen, voegt het idee om de <strong>profielfoto’s</strong> van medewerkers op te nemen in deelnamecertificaten een innovatieve en betekenisvolle toets toe. In tegenstelling tot generieke certificaten, resoneren gepersonaliseerde certificaten met individuele profielfoto’s op een dieper niveau. Ze vieren niet alleen aanwezigheid, maar ook de unieke bijdrage die elke persoon levert. Het verandert wat kan worden gezien als een routinematige administratieve taak in een doordacht gebaar van erkenning, waarmee het belang van de betrokkenheid van elk teamlid wordt benadrukt.</p> <h2 id="het-perfecte-sjabloon-maken">Het Perfecte Sjabloon Maken</h2> <p>Om deze personalisatie te realiseren, is een goed ontworpen certificaatsjabloon essentieel. Dit sjabloon dient als het canvas waarop de profielfoto’s naadloos worden geïntegreerd. Met dynamische <a href="https://www.docugenerate.com/nl/hulp/articles/wat-zijn-merge-tags/">merge-tags</a>, zoals <code class="language-plaintext highlighter-rouge">{Company Name}</code>, <code class="language-plaintext highlighter-rouge">{Name}</code>, <code class="language-plaintext highlighter-rouge">{Date}</code> en <code class="language-plaintext highlighter-rouge">{%Photo}</code>, kan het sjabloon worden aangepast om de naam en profielfoto van de betreffende medewerker weer te geven. Het resultaat is een visueel aantrekkelijk certificaat dat zowel de essentie van het evenement als de rol van de persoon daarbinnen vastlegt.</p> <p>Merk op dat voor het invoegen van de profielfoto de tag <code class="language-plaintext highlighter-rouge">{%Photo}</code> wordt gebruikt, zoals uitgelegd in het artikel <a href="https://www.docugenerate.com/nl/hulp/articles/afbeeldingen-toevoegen-aan-een-sjabloon/">Afbeeldingen toevoegen aan een sjabloon</a>. De afbeelding moet worden gecodeerd in Base64-formaat, en de geaccepteerde afbeeldingsformaten zijn PNG, JPG en SVG.</p> <p>Zo ziet het sjabloon <a href="https://www.docugenerate.com/assets/posts/005-participation-certificates-with-pictures/Certificate of Participation.docx">Certificate of Participation</a> eruit. U kunt het downloaden en het zelf uitproberen:</p> <p><img src="https://www.docugenerate.com/assets/posts/005-participation-certificates-with-pictures/Certificate of Participation.png" alt="Certificate of Participation"/></p> <h2 id="afbeeldingen-coderen-als-base64">Afbeeldingen Coderen als Base64</h2> <p>Om de personalisatie nog een stap verder te brengen, biedt de integratie van Base64-gecodeerde afbeeldingen een dynamischere en efficiëntere aanpak. Base64-codering zet afbeeldingen om in tekstreeksen, waardoor externe afbeeldingsbestanden overbodig worden, terwijl de visuele kwaliteit behouden blijft.</p> <p>Online tools, zoals de <a href="https://www.base64-image.de/" target="_blank" rel="nofollow noopener">Base64 Image Encoder</a>, vereenvoudigen dit conversieproces. Hier ziet u hoe u deze gratis tool kunt gebruiken om een afbeelding te coderen in Base64, en vervolgens de gecodeerde waarde naar het klembord te kopiëren:</p> <p><img src="https://www.docugenerate.com/assets/posts/005-participation-certificates-with-pictures/base64-image.gif" alt="Base64-conversiedemo"/></p> <p>Daarnaast kunnen ontwikkelaars programmeertalen zoals Python gebruiken om dit programmatisch te doen. Het volgende Python-codefragment toont de conversie:</p> <div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="n">base64</span>

<span class="k">with</span> <span class="nf">open</span><span class="p">(</span><span class="sh">"</span><span class="s">profile_picture.jpg</span><span class="sh">"</span><span class="p">,</span> <span class="sh">"</span><span class="s">rb</span><span class="sh">"</span><span class="p">)</span> <span class="k">as</span> <span class="n">image_file</span><span class="p">:</span>
    <span class="n">base64_image</span> <span class="o">=</span> <span class="n">base64</span><span class="p">.</span><span class="nf">b64encode</span><span class="p">(</span><span class="n">image_file</span><span class="p">.</span><span class="nf">read</span><span class="p">()).</span><span class="nf">decode</span><span class="p">(</span><span class="sh">"</span><span class="s">utf-8</span><span class="sh">"</span><span class="p">)</span>
</code></pre></div></div> <p>Deze aanpak stroomlijnt het proces van certificaatgeneratie en zorgt ervoor dat elk certificaat op zichzelf staat en eenvoudig te delen is.</p> <h2 id="het-certificaat-voor-een-persoon-testen">Het Certificaat voor Eén Persoon Testen</h2> <p>Voordat u certificaten genereert voor alle deelnemers, is het verstandig om een testcertificaat te maken om het eindresultaat te visualiseren. De intuïtieve webapp van DocuGenerate vereenvoudigt dit proces, waardoor u de data kunt invoeren door <a href="https://www.docugenerate.com/nl/hulp/articles/documenten-genereren-door-een-formulier-in-te-vullen/">een formulier in te vullen</a>, waarbij elk invoerveld overeenkomt met een tag in uw sjabloon. Voor het veld <code class="language-plaintext highlighter-rouge">Photo</code> kunt u simpelweg de Base64-gecodeerde waarde plakken die u heeft gekopieerd bij de <a href="#afbeeldingen-coderen-als-base64">vorige stap</a>.</p> <p>Het uitvoeren van een testrun bevestigt niet alleen de nauwkeurigheid van het certificaat, maar biedt ook een voorbeeld van de persoonlijke toets die elke deelnemer zal ontvangen.</p> <p><img src="https://www.docugenerate.com/assets/posts/005-participation-certificates-with-pictures/one-certificate.gif" alt="Deelnamecertificaat met profielfoto voor één persoon"/></p> <h2 id="certificaten-genereren-voor-alle-deelnemers">Certificaten Genereren voor Alle Deelnemers</h2> <p>Voor evenementen met meerdere deelnemers kan het handmatig genereren van certificaten een tijdrovende klus zijn. Dit is waar de ware <strong>kracht van automatisering</strong> naar voren komt. Door gebruik te maken van JSON-data kunnen certificaten voor alle deelnemers <a href="https://www.docugenerate.com/nl/hulp/articles/documenten-genereren-vanuit-json-data/">in één keer worden gegenereerd</a>. Deze aanpak zorgt voor consistentie, nauwkeurigheid, en efficiëntie bij het maken van een gepersonaliseerd certificaat voor elke deelnemer.</p> <p>U kunt de <a href="https://www.docugenerate.com/assets/posts/005-participation-certificates-with-pictures/certificate-data.json" target="_blank">JSON-data</a> bekijken die is gebruikt voor het genereren van alle certificaten. Let op: de JSON-sleutel voor de tag <code class="language-plaintext highlighter-rouge">{%Photo}</code> is <code class="language-plaintext highlighter-rouge">"Photo"</code> en niet <code class="language-plaintext highlighter-rouge">"%Photo"</code>, aangezien het teken <code class="language-plaintext highlighter-rouge">%</code> niet mag worden opgenomen.</p> <p>Hier is een demo van hoe u de webapp van DocuGenerate kunt gebruiken om alle certificaten in één keer te genereren. In dit voorbeeld wordt een <a href="https://www.docugenerate.com/nl/hulp/articles/de-gegenereerde-documenten-samenvoegen-tot-een-bestand/">enkel PDF-bestand</a> met alle certificaten gegenereerd, maar u kunt in de samenvoegopties ook kiezen om een <a href="https://www.docugenerate.com/nl/hulp/articles/aparte-documenten-genereren-voor-elk-gegevenselement/">apart PDF-bestand</a> voor elke deelnemer te genereren.</p> <p><img src="https://www.docugenerate.com/assets/posts/005-participation-certificates-with-pictures/many-certificates.gif" alt="Deelnamecertificaat met profielfoto voor meerdere personen"/></p> <p>Deze reis van personalisatie en automatisering leidt tot het maken van een <a href="https://www.docugenerate.com/assets/posts/005-participation-certificates-with-pictures/Certificate of Participation Generated.pdf" target="_blank">PDF-document</a> dat de geest van het evenement en de bijdragen van elke deelnemer vastlegt. Deze gegenereerde PDF-certificaten bieden een verzorgde en professionele presentatie, klaar voor distributie en weergave.</p> <object data="/assets/posts/005-participation-certificates-with-pictures/Certificate of Participation Generated.pdf" type="application/pdf" class="inline-pdf-blog"></object> <h2 id="conclusie">Conclusie</h2> <p>Kortom, de integratie van profielfoto’s in deelnamecertificaten met tools zoals DocuGenerate betekent een paradigmaverschuiving in hoe erkenning en waardering worden gegeven. Voorbij het traditionele idee van certificaten ligt een canvas voor personalisatie, waarin de identiteit van de persoon nauw verweven is met het certificaat.</p> <p>Deze combinatie van technologie, erkenning, en persoonlijke touch werkt als katalysator voor motivatie, en bevordert een sterker gevoel van verbondenheid en kameraadschap op de werkplek. Naarmate organisaties hun aanpak voor medewerkersbetrokkenheid blijven ontwikkelen, staan gepersonaliseerde deelnamecertificaten als bewijs van de kracht van het erkennen van de bijdrage van elk individu aan gedeelde doelen.</p> <h3 id="bronnen">Bronnen</h3> <ul> <li>De <a href="https://www.base64-image.de/" target="_blank" rel="nofollow noopener">Base64 Image Encoder</a> tool die is gebruikt om afbeeldingen om te zetten naar Base64.</li> <li>Het <a href="https://www.docugenerate.com/assets/posts/005-participation-certificates-with-pictures/Certificate of Participation.docx">Certificate of Participation</a> sjabloon dat in dit artikel is gebruikt.</li> <li>De voorbeeld-<a href="https://www.docugenerate.com/assets/posts/005-participation-certificates-with-pictures/certificate-data.json" target="_blank">JSON-data</a> die is gebruikt voor het genereren van alle certificaten.</li> <li>De <a href="https://www.docugenerate.com/assets/posts/005-participation-certificates-with-pictures/Certificate of Participation Generated.pdf" target="_blank">PDF-certificaten</a> gegenereerd op basis van de voorbeelddata.</li> </ul>]]></content> <author> <name>DocuGenerate</name> <email>support@docugenerate.com</email> </author> <category term="Certificates"/> <category term="Images"/> <category term="Base64"/> <summary type="html"><![CDATA[Deelnamecertificaten die betrokkenheid vieren, zoals de Jaarlijkse Teambuildingdag, kunnen persoonlijker worden gemaakt met profielfoto's. Gebruik de kracht van automatisering om efficiënt certificaten te genereren vanuit een dynamisch sjabloon en Base64-gecodeerde foto's.]]></summary> <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.docugenerate.com/assets/posts/005-participation-certificates-with-pictures/cover-image.png"/> <media:content medium="image" url="https://www.docugenerate.com/assets/posts/005-participation-certificates-with-pictures/cover-image.png" xmlns:media="http://search.yahoo.com/mrss/"/> </entry> <entry> <title type="html">Arbeidsovereenkomsten Maken met Variabele Clausules</title> <link href="https://www.docugenerate.com/nl/blog/arbeidsovereenkomsten-maken-met-variabele-clausules/" rel="alternate" type="text/html" title="Arbeidsovereenkomsten Maken met Variabele Clausules"/> <published>2024-01-30T00:00:00+00:00</published> <updated>2024-01-30T00:00:00+00:00</updated> <id>https://www.docugenerate.com/nl/blog/arbeidsovereenkomsten-maken-met-variabele-clausules</id> <content type="html" xml:base="https://www.docugenerate.com/nl/blog/arbeidsovereenkomsten-maken-met-variabele-clausules/"><![CDATA[<h2 id="wat-is-een-arbeidsovereenkomst">Wat is een Arbeidsovereenkomst?</h2> <p>Een <strong>arbeidsovereenkomst</strong> is een juridisch bindend document dat de arbeidsvoorwaarden tussen een werkgever en een werknemer vastlegt. Het beschrijft de rechten, verantwoordelijkheden, en verplichtingen van beide partijen, en biedt een kader voor de arbeidsrelatie. Arbeidsovereenkomsten omvatten doorgaans <strong>essentiële aspecten</strong> zoals functietitel, taken en verantwoordelijkheden, vergoeding, werkuren, secundaire arbeidsvoorwaarden, ontslagbepalingen, en vertrouwelijkheidsvereisten.</p> <p>Deze overeenkomsten dienen als basis voor de arbeidsrelatie, en bieden duidelijkheid en bescherming voor zowel werkgevers als werknemers. Ze helpen verwachtingen, rechten, en verplichtingen vast te stellen, zodat beide partijen hun rollen en verantwoordelijkheden begrijpen. Arbeidsovereenkomsten spelen ook een cruciale rol bij <strong>het beschermen van de belangen van werkgevers</strong>, aangezien ze bepalingen kunnen bevatten met betrekking tot geheimhouding van vertrouwelijke informatie, concurrentiebedingen, en intellectuele eigendomsrechten.</p> <p>Naast het aanpakken van <strong>juridische en praktische overwegingen</strong>, kunnen arbeidsovereenkomsten een positieve werkomgeving bevorderen door duidelijke communicatie te stimuleren, verwachtingen vast te stellen, en misverstanden te voorkomen. Ze bieden een uitgebreide schriftelijke vastlegging van de overeengekomen voorwaarden, wat kan helpen bij het oplossen van geschillen en meningsverschillen die zich tijdens het dienstverband kunnen voordoen.</p> <h2 id="een-arbeidsovereenkomst-opstellen">Een Arbeidsovereenkomst Opstellen</h2> <p>Bij het opstellen van <strong>arbeidsovereenkomsten</strong> is een van de meest uitdagende aspecten het maken van een sjabloon dat <strong>variabele clausules</strong> kan verwerken. Traditionele sjablonen vereisen vaak handmatige bewerking voor elke overeenkomst, wat tijdrovend en foutgevoelig kan zijn.</p> <p>Met het gebruik van dynamische voorwaarden is het echter mogelijk om flexibele sjablonen te maken die efficiënt aangepaste arbeidsovereenkomsten kunnen genereren. In dit artikel verkennen we het proces van het maken van arbeidsovereenkomsten met variabele clausules, en hoe deze aanpak het documentgeneratieproces kan stroomlijnen.</p> <h2 id="een-sjabloon-maken-met-merge-tags">Een Sjabloon Maken met Merge-Tags</h2> <p>Het maken van een sjabloon voor een arbeidsovereenkomst omvat het toevoegen van <a href="https://www.docugenerate.com/nl/hulp/articles/wat-zijn-merge-tags/">merge-tags</a> die worden vervangen door daadwerkelijke data bij het genereren van het definitieve document. De eerste versie van het sjabloon bevat merge-tags zoals <code class="language-plaintext highlighter-rouge">[employee_name]</code>, <code class="language-plaintext highlighter-rouge">[employer_name]</code>, <code class="language-plaintext highlighter-rouge">[job_title]</code>, en andere.</p> <p>Om deze merge-tags gemakkelijk herkenbaar te maken tijdens het testen, worden ze geel gemarkeerd in het sjabloon en de gegenereerde documenten. Het wordt echter over het algemeen aanbevolen om de markering te verwijderen zodra het sjabloon is gevalideerd en klaar is voor gebruik.</p> <p>Het verwerken van variabele clausules in het sjabloon gebeurt met behulp van <strong>selectievakjes</strong>. Bij het invullen van het sjabloon kan de persoon die verantwoordelijk is voor de gegevensinvoer het bijbehorende selectievakje aanvinken om de gewenste optie te selecteren. In gevallen waarin slechts één optie moet worden gekozen, wordt in het sjabloon de vermelding <code class="language-plaintext highlighter-rouge">(Check one)</code> opgenomen om dit vereiste aan te geven.</p> <p>Het is echter belangrijk om te weten dat deze aanpak ertoe leidt dat het definitieve document <strong>langer is dan noodzakelijk</strong>, aangezien het alle mogelijke opties voor elke clausule bevat. Bovendien kan het, vanuit privacyoogpunt, meer informatie onthullen dan nodig, aangezien werknemers mogelijk niets hoeven te weten over bepaalde clausules die zouden kunnen bestaan.</p> <p>U kunt hieronder de eerste versie van het sjabloon bekijken, die alleen de placeholders en selectievakjes bevat, of u kunt <a href="https://www.docugenerate.com/assets/posts/004-dynamic-employment-agreements/Employment Agreement with Checkboxes.docx">het sjabloon downloaden</a> om het in detail te bekijken.</p> <object data="/assets/posts/004-dynamic-employment-agreements/Employment Agreement with Checkboxes.pdf" type="application/pdf" class="inline-pdf-blog"></object> <h2 id="voorwaarden-en-logische-expressies-toevoegen">Voorwaarden en Logische Expressies Toevoegen</h2> <p>Hoewel het maken van een sjabloon met meerdere opties voor elke clausule een goede oplossing is, is een nog betere oplossing het gebruik van <a href="https://www.docugenerate.com/nl/hulp/articles/voorwaarden-toevoegen-aan-een-sjabloon/">dynamische voorwaarden</a> en <a href="https://www.docugenerate.com/nl/hulp/articles/meer-mogelijkheden-met-uitgebreide-syntax/">uitgebreide syntax</a> in het sjabloon. Deze technieken maken het mogelijk om voorwaarden, ontkenningen, en logische expressies op te nemen die bepalen welke clausules worden opgenomen in het definitieve document, in plaats van selectievakjes te gebruiken.</p> <p>Zoals u kunt zien in het <a href="https://www.docugenerate.com/assets/posts/004-dynamic-employment-agreements/Employment Agreement with Conditions.docx">bijgewerkte sjabloon</a> hieronder, worden de voorwaarden groen gemarkeerd om ze te onderscheiden binnen het sjabloon. Wanneer een document wordt gegenereerd, worden de voorwaarden geëvalueerd en worden de bijbehorende secties al dan niet weergegeven in het eindresultaat. En natuurlijk verschijnen de voorwaarde-tags niet in het gegenereerde document, wat zorgt voor een schone en professionele definitieve overeenkomst.</p> <p>Eenvoudigere voorwaarden en ontkenningen zoals <code class="language-plaintext highlighter-rouge">[#full_time]</code><strong>full time</strong><code class="language-plaintext highlighter-rouge">[/][^full_time]</code><strong>part time</strong><code class="language-plaintext highlighter-rouge">[/]</code> kunnen standaard worden gebruikt in elk sjabloon. Om expressies zoals <code class="language-plaintext highlighter-rouge">[#payments_per_month == 1]</code> te gebruiken, moet echter de <strong>uitgebreide syntax</strong> <a href="https://www.docugenerate.com/nl/hulp/articles/hoe-schakel-ik-de-uitgebreide-syntax-in/">worden ingeschakeld</a>. Hierdoor is het ook mogelijk om “puntnotatie” te gebruiken in het sjabloon om objecteigenschappen te verwijzen, zoals <code class="language-plaintext highlighter-rouge">[#non_compete.option1]</code> en <code class="language-plaintext highlighter-rouge">[#non_compete.option2]</code>.</p> <p>Let er ten slotte op dat, aangezien de uitgebreide syntax is ingeschakeld voor dit sjabloon, u wellicht merkt dat merge-tags geen witruimte bevatten. Het is belangrijk om ervoor te zorgen dat er geen witruimte binnen de merge-tags voorkomt, aangezien dit de juiste werking van het documentgeneratieproces kan beïnvloeden.</p> <object data="/assets/posts/004-dynamic-employment-agreements/Employment Agreement with Conditions.pdf" type="application/pdf" class="inline-pdf-blog"></object> <h2 id="de-dataset-afstemmen-op-het-sjabloon">De Dataset Afstemmen op het Sjabloon</h2> <p>Het maken van dynamische arbeidsovereenkomsten vereist werken met data die objectnotatie ondersteunt. Een geschikte optie hiervoor is het gebruik van <strong>JSON</strong> (JavaScript Object Notation), een lichtgewicht formaat voor gegevensuitwisseling dat een georganiseerde weergave van gestructureerde data mogelijk maakt.</p> <p>In tegenstelling tot Excel-data, die afhankelijk is van een tabelvormig formaat, biedt JSON een hiërarchische structuur die goed aansluit bij de variabele clausules in arbeidsovereenkomsten. Deze hiërarchische structuur zorgt voor een betere organisatie en weergave van de data, waardoor het eenvoudiger wordt om de variabelen binnen de overeenkomst te beheren en te bewerken.</p> <p>Om de organisatie en duidelijkheid van de JSON-data verder te verbeteren, kunnen variabelen worden <strong>gegroepeerd met behulp van objecten</strong>. Het groeperen van vergelijkbare variabelen onder relevante objectnamen verbetert de leesbaarheid en onderhoudbaarheid. Variabelen met betrekking tot onkosten kunnen bijvoorbeeld worden gegroepeerd onder een <code class="language-plaintext highlighter-rouge">expenses</code>-object, terwijl variabelen met betrekking tot geschillenbeslechting kunnen worden gegroepeerd onder een <code class="language-plaintext highlighter-rouge">dispute</code>-object. Deze aanpak vergemakkelijkt het identificeren en beheren van specifieke clausules binnen het sjabloon.</p> <p>U kunt de opgegeven <a href="https://www.docugenerate.com/assets/posts/004-dynamic-employment-agreements/agreement-data.json" target="_blank">voorbeeld-JSON-data</a> verkennen, die waarden bevat die overeenkomen met de variabelen in het sjabloon. Dit geeft u context over hoe de clausules en merge-tags worden ingevuld.</p> <div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">[</span><span class="w">
  </span><span class="p">{</span><span class="w">
    </span><span class="nl">"effective_date"</span><span class="p">:</span><span class="w"> </span><span class="s2">"March 29th, 2023"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"employee_name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Jane Smith"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"employer_name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Dream Marketing Inc."</span><span class="p">,</span><span class="w">
    </span><span class="nl">"job_title"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Marketing Specialist"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"full_time"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
    </span><span class="nl">"duties"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
      </span><span class="s2">"Developing marketing campaigns"</span><span class="p">,</span><span class="w">
      </span><span class="s2">"Managing social media accounts"</span><span class="p">,</span><span class="w">
      </span><span class="s2">"Analyzing market trends"</span><span class="w">
    </span><span class="p">],</span><span class="w">
    </span><span class="nl">"fixed_term"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
    </span><span class="nl">"start_date"</span><span class="p">:</span><span class="w"> </span><span class="s2">"April 1st, 2023"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"end_date"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w">
    </span><span class="nl">"probation_period"</span><span class="p">:</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w">
    </span><span class="nl">"salary_amount"</span><span class="p">:</span><span class="w"> </span><span class="mi">4000</span><span class="p">,</span><span class="w">
    </span><span class="nl">"salary_interval"</span><span class="p">:</span><span class="w"> </span><span class="s2">"month"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"payments_per_month"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w">
    </span><span class="nl">"payment_day"</span><span class="p">:</span><span class="w"> </span><span class="s2">"15th"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"overtime"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="nl">"rate"</span><span class="p">:</span><span class="w"> </span><span class="mi">20</span><span class="p">,</span><span class="w">
      </span><span class="nl">"threshold"</span><span class="p">:</span><span class="w"> </span><span class="mi">40</span><span class="p">,</span><span class="w">
      </span><span class="nl">"period"</span><span class="p">:</span><span class="w"> </span><span class="s2">"week"</span><span class="w">
    </span><span class="p">},</span><span class="w">
    </span><span class="nl">"expenses"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="nl">"entertainment"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
      </span><span class="nl">"travel"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
      </span><span class="nl">"meals"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
      </span><span class="nl">"phone"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
      </span><span class="nl">"other"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Miscellaneous"</span><span class="w">
    </span><span class="p">},</span><span class="w">
    </span><span class="nl">"work_address"</span><span class="p">:</span><span class="w"> </span><span class="s2">"456 Park Avenue, Cityville, USA"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"work_hours"</span><span class="p">:</span><span class="w"> </span><span class="s2">"9 AM - 6 PM"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"work_days"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Monday to Friday"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"time_off_days"</span><span class="p">:</span><span class="w"> </span><span class="mi">20</span><span class="p">,</span><span class="w">
    </span><span class="nl">"sick_leave_days"</span><span class="p">:</span><span class="w"> </span><span class="mi">5</span><span class="p">,</span><span class="w">
    </span><span class="nl">"personal_leave_days"</span><span class="p">:</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w">
    </span><span class="nl">"other_benefits"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Health insurance, flexible spending account"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"disability_days"</span><span class="p">:</span><span class="w"> </span><span class="mi">60</span><span class="p">,</span><span class="w">
    </span><span class="nl">"disability_percentage"</span><span class="p">:</span><span class="w"> </span><span class="mi">75</span><span class="p">,</span><span class="w">
    </span><span class="nl">"non_compete_months"</span><span class="p">:</span><span class="w"> </span><span class="mi">6</span><span class="p">,</span><span class="w">
    </span><span class="nl">"non_compete"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="nl">"option1"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
      </span><span class="nl">"option2"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
      </span><span class="nl">"option3"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
      </span><span class="nl">"option4"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
      </span><span class="nl">"other"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Disclose marketing strategies, client lists, and upcoming product launches."</span><span class="w">
    </span><span class="p">},</span><span class="w">
    </span><span class="nl">"confidential_information"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
    </span><span class="nl">"employer_notice_days"</span><span class="p">:</span><span class="w"> </span><span class="mi">30</span><span class="p">,</span><span class="w">
    </span><span class="nl">"employee_notice_days"</span><span class="p">:</span><span class="w"> </span><span class="mi">30</span><span class="p">,</span><span class="w">
    </span><span class="nl">"severance_amount"</span><span class="p">:</span><span class="w"> </span><span class="mi">3000</span><span class="p">,</span><span class="w">
    </span><span class="nl">"governing_state"</span><span class="p">:</span><span class="w"> </span><span class="s2">"New York"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"dispute"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="nl">"court"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
      </span><span class="nl">"arbitration"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
      </span><span class="nl">"mediation"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
      </span><span class="nl">"mediation_arbitration"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">]</span><span class="w">
</span></code></pre></div></div> <h2 id="voorbeeld-van-een-gegenereerde-arbeidsovereenkomst">Voorbeeld van een Gegenereerde Arbeidsovereenkomst</h2> <p>Om de besproken concepten te illustreren, kunt u een <a href="https://www.docugenerate.com/assets/posts/004-dynamic-employment-agreements/Employment Agreement Generated.pdf" target="_blank">voorbeeld-arbeidsovereenkomst</a> bekijken die is gegenereerd op basis van het sjabloon met voorwaarden in plaats van selectievakjes, en de opgegeven JSON-data.</p> <object data="/assets/posts/004-dynamic-employment-agreements/Employment Agreement Generated.pdf" type="application/pdf" class="inline-pdf-blog"></object> <p>U kunt verschillende versies van de overeenkomst genereren door simpelweg de data-eigenschappen te wijzigen. Door bijvoorbeeld <code class="language-plaintext highlighter-rouge">"expenses": null</code> te gebruiken in plaats van de waarde in de voorbeelddata, zou de <strong>sectie 5. Expenses</strong> alleen <em>Employee will NOT be reimbursed for out-of-pocket expenses</em> bevatten.</p> <p>Probeer gerust zelf andere versies van de arbeidsovereenkomst te genereren door <a href="https://www.docugenerate.com/nl/hulp/articles/hoe-maak-ik-een-nieuw-sjabloon-aan/">een nieuw sjabloon te maken</a> met de <a href="https://www.docugenerate.com/assets/posts/004-dynamic-employment-agreements/Employment Agreement with Conditions.docx">overeenkomst met voorwaarden</a>. Plak vervolgens de <a href="https://www.docugenerate.com/assets/posts/004-dynamic-employment-agreements/agreement-data.json" target="_blank">JSON-data</a> in het veld voor gegevenselementen en wijzig enkele waarden naar wens.</p> <p><img src="https://www.docugenerate.com/assets/posts/004-dynamic-employment-agreements/new-document.png" alt="Een nieuw document maken"/></p> <h2 id="conclusie">Conclusie</h2> <p>Het maken van arbeidsovereenkomsten met variabele clausules kan een uitdagende taak zijn, maar met het gebruik van uitgebreide syntax, dynamische voorwaarden, en JSON-data wordt het veel beter beheersbaar. Door deze technieken toe te passen, kunnen organisaties het documentgeneratieproces stroomlijnen, de efficiëntie verbeteren, en de nauwkeurigheid en aanpassing van arbeidsovereenkomsten waarborgen.</p> <p>Of het nu gaat om het verwerken van verschillende soorten dienstverbanden, vergoedingsstructuren, of secundaire arbeidsvoorwaardenpakketten, dynamische sjablonen bieden de flexibiliteit en controle die nodig zijn om uitgebreide en op maat gemaakte overeenkomsten te genereren. Deze aanpak stelt bedrijven in staat om zich te richten op strategische initiatieven, terwijl de administratieve last wordt verminderd.</p> <p>Om uw HR-processen verder te verbeteren, kunt u overwegen tools te integreren die documentgeneratie aanvullen. Platforms zoals <a href="https://www.qandle.com/" target="_blank" rel="nofollow noopener">Qandle</a> bieden bijvoorbeeld uitgebreide HR-oplossingen voor moderne werkplekken, van salarisadministratie tot medewerkersbetrokkenheid. In combinatie met geavanceerde documentgeneratie kunnen deze tools zorgen voor efficiënt contractbeheer binnen uw HR-activiteiten.</p> <h3 id="bronnen">Bronnen</h3> <ul> <li>Het <a href="https://www.docugenerate.com/assets/posts/004-dynamic-employment-agreements/Employment Agreement with Conditions.docx">Employment Agreement</a> sjabloon met voorwaarden en logische expressies.</li> <li>De voorbeeld-<a href="https://www.docugenerate.com/assets/posts/004-dynamic-employment-agreements/agreement-data.json" target="_blank">JSON-data</a> die is gebruikt voor het genereren van de overeenkomst.</li> <li>De <a href="https://www.docugenerate.com/assets/posts/004-dynamic-employment-agreements/Employment Agreement Generated.pdf" target="_blank">PDF-overeenkomst</a> gegenereerd op basis van het sjabloon met voorwaarden en de JSON-data.</li> </ul>]]></content> <author> <name>DocuGenerate</name> <email>support@docugenerate.com</email> </author> <category term="Contracts"/> <category term="Conditions"/> <category term="Expressions"/> <summary type="html"><![CDATA[Stroomlijn documentgeneratie en maak eenvoudig aangepaste arbeidsovereenkomsten. Ontdek hoe uitgebreide syntax, dynamische voorwaarden en JSON-data het proces kunnen vereenvoudigen, de efficiëntie kunnen verbeteren, en nauwkeurige overeenkomsten kunnen garanderen.]]></summary> <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.docugenerate.com/assets/posts/004-dynamic-employment-agreements/cover-image.png"/> <media:content medium="image" url="https://www.docugenerate.com/assets/posts/004-dynamic-employment-agreements/cover-image.png" xmlns:media="http://search.yahoo.com/mrss/"/> </entry> <entry> <title type="html">4 Manieren om Aanbiedingsbrieven in Bulk te Genereren</title> <link href="https://www.docugenerate.com/nl/blog/4-manieren-om-aanbiedingsbrieven-in-bulk-te-genereren/" rel="alternate" type="text/html" title="4 Manieren om Aanbiedingsbrieven in Bulk te Genereren"/> <published>2024-01-15T00:00:00+00:00</published> <updated>2024-01-15T00:00:00+00:00</updated> <id>https://www.docugenerate.com/nl/blog/4-manieren-om-aanbiedingsbrieven-in-bulk-te-genereren</id> <content type="html" xml:base="https://www.docugenerate.com/nl/blog/4-manieren-om-aanbiedingsbrieven-in-bulk-te-genereren/"><![CDATA[<h2 id="wat-is-een-aanbiedingsbrief">Wat is een Aanbiedingsbrief</h2> <p>Een aanbiedingsbrief is een formeel document dat door een werkgever wordt uitgereikt aan een kandidaat die is geselecteerd voor een functie. Het bevat de details van het aanbod, waaronder de functietitel, startdatum, vergoeding, en secundaire arbeidsvoorwaarden. Het dient als een <strong>schriftelijke overeenkomst</strong> tussen de <strong>werkgever en de kandidaat</strong>, en stelt verwachtingen voor de arbeidsrelatie vast.</p> <p>De aanbiedingsbrief is een belangrijke stap in het wervingsproces, omdat hij de <strong>voorwaarden van de arbeidsovereenkomst</strong> vastlegt, en ervoor helpt zorgen dat zowel de werkgever als de kandidaat op dezelfde lijn zitten. Het biedt de kandidaat ook de gelegenheid om de details van het aanbod te bekijken, en vragen te stellen of verduidelijking te vragen voordat de functie wordt geaccepteerd.</p> <p>Naast de voorwaarden van het aanbod kan de brief ook informatie bevatten over het bedrijf, zoals de missie, waarden, en cultuur, evenals eventueel relevant beleid en procedures. Al met al is de aanbiedingsbrief een cruciaal document dat helpt zorgen voor een soepele overgang naar een nieuwe baan en een positieve werkrelatie tussen de werkgever en de werknemer.</p> <h2 id="de-juiste-briefsjabloon-vinden">De Juiste Briefsjabloon Vinden</h2> <p>Er zijn verschillende bronnen beschikbaar voor het vinden van sjablonen voor aanbiedingsbrieven. Hier zijn een paar opties:</p> <ul> <li> <p><strong>Online Sjabloonbibliotheken</strong> die gratis en betaalde sjablonen voor aanbiedingsbrieven aanbieden. Deze sjablonen zijn eenvoudig aan te passen en bieden een basisstructuur voor het maken van een professioneel ogende aanbiedingsbrief.</p> </li> <li> <p><strong>HR-websites</strong> die sjablonen en voorbeeld-aanbiedingsbrieven bieden voor hun leden. Deze sjablonen kunnen een nuttige bron zijn voor HR-professionals en managers die aanbiedingsbrieven moeten maken voor hun organisaties.</p> </li> <li> <p><strong>Juridische websites</strong> die sjablonen en begeleiding bieden bij het maken van aanbiedingsbrieven die voldoen aan arbeidswetgeving. Deze sjablonen kunnen bijzonder nuttig zijn voor kleine bedrijven en startups die wettelijk conforme aanbiedingsbrieven moeten maken.</p> </li> <li> <p><strong>Professionele dienstverleners</strong>, zoals arbeidsrechtkantoren en HR-adviesbureaus, bieden aanbiedingsbriefsjablonen aan als onderdeel van hun diensten. Deze sjablonen zijn meestal uitgebreider en kunnen informatie bevatten over naleving van arbeidswetgeving, evenals begeleiding bij het aanpassen van de brief aan de specifieke behoeften van uw organisatie.</p> </li> </ul> <p>Ongeacht de bron is het belangrijk om elk sjabloon of voorbeeld-aanbiedingsbrief <strong>zorgvuldig te controleren</strong> voordat u het gebruikt. Het is een goed idee om een advocaat of HR-professional te raadplegen om ervoor te zorgen dat de brief voldoet aan alle relevante arbeidswetten en -regelgeving.</p> <h2 id="sjabloon-uploaden">Aan de Slag door het Sjabloon te Uploaden</h2> <p>Voor deze tutorial gebruiken we een standaard <a href="https://www.docugenerate.com/assets/posts/003-generate-letters-in-bulk/Job Offer Letter.docx">Job Offer Letter</a> sjabloon met een vrij eenvoudige structuur, dat <a href="https://www.docugenerate.com/nl/hulp/articles/wat-zijn-merge-tags/">merge-tags</a> bevat zoals <code class="language-plaintext highlighter-rouge">Employee Name</code>, <code class="language-plaintext highlighter-rouge">Company Name</code>, <code class="language-plaintext highlighter-rouge">Position Title</code>, <code class="language-plaintext highlighter-rouge">Start Date</code> en enkele andere. Ga in uw DocuGenerate-account verder en <a href="https://www.docugenerate.com/nl/hulp/articles/hoe-maak-ik-een-nieuw-sjabloon-aan/">maak een nieuw sjabloon</a> door het briefsjabloonbestand te uploaden, en u zou zoiets moeten zien als in de afbeelding hieronder.</p> <p><img src="https://www.docugenerate.com/assets/posts/003-generate-letters-in-bulk/letter-template.png" alt="Factuursjabloon met merge-tags"/></p> <p>Als u meer wilt weten over hoe u een bestaande brief omzet in een sjabloon, bekijk dan het vorige blogartikel <a href="https://www.docugenerate.com/nl/blog/hoe-u-een-bestaande-factuur-omzet-in-een-sjabloon/">Hoe u een Bestaande Factuur Omzet in een Sjabloon</a>, het principe is hetzelfde.</p> <h2 id="aanbiedingsbrieven-genereren">Aanbiedingsbrieven Genereren</h2> <p>Als het gaat om het genereren van aanbiedingsbrieven, is het hebben van het juiste sjabloon een cruciale eerste stap. Zodra het sjabloon is ingesteld, is de volgende stap om de brieven in bulk te genereren. Er zijn twee hoofdbenaderingen om dit te doen. De eerste benadering is om <strong>de webapplicatie te gebruiken</strong> en de brieven te genereren via de webinterface, wat de eenvoudigere en meer directe optie is.</p> <p>De tweede benadering, die technischer van aard is, betreft <strong>het gebruik van de API</strong>. Deze methode wordt doorgaans gebruikt door organisaties met meer geavanceerde technische vereisten en een behoefte aan meer aanpassing en automatisering. De API stelt de organisatie in staat om het proces van het genereren van aanbiedingsbrieven te integreren met hun bestaande systemen en processen, waardoor het eenvoudiger wordt om de brieven in bulk te genereren en het wervingsproces te stroomlijnen.</p> <p>Voor elke benadering komt de <strong>data</strong> voor het genereren van de brieven uit 2 verschillende bronnen (een <a href="https://www.docugenerate.com/assets/posts/003-generate-letters-in-bulk/Job Offer Letter.xlsx">Excel-bestand</a> en een <a href="https://www.docugenerate.com/assets/posts/003-generate-letters-in-bulk/Job Offer Letter.json" target="_blank">JSON-object</a>), waardoor het totale aantal manieren om de brieven te genereren op 4 uitkomt. <strong>Laten we beginnen!</strong></p> <h3 id="web-app-en-excel-data">1. Met de <strong>Web App</strong> &amp; <strong>Excel</strong>-Data</h3> <p>Laten we eerst de aanbiedingsbrieven genereren vanuit de webapplicatie en met het <a href="https://www.docugenerate.com/assets/posts/003-generate-letters-in-bulk/Job Offer Letter.xlsx">Excel-bestand</a> als gegevensbron. Klik op <code class="language-plaintext highlighter-rouge">New document</code> en selecteer vervolgens de optie <code class="language-plaintext highlighter-rouge">Excel or CSV file</code>. U kunt meer leren over het genereren van documenten met data uit Excel in <a href="https://www.docugenerate.com/nl/hulp/articles/documenten-genereren-vanuit-een-excel-of-csv-bestand/">dit artikel</a>.</p> <p><img src="https://www.docugenerate.com/assets/posts/003-generate-letters-in-bulk/web-app-excel-data-source.png" alt="De Excel-gegevensbron selecteren" class="desktop-width-50"/></p> <p>Voor elke geselecteerde rij in het Excel-bestand wordt een PDF-document gegenereerd op basis van het sjabloon, door de merge-tags te vervangen door de daadwerkelijke data. Standaard worden alle rijen uit het Excel-bestand gebruikt om de aanbiedingsbrieven te genereren. Maar u kunt ook selecteren welke u wilt gebruiken door op de rijen te klikken, waarbij de geselecteerde rijen geel worden gemarkeerd. Als u <strong>snel een voorbeeld</strong> wilt zien van hoe de brief eruitziet, kunt u gewoon <strong>één rij selecteren</strong>, zoals in de video hieronder:</p> <p><img src="https://www.docugenerate.com/assets/posts/003-generate-letters-in-bulk/web-app-excel-data.gif" alt="Een PDF-brief genereren uit het Job Offer-sjabloon en Excel-data"/></p> <p><strong>Belangrijk</strong>: Om ervoor te zorgen dat de documenten correct worden gegenereerd, moeten de <strong>kolomnamen</strong> in het Excel-bestand precies overeenkomen met de <strong>merge-tags</strong> uit het sjabloon: <code class="language-plaintext highlighter-rouge">Employee Name</code>, <code class="language-plaintext highlighter-rouge">Company Name</code>, <code class="language-plaintext highlighter-rouge">Position Title</code>, <code class="language-plaintext highlighter-rouge">Start Date</code>, enzovoort. U kunt <a href="https://www.docugenerate.com/assets/posts/003-generate-letters-in-bulk/Job Offer Letter (Excel data).pdf" target="_blank">de gegenereerde brieven downloaden</a> als u het eindresultaat wilt zien.</p> <h3 id="web-app-en-json-data">2. Met de <strong>Web App</strong> &amp; <strong>JSON</strong>-Data</h3> <p>Vervolgens genereren we de aanbiedingsbrieven vanuit de webapplicatie en met behulp van <a href="https://www.docugenerate.com/assets/posts/003-generate-letters-in-bulk/Job Offer Letter.json" target="_blank">JSON-data</a>. Klik op <code class="language-plaintext highlighter-rouge">New document</code> en selecteer vervolgens de optie <code class="language-plaintext highlighter-rouge">JSON data</code>. U kunt meer leren over het genereren van documenten met JSON in <a href="https://www.docugenerate.com/nl/hulp/articles/documenten-genereren-vanuit-json-data/">dit artikel</a>.</p> <p><img src="https://www.docugenerate.com/assets/posts/003-generate-letters-in-bulk/web-app-json-data-source.png" alt="De JSON-gegevensbron selecteren" class="desktop-width-50"/></p> <p>Open het <a href="https://www.docugenerate.com/assets/posts/003-generate-letters-in-bulk/Job Offer Letter.json" target="_blank">JSON-data</a> bestand en kopieer de inhoud, of kopieer deze rechtstreeks uit het tekstvak hieronder. Zoals u kunt zien, bevat de JSON-waarde het equivalent van het Excel-bestand, maar in plaats van rijen hebben we een lijst met objecten die de data vertegenwoordigen. En net als bij de kolomnamen in het Excel-bestand, moeten de <strong>JSON-sleutels</strong> precies overeenkomen met de <strong>merge-tags</strong> uit het sjabloon: <code class="language-plaintext highlighter-rouge">Employee Name</code>, <code class="language-plaintext highlighter-rouge">Company Name</code>, <code class="language-plaintext highlighter-rouge">Position Title</code>, <code class="language-plaintext highlighter-rouge">Start Date</code>, enzovoort, om ervoor te zorgen dat de mail merge correct wordt uitgevoerd.</p> <div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">[{</span><span class="nl">"Employee Name"</span><span class="p">:</span><span class="s2">"Gerhardt Le Teve"</span><span class="p">,</span><span class="nl">"Company Name"</span><span class="p">:</span><span class="s2">"Dynabox"</span><span class="p">,</span><span class="nl">"Position Title"</span><span class="p">:</span><span class="s2">"Engineer III"</span><span class="p">,</span><span class="nl">"Start Date"</span><span class="p">:</span><span class="s2">"5/4/2022"</span><span class="p">,</span><span class="nl">"Manager Name"</span><span class="p">:</span><span class="s2">"Ripley Radin"</span><span class="p">,</span><span class="nl">"Yearly Compensation"</span><span class="p">:</span><span class="s2">"$49790.29"</span><span class="p">,</span><span class="nl">"Bonus Amount"</span><span class="p">:</span><span class="s2">"$3184.79"</span><span class="p">,</span><span class="nl">"Commision Amount"</span><span class="p">:</span><span class="s2">"$3394.85"</span><span class="p">,</span><span class="nl">"Stocks Number"</span><span class="p">:</span><span class="mi">43581</span><span class="p">,</span><span class="nl">"Expiry Date"</span><span class="p">:</span><span class="s2">"4/29/2022"</span><span class="p">,</span><span class="nl">"Name of Signatory"</span><span class="p">:</span><span class="s2">"Cally Pollak"</span><span class="p">,</span><span class="nl">"Title of Signatory"</span><span class="p">:</span><span class="s2">"Analog Circuit Design manager"</span><span class="p">},</span><span class="w">
</span><span class="p">{</span><span class="nl">"Employee Name"</span><span class="p">:</span><span class="s2">"Jobi Bertson"</span><span class="p">,</span><span class="nl">"Company Name"</span><span class="p">:</span><span class="s2">"Twinte"</span><span class="p">,</span><span class="nl">"Position Title"</span><span class="p">:</span><span class="s2">"Geologist II"</span><span class="p">,</span><span class="nl">"Start Date"</span><span class="p">:</span><span class="s2">"4/20/2022"</span><span class="p">,</span><span class="nl">"Manager Name"</span><span class="p">:</span><span class="s2">"Maxi Poge"</span><span class="p">,</span><span class="nl">"Yearly Compensation"</span><span class="p">:</span><span class="s2">"$17782.46"</span><span class="p">,</span><span class="nl">"Bonus Amount"</span><span class="p">:</span><span class="s2">"$4254.18"</span><span class="p">,</span><span class="nl">"Commision Amount"</span><span class="p">:</span><span class="s2">"$2543.53"</span><span class="p">,</span><span class="nl">"Stocks Number"</span><span class="p">:</span><span class="mi">27069</span><span class="p">,</span><span class="nl">"Expiry Date"</span><span class="p">:</span><span class="s2">"12/18/2022"</span><span class="p">,</span><span class="nl">"Name of Signatory"</span><span class="p">:</span><span class="s2">"Laurene Coldbathe"</span><span class="p">,</span><span class="nl">"Title of Signatory"</span><span class="p">:</span><span class="s2">"Senior Financial Analyst"</span><span class="p">},</span><span class="w">
</span><span class="p">{</span><span class="nl">"Employee Name"</span><span class="p">:</span><span class="s2">"Mitchell Brettel"</span><span class="p">,</span><span class="nl">"Company Name"</span><span class="p">:</span><span class="s2">"Kazu"</span><span class="p">,</span><span class="nl">"Position Title"</span><span class="p">:</span><span class="s2">"VP Accounting"</span><span class="p">,</span><span class="nl">"Start Date"</span><span class="p">:</span><span class="s2">"4/28/2022"</span><span class="p">,</span><span class="nl">"Manager Name"</span><span class="p">:</span><span class="s2">"Paolo Egerton"</span><span class="p">,</span><span class="nl">"Yearly Compensation"</span><span class="p">:</span><span class="s2">"$56473.97"</span><span class="p">,</span><span class="nl">"Bonus Amount"</span><span class="p">:</span><span class="s2">"$4753.14"</span><span class="p">,</span><span class="nl">"Commision Amount"</span><span class="p">:</span><span class="s2">"$3355.65"</span><span class="p">,</span><span class="nl">"Stocks Number"</span><span class="p">:</span><span class="mi">32523</span><span class="p">,</span><span class="nl">"Expiry Date"</span><span class="p">:</span><span class="s2">"4/11/2022"</span><span class="p">,</span><span class="nl">"Name of Signatory"</span><span class="p">:</span><span class="s2">"Laurence Glabach"</span><span class="p">,</span><span class="nl">"Title of Signatory"</span><span class="p">:</span><span class="s2">"Environmental Specialist"</span><span class="p">},</span><span class="w">
</span><span class="p">{</span><span class="nl">"Employee Name"</span><span class="p">:</span><span class="s2">"Terrye Barrs"</span><span class="p">,</span><span class="nl">"Company Name"</span><span class="p">:</span><span class="s2">"Twitterwire"</span><span class="p">,</span><span class="nl">"Position Title"</span><span class="p">:</span><span class="s2">"Senior Sales Associate"</span><span class="p">,</span><span class="nl">"Start Date"</span><span class="p">:</span><span class="s2">"1/11/2023"</span><span class="p">,</span><span class="nl">"Manager Name"</span><span class="p">:</span><span class="s2">"Deina Campana"</span><span class="p">,</span><span class="nl">"Yearly Compensation"</span><span class="p">:</span><span class="s2">"$2850.24"</span><span class="p">,</span><span class="nl">"Bonus Amount"</span><span class="p">:</span><span class="s2">"$6657.63"</span><span class="p">,</span><span class="nl">"Commision Amount"</span><span class="p">:</span><span class="s2">"$2666.43"</span><span class="p">,</span><span class="nl">"Stocks Number"</span><span class="p">:</span><span class="mi">32831</span><span class="p">,</span><span class="nl">"Expiry Date"</span><span class="p">:</span><span class="s2">"3/26/2022"</span><span class="p">,</span><span class="nl">"Name of Signatory"</span><span class="p">:</span><span class="s2">"Ginevra Stelfox"</span><span class="p">,</span><span class="nl">"Title of Signatory"</span><span class="p">:</span><span class="s2">"Desktop Support Technician"</span><span class="p">},</span><span class="w">
</span><span class="p">{</span><span class="nl">"Employee Name"</span><span class="p">:</span><span class="s2">"Orbadiah Seear"</span><span class="p">,</span><span class="nl">"Company Name"</span><span class="p">:</span><span class="s2">"Zoozzy"</span><span class="p">,</span><span class="nl">"Position Title"</span><span class="p">:</span><span class="s2">"Technical Writer"</span><span class="p">,</span><span class="nl">"Start Date"</span><span class="p">:</span><span class="s2">"6/7/2022"</span><span class="p">,</span><span class="nl">"Manager Name"</span><span class="p">:</span><span class="s2">"Filia Boutcher"</span><span class="p">,</span><span class="nl">"Yearly Compensation"</span><span class="p">:</span><span class="s2">"$9147.02"</span><span class="p">,</span><span class="nl">"Bonus Amount"</span><span class="p">:</span><span class="s2">"$410.52"</span><span class="p">,</span><span class="nl">"Commision Amount"</span><span class="p">:</span><span class="s2">"$9620.76"</span><span class="p">,</span><span class="nl">"Stocks Number"</span><span class="p">:</span><span class="mi">49604</span><span class="p">,</span><span class="nl">"Expiry Date"</span><span class="p">:</span><span class="s2">"10/10/2022"</span><span class="p">,</span><span class="nl">"Name of Signatory"</span><span class="p">:</span><span class="s2">"Tressa Lewendon"</span><span class="p">,</span><span class="nl">"Title of Signatory"</span><span class="p">:</span><span class="s2">"Quality Engineer"</span><span class="p">},</span><span class="w">
</span><span class="p">{</span><span class="nl">"Employee Name"</span><span class="p">:</span><span class="s2">"Kaja Kubek"</span><span class="p">,</span><span class="nl">"Company Name"</span><span class="p">:</span><span class="s2">"Kamba"</span><span class="p">,</span><span class="nl">"Position Title"</span><span class="p">:</span><span class="s2">"Software Engineer IV"</span><span class="p">,</span><span class="nl">"Start Date"</span><span class="p">:</span><span class="s2">"1/7/2023"</span><span class="p">,</span><span class="nl">"Manager Name"</span><span class="p">:</span><span class="s2">"Siobhan Rossi"</span><span class="p">,</span><span class="nl">"Yearly Compensation"</span><span class="p">:</span><span class="s2">"$57442.88"</span><span class="p">,</span><span class="nl">"Bonus Amount"</span><span class="p">:</span><span class="s2">"$4211.76"</span><span class="p">,</span><span class="nl">"Commision Amount"</span><span class="p">:</span><span class="s2">"$556.41"</span><span class="p">,</span><span class="nl">"Stocks Number"</span><span class="p">:</span><span class="mi">20061</span><span class="p">,</span><span class="nl">"Expiry Date"</span><span class="p">:</span><span class="s2">"3/12/2022"</span><span class="p">,</span><span class="nl">"Name of Signatory"</span><span class="p">:</span><span class="s2">"Phillipp Cromarty"</span><span class="p">,</span><span class="nl">"Title of Signatory"</span><span class="p">:</span><span class="s2">"Technical Writer"</span><span class="p">},</span><span class="w">
</span><span class="p">{</span><span class="nl">"Employee Name"</span><span class="p">:</span><span class="s2">"Sherry Slowly"</span><span class="p">,</span><span class="nl">"Company Name"</span><span class="p">:</span><span class="s2">"Roodel"</span><span class="p">,</span><span class="nl">"Position Title"</span><span class="p">:</span><span class="s2">"Web Designer III"</span><span class="p">,</span><span class="nl">"Start Date"</span><span class="p">:</span><span class="s2">"12/7/2022"</span><span class="p">,</span><span class="nl">"Manager Name"</span><span class="p">:</span><span class="s2">"Ranique Stockdale"</span><span class="p">,</span><span class="nl">"Yearly Compensation"</span><span class="p">:</span><span class="s2">"$52731.84"</span><span class="p">,</span><span class="nl">"Bonus Amount"</span><span class="p">:</span><span class="s2">"$454.63"</span><span class="p">,</span><span class="nl">"Commision Amount"</span><span class="p">:</span><span class="s2">"$8856.27"</span><span class="p">,</span><span class="nl">"Stocks Number"</span><span class="p">:</span><span class="mi">49158</span><span class="p">,</span><span class="nl">"Expiry Date"</span><span class="p">:</span><span class="s2">"4/1/2022"</span><span class="p">,</span><span class="nl">"Name of Signatory"</span><span class="p">:</span><span class="s2">"Vernen Hedaux"</span><span class="p">,</span><span class="nl">"Title of Signatory"</span><span class="p">:</span><span class="s2">"Software Consultant"</span><span class="p">},</span><span class="w">
</span><span class="p">{</span><span class="nl">"Employee Name"</span><span class="p">:</span><span class="s2">"Maje McElrea"</span><span class="p">,</span><span class="nl">"Company Name"</span><span class="p">:</span><span class="s2">"Eazzy"</span><span class="p">,</span><span class="nl">"Position Title"</span><span class="p">:</span><span class="s2">"Senior Quality Engineer"</span><span class="p">,</span><span class="nl">"Start Date"</span><span class="p">:</span><span class="s2">"11/6/2022"</span><span class="p">,</span><span class="nl">"Manager Name"</span><span class="p">:</span><span class="s2">"Mabel Alvis"</span><span class="p">,</span><span class="nl">"Yearly Compensation"</span><span class="p">:</span><span class="s2">"$93416.00"</span><span class="p">,</span><span class="nl">"Bonus Amount"</span><span class="p">:</span><span class="s2">"$5614.70"</span><span class="p">,</span><span class="nl">"Commision Amount"</span><span class="p">:</span><span class="s2">"$1808.73"</span><span class="p">,</span><span class="nl">"Stocks Number"</span><span class="p">:</span><span class="mi">23205</span><span class="p">,</span><span class="nl">"Expiry Date"</span><span class="p">:</span><span class="s2">"5/29/2022"</span><span class="p">,</span><span class="nl">"Name of Signatory"</span><span class="p">:</span><span class="s2">"Normie Mariaud"</span><span class="p">,</span><span class="nl">"Title of Signatory"</span><span class="p">:</span><span class="s2">"Staff Scientist"</span><span class="p">},</span><span class="w">
</span><span class="p">{</span><span class="nl">"Employee Name"</span><span class="p">:</span><span class="s2">"Babs Vsanelli"</span><span class="p">,</span><span class="nl">"Company Name"</span><span class="p">:</span><span class="s2">"Blogtags"</span><span class="p">,</span><span class="nl">"Position Title"</span><span class="p">:</span><span class="s2">"Food Chemist"</span><span class="p">,</span><span class="nl">"Start Date"</span><span class="p">:</span><span class="s2">"7/9/2022"</span><span class="p">,</span><span class="nl">"Manager Name"</span><span class="p">:</span><span class="s2">"Hertha Jancik"</span><span class="p">,</span><span class="nl">"Yearly Compensation"</span><span class="p">:</span><span class="s2">"$94107.02"</span><span class="p">,</span><span class="nl">"Bonus Amount"</span><span class="p">:</span><span class="s2">"$2421.30"</span><span class="p">,</span><span class="nl">"Commision Amount"</span><span class="p">:</span><span class="s2">"$8328.46"</span><span class="p">,</span><span class="nl">"Stocks Number"</span><span class="p">:</span><span class="mi">32179</span><span class="p">,</span><span class="nl">"Expiry Date"</span><span class="p">:</span><span class="s2">"9/14/2022"</span><span class="p">,</span><span class="nl">"Name of Signatory"</span><span class="p">:</span><span class="s2">"Stearn Dominec"</span><span class="p">,</span><span class="nl">"Title of Signatory"</span><span class="p">:</span><span class="s2">"Marketing Assistant"</span><span class="p">},</span><span class="w">
</span><span class="p">{</span><span class="nl">"Employee Name"</span><span class="p">:</span><span class="s2">"Justina Halbord"</span><span class="p">,</span><span class="nl">"Company Name"</span><span class="p">:</span><span class="s2">"InnoZ"</span><span class="p">,</span><span class="nl">"Position Title"</span><span class="p">:</span><span class="s2">"Chief Design Engineer"</span><span class="p">,</span><span class="nl">"Start Date"</span><span class="p">:</span><span class="s2">"7/9/2022"</span><span class="p">,</span><span class="nl">"Manager Name"</span><span class="p">:</span><span class="s2">"Tandie Goffe"</span><span class="p">,</span><span class="nl">"Yearly Compensation"</span><span class="p">:</span><span class="s2">"$97200.78"</span><span class="p">,</span><span class="nl">"Bonus Amount"</span><span class="p">:</span><span class="s2">"$3011.41"</span><span class="p">,</span><span class="nl">"Commision Amount"</span><span class="p">:</span><span class="s2">"$9805.45"</span><span class="p">,</span><span class="nl">"Stocks Number"</span><span class="p">:</span><span class="mi">33500</span><span class="p">,</span><span class="nl">"Expiry Date"</span><span class="p">:</span><span class="s2">"6/3/2022"</span><span class="p">,</span><span class="nl">"Name of Signatory"</span><span class="p">:</span><span class="s2">"Michal Paling"</span><span class="p">,</span><span class="nl">"Title of Signatory"</span><span class="p">:</span><span class="s2">"Account Representative III"</span><span class="p">},</span><span class="w">
</span><span class="p">{</span><span class="nl">"Employee Name"</span><span class="p">:</span><span class="s2">"Mark Dunstall"</span><span class="p">,</span><span class="nl">"Company Name"</span><span class="p">:</span><span class="s2">"Zoonder"</span><span class="p">,</span><span class="nl">"Position Title"</span><span class="p">:</span><span class="s2">"Programmer Analyst IV"</span><span class="p">,</span><span class="nl">"Start Date"</span><span class="p">:</span><span class="s2">"9/26/2022"</span><span class="p">,</span><span class="nl">"Manager Name"</span><span class="p">:</span><span class="s2">"Jennine Lilford"</span><span class="p">,</span><span class="nl">"Yearly Compensation"</span><span class="p">:</span><span class="s2">"$73016.76"</span><span class="p">,</span><span class="nl">"Bonus Amount"</span><span class="p">:</span><span class="s2">"$1984.14"</span><span class="p">,</span><span class="nl">"Commision Amount"</span><span class="p">:</span><span class="s2">"$1870.99"</span><span class="p">,</span><span class="nl">"Stocks Number"</span><span class="p">:</span><span class="mi">13785</span><span class="p">,</span><span class="nl">"Expiry Date"</span><span class="p">:</span><span class="s2">"2/28/2022"</span><span class="p">,</span><span class="nl">"Name of Signatory"</span><span class="p">:</span><span class="s2">"Amble Giller"</span><span class="p">,</span><span class="nl">"Title of Signatory"</span><span class="p">:</span><span class="s2">"Desktop Support Technician"</span><span class="p">},</span><span class="w">
</span><span class="p">{</span><span class="nl">"Employee Name"</span><span class="p">:</span><span class="s2">"Delmar O'Rodane"</span><span class="p">,</span><span class="nl">"Company Name"</span><span class="p">:</span><span class="s2">"Trudeo"</span><span class="p">,</span><span class="nl">"Position Title"</span><span class="p">:</span><span class="s2">"Human Resources Manager"</span><span class="p">,</span><span class="nl">"Start Date"</span><span class="p">:</span><span class="s2">"6/5/2022"</span><span class="p">,</span><span class="nl">"Manager Name"</span><span class="p">:</span><span class="s2">"Klemens Drover"</span><span class="p">,</span><span class="nl">"Yearly Compensation"</span><span class="p">:</span><span class="s2">"$62596.21"</span><span class="p">,</span><span class="nl">"Bonus Amount"</span><span class="p">:</span><span class="s2">"$414.20"</span><span class="p">,</span><span class="nl">"Commision Amount"</span><span class="p">:</span><span class="s2">"$7814.08"</span><span class="p">,</span><span class="nl">"Stocks Number"</span><span class="p">:</span><span class="mi">33729</span><span class="p">,</span><span class="nl">"Expiry Date"</span><span class="p">:</span><span class="s2">"7/13/2022"</span><span class="p">,</span><span class="nl">"Name of Signatory"</span><span class="p">:</span><span class="s2">"Shepard Skillen"</span><span class="p">,</span><span class="nl">"Title of Signatory"</span><span class="p">:</span><span class="s2">"Software Engineer III"</span><span class="p">},</span><span class="w">
</span><span class="p">{</span><span class="nl">"Employee Name"</span><span class="p">:</span><span class="s2">"Christophorus Breyt"</span><span class="p">,</span><span class="nl">"Company Name"</span><span class="p">:</span><span class="s2">"Skinte"</span><span class="p">,</span><span class="nl">"Position Title"</span><span class="p">:</span><span class="s2">"Structural Analysis Engineer"</span><span class="p">,</span><span class="nl">"Start Date"</span><span class="p">:</span><span class="s2">"1/12/2023"</span><span class="p">,</span><span class="nl">"Manager Name"</span><span class="p">:</span><span class="s2">"Cori Cattemull"</span><span class="p">,</span><span class="nl">"Yearly Compensation"</span><span class="p">:</span><span class="s2">"$23244.42"</span><span class="p">,</span><span class="nl">"Bonus Amount"</span><span class="p">:</span><span class="s2">"$8168.93"</span><span class="p">,</span><span class="nl">"Commision Amount"</span><span class="p">:</span><span class="s2">"$3392.79"</span><span class="p">,</span><span class="nl">"Stocks Number"</span><span class="p">:</span><span class="mi">37771</span><span class="p">,</span><span class="nl">"Expiry Date"</span><span class="p">:</span><span class="s2">"7/12/2022"</span><span class="p">,</span><span class="nl">"Name of Signatory"</span><span class="p">:</span><span class="s2">"Tim Bulstrode"</span><span class="p">,</span><span class="nl">"Title of Signatory"</span><span class="p">:</span><span class="s2">"Nurse"</span><span class="p">},</span><span class="w">
</span><span class="p">{</span><span class="nl">"Employee Name"</span><span class="p">:</span><span class="s2">"Ginelle Reams"</span><span class="p">,</span><span class="nl">"Company Name"</span><span class="p">:</span><span class="s2">"Demizz"</span><span class="p">,</span><span class="nl">"Position Title"</span><span class="p">:</span><span class="s2">"Recruiter"</span><span class="p">,</span><span class="nl">"Start Date"</span><span class="p">:</span><span class="s2">"4/30/2022"</span><span class="p">,</span><span class="nl">"Manager Name"</span><span class="p">:</span><span class="s2">"Bartram Whitlaw"</span><span class="p">,</span><span class="nl">"Yearly Compensation"</span><span class="p">:</span><span class="s2">"$43442.37"</span><span class="p">,</span><span class="nl">"Bonus Amount"</span><span class="p">:</span><span class="s2">"$1202.09"</span><span class="p">,</span><span class="nl">"Commision Amount"</span><span class="p">:</span><span class="s2">"$8469.55"</span><span class="p">,</span><span class="nl">"Stocks Number"</span><span class="p">:</span><span class="mi">31971</span><span class="p">,</span><span class="nl">"Expiry Date"</span><span class="p">:</span><span class="s2">"9/14/2022"</span><span class="p">,</span><span class="nl">"Name of Signatory"</span><span class="p">:</span><span class="s2">"Dusty Haisell"</span><span class="p">,</span><span class="nl">"Title of Signatory"</span><span class="p">:</span><span class="s2">"Programmer Analyst III"</span><span class="p">},</span><span class="w">
</span><span class="p">{</span><span class="nl">"Employee Name"</span><span class="p">:</span><span class="s2">"Doralynn Korlat"</span><span class="p">,</span><span class="nl">"Company Name"</span><span class="p">:</span><span class="s2">"Topiclounge"</span><span class="p">,</span><span class="nl">"Position Title"</span><span class="p">:</span><span class="s2">"Senior Developer"</span><span class="p">,</span><span class="nl">"Start Date"</span><span class="p">:</span><span class="s2">"12/24/2022"</span><span class="p">,</span><span class="nl">"Manager Name"</span><span class="p">:</span><span class="s2">"Dacy McGrath"</span><span class="p">,</span><span class="nl">"Yearly Compensation"</span><span class="p">:</span><span class="s2">"$77291.56"</span><span class="p">,</span><span class="nl">"Bonus Amount"</span><span class="p">:</span><span class="s2">"$9879.53"</span><span class="p">,</span><span class="nl">"Commision Amount"</span><span class="p">:</span><span class="s2">"$7814.24"</span><span class="p">,</span><span class="nl">"Stocks Number"</span><span class="p">:</span><span class="mi">20870</span><span class="p">,</span><span class="nl">"Expiry Date"</span><span class="p">:</span><span class="s2">"3/30/2022"</span><span class="p">,</span><span class="nl">"Name of Signatory"</span><span class="p">:</span><span class="s2">"Link Coggon"</span><span class="p">,</span><span class="nl">"Title of Signatory"</span><span class="p">:</span><span class="s2">"Assistant Media Planner"</span><span class="p">},</span><span class="w">
</span><span class="p">{</span><span class="nl">"Employee Name"</span><span class="p">:</span><span class="s2">"Aile Rist"</span><span class="p">,</span><span class="nl">"Company Name"</span><span class="p">:</span><span class="s2">"Edgeclub"</span><span class="p">,</span><span class="nl">"Position Title"</span><span class="p">:</span><span class="s2">"Cost Accountant"</span><span class="p">,</span><span class="nl">"Start Date"</span><span class="p">:</span><span class="s2">"11/26/2022"</span><span class="p">,</span><span class="nl">"Manager Name"</span><span class="p">:</span><span class="s2">"Evelin Rannald"</span><span class="p">,</span><span class="nl">"Yearly Compensation"</span><span class="p">:</span><span class="s2">"$67605.67"</span><span class="p">,</span><span class="nl">"Bonus Amount"</span><span class="p">:</span><span class="s2">"$8648.40"</span><span class="p">,</span><span class="nl">"Commision Amount"</span><span class="p">:</span><span class="s2">"$636.04"</span><span class="p">,</span><span class="nl">"Stocks Number"</span><span class="p">:</span><span class="mi">12029</span><span class="p">,</span><span class="nl">"Expiry Date"</span><span class="p">:</span><span class="s2">"4/3/2022"</span><span class="p">,</span><span class="nl">"Name of Signatory"</span><span class="p">:</span><span class="s2">"Saw Custance"</span><span class="p">,</span><span class="nl">"Title of Signatory"</span><span class="p">:</span><span class="s2">"Junior Executive"</span><span class="p">},</span><span class="w">
</span><span class="p">{</span><span class="nl">"Employee Name"</span><span class="p">:</span><span class="s2">"Ramon Fearn"</span><span class="p">,</span><span class="nl">"Company Name"</span><span class="p">:</span><span class="s2">"Twiyo"</span><span class="p">,</span><span class="nl">"Position Title"</span><span class="p">:</span><span class="s2">"Payment Adjustment Coordinator"</span><span class="p">,</span><span class="nl">"Start Date"</span><span class="p">:</span><span class="s2">"1/17/2023"</span><span class="p">,</span><span class="nl">"Manager Name"</span><span class="p">:</span><span class="s2">"Hunfredo Brinicombe"</span><span class="p">,</span><span class="nl">"Yearly Compensation"</span><span class="p">:</span><span class="s2">"$96561.93"</span><span class="p">,</span><span class="nl">"Bonus Amount"</span><span class="p">:</span><span class="s2">"$2201.53"</span><span class="p">,</span><span class="nl">"Commision Amount"</span><span class="p">:</span><span class="s2">"$5735.85"</span><span class="p">,</span><span class="nl">"Stocks Number"</span><span class="p">:</span><span class="mi">27966</span><span class="p">,</span><span class="nl">"Expiry Date"</span><span class="p">:</span><span class="s2">"10/7/2022"</span><span class="p">,</span><span class="nl">"Name of Signatory"</span><span class="p">:</span><span class="s2">"Kurt Ickovic"</span><span class="p">,</span><span class="nl">"Title of Signatory"</span><span class="p">:</span><span class="s2">"Research Associate"</span><span class="p">},</span><span class="w">
</span><span class="p">{</span><span class="nl">"Employee Name"</span><span class="p">:</span><span class="s2">"Laverna Fullalove"</span><span class="p">,</span><span class="nl">"Company Name"</span><span class="p">:</span><span class="s2">"Buzzster"</span><span class="p">,</span><span class="nl">"Position Title"</span><span class="p">:</span><span class="s2">"Civil Engineer"</span><span class="p">,</span><span class="nl">"Start Date"</span><span class="p">:</span><span class="s2">"10/7/2022"</span><span class="p">,</span><span class="nl">"Manager Name"</span><span class="p">:</span><span class="s2">"Avictor Rentalll"</span><span class="p">,</span><span class="nl">"Yearly Compensation"</span><span class="p">:</span><span class="s2">"$22680.40"</span><span class="p">,</span><span class="nl">"Bonus Amount"</span><span class="p">:</span><span class="s2">"$9615.83"</span><span class="p">,</span><span class="nl">"Commision Amount"</span><span class="p">:</span><span class="s2">"$3511.52"</span><span class="p">,</span><span class="nl">"Stocks Number"</span><span class="p">:</span><span class="mi">47127</span><span class="p">,</span><span class="nl">"Expiry Date"</span><span class="p">:</span><span class="s2">"10/12/2022"</span><span class="p">,</span><span class="nl">"Name of Signatory"</span><span class="p">:</span><span class="s2">"Moss Priden"</span><span class="p">,</span><span class="nl">"Title of Signatory"</span><span class="p">:</span><span class="s2">"Community Outreach Specialist"</span><span class="p">},</span><span class="w">
</span><span class="p">{</span><span class="nl">"Employee Name"</span><span class="p">:</span><span class="s2">"Lotte Piggford"</span><span class="p">,</span><span class="nl">"Company Name"</span><span class="p">:</span><span class="s2">"Jaxbean"</span><span class="p">,</span><span class="nl">"Position Title"</span><span class="p">:</span><span class="s2">"Electrical Engineer"</span><span class="p">,</span><span class="nl">"Start Date"</span><span class="p">:</span><span class="s2">"2/13/2022"</span><span class="p">,</span><span class="nl">"Manager Name"</span><span class="p">:</span><span class="s2">"Anjela Scone"</span><span class="p">,</span><span class="nl">"Yearly Compensation"</span><span class="p">:</span><span class="s2">"$88211.64"</span><span class="p">,</span><span class="nl">"Bonus Amount"</span><span class="p">:</span><span class="s2">"$2298.14"</span><span class="p">,</span><span class="nl">"Commision Amount"</span><span class="p">:</span><span class="s2">"$209.56"</span><span class="p">,</span><span class="nl">"Stocks Number"</span><span class="p">:</span><span class="mi">39588</span><span class="p">,</span><span class="nl">"Expiry Date"</span><span class="p">:</span><span class="s2">"7/15/2022"</span><span class="p">,</span><span class="nl">"Name of Signatory"</span><span class="p">:</span><span class="s2">"Izabel Kynaston"</span><span class="p">,</span><span class="nl">"Title of Signatory"</span><span class="p">:</span><span class="s2">"Recruiting Manager"</span><span class="p">},</span><span class="w">
</span><span class="p">{</span><span class="nl">"Employee Name"</span><span class="p">:</span><span class="s2">"Hansiain Hanmer"</span><span class="p">,</span><span class="nl">"Company Name"</span><span class="p">:</span><span class="s2">"Bluejam"</span><span class="p">,</span><span class="nl">"Position Title"</span><span class="p">:</span><span class="s2">"Project Manager"</span><span class="p">,</span><span class="nl">"Start Date"</span><span class="p">:</span><span class="s2">"3/25/2022"</span><span class="p">,</span><span class="nl">"Manager Name"</span><span class="p">:</span><span class="s2">"Nicolai Aleksich"</span><span class="p">,</span><span class="nl">"Yearly Compensation"</span><span class="p">:</span><span class="s2">"$91649.01"</span><span class="p">,</span><span class="nl">"Bonus Amount"</span><span class="p">:</span><span class="s2">"$3503.64"</span><span class="p">,</span><span class="nl">"Commision Amount"</span><span class="p">:</span><span class="s2">"$6059.65"</span><span class="p">,</span><span class="nl">"Stocks Number"</span><span class="p">:</span><span class="mi">34179</span><span class="p">,</span><span class="nl">"Expiry Date"</span><span class="p">:</span><span class="s2">"3/10/2022"</span><span class="p">,</span><span class="nl">"Name of Signatory"</span><span class="p">:</span><span class="s2">"Lukas Kenchington"</span><span class="p">,</span><span class="nl">"Title of Signatory"</span><span class="p">:</span><span class="s2">"Marketing Manager"</span><span class="p">}]</span><span class="w">
</span></code></pre></div></div> <p>Nadat u de JSON-data heeft gekopieerd, gaat u terug naar de webapp van DocuGenerate en plakt u de waarde in het veld met de tekst <code class="language-plaintext highlighter-rouge">Enter a JSON array of objects</code>. In tegenstelling tot de optie <a href="#web-app-en-excel-data">Excel-data</a>, is het bij gebruik van JSON niet mogelijk om te selecteren welke items uit de JSON-array worden gebruikt, en worden <strong>alle gegevenselementen</strong> gebruikt om de documenten te genereren.</p> <p><img src="https://www.docugenerate.com/assets/posts/003-generate-letters-in-bulk/web-app-json-data.gif" alt="Meerdere PDF-brieven genereren uit het Job Offer-sjabloon en JSON-data"/></p> <p>Als u de aanbiedingsbrieven wilt zien die zijn gegenereerd op basis van de JSON-data, kunt u <a href="https://www.docugenerate.com/assets/posts/003-generate-letters-in-bulk/Job Offer Letter (JSON data).pdf" target="_blank">het PDF-bestand downloaden</a>.</p> <h3 id="api-en-excel-data">3. Met de <strong>API</strong> &amp; <strong>Excel</strong>-Data</h3> <p>Voor de laatste twee secties gebruiken we de <a href="https://api.docugenerate.com/" target="_blank">API van DocuGenerate</a> om de aanbiedingsbrieven te genereren. En om de interactie met de API eenvoudiger te maken, hebben we een <a href="https://www.docugenerate.com/assets/posts/003-generate-letters-in-bulk/DocuGenerate.postman_collection.json" target="_blank">Postman-collectie</a> gemaakt die u kunt importeren in uw <a href="https://www.postman.com/" target="_blank" rel="noopener">Postman</a>-werkruimte. Na het importeren van de collectie zou u de eindpunten <code class="language-plaintext highlighter-rouge">Template</code> en <code class="language-plaintext highlighter-rouge">Document</code> vermeld moeten zien, zoals in de volgende afbeelding:</p> <p><img src="https://www.docugenerate.com/assets/posts/003-generate-letters-in-bulk/postman-api-collection.png" alt="De API-collectie van DocuGenerate instellen" class="desktop-width-50"/></p> <p>Vervolgens moet u de sectie <code class="language-plaintext highlighter-rouge">Authorization</code> van de Postman-collectie configureren door uw unieke API-sleutel in te voeren, die u kunt vinden op de <a href="https://app.docugenerate.com/settings" target="_blank">Settings-pagina</a> nadat u bent ingelogd. Voor deze tutorial gebruiken we de demosleutel <code class="language-plaintext highlighter-rouge">491c000c5fad32ed7787005b0723ad55</code>, maar u kunt deze vervangen door uw eigen API-sleutel.</p> <p><img src="https://www.docugenerate.com/assets/posts/003-generate-letters-in-bulk/postman-api-key.png" alt="De DocuGenerate API-sleutel instellen in Postman"/></p> <p>Open het eindpunt <code class="language-plaintext highlighter-rouge">Document / Generate Document</code> vanuit de Postman-collectie en geef de parameter <code class="language-plaintext highlighter-rouge">template_id</code> op. Als u een sjabloon heeft gemaakt met de <a href="https://www.docugenerate.com/assets/posts/003-generate-letters-in-bulk/Job Offer Letter.docx">Job Offer Letter</a>, gebruikt u de ID van dat sjabloon. Anders kunt u de demo-sjabloon-ID <code class="language-plaintext highlighter-rouge">ZtHBhb9jLh6TcZuaVteI</code> gebruiken, die is gekoppeld aan de demo-API-sleutel.</p> <p>En vergeet ten slotte niet om <a href="https://www.docugenerate.com/assets/posts/003-generate-letters-in-bulk/Job Offer Letter.xlsx">Job Offer Letter.xlsx</a> te selecteren voor de parameter <code class="language-plaintext highlighter-rouge">file</code> van het verzoek. De parameter <code class="language-plaintext highlighter-rouge">output_format</code> is optioneel, met <code class="language-plaintext highlighter-rouge">.docx</code> als standaardwaarde, maar u kunt de aanbiedingsbrief ook genereren in het <code class="language-plaintext highlighter-rouge">.pdf</code>-, <code class="language-plaintext highlighter-rouge">.doc</code>- of <code class="language-plaintext highlighter-rouge">.odt</code>-formaat, zoals u kunt zien in de <a href="https://api.docugenerate.com/#/Document/generateDocument" target="_blank">API-referentie</a>.</p> <p><img src="https://www.docugenerate.com/assets/posts/003-generate-letters-in-bulk/postman-post-document-excel.png" alt="Meerdere PDF-brieven genereren uit het Job Offer-sjabloon met Postman met Excel-data"/></p> <p>U kunt in de vorige afbeelding alle verzoekparameters zien, evenals het antwoord van de server. Het veld <code class="language-plaintext highlighter-rouge">document_uri</code> is een link naar de <a href="https://storage.googleapis.com/docugenerate.appspot.com/documents/GMtZRU1F7Pae3yw8oens/Job%20Offer%20Letter.pdf?GoogleAccessId=firebase-adminsdk-4i7q5%40docugenerate.iam.gserviceaccount.com&amp;Expires=1834036706&amp;Signature=akFb3v5XMR4NkjdGDEdSX04Lp3J40XQFQtuMMudTek5%2FyQWL62uh18GQemiT4pE2XlF%2FYSooNMWDczToNLQ45Eh0WCIyqlXsIfkOpD3m7yQ%2FCqYvv5kWr%2BNUyKgVsFPcBcXYdiq1u6nPSCTYgICzX9i%2F2I91mRiEY7EmQHppB9W7u8C4y%2FLinvUM3aNb34YGV%2Bn7syhjWfng%2Fogu6d%2BBAtvy5BpaU8Duk%2BMDNI4bC6N9aSkgTDadRtnWm4M9YCg2y60DXM4j%2FoYSuE5ijQyDQDrqiDUlrYHLLXr%2FHaG4x%2BkvfZQhGqoyD0dmjI80%2FakxnAOg%2BugKc1NM4LPkgLSJuQ%3D%3D" target="_blank" rel="noopener">gegenereerde PDF</a> met de aanbiedingsbrieven.</p> <h3 id="api-en-json-data">4. Met de <strong>API</strong> &amp; <strong>JSON</strong>-Data</h3> <p>Ten slotte is de laatste manier om de aanbiedingsbrieven te genereren het gebruik van de API met JSON-data. De verzoekparameters zijn grotendeels hetzelfde als <a href="#api-en-excel-data">hiervoor</a>, maar in plaats van de parameter <code class="language-plaintext highlighter-rouge">file</code> op te geven, selecteert u de parameter <code class="language-plaintext highlighter-rouge">data</code> en plakt u de <a href="https://www.docugenerate.com/assets/posts/003-generate-letters-in-bulk/Job Offer Letter.json" target="_blank">JSON-data</a> als waarde. Bekijk de volgende video om te zien hoe dat proces eruitziet:</p> <p><img src="https://www.docugenerate.com/assets/posts/003-generate-letters-in-bulk/postman-post-document-json.gif" alt="Meerdere PDF-brieven genereren uit het Job Offer-sjabloon met Postman door de API van DocuGenerate aan te roepen"/></p> <p>Net als bij het vorige antwoordobject is het veld <code class="language-plaintext highlighter-rouge">document_uri</code> een link naar de <a href="https://storage.googleapis.com/docugenerate.appspot.com/documents/2GhuZ9GIDbFAl2PdEeAr/Job%20Offer%20Letter.pdf?GoogleAccessId=firebase-adminsdk-4i7q5%40docugenerate.iam.gserviceaccount.com&amp;Expires=1834037410&amp;Signature=J2Y7g%2Be3Xr7CvRTfskT3v8%2BGMS6tfFzuEDwvIPM7zH3xQGHcEekos9s7hQTDjeYbYKrJngxhVeOhAAbKhLAahZqwrKBSyuyoXhCMiwiS0Uhfpe8W9a%2BZ973OlBNnOpxZ18DxDwZPmYNq4afFKuxaaNUdYFUXE3RiG5Fs7KOJjNZ8%2FDcSHVm1%2FITzamT96SdYm6KTLNEiuS0bjYaJZ97hAT7DxG5dMRinIZQ1pkRPjXrz8U%2Fe%2BdVeCWMVps6HzONECCM4ismU26waadXiWcsqsd9qi9STAsnc7caaEQASLoZkO6Y0wJXcJao%2FBsby1P7OY2XJx%2F8NyCgzcFWscObgbw%3D%3D" target="_blank" rel="noopener">gegenereerde PDF</a> met de aanbiedingsbrieven. Als u meer informatie nodig heeft over de andere velden in het antwoordobject, kunt u het gedetailleerde <code class="language-plaintext highlighter-rouge">Document</code>-schema vinden op de <a href="https://api.docugenerate.com/" target="_blank">API-referentie</a> pagina.</p> <h2 id="conclusie">Conclusie</h2> <p>In dit artikel hebben we laten zien hoe u aanbiedingsbrieven in bulk kunt genereren op basis van een vooraf gedefinieerd sjabloon, met behulp van 4 verschillende methoden. Voor de eerste twee methoden hebben we <strong>de webapplicatie gebruikt</strong> om de brieven te genereren via de webinterface, en de data aangeleverd als <strong>Excel- bestand</strong> of als <strong>JSON-object</strong>. De laatste twee methoden betroffen <strong>het gebruik van de API</strong> met dezelfde twee datatypes als bij de eerste twee. Dit is een technischere optie, maar biedt meer flexibiliteit op het gebied van aanpassing en automatisering.</p> <h3 id="bronnen">Bronnen</h3> <ul> <li>De <a href="https://www.docugenerate.com/assets/posts/003-generate-letters-in-bulk/DocuGenerate.postman_collection.json" target="_blank">DocuGenerate API Collection</a> voor Postman.</li> <li>Het <a href="https://www.docugenerate.com/assets/posts/003-generate-letters-in-bulk/Job Offer Letter.docx">Job Offer Letter</a> sjabloon dat in deze tutorial is gebruikt.</li> <li>Het <a href="https://www.docugenerate.com/assets/posts/003-generate-letters-in-bulk/Job Offer Letter.xlsx">Excel-bestand</a> en de <a href="https://storage.googleapis.com/docugenerate.appspot.com/documents/GMtZRU1F7Pae3yw8oens/Job%20Offer%20Letter.pdf?GoogleAccessId=firebase-adminsdk-4i7q5%40docugenerate.iam.gserviceaccount.com&amp;Expires=1834036706&amp;Signature=akFb3v5XMR4NkjdGDEdSX04Lp3J40XQFQtuMMudTek5%2FyQWL62uh18GQemiT4pE2XlF%2FYSooNMWDczToNLQ45Eh0WCIyqlXsIfkOpD3m7yQ%2FCqYvv5kWr%2BNUyKgVsFPcBcXYdiq1u6nPSCTYgICzX9i%2F2I91mRiEY7EmQHppB9W7u8C4y%2FLinvUM3aNb34YGV%2Bn7syhjWfng%2Fogu6d%2BBAtvy5BpaU8Duk%2BMDNI4bC6N9aSkgTDadRtnWm4M9YCg2y60DXM4j%2FoYSuE5ijQyDQDrqiDUlrYHLLXr%2FHaG4x%2BkvfZQhGqoyD0dmjI80%2FakxnAOg%2BugKc1NM4LPkgLSJuQ%3D%3D" target="_blank" rel="noopener">PDF-brieven</a> gegenereerd met data uit het Excel-bestand.</li> <li>De <a href="https://www.docugenerate.com/assets/posts/003-generate-letters-in-bulk/Job Offer Letter.json" target="_blank">JSON-data</a> en de <a href="https://www.docugenerate.com/assets/posts/003-generate-letters-in-bulk/Job Offer Letter (JSON data).pdf" target="_blank">PDF-brieven</a> gegenereerd op basis van de JSON-data.</li> </ul>]]></content> <author> <name>DocuGenerate</name> <email>support@docugenerate.com</email> </author> <category term="Letters"/> <category term="API"/> <category term="Postman"/> <summary type="html"><![CDATA[De aanbiedingsbrief is een belangrijke stap in het wervingsproces en bevat de arbeidsvoorwaarden voor een nieuwe medewerker. Leer hoe u aanbiedingsbrieven in bulk genereert vanuit een vooraf gedefinieerd sjabloon, met behulp van onze webapp of onze eenvoudige REST-API.]]></summary> <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.docugenerate.com/assets/posts/003-generate-letters-in-bulk/cover-image.png"/> <media:content medium="image" url="https://www.docugenerate.com/assets/posts/003-generate-letters-in-bulk/cover-image.png" xmlns:media="http://search.yahoo.com/mrss/"/> </entry> <entry> <title type="html">Hoe u een Bestaande Factuur Omzet in een Sjabloon</title> <link href="https://www.docugenerate.com/nl/blog/hoe-u-een-bestaande-factuur-omzet-in-een-sjabloon/" rel="alternate" type="text/html" title="Hoe u een Bestaande Factuur Omzet in een Sjabloon"/> <published>2023-12-12T00:00:00+00:00</published> <updated>2023-12-12T00:00:00+00:00</updated> <id>https://www.docugenerate.com/nl/blog/hoe-u-een-bestaande-factuur-omzet-in-een-sjabloon</id> <content type="html" xml:base="https://www.docugenerate.com/nl/blog/hoe-u-een-bestaande-factuur-omzet-in-een-sjabloon/"><![CDATA[<h2 id="wat-is-een-factuur">Wat is een Factuur?</h2> <p>Een factuur is een <strong>document dat een verkoper naar een koper stuurt</strong>, waarin de geleverde goederen of diensten en de totale kosten daarvoor worden beschreven. Meestal bevat het de transactiedatum, het factuurnummer, de contactgegevens van de klant, en een beschrijving van de geleverde goederen of diensten. Daarnaast kan het ook de hoeveelheid van elk gekocht item, de eenheidsprijs, en het totaal verschuldigde bedrag bevatten.</p> <p>De factuur dient als bewijs van de transactie en wordt vaak gebruikt voor boekhoudkundige en fiscale doeleinden. Het dient ook als betalingsverzoek aan de klant. Facturen worden vaak gebruikt in business-to-business-transacties, maar kunnen ook worden gebruikt in consumententransacties.</p> <h2 id="tools-voor-het-genereren-van-facturen">Tools voor het Genereren van Facturen</h2> <p>Er zijn veel tools waarmee u facturen kunt maken, variërend van <strong>boekhoudsoftware</strong> tot de goede oude <strong>tekstverwerkers</strong>. De handmatige inspanning die nodig is om facturen te maken varieert ook op deze schaal. Met speciale factureringssoftware is het over het algemeen eenvoudiger, omdat deze kant-en-klare sjablonen biedt en een soort ingebouwde editor heeft waarmee gebruikers de verschillende factuurvelden kunnen invullen. Aan de andere kant van dit spectrum staan documenteditors zoals <strong>Microsoft Word</strong> en spreadsheeteditors zoals <strong>Microsoft Excel</strong>, waarmee u facturen handmatig kunt maken, maar die minder automatisering uit de doos bieden.</p> <p>Ergens in het midden bevinden zich documentgeneratoren zoals <strong>DocuGenerate</strong>, die automatisering toevoegen bovenop bestaande sjablonen. Sommige gebruiken WYSIWYG-webeditors om sjablonen te maken en te bewerken, maar voor DocuGenerate hebben we ervoor gekozen om gewone <strong>Word-documenten</strong> als sjablonen te gebruiken, omdat deze veel worden gebruikt, zodat u geen nieuwe software hoeft te leren, en ook vanwege de flexibiliteit en aanpassingsmogelijkheden die gewone Word-documenten bieden. Zo kunt u eenvoudig een bestaande factuur omzetten in een herbruikbaar sjabloon, wat tijd en moeite bespaart bij toekomstige factureringstaken.</p> <h2 id="het-factuursjabloon-maken">Het Factuursjabloon Maken</h2> <p>Voor deze tutorial gebruiken we een eenvoudige <a href="https://www.docugenerate.com/assets/posts/002-transform-invoice-to-template/Sales Invoice Original.docx">Sales Invoice</a> met alleen wat basisinformatie en een tabel met dummy-items. U leert hoe u deze factuur omzet in een sjabloon, zodat het kan worden gebruikt om vergelijkbare facturen te genereren voor andere klanten, met dezelfde lay-out maar andere inhoud.</p> <h3 id="merge-tags-toevoegen">Merge-Tags Toevoegen</h3> <p>Een <a href="https://www.docugenerate.com/nl/hulp/articles/wat-zijn-merge-tags/">merge-tag</a> is een <strong>speciale placeholder</strong> binnen een documentsjabloon die automatisch kan worden vervangen door data uit een database of spreadsheet. Het idee is om gepersonaliseerde documenten in bulk te genereren, in plaats van elk document handmatig te moeten maken.</p> <p>Een sjabloon voor een factuur kan bijvoorbeeld merge-tags bevatten voor het factuurnummer, de naam van de klant, het adres, en andere relevante informatie, die automatisch voor elke klant worden ingevuld op basis van data die is opgeslagen in een spreadsheet. Dit bespaart tijd en vermindert fouten in vergelijking met handmatige gegevensinvoer, en wordt vaak gebruikt in sectoren zoals vastgoed, financiën en verzekeringen.</p> <p>De <strong>eerste stap</strong> bij het toevoegen van merge-tags is het identificeren van de delen van de factuur die dynamisch moeten zijn, en voor elk deel de bestaande tekst te selecteren en te vervangen door een bijbehorende merge-tag. We vervangen bijvoorbeeld de tekst <code class="language-plaintext highlighter-rouge">#0135</code> door <code class="language-plaintext highlighter-rouge">[Invoice No]</code>, dan <code class="language-plaintext highlighter-rouge">March 1st, 2023</code> door <code class="language-plaintext highlighter-rouge">[Invoice Date]</code> enzovoort, zoals u kunt zien in de volgende video:</p> <p><img src="https://www.docugenerate.com/assets/posts/002-transform-invoice-to-template/create-template-from-invoice.gif" alt="De tekst vervangen door merge-tags"/></p> <p>Na het uitvoeren van de eerste stap zou het factuursjabloon de merge-tags <code class="language-plaintext highlighter-rouge">[Invoice No]</code>, <code class="language-plaintext highlighter-rouge">[Invoice Date]</code> <code class="language-plaintext highlighter-rouge">[CUSTOMER NAME]</code>, <code class="language-plaintext highlighter-rouge">[STREET]</code>, <code class="language-plaintext highlighter-rouge">[CITY]</code>, <code class="language-plaintext highlighter-rouge">[ST]</code>, <code class="language-plaintext highlighter-rouge">[ZIP CODE]</code> moeten bevatten, zoals in de afbeelding hieronder. Zoals u kunt zien, is er geen specifieke regel voor het opmaken van de merge-tags; u kunt hoofdletters of gekapitaliseerde woorden gebruiken, zolang ze maar dezelfde <a href="https://www.docugenerate.com/nl/hulp/articles/wat-zijn-scheidingstekens-voor-tags/">scheidingstekens voor tags</a> gebruiken, in dit geval <code class="language-plaintext highlighter-rouge">[</code> als linkerscheidingsteken en <code class="language-plaintext highlighter-rouge">]</code> als rechterscheidingsteken.</p> <p><img src="https://www.docugenerate.com/assets/posts/002-transform-invoice-to-template/invoice-with-merge-tags.png" alt="Factuur met merge-tags"/></p> <p>U bent vrij om elke gewenste scheidingsteken te gebruiken bij het maken van het sjabloon, zoals bijvoorbeeld <code class="language-plaintext highlighter-rouge">{Invoice No}</code>, <code class="language-plaintext highlighter-rouge">[[Invoice No]]</code>, of zelfs meer exotische scheidingstekens zoals <code class="language-plaintext highlighter-rouge">![[[Invoice No]]]!</code>. De parser van DocuGenerate kan de meest gebruikte tags <a href="https://www.docugenerate.com/nl/product/#tags-overzicht">automatisch detecteren</a> bij het uploaden van een sjabloon, maar als u ongebruikelijke scheidingstekens gebruikt die niet worden gedetecteerd, kunt u ze altijd <a href="https://www.docugenerate.com/nl/hulp/articles/hoe-werk-ik-de-scheidingstekens-van-tags-bij/">bijwerken</a> in de sjabloon-instellingen, zodat de merge-tags succesvol kunnen worden herkend.</p> <h3 id="de-itemtabel-dynamisch-maken">De Itemtabel Dynamisch Maken</h3> <p>De volgende stap bij het maken van het factuursjabloon is het omzetten van de statische <strong>itemtabel</strong> naar een dynamische tabel. Factuuritems zijn de specifieke <strong>producten of diensten</strong> die aan een klant worden gefactureerd. Ze verschijnen in de factuur in een tabel- of lijstformaat en bevatten meestal de itemnaam, beschrijving, hoeveelheid, eenheidsprijs, en totaalbedrag. De factuuritems vormen samen het totaal verschuldigde bedrag van de factuur en geven een gedetailleerd overzicht van waarvoor de klant betaalt.</p> <p>Net als bij de <a href="#merge-tags-toevoegen">eerste stap</a> gaan we de bestaande tekst vervangen door bijbehorende merge-tags. Zo wordt <code class="language-plaintext highlighter-rouge">Item 1</code> vervangen door <code class="language-plaintext highlighter-rouge">[Name]</code>, <code class="language-plaintext highlighter-rouge">500</code> door <code class="language-plaintext highlighter-rouge">[Quantity]</code>, <code class="language-plaintext highlighter-rouge">$175</code> door <code class="language-plaintext highlighter-rouge">[Price]</code> en <code class="language-plaintext highlighter-rouge">$87,500</code> door <code class="language-plaintext highlighter-rouge">[Amount]</code>. We hoeven alleen de eerste regel van de tabel te bewerken en de inhoud van de overige regels te verwijderen, omdat deze dynamisch worden gegenereerd op basis van de itemlijst.</p> <p>We gaan een <a href="https://www.docugenerate.com/nl/hulp/articles/tabellen-toevoegen-aan-een-sjabloon/">speciale syntax</a> gebruiken om door de itemlijst te itereren en meerdere rijen aan de tabel toe te voegen, waarbij <code class="language-plaintext highlighter-rouge">[#Items]</code> het begin van de tabellus markeert en <code class="language-plaintext highlighter-rouge">[/]</code> het einde ervan. Uiteindelijk zou de tabel er zo uit moeten zien:</p> <table class="table table-bordered"> <thead> <tr> <th>ITEM</th> <th>QTY</th> <th>PRICE</th> <th>TOTAL</th> </tr> </thead> <tbody> <tr> <td><code class="language-plaintext highlighter-rouge">[#Items][Name]</code></td> <td><code class="language-plaintext highlighter-rouge">[Quantity]</code></td> <td><code class="language-plaintext highlighter-rouge">[Price]</code></td> <td><code class="language-plaintext highlighter-rouge">[Amount][/]</code></td> </tr> </tbody> </table> <p>En hier is een korte video van het volledige transformatieproces van de tabel met de items:</p> <p><img src="https://www.docugenerate.com/assets/posts/002-transform-invoice-to-template/invoice-table.gif" alt="Een dynamische tabel maken"/></p> <h2 id="het-sjabloon-testen">Het Sjabloon Testen</h2> <p>Na het doorvoeren van al deze wijzigingen zou het factuursjabloon er zo uit moeten zien. U kunt <a href="https://www.docugenerate.com/assets/posts/002-transform-invoice-to-template/Sales Invoice Template.docx">een kopie downloaden</a> van de aangepaste factuur als u niet al deze stappen wilt doorlopen, maar liever de definitieve versie van het factuursjabloon voor testdoeleinden heeft.</p> <p><img src="https://www.docugenerate.com/assets/posts/002-transform-invoice-to-template/invoice-template.png" alt="Definitief factuursjabloon"/></p> <p>Eerst moet u <a href="https://www.docugenerate.com/nl/hulp/articles/hoe-maak-ik-een-nieuw-sjabloon-aan/">een nieuw sjabloon maken</a> door het factuursjabloonbestand te uploaden. Ga vervolgens naar <strong>Generate a new document</strong> en selecteer het <a href="https://www.docugenerate.com/nl/hulp/articles/documenten-genereren-vanuit-json-data/">JSON-dataformaat</a>. U kunt de volgende JSON-waarde plakken in het invoertekstveld, of als u dat liever heeft, kunt u <a href="https://www.docugenerate.com/assets/posts/002-transform-invoice-to-template/invoice-data.json" target="_blank">een JSON-bestand downloaden</a> met deze data.</p> <div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">[</span><span class="w">
  </span><span class="p">{</span><span class="w">
    </span><span class="nl">"Invoice No"</span><span class="p">:</span><span class="w"> </span><span class="s2">"58-519-8945"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"Invoice Date"</span><span class="p">:</span><span class="w"> </span><span class="s2">"03-01-2023"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"CUSTOMER NAME"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Wisozk Inc"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"STREET"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1569 Fair Oaks Way"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"CITY"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Philadelphia"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"ST"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Pennsylvania"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"ZIP CODE"</span><span class="p">:</span><span class="w"> </span><span class="s2">"19184"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"Total"</span><span class="p">:</span><span class="w"> </span><span class="s2">"$180"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"Items"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
      </span><span class="p">{</span><span class="w">
        </span><span class="nl">"Name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Table"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"Quantity"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w">
        </span><span class="nl">"Price"</span><span class="p">:</span><span class="w"> </span><span class="s2">"$80"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"Amount"</span><span class="p">:</span><span class="w"> </span><span class="s2">"$80"</span><span class="w">
      </span><span class="p">},</span><span class="w">
      </span><span class="p">{</span><span class="w">
        </span><span class="nl">"Name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Chairs"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"Quantity"</span><span class="p">:</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w">
        </span><span class="nl">"Price"</span><span class="p">:</span><span class="w"> </span><span class="s2">"$25"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"Amount"</span><span class="p">:</span><span class="w"> </span><span class="s2">"$100"</span><span class="w">
      </span><span class="p">}</span><span class="w">
    </span><span class="p">]</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">]</span><span class="w">
</span></code></pre></div></div> <p>Het zou er ongeveer zo uit moeten zien in de webapp van DocuGenerate:</p> <p><img src="https://www.docugenerate.com/assets/posts/002-transform-invoice-to-template/generate-new-document.png" alt="Definitief factuursjabloon"/></p> <p>Als u vervolgens het PDF-document genereert met de standaard <a href="https://www.docugenerate.com/nl/product/#samenvoegopties">samenvoegopties</a>, zou het resultaat eruit moeten zien zoals hieronder. Als u het nu niet wilt uitproberen, kunt u ook gewoon <a href="https://www.docugenerate.com/assets/posts/002-transform-invoice-to-template/Sales Invoice Generated.pdf" target="_blank">een kopie downloaden</a> van de gegenereerde PDF-factuur om te zien hoe deze eruitziet.</p> <p><img src="https://www.docugenerate.com/assets/posts/002-transform-invoice-to-template/sales-invoice-generated.png" alt="Definitief factuursjabloon"/></p> <h2 id="conclusie">Conclusie</h2> <p>Een factuur is een essentieel document dat de geleverde goederen of diensten aan een koper, de kosten, en andere details van een transactie beschrijft. Facturen dienen als bewijs van de transactie en worden gebruikt voor boekhoudkundige en fiscale doeleinden. Er zijn verschillende tools beschikbaar om facturen te maken, waaronder boekhoudsoftware, tekstverwerkers, en documentgeneratoren. In dit artikel hebben we laten zien hoe u een verkoopfactuur omzet in een herbruikbaar sjabloon door merge-tags toe te voegen met een documentgenerator.</p> <h3 id="bronnen">Bronnen</h3> <ul> <li>Het <a href="https://www.docugenerate.com/assets/posts/002-transform-invoice-to-template/Sales Invoice Template.docx">Sales Invoice</a> sjabloon met dynamische itemtabel.</li> <li>De <a href="https://www.docugenerate.com/assets/posts/002-transform-invoice-to-template/invoice-data.json" target="_blank">JSON-data</a> voor het testen van de factuurgeneratie.</li> <li>De <a href="https://www.docugenerate.com/assets/posts/002-transform-invoice-to-template/Sales Invoice Generated.pdf" target="_blank">PDF-factuur</a> gegenereerd op basis van de JSON-data.</li> </ul>]]></content> <author> <name>DocuGenerate</name> <email>support@docugenerate.com</email> </author> <category term="Invoices"/> <category term="Templates"/> <category term="Tables"/> <summary type="html"><![CDATA[Er zijn verschillende tools beschikbaar om facturen te maken, waaronder boekhoudsoftware, tekstverwerkers en documentgeneratoren. In dit artikel laten we zien hoe u een verkoopfactuur omzet in een herbruikbaar sjabloon door merge-tags toe te voegen.]]></summary> <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.docugenerate.com/assets/posts/002-transform-invoice-to-template/cover-image.png"/> <media:content medium="image" url="https://www.docugenerate.com/assets/posts/002-transform-invoice-to-template/cover-image.png" xmlns:media="http://search.yahoo.com/mrss/"/> </entry> <entry> <title type="html">Hoe u de Sjablonen uit de Sjabloonbibliotheek Gebruikt</title> <link href="https://www.docugenerate.com/nl/blog/hoe-u-de-sjablonen-uit-de-sjabloonbibliotheek-gebruikt/" rel="alternate" type="text/html" title="Hoe u de Sjablonen uit de Sjabloonbibliotheek Gebruikt"/> <published>2023-12-01T00:00:00+00:00</published> <updated>2023-12-01T00:00:00+00:00</updated> <id>https://www.docugenerate.com/nl/blog/hoe-u-de-sjablonen-uit-de-sjabloonbibliotheek-gebruikt</id> <content type="html" xml:base="https://www.docugenerate.com/nl/blog/hoe-u-de-sjablonen-uit-de-sjabloonbibliotheek-gebruikt/"><![CDATA[<h2 id="intro">De Sjabloonbibliotheek Voorstellen</h2> <p>De <a href="https://www.docugenerate.com/nl/sjablonen">Sjabloonbibliotheek</a> van DocuGenerate biedt een snelle en efficiënte oplossing voor het genereren van hoogwaardige documenten. Met een breed scala aan aanpasbare sjablonen kunt u moeiteloos professionele facturen, brieven, contracten, certificaten en meer maken, zonder dat u geavanceerde ontwerp- of opmaakvaardigheden nodig heeft.</p> <p>Onze Sjabloonbibliotheek is ontworpen om u snel op weg te helpen, met sjablonen die eenvoudig aan te passen en te gebruiken zijn. Of u nu een contract voor een nieuwe klant nodig heeft, een factuur voor een klant, of een certificaat voor een prijsuitreiking, onze Sjabloonbibliotheek staat voor u klaar.</p> <p>In dit artikel bekijken we de Sjabloonbibliotheek van dichterbij en ontdekken we hoe u de sjablonen kunt gebruiken om uw documentgeneratieproces te stroomlijnen. Van het kiezen van het juiste sjabloon tot het aanpassen ervan aan uw behoeften, we lopen samen met u elke stap van het proces door, zodat u eenvoudig hoogwaardige documenten kunt gaan maken.</p> <h2 id="een-sjabloon-kiezen">Een Sjabloon Kiezen</h2> <p>De Sjabloonbibliotheek bevat voorbeeldsjablonen waarmee u direct aan de slag kunt, zonder dat u zelf sjablonen hoeft te maken. Deze sjablonen zijn bedoeld als startpunt voor uw documentgeneratiebehoeften, en kunnen eenvoudig worden aangepast aan uw specifieke behoeften.</p> <p>De voorbeeldsjablonen zijn georganiseerd in 4 categorieën, als volgt:</p> <ul> <li> <p><a href="https://www.docugenerate.com/nl/sjablonen#facturen">Facturen</a>: Marketingfactuur, Reparatiefactuur, Verhuisfactuur, Zakelijke Factuur</p> </li> <li> <p><a href="https://www.docugenerate.com/nl/sjablonen#brieven">Brieven</a>: Sollicitatiebrief, Aanbevelingsbrief, Zakelijke Brief, Marketingbrief</p> </li> <li> <p><a href="https://www.docugenerate.com/nl/sjablonen#contracten">Contracten</a>: Arbeidsovereenkomst, Boekhoudcontract, Geheimhoudingsovereenkomst, Verkoopcontract</p> </li> <li> <p><a href="https://www.docugenerate.com/nl/sjablonen#certificaten">Certificaten</a>: Prestatiecertificaat, Prestatiecertificaat, Certificaat van Voltooiing, Arbeidscertificaat</p> </li> </ul> <p>U kunt alle bronnen die bij elk sjabloon horen downloaden door op de knop <strong>Download</strong> te klikken. Het ZIP-archief bevat de DOCX-sjabloon, een JSON-dataset, een Excel-databestand, en een voorbeeld-PDF-document gegenereerd met de dataset. Zo kunt u snel aan de slag met het testen van DocuGenerate, zonder dat u zelf sjablonen hoeft te maken.</p> <p><img src="https://www.docugenerate.com/assets/posts/001-use-the-template-library/download-button.png" alt="Downloadknop"/></p> <p>Voor dit artikel gebruiken we het sjabloon <a href="https://www.docugenerate.com/assets/templates/letters/cover/Cover Letter.zip">Cover Letter</a>. Nadat u het archief <strong>Cover Letter.zip</strong> heeft gedownload, pakt u het uit, en zou u de map <strong>Cover Letter</strong> moeten zien. In de volgende sectie bekijken we de inhoud van deze map en gaan we elk bestand in detail door.</p> <p><img src="https://www.docugenerate.com/assets/posts/001-use-the-template-library/cover-letter-unzip.png" alt="De sjabloonmap uitpakken" class="desktop-width-50"/></p> <h2 id="de-sjabloonbestanden-ontdekken">De Sjabloonbestanden Ontdekken</h2> <p>Het eerste bestand in het ZIP-archief is de <code class="language-plaintext highlighter-rouge">.docx</code>-Word-sjabloon zelf, die dient als basis voor het documentgeneratieproces. Elk sjabloon is ontworpen met merge-tags waarmee specifieke velden kunnen worden aangepast. Bij de <strong>Cover Letter</strong> zijn dat de tags <code class="language-plaintext highlighter-rouge">Name</code>, <code class="language-plaintext highlighter-rouge">Job Title</code>, <code class="language-plaintext highlighter-rouge">Company Name</code> en enkele andere.</p> <p>U kunt dit bestand gebruiken om een nieuw herbruikbaar sjabloon te maken in DocuGenerate, ofwel <a href="https://www.docugenerate.com/nl/hulp/articles/hoe-maak-ik-een-nieuw-sjabloon-aan/">via de app</a> ofwel <a href="https://www.docugenerate.com/nl/ontwikkelaars/snelstart/#sjabloon-maken">via de API</a>. Of u nu de voorkeur geeft aan het gebruiksvriendelijke gemak van de app of aan de kracht en controle van de API, u kunt zelf kiezen welke methode het beste bij uw workflow past.</p> <p><img src="https://www.docugenerate.com/assets/posts/001-use-the-template-library/cover-letter-docx.png" alt="Het DOCX-sjabloonbestand"/></p> <p>Het tweede bestand in het ZIP-archief is een <code class="language-plaintext highlighter-rouge">.json</code>-bestand, een lichtgewicht en eenvoudig te gebruiken dataformaat. Dit bestand bevat een array van 20 <code class="language-plaintext highlighter-rouge">JSON</code>-objecten, die de gegevenselementen vertegenwoordigen die kunnen worden gebruikt voor mail merge. Om de mail merge correct te laten verlopen, komen de <strong>sleutels</strong> van de JSON-objecten precies overeen met de <strong>merge-tags</strong> van het sjabloon: <code class="language-plaintext highlighter-rouge">Name</code>, <code class="language-plaintext highlighter-rouge">Job Title</code>, <code class="language-plaintext highlighter-rouge">Company Name</code> enzovoort.</p> <p><img src="https://www.docugenerate.com/assets/posts/001-use-the-template-library/cover-letter-json.png" alt="Het JSON-databestand"/></p> <p>Het volgende bestand, met de extensie <code class="language-plaintext highlighter-rouge">.xlsx</code>, is een Excel-spreadsheet met 20 rijen voorbeelddata. Net als bij de <strong>JSON-sleutels</strong> hiervoor, komen de <strong>kolomnamen</strong> in het Excel-bestand precies overeen met de <strong>merge-tags</strong> van het sjabloon: <code class="language-plaintext highlighter-rouge">Name</code>, <code class="language-plaintext highlighter-rouge">Job Title</code>, <code class="language-plaintext highlighter-rouge">Company Name</code>, enz.</p> <p>Deze datastructuur is essentieel voor het genereren van nauwkeurige en consistente documenten, omdat ze ervoor zorgt dat de juiste informatie in de juiste velden terechtkomt. Door de <strong>kolomnamen</strong> in het Excel-bestand af te stemmen op de <strong>merge-tags</strong> in het sjabloon, kan DocuGenerate het documentgeneratieproces automatiseren.</p> <p><img src="https://www.docugenerate.com/assets/posts/001-use-the-template-library/cover-letter-xlsx.png" alt="Het Excel-databestand"/></p> <p>Het laatste bestand in het ZIP-archief is een gegenereerd <code class="language-plaintext highlighter-rouge">.pdf</code>-document, gemaakt met de Word-sjabloon en de voorbeelddata uit het Excel-spreadsheet. Dit document is een voorbeeld van wat u kunt bereiken door DocuGenerate te gebruiken om uw <strong>documentcreatie te automatiseren</strong>.</p> <p><img src="https://www.docugenerate.com/assets/posts/001-use-the-template-library/cover-letter-pdf.png" alt="Het gegenereerde PDF-voorbeeld"/></p> <h2 id="het-sjabloon-gebruiken">Het Sjabloon Gebruiken om PDF-Documenten te Genereren</h2> <p>Nadat u vertrouwd bent geraakt met de verschillende bestanden, is de volgende stap om ze te gebruiken om documenten te genereren. U kunt het sjabloon indien gewenst bewerken, of het ongewijzigd gebruiken om snel aan de slag te gaan. De eerste stap is om het Word-document te uploaden in de app om <a href="https://www.docugenerate.com/nl/hulp/articles/hoe-maak-ik-een-nieuw-sjabloon-aan/">een nieuw sjabloon te maken</a>. Zodra u dat doet, zou u zoiets moeten zien:</p> <p><img src="https://www.docugenerate.com/assets/posts/001-use-the-template-library/new-template-docx.png" alt="Het nieuwe sjabloon maken"/></p> <p>U kunt zowel de JSON-data als het Excel-spreadsheet gebruiken om de data te leveren voor het genereren van de documenten. Voor de eerste optie <a href="https://www.docugenerate.com/nl/hulp/articles/documenten-genereren-vanuit-json-data/">met JSON</a>, opent u het <code class="language-plaintext highlighter-rouge">.json</code>-bestand en kopieert u de inhoud naar het klembord. Plak vervolgens de gekopieerde JSON-data in het daarvoor bestemde tekstveld en doorloop de formulierstappen tot u bij de bevestiging van de documentgeneratie komt.</p> <p><img src="https://www.docugenerate.com/assets/posts/001-use-the-template-library/new-document-json.png" alt="Nieuw document uit JSON-data"/></p> <p>Voor de tweede optie <a href="https://www.docugenerate.com/nl/hulp/articles/documenten-genereren-vanuit-een-excel-of-csv-bestand/">met Excel</a>, moet u het <code class="language-plaintext highlighter-rouge">.xlsx</code>-bestand uploaden in het gebied waar staat <em>Select or drop a .xlsx, .xls, .ods, .csv or .tsv file</em>. U kunt de Excel-data bekijken en selecteren welke rijen worden gebruikt voor het genereren van de documenten door erop te klikken. Let op: standaard worden alle rijen gebruikt voor documentgeneratie.</p> <p><img src="https://www.docugenerate.com/assets/posts/001-use-the-template-library/new-document-excel.png" alt="Nieuw document uit Excel-data"/></p> <p>Na het verfijnen van de <a href="https://www.docugenerate.com/nl/product/#samenvoegopties">samenvoegopties</a> door het <a href="https://www.docugenerate.com/nl/hulp/articles/het-exportformaat-selecteren/">uitvoerformaat</a> en andere opties op te geven, is alles klaar om de cover letters in bulk te genereren. Hieronder ziet u een voorbeeld van het gegenereerde PDF met behulp van het kant-en-klare sjabloon en de voorbeeld-Excel-data:</p> <object data="/assets/posts/001-use-the-template-library/Cover Letter.pdf" type="application/pdf" class="inline-pdf-blog"></object> <p>Nu u heeft gezien hoe u het sjabloon <a href="https://www.docugenerate.com/assets/templates/letters/cover/Cover Letter.zip">Cover Letter</a> gebruikt, kunt u de andere sjablonen uit de bibliotheek proberen en eenvoudig beginnen met het genereren van documenten.</p> <h2 id="conclusie">Conclusie</h2> <p>Kortom, de Sjabloonbibliotheek van DocuGenerate biedt een breed scala aan aanpasbare sjablonen waarmee u eenvoudig en efficiënt hoogwaardige documenten kunt genereren. Door gebruik te maken van de sjablonen uit de bibliotheek, bespaart u waardevolle tijd en middelen, zonder dat u geavanceerde ontwerp- of opmaakvaardigheden nodig heeft.</p> <p>Of u nu facturen, brieven, contracten, certificaten of andere documenten moet genereren, de Sjabloonbibliotheek staat voor u klaar. Met voorbeeldsjablonen die per categorie zijn georganiseerd, vindt u eenvoudig het juiste sjabloon voor uw behoeften, en kunt u het aanpassen aan uw specifieke vereisten.</p> <h3 id="bronnen">Bronnen</h3> <ul> <li>Het <a href="https://www.docugenerate.com/assets/templates/letters/cover/Cover Letter.zip">Cover Letter</a> ZIP-archief met de verschillende sjabloonbestanden.</li> <li>De <a href="https://www.docugenerate.com/assets/posts/001-use-the-template-library/Cover Letter.pdf" target="_blank">PDF-brieven</a> die in dit artikel in bulk zijn gegenereerd.</li> </ul>]]></content> <author> <name>DocuGenerate</name> <email>support@docugenerate.com</email> </author> <category term="Resources"/> <category term="Templates"/> <category term="Library"/> <summary type="html"><![CDATA[Onze Sjabloonbibliotheek bevat voorbeeldsjablonen waarmee u direct aan de slag kunt met DocuGenerate, zonder dat u zelf sjablonen hoeft te maken. Deze sjablonen zijn per categorie georganiseerd en kunnen eenvoudig worden aangepast aan uw specifieke behoeften.]]></summary> <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.docugenerate.com/assets/posts/001-use-the-template-library/cover-image.png"/> <media:content medium="image" url="https://www.docugenerate.com/assets/posts/001-use-the-template-library/cover-image.png" xmlns:media="http://search.yahoo.com/mrss/"/> </entry> </feed>