Access und Notion synchronisieren

Tabelle in Notion

Bild 1: Tabelle in Notion

In weiteren Beiträgen haben wir uns angesehen, wie wir Daten aus Notion abfragen und neu anlegen können. Spannend wird es, wenn wir diese Techniken nutzen, um Daten aus anderen Anwendungen mit Notion zu synchronisieren. Im vorliegenden Beitrag wollen wir uns daher zuerst einmal ansehen, wie wir die Daten aus einer Access-Tabelle in eine Notion-Tabelle übertragen können. Dabei wollen wir die ID, unter welcher die Tabelle in Notion angelegt wurde, auslesen und in der Access-Tabelle speichern, damit wir wissen, welche Datensätze bereits nach Notion übertragen wurden. Gleichzeitig können wir Änderungen an diesen Datensätzen in der Access-Datenbank dann in die Notion-Tabelle übertragen.

Als Beispiel verwenden wir die Tabelle Artikeldatenbank, die wir wie in Bild 1 angelegt haben. Wie Sie diese Tabelle anlegen, erfahren Sie im Beitrag Produktivität mit Notion steigern (www.access-im-unternehmen.de/1402). Hier finden Sie auch wichtige Informationen, auf denen der vorliegende Beitrag aufbaut.

Tabelle in Notion

Bild 1: Tabelle in Notion

Datenquelle in der Access-Datenbank

In der Access-Datenbank legen wir zwei Tabellen an. Die erste Tabelle hat den Namen tblArtikel und enthält die Felder aus Bild 2. Das Primärschlüsselfeld ArtikelID dient der eindeutigen Identifizierung der Datensätze in der Access-Tabelle.

Tabelle mit Artikeldaten in Access

Bild 2: Tabelle mit Artikeldaten in Access

Die Felder Artikelname und Veroeffentlichungsdatum sollen so in die Notion-Datenbank übernommen werden. Das Feld StatusID ist ein Nachschlagefeld zur Auswahl von Datensätzen aus einer weiteren Tabelle namens tblStatus.

Diese stellt die Daten aus Bild 3 zur Auswahl im Nachschlagefeld bereit.

Tabelle mit den verschiedenen Status-Werten

Bild 3: Tabelle mit den verschiedenen Status-Werten

Damit wir direkt auf die Daten der Felder Artikelname, Veroeffentlichungsdatum und Status der beiden Tabellen zugreifen können, erstellen wir noch eine Abfrage namens qryArtikelMitStatus. Diese enthält die beiden Tabellen tblArtikel und tblStatus als Datenquelle und zeigt die Felder ArtikelID, Artikelname, Veroeffentlichungsdatum, Status und NotionID an (siehe Bild 4).

Abfrage mit den Feldern aus den Tabellen tblArtikel und tblStatus

Bild 4: Abfrage mit den Feldern aus den Tabellen tblArtikel und tblStatus

Die Daten dieser Abfrage, die wir in der nachfolgend beschriebenen Prozedur nach Notion exportieren wollen, sehen in der Datenblattansicht der Abfrage wie in Bild 5 aus.

Ergebnis der Abfrage mit den Feldern aus den Tabellen tblArtikel und tblStatus

Bild 5: Ergebnis der Abfrage mit den Feldern aus den Tabellen tblArtikel und tblStatus

Prozedur zum Übertragen der Daten nach Notion

Damit steigen wir gleich in die Prozedur ein, welche die Daten aus den Tabellen unserer Access-Datenbank in die Notion-Datenbank exportieren soll.

Zur Erinnerung nochmal die Strukturierung in Notion, wo ein Benutzer üblicherweise einen eigenen Workspace verwendet, der eine oder mehrere Datenbanken enthält. Eine Datenbank ist dabei aber eher mit einer Access-Tabelle gleichzusetzen – sie enthält verschiedene Eigenschaften, sogenannte Properties, mit denen die enthaltenen Elemente beschrieben werden. Diese nennen wir Pages. Eine Page in einer Notion-Datenbank entspricht also in etwa einem Datensatz in einer Access-Tabelle.

Bevor wir uns die Prozedur im Detail ansehen, wollen wir noch kurz skizzieren, was darin passieren soll: Wir wollen dort zunächst alle Datensätze der Access-Abfrage qryArtikelMitStatus ermitteln, die im Feld NotionID den Wert NULL enthalten. Der Sinn dahinter ist, dass wir nach dem Hinzufügen der Daten eines Datensatzes der Access-Tabelle in die Notion-Datenbank die ID des in Notion angelegten Page-Elements ermitteln und diese für den zugrundeliegenden Datensatz der Tabelle tblArtikel in das Feld NotionID einfügen wollen. So können wir später immer erkennen, ob dieser Datensatz bereits nach Notion exportiert wurde. Und wenn wir die Daten gegebenenfalls einmal in der Access-Datenbank aktualisieren, können wir diese aktualisierten Datensätze in einer weiteren Prozedur im entsprechenden Datensatz der Notion-Datenbank aktualisieren.

Die Prozedur ArtikelInNotionAnlegen

Diese Prozedur beginnt in Listing 1. Hier deklarieren wir zunächst die benötigten Variablen, zum Beispiel eine namens db zum Speichern eines Verweises auf das aktuelle Database-Objekt und eine namens rst für das Recordset, in dem wir die zu übertragenden Datensätze durchlaufen wollen. Außerdem benötigen wir ein Dictionary, in das wir die Antwort der Notion-API einlesen können, um das Ergebnis auszuwerten. Außerdem benötigen wir diverse String-Variablen.

Public Sub ArtikelInNotionAnlegen()
     Dim db As DAO.Database
     Dim rst As DAO.Recordset
     Dim objJSON As Dictionary
     Dim strResponse As String
     Dim strDatabaseID As String
     Dim strBody As String
     Dim strPageID As String
     Set db = CurrentDb
     Set rst = db.OpenRecordset("SELECT * FROM qryArtikelMitStatus WHERE NotionID IS NULL", dbOpenDynaset)
     strDatabaseID = DLookup("DatabaseID", "tblDatabases", "DatabaseTitle = ''Artikeldatenbank''")
     Do While Not rst.EOF
         strBody = "{" & vbCrLf
         strBody = strBody & "  ""object"": ""page""," & vbCrLf
         strBody = strBody & "  ""parent"": {" & vbCrLf
         strBody = strBody & "    ""type"": ""database_id""," & vbCrLf
         strBody = strBody & "    ""database_id"": """ & strDatabaseID & """" & vbCrLf
         strBody = strBody & "  }," & vbCrLf
         strBody = strBody & "  ""properties"": {" & vbCrLf
         strBody = strBody & "    ""Artikelname"": {" & vbCrLf
         strBody = strBody & "      ""title"": [" & vbCrLf
         strBody = strBody & "        {" & vbCrLf
         strBody = strBody & "          ""type"": ""text""," & vbCrLf
         strBody = strBody & "          ""text"": { ""content"": """ & rst!Artikelname & """ }" & vbCrLf
         strBody = strBody & "        }" & vbCrLf
         strBody = strBody & "      ]" & vbCrLf
         strBody = strBody & "    }," & vbCrLf
         strBody = strBody & "    ""Status"": {" & vbCrLf
         strBody = strBody & "      ""id"": ""adPI""," & vbCrLf
         strBody = strBody & "      ""type"": ""select""," & vbCrLf
         strBody = strBody & "      ""select"": {" & vbCrLf
         strBody = strBody & "        ""name"": """ & rst!status & """" & vbCrLf
         strBody = strBody & "        }" & vbCrLf
         ...

Listing 1: Artikel nach Notion übertragen, Teil 1

Sie haben das Ende des frei verfügbaren Textes erreicht. Möchten Sie ...

TestzugangOder bist Du bereits Abonnent? Dann logge Dich gleich hier ein. Die Zugangsdaten findest Du entweder in der aktuellen Print-Ausgabe auf Seite U2 oder beim Online-Abo in der E-Mail, die Du als Abonnent regelmäßig erhältst:

Schreibe einen Kommentar