hoe laat je gebruikers gegevens aanpassen in Coda?

3 van 4 | Aanpassen gegevens

Christiaan Huizer

--

In de twee voorgaande blogpost bespraken we hoe je gegevens met behulp van PaperForm verzamelt (1) en hoe je ze middels Zapier vervolgens in Coda krijgt (2). Deze blogpost helpt te begrijpen hoe je gebruikers de mogelijkheid kan bieden om nadien zelf gegevens bij te werken zonder de gegevens van anderen te zien. Hieronder de stappen die doorlopen worden. De eerste stappen hebben we al: de gegevens bevinden zich in Coda. Onze volgende stap is blokje 4 en 5 verbinden.

de verschillende stappen

1 | De email via MailJet — de basis

Met dat we vanuit PaperForm gegevens via Zapier binnenbrengen in Coda kunnen we de kracht van Coda gebruiken om een email te sturen. We gebruiken het platform MailJet in deze, echter je kan ook kiezen voor Moosend of een ander platform.

Ik bouwde in Zapier een Zap tussen Coda en Mailjet waarbij ik gebruik maakte van de trigger ‘new row’. Deze keuze ligt voor de hand omdat er in de tabel een nieuwe rij wordt toegevoegd vanuit Paperform. Op basis van de ingevulde waarden mag je zoeken wat een emailadres, een voornaam en zo verder. Zie hieronder en dit maakt het lastig. De herkenning vindt plaats op basis van het antwoord. Het is zaak dat je test data proper is.

postcode — stad — land

De testen een aantal keer doorlopen en gemerkt dat er wat vertraging zit tussen het moment van gegevens invullen en het ontvangen van de email. Voor deze oefening maakte ik gebruik van een eenvoudige template in MailJet met een afbeelding en wat tekst en een footer. Het doel is om eerst de basis goed te krijgen. Opmaak is nu niet ons doel.

2 | het personaliseren van je email

Nu we via MailJet een email kunnen versturen nadat er via Paperform gegevens werden ingevuld, is het tijd voor stap 2. We gaan gegevens vanuit Coda in de email brengen. Het voordeel van deze werkwijze boven de automatische Paperform email is dat je ook informatie kan toevoegen uit je database naar keuze en dat de opmaak verzorgder is.

Variabelen in Zapier voor Mailjet

De kern wordt gevormd door variabelen. Deze kun je aanmaken in elke emailplatform. Voorbeelden zijn: voornaam, achternaam, land, stad, adres enzoverder. Wat er tussen de dubbele aanhalingstekens staat in de email template is de tekst die je toont eens er geen match met een variabele is gevonden door de software.

{{var:firstname:”customer”}}{{var:lastname:”customer”}}

De slimmigheid om het werkende te krijgen is dat je eerst een email moet sturen vanuit MailJet waarvan het contact deze variabelen reeds heeft. Ik heb daartoe eigenschappen toegevoegd aan : voornaam & achternaam en die kwamen beiden goed door vanuit de test email.

Test met variabelen via een gewone email vanuit MailJet

3 | het meesturen van een link

Nu we variabelen in de email kunnen schieten zouden we eerst de lay out van de email moeten aanpassen om het geheel presenteerbaar te maken. Echter dat zou hier te ver voeren. We gaan daarom verder met de variabele ‘link’ die we willen meesturen en laten de opmaak voor wat ze is.

Binnen Paperform heeft elke vraag in het formulier een unieke ‘key’ en ook een uniek antwoord (dat wat je invulde). In de tabel binnen Coda waarin we de gegevens van bezoekers bewaren voegen we kolommen toe met informatie uit Paperform. Dit doen we handmatig. Ten eerste een kolom met de URL van het formulier en vervolgens per vraag de key. Onderstaande is dan een stukje van de puzzel

https://be-covid19.paperform.co?eae=België

Echter om de puzzel helemaal strak te krijgen dienen we nog wel iets meer te doen dan een zomaar een Concatenate() in te zetten om iets als “&4tfev=Huizer” te bouwen.

  • Ten eerste dienen we alle gegevens die kunnen bestaan uit meerdere woordjes, dus een woordgroep kunnen vormen, om te zetten in een syntax die leesbaar is voor browsers. Dat doen we via EncodeForUrl() Deze logica passen we toe op voornaam, achternaam, etc.. Zo krijg je bij een lang formulier met vragen veel code aan elkaar. Het is niet anders.
  • Eens alles netjes aan en achter elkaar staat, dient de ‘string’ omgezet te worden naar een URL, dat doe je via .Hyperlink() . Deze functie verbind je als laatste met de Concatenate().

Hieronder een voorbeeld van drie vragen

drie vragen omgezet naar een URL

En dan hieronder de code voor bovenstaande.

Concatenate(thisRow.[Form-ID],thisRow.[Key-Firstname],"=",EncodeForUrl( thisRow.firstname),"&",thisRow.[Key-Lastname],"=",EncodeForUrl( thisRow.[family name]),"&",thisRow.[Key-email],"=",EncodeForUrl(thisRow.[email address])).Hyperlink()

Dit kan korter mits je extra kolommen toevoegt en per kolom een relatie opbouwt tussen de sleutel van de vraag en het antwoord en deze verbindt met EncodeForUrl(). Dan blijft het overzichtelijker en is de kans op foutjes ook kleiner. Voor je het door hebt, ben je immers ergens een komma vergeten en dan is het zoeken geblazen. Hieronder werkte ik met key-value pairs te herkennen aan de KV- en heb ik de “&” vervangen door AND om gedoe met tekens te voorkomen.

Concatenate(thisRow.[Form-ID],thisRow.[KV-firstname],thisRow.[AND],thisRow.[KV-lastname],thisRow.[AND],thisRow.[KV-email],thisRow.[AND],thisRow.[KV-man-or-woman]).Hyperlink()

Het meegeven van deze URL.

Nu we in de vingers hebben hoe we een formulier vooraf kunnen invullen is het zaak deze kolom via Zapier ook beschikbaar te maken en deze waarde te injecteren in de email als hyperlink onder een stukje tekst type ‘klik hier’. Je maakt een variabele aan in MailJet, hier kies ik voor {{var:url:””}}en dit stukje code plak je achter de tekst. Dit is het zelfde principe als bij een gewone link. De invuller kan nu de gegevens bijwerken vanuit de email en nog eens doorsturen via het formulier.

4 | Het updaten van gegevens in Coda — de moeilijkste stap

Eens je gegevens toevoegt, ontstaat er normaliter een nieuwe rij in de tabel. Doe je niets, dan heb je twee rijen van dezelfde gebruiker met verschillende gegevens. Echter je wil uiteindelijk, ook na het updaten, één rij behouden met daarin de meest recente informatie.

ID van de rij wordt meegegeven aan gebruiker die gegevens bijwerkt

De oplossing in deze bestaat uit twee stukjes. Ten eerste geef in de URL, die ik in Coda opbouw en aanklikbaar maak via de email, mee wat de ID is van de rij in de tabel binnen Coda. De informatie van de gebruiker die ik vooraf invul in het formulier haal ik immers uit Coda. Via een verborgen veld stuur ik de RowId() mee. Voert de gebruiker een update uit, dan wordt de RowId() teruggegeven (is noch zichtbaar, noch aanpasbaar voor de gebruiker) en weet ik over welke rij het binnen Coda gaat. Als ‘ik’ het weet de software die we gebruiken ook. Dat brengt ons bij één van de verfijndere opties van Coda te weten Upsert Row.

Upsert een rij in Coda.

Upsert wil zeggen vervang de waarden uit een rij eens er een Match is, indien geen Match, voeg dan een nieuwe rij toe. Onze Match is er als de RowID(), gelijk is aan het ID dat Paperform teruggeeft. Is die Match er, dan vervangen we de gegevens, anders voegen we een nieuwe rij toe.

Toen ik er aan begon dacht ik binnen 15 min klaar te zijn. Tot mijn frustratie kon ik in de Zap de RowID() niet gebruiken om de Match op te bouwen. De RowID() is een formule die bij elke nieuwe rij een nieuwe waarde genereert en toont. Echter Zapier kan niet werken met de uitkomst van deze berekening.

Vanaf dat ik het email adres als Match gebruikte, werkte het als een zonnetje. De velden die anders zijn en toch het zelfde email adres hebben, krijgen de nieuwe waarden. Echter door als Match te kiezen voor emailadres begeven we ons op glad ijs. Gebruikers kunnen zo hun email adres niet meer aanpassen. Dat zou in de ‘covid-19 case’ niet zo erg zijn, echter we zoeken een robuuste oplossing die werkt op basis van eigenschappen los van die de gebruiker met ons deelt. Zo behouden we de flexibiliteit om veel data in één database op te slaan. Vandaar de keuze voor RowID() als uitgangspunt.

Om toch met de RowId te werken kunnen we of wel de Coda tabel aanpassen zodat de ID leesbaar wordt voor Zapier en of te kiezen voor aan andere opbouw binnen Zapier. We beginnen met aanpassen van Coda en dat doen we door een automatie toe te voegen via de opties rechts zodat we een nieuwe versie van de RowID krijgen. Hieronder de twee stappen.

Automation aan het werk om een Rij ID te generen

De formule die je vindt bij ‘update values’ is onderstaande en belangrijk is dat je stap twee uitvoert op (apply to) de resultaten van stap 1, dus op het toevoegen van de nieuwe rij en niet op de gehele tabel (zoals ik eerst had gedaan). En met onderstaande formule voegt het systeem de RowID toe zodat we een getalletje krijgen in de kolom vanaf dat er een nieuwe info doorgegeven wordt en dat via de automatisatie.

thisRow.[Step 1 Result].[Row ID]

Helaas zijn we er met deze slimmigheid nog niet. De rij ID wordt nu wel geproduceerd door de automatisatie, ze wordt nog niet herkend door Zapier. Daarvoor dienen we in Zapier een andere Match op te bouwen. In plaats van op de ID die we vanuit het formulier terugkrijgen, matchen we nu op de ID die we opbouwen door de automatisatie. En wat we ook doen is informatie verbinden vanuit Coda met Paperform (blauwe deel in screenshot hieronder) door de Row ID van Coda te verbinden met de ID die terugkomt vanuit Paperform en met de Auto Row ID.

En nu werkt het: drie op een rij.

drie op een rij dankzij aanpassingen in Coda en Zapier

Lastig probleem

De automated RowID is de Match binnen Zapier en Zapier vereist dat je deze waarde ook teruggeeft aan Coda. Met andere woorden, de waarde in Zapier moet vanuit of wel het formulier komen of in Zapier worden ingesteld. Het veld mag niet leeg zijn. Hoe los je dat op eens je nog geen waarde vanuit Coda hebt? Ik heb er een middag naar gezocht en het leek eerst een nul “0” te zijn. Deze wordt door Zapier in Coda gebracht waardoor er ook een nul in de tabel komt te staan. Eens iemand opnieuw een formulier invult vindt er verandering van de rij plaats en treedt de automatisatie in werking en wordt de nul overschreven door de RowID, vanaf dan is er een match met het ID dat we aan het formulier vanuit Coda hebben toegekend en terugkomt. Deze logica werkt voor een gebruiker die eigen gegevens wil bijwerken.

Echter met dat de tabel binnen Coda niet direct de update uitvoert vanaf dat de gegevens binnenkomen, maar pas na enkele seconden ontstaat er een ander probleem. Twee gebruikers die vrijwel tegelijkertijd de gegevens doorstuurden, werden zo met elkaar verbonden op basis van deze nul-waarde. De ‘tweede’ — die ook een nul meestuurt — overschreef zo de waarde van de eerste.

Dit is een probleem vanaf dat je succesvol bent met je formulier en we willen succesvol zijn. We mogen dus op zoek naar een betere oplossing.

Het alternatief ligt voor de hand en dat is de Automated RowID te voorzien van een uniek getal. We gebruiken hiervoor het ID van het formulier van PaperForm. Dit is elke keer anders. Deze ID komt binnen in de kolom Automated Row ID en daar wordt deze overschreven na 5–25 seconden door de RowID zelf. Het gevolg is dat je dan ‘twee op een rij hebt’ en eens de RowID terugkomt via Paperform, heb je een match en drie op een rij en worden de waarden bijgewerkt.

Deze lange blogpost bestond uit verschillende stappen die allemaal tot doel hadden een logica op te bouwen die het mogelijk maakt om gegevens van gebruikers op te vangen, door te geven en aanpasbaar te maken op basis een waarde die eigen is aan de database, de Row ID(). Om dit werkende te krijgen had ik de support nodig van Zapier en die van Coda. Beiden waren excellent. Hieronder de afsluitende email vanuit Zapier:

Thank you for your follow-up and for updating me regarding the excellent solution you and your colleague came up with! Connecting a user to a RowID instead of a user property is super robust, that way it’s immune to any other modifications the user may make 🙂 Really great job here! Please reach out if you have more questions, I’m happy to help out. Best wishes, Kaushi

Mijn naam is Christiaan Huizer en ik ben eigenaar van Huizer Automatisatie. In mijn rol als bedrijfsadviseur ben ik actief in het midden- en kleinbedrijf in Wallonië, Brussel, Vlaanderen en Nederland. Mijn klanten vragen me vooral om hun bedrijf voordelig te vereenvoudigen en versnellen. Ik maak daarbij gebruik van tools als AirTable, Coda, Zapier, MailJet en PaperForm.

Huizer Automatisatie over hoe gegevens in Coda bij te werken.

--

--

Christiaan Huizer

I write about Coda.io - AI and (HR )planning challenges. You find blogs for beginners and experienced makers. I publish about once per week. Welcome!