Documenten Genereren vanuit Airtable met een Scripting Extensie

Artikelafbeelding
Auteur Door DocuGenerate

19 April 2024

Aan de Slag met Airtable

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.

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.

Dit zijn de diensten die nodig zijn om deze workflow te creëren:

  1. Airtable: 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.

  2. DocuGenerate: 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.

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.

Airtable’s Page Designer Gebruiken

U kunt de page designer-extensie 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.

Page designer-extensie

Er zijn nog een paar andere beperkingen om rekening mee te houden voor ons gebruiksgeval:

  • De bestanden worden één voor één gegenereerd.
  • Er kunnen alleen PDF-bestanden worden gegenereerd.
  • De gegenereerde bestanden kunnen niet worden opgeslagen in uw Airtable-database.

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.

Het Word-Sjabloon Maken

Gezien de beperkingen van de page designer, gebruiken we in plaats daarvan een Word-sjabloon. Een sjabloon is een document dat merge-tags 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.

Ons sjabloon is een licht aangepaste versie van het sjabloon Certificate of Completion uit de Sjabloonbibliotheek. De belangrijkste wijzigingen waren de toevoeging van een profielfoto om onze functie voor afbeeldingen vergroten/verkleinen te benadrukken, en de integratie van een vaardighedenlijst, om het gebruik van gekoppelde recordvelden van Airtable te demonstreren, samen met de lijstsyntax van DocuGenerate.

Sjabloon Certificate of Completion

Dit sjabloon bevat de volgende tags: {Company_Name}, {First_Name}, {Last_Name}, {Program}, {Photo}, {Start_Date}, {End_Date}, {Certificate_Date} en {Skills} (met de volgende syntax om een vaardighedenlijst te maken):

{#Skills}
- {.}
{/Skills}

💡 Verder gaan De uitgebreide syntax is ingeschakeld voor dit sjabloon om het formaat van afbeeldingen aan te kunnen passen. U moet witruimte in uw tagnamen vermijden om dit te kunnen gebruiken. Daarom gebruiken tagnamen die uit twee woorden bestaan een underscore ertussen.

De Database Ontwerpen

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.

Onze base bevat hier drie tabellen:

  • De tabel Skills bevat de vaardigheden die zijn opgedaan in de verschillende programma’s, gesorteerd op categorie.

  • De tabel Programs bevat data over elk programma: naam, startdatum, einddatum, en de opgedane vaardigheden (veld gekoppeld aan de tabel Skills).

  • De tabel Attendees 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 Attendees. Dit is nodig omdat het script dat wordt gebruikt om documenten te genereren momenteel slechts één enkele tabelselectie toestaat, dus alle data moet aanwezig zijn in deze tabel.

Volledige basestructuur

Let op: de certificaatdatum die nodig is in het sjabloon wordt niet opgeslagen in de data. Maakt u zich daar geen zorgen over, deze wordt ingevuld met de datum van vandaag wanneer het document wordt gegenereerd.

Als u wilt zien hoe onze base eruitziet, of ermee wilt experimenteren, kunt u eenvoudig de DocuGenerate-scripttrainingsdata verkennen.

De Database Vullen

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.

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 Attendees is bijvoorbeeld vrij eenvoudig:

  • Maak een nieuw formulier in de zijbalk Views.
  • Upload een logo en/of een omslagafbeelding voor uw formulier.
  • Kies welke velden u de gebruiker wilt laten invullen.
  • Geef voor elk veld aan of het verplicht is, en voeg vervolgens een titel en beschrijving toe.
  • Publiceer uw formulier om een openbare URL te krijgen die u kunt delen.

Een formulier maken

💡 Verder gaan Voor meer informatie over het bouwen en delen van formulieren in Airtable, raadpleegt u de officiële documentatie.

De Scripting Extensie Instellen

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 Scripting Extension toevoegen aan een van uw dashboards. Vergeet niet dat extensies alleen beschikbaar zijn in betaalde plannen.

Scripting-extensie toevoegen

Vervolgens kopieert u deze JavaScript-code en plakt u deze in de scripting-extensie:

// Click the "gear" icon in the top right to view settings
const config = input.config({
    title: 'Generate Document',
    description: 'Automate document generation using DocuGenerate',
    items: [
        input.config.text('api_key', {
            label: 'API Key',
             description: 'Get your unique key from the Settings page in DocuGenerate'
        }),
        input.config.text('template_id', {
            label: 'Template ID',
            description: "ID of the template to use for generating the document"
        }),
        input.config.table('table', {
            label: 'Table',
            description: 'Source table for your records'
        }),
        input.config.field('storage_field', {
            label: 'Storage',
            description: 'Field for storing the generated documents (URL or Attachment)',
            parentTable: 'table',
        }),
        input.config.select('output_format', {
            label: 'Format',
            description: 'Output format of the generated documents',
            options: [
                {label: 'PDF (.pdf)', value: '.pdf'},
                {label: 'Microsoft Word (.docx)', value: '.docx'},
                {label: 'Microsoft Word 2007 (.doc)', value: '.doc'},
                {label: 'OpenDocument Format (.odt)', value: '.odt'},
                {label: 'Plain Text (.txt)', value: '.txt'},
                {label: 'HTML (.html)', value: '.html'},
                {label: 'PNG (.png)', value: '.png'}
            ]
        })
    ]
});

// Prompt the user to pick a record 
// If this script is run from a button field, this will use the button's record instead
let record = await input.recordAsync('Select a record to use', config.table);

if (record) {
    // Customize this section to handle the selected record
    // You can use record.getCellValue("Field name") to access cell values from the record
    output.markdown(`Generating document for **${record.name}**`);

    // Get the program name
    const programsTable = base.getTable("Programs");
    const programRecord = record.getCellValue("Program")[0];
    const program = await programsTable.selectRecordAsync(programRecord.id);

    // Construct the data object based on the selected record's values
    const data = [{
        "Company Name": record.getCellValue("Company_Name"),
        "First Name": record.getCellValue("First_Name"),
        "Last Name": record.getCellValue("Last_Name"),
        "Program": program?.getCellValue("Name"),
        "Start Date": record.getCellValue("Start_Date"),
        "End Date": record.getCellValue("End_Date"),
        "Certificate Date": record.getCellValue("End_Date")
    }];

    const options = {
        method: 'POST',
        headers: {
            'Accept': 'application/json',
            'Content-Type': 'application/json',
            'Authorization': config.api_key
        },
        body: JSON.stringify({
            template_id: config.template_id,
            name: `Certificate for ${record.getCellValue("First_Name")} ${record.getCellValue("Last_Name")}`,
            output_format: config.output_format,
            data: data
        })
    };

    let status;
    const response = await fetch('https://api.docugenerate.com/v1/document', options)
        .then(response => {
            status = response.status;
            return response.json();
        })
        .catch(err => output.text(err));

    if (status !== 201) {
        output.markdown('Error generating document: ' + response.message);
    } else {
        const storageFieldValue = (config.storage_field.type === 'multipleAttachments') ? [{url: response.document_uri}] : response.document_uri;
        await config.table.updateRecordsAsync([{
            id: record.id,
            fields: {[config.storage_field.name]: storageFieldValue}
        }]);
        output.markdown('Document generated successfully! 🎉');
    }
} else {
    output.markdown('No record was selected');
}

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.

Extensie-instellingen

Dit zijn de beschikbare instellingen:

  • API Key: uw DocuGenerate API-sleutel, die u kunt verkrijgen op uw instellingenpagina zodra u uw account heeft aangemaakt. Kopieer de API-sleutel eenvoudig naar het klembord door erop te klikken.

  • Template ID: de ID van uw sjabloon, die u kunt kopiëren van de pagina van uw sjabloon. Let op: deze verschijnt ook rechtstreeks in de URL van de pagina van uw sjabloon, in de vorm https://app.docugenerate.com/templates/:template_id

  • Table: de tabel met de records die u gebruikt om de tags van uw sjabloon te vervangen.

  • Storage: 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).

  • Format: uitvoerformaat van het gegenereerde document. De opties zijn .docx, .pdf, .doc, .odt, .txt, .html, of .png.

Met al deze parameters ingesteld, zijn we nu klaar om het documentcreatieproces te automatiseren!

De Generate-Knop Toevoegen

De scripting-extensie 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 Button Field 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.

De Generate-knop toevoegen

Documenten Genereren en Opslaan

Nu alles is ingesteld, bekijken we hoe het documentgeneratieproces werkt. Wanneer u op de knop Generate klikt bij een record, voert het script verschillende acties uit:

  1. Het verzamelt alle benodigde data uit het huidige record.
  2. Het stuurt die data samen met uw sjabloon-ID naar de API van DocuGenerate.
  3. DocuGenerate verwerkt het verzoek en vervangt alle merge-tags door uw data.
  4. Het gegenereerde document wordt geretourneerd en automatisch opgeslagen in uw database.

Het resultaat is een professioneel ogend certificaat dat klaar is om te worden gedeeld met deelnemers.

Certificaatgeneratie

Verder Gaan met Airtable-Automatiseringen

Hoewel ons knop-gestuurde script al behoorlijk krachtig is, kunt u documentgeneratie naar een hoger niveau tillen door het te integreren met Airtable Automations. Dit maakt volledig handsfree documentworkflows mogelijk die worden geactiveerd op basis van specifieke voorwaarden in uw database.

Hier zijn enkele krachtige automatiseringsscenario’s die u zou kunnen implementeren:

  • Automatische Certificaatgeneratie: 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.

  • E-mailbezorging: Stuur certificaten rechtstreeks naar deelnemers via e-mail zodra ze zijn gegenereerd, voor een naadloze ervaring voor programmadeelnemers.

  • Batchverwerking: Stel wekelijkse of maandelijkse automatiseringen in die certificaten genereren voor alle deelnemers die programma’s hebben afgerond in die periode.

  • Voorwaardelijke Documentgeneratie: Maak verschillende soorten documenten op basis van criteria zoals programmatype, prestatieniveau, of geografische locatie.

  • Meldingssysteem: Informeer programmabeheerders wanneer certificaten zijn gegenereerd en verzonden, om het proces te helpen volgen.

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.

Conclusie

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.

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.

Bronnen

  • DocuGenerate Test Base in Airtable, met de tabellen Skills, Programs en Attendees.
  • Airtable DocuGenerate GitHub-repository gemaakt door Benjamin Hatton, met de eerste versie van Airtable-scripts voor het genereren van documenten met de API van DocuGenerate.
  • Alle profielfoto’s zijn royaltyvrij en afkomstig van Pixabay, de website voor royaltyvrije afbeeldingen en stockfoto’s.
  • Het Certificate of Completion sjabloon dat in deze tutorial is gebruikt.
  • Een voorbeeld van een PDF-certificaat gegenereerd op basis van Airtable-data.