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.
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.
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.
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).
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.
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