{"id":55001401,"date":"2022-12-01T00:00:00","date_gmt":"2022-12-01T11:16:06","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1401"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Mit_Access_auf_Notion_zugreifen","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Mit_Access_auf_Notion_zugreifen\/","title":{"rendered":"Mit Access auf Notion zugreifen"},"content":{"rendered":"<p><b>Notion ist die Produktivit&auml;tsapp der Stunde, wenn es um Verwaltung von Listen, Projekten, Teams und vieles mehr geht. Eigentlich sind die M&ouml;glichkeiten nur durch die Phantasie begrenzt. Logisch, dass wir uns ansehen wollen, ob man die Daten, die man in Notion angelegt hat, auch von Access aus einlesen kann oder ob man sogar Daten von Access aus nach Notion verschieben kann.<\/b><\/p>\n<p>In einem weiteren Beitrag namens <b>Produktivit&auml;t mit Notion steigern <\/b>(<b>www.access-im-unternehmen.de\/1402<\/b>) zeigen wir die Grundlagen der App <b>Notion<\/b>. Im vorliegenden Beitrag schauen wir uns an, wie wir die dort angelegten Daten von einer Access-Anwendung aus auslesen und sogar schreiben k&ouml;nnen. Damit erleichtern wir uns einige Arbeiten, zum Beispiel das Anlegen gr&ouml;&szlig;erer Mengen von Terminen, das Eintragen von Daten aus den Tabellen einer Datenbank et cetera.<\/p>\n<p>Wir gehen davon aus, dass Sie einen Notion-Account angelegt haben. Mit diesem ist auch die M&ouml;glichkeit verbunden, sogenannte <b>Integrations <\/b>anzulegen. Dazu wechseln wir zur folgenden Webseite:<\/p>\n<pre>https:\/\/developers.notion.com<\/pre>\n<p>Dort finden wir oben links einen Link mit dem Text <b>View my integrations<\/b> (siehe Bild 1).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2022_06\/pic_1401_001.png\" alt=\"Von der Startseite des Entwicklerbereichs geht es gleich weiter zu den Integrationen.\" width=\"700\" height=\"157,7756\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Von der Startseite des Entwicklerbereichs geht es gleich weiter zu den Integrationen.<\/span><\/b><\/p>\n<p>Klicken wir diesen an, landen wir direkt auf der Seite <b>My integrations<\/b>, wo wir mit einem Klick auf die Schaltfl&auml;che <b>Create new integration <\/b>eine neue Integration anlegen k&ouml;nnen (siehe Bild 2).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2022_06\/pic_1401_002.png\" alt=\"Anlegen einer neuen Integration\" width=\"524,559\" height=\"574,517\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Anlegen einer neuen Integration<\/span><\/b><\/p>\n<h2>Neue Notion-Integration anlegen<\/h2>\n<p>Auf der folgenden Seite fragt Notion einige Informationen &uuml;ber die anzulegende Integration ab. Dazu geh&ouml;ren der Name, ein Logo, ein assoziierter Workspace und die Rechte, die der Integration erteilt werden sollen.<\/p>\n<p>Wir legen die Daten wie in Bild 3 fest. Wenn Sie gerade einen neuen Notion-Account angelegt haben, ist die Zusammenstellung der Daten recht einfach &#8211; das Feld <b>Associated Workspace <\/b>bietet dann nur einen einzigen Eintrag an.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2022_06\/pic_1401_003.png\" alt=\"Festlegen der Eigenschaften der Integration\" width=\"424,5589\" height=\"953,719\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Festlegen der Eigenschaften der Integration<\/span><\/b><\/p>\n<p>Nach dem Klick auf die Schaltfl&auml;che <b>Submit <\/b>erscheint eine weitere Seite, auf der wir eine wichtige Information vorfinden: den <b>Internal Integration Token<\/b>. Das ist unsere Eintrittskarte f&uuml;r den VBA-gesteuerten Zugriff auf unsere Notion-Daten (siehe Bild 4). Diesen Token k&ouml;nnen wir direkt einmal in die Zwischenablage kopieren, wir werden diesen gleich ben&ouml;tigen. Auf dieser Seite behalten wir die Option <b>Internal integration <\/b>bei, da wir davon ausgehen, dass wir erst einmal nur eine Integration f&uuml;r den Eigengebrauch anlegen wollen. Au&szlig;erdem fasst die Seite nochmals die zuvor festgelegten Einstellungen zusammen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2022_06\/pic_1401_004.png\" alt=\"Wichtige Information nach dem Anlegen der Integration\" width=\"424,5589\" height=\"468,8015\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Wichtige Information nach dem Anlegen der Integration<\/span><\/b><\/p>\n<p>Damit sind die Arbeiten auf der Seite von Notion bereits abgeschlossen &#8211; wir ben&ouml;tigen hier nur den Token, um diesen als Schl&uuml;ssel f&uuml;r den Zugriff auf die Daten in unserem Notion-Workspace zu verwenden.<\/p>\n<p>Zur Sicherheit schauen wir noch unter My integrations nach und finden dort die neu angelegte Integration vor (siehe Bild 5).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2022_06\/pic_1401_009.png\" alt=\"Die neu angelegte Integration\" width=\"424,5589\" height=\"342,2464\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Die neu angelegte Integration<\/span><\/b><\/p>\n<h2>Elemente f&uuml;r die Integration mit VBA freigeben<\/h2>\n<p>Bevor wir per VBA auf Datenbanken, Seiten et cetera in Notion zugreifen k&ouml;nnen, m&uuml;ssen wir diese freigeben beziehungsweise mit unserer Integration teilen. Das gelingt jedoch mit wenigen Schritten.<\/p>\n<p>In meinem Notion-Workspace habe ich eine Datenbank namens <b>Artikel&uuml;bersicht <\/b>erstellt, mit der ich meine Artikel verwalten m&ouml;chte &#8211; siehe <b>Produktivit&auml;t mit Notion steigern <\/b>(<b>www.access-im-unternehmen.de\/1402<\/b>). Wenn ich diese &uuml;ber den Eintrag in der Seitenleiste aktiviere (entweder in der App oder im Browser), erscheint die entsprechende Datenbank im Hauptbereich. <\/p>\n<p>Nun klicken wir rechts oben auf die drei Punkte, was ein Kontextmen&uuml; &ouml;ffnet. Hier finden wir unten den Eintrag <b>Connections|Add connections<\/b>.<\/p>\n<p>Klicken wir diesen an, sollten wir bereits den Namen unserer Integration in der Liste vorfinden (siehe Bild 6).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2022_06\/pic_1401_010.png\" alt=\"Anlegen einer Verbindung zu einer Notion-Datenbank\" width=\"700\" height=\"507,2957\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Anlegen einer Verbindung zu einer Notion-Datenbank<\/span><\/b><\/p>\n<p>Danach erscheint eine Meldung, die wir mit <b>Confirm <\/b>best&auml;tigen (siehe Bild 7).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2022_06\/pic_1401_011.png\" alt=\"Best&auml;tigen der Freigabe f&uuml;r die Integration\" width=\"424,5589\" height=\"233,3454\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: Best&auml;tigen der Freigabe f&uuml;r die Integration<\/span><\/b><\/p>\n<p>Ab dann finden wir im soeben ge&ouml;ffneten Kontextmen&uuml; unter <b>Connections <\/b>einen neuen Eintrag mit dem Namen unserer Integration. Diese Verbindung k&ouml;nnen Sie &uuml;ber den einzigen Befehl des Untermen&uuml;s dieses Eintrags wieder trennen.<\/p>\n<h2>Jede Datenbank einzelnen freigeben<\/h2>\n<p>Falls Sie im Laufe der Zeit weitere Datenbanken zu Notion hinzuf&uuml;gen, tauchen diese nicht automatisch auf, wenn Sie, wie nachfolgend beschrieben, die Datenbanken ihres Workspaces auslesen.<\/p>\n<p>Sie m&uuml;ssen jede Datenbank, auf die Ihre Integration zugreifen k&ouml;nnen soll, einzeln wie oben beschreiben freigeben.<\/p>\n<h2>API-Befehle herausfinden<\/h2>\n<p>Die Notion-API enth&auml;lt eine ganze Reihe Befehle, mit denen die meisten der Aktionen durchgef&uuml;hrt werden k&ouml;nnen, die Sie sonst &uuml;ber die Benutzeroberfl&auml;che erledigen w&uuml;rden.<\/p>\n<p>Eine &Uuml;bersicht der API finden Sie unter dem folgenden Link:<\/p>\n<pre>https:\/\/developers.notion.com\/reference\/intro<\/pre>\n<p>Hier gibt es beispielsweise die folgenden API-Befehle:<\/p>\n<ul>\n<li><b>search<\/b>: Mit diesem Befehl, angeh&auml;ngt an die URL <b>https:\/\/api.notion.com\/v1\/<\/b>, lesen Sie, wenn ohne Parameter verwendet, alle <b>database<\/b>&#8211; oder <b>page<\/b>-Elemente ein, die f&uuml;r die Integration freigegeben wurden. Das enth&auml;lt also auch die <b>page<\/b>-Elemente, die innerhalb eines <b>database<\/b>-Elements angelegt wurden. &Uuml;bergeben wir zus&auml;tzlich weitere Elemente wie beispielsweise das <b>query<\/b>-Element per Header, k&ouml;nnen wir auch <b>database<\/b>&#8211; oder <b>page<\/b>-Elemente nach dem Titel ermitteln &#8211; ein Beispiel finden Sie weiter unten.<\/li>\n<li><b>databases<\/b>: H&auml;ngen wir den Befehl <b>databases<\/b> an die URL <b>https:\/\/api.notion.com\/v1\/<\/b> an, m&uuml;ssen wir noch die ID der Datenbank folgen lassen. Diese ID erhalten wir beispielsweise &uuml;ber den obigen <b>search<\/b>-Befehl. Au&szlig;erdem folgt noch <b>\/query<\/b>, sodass die URL beispielsweise <b>https:\/\/api.notion.com\/v1\/databases\/d303bedf-ca40-42ad-8474-86f41e1b5bc6\/query <\/b>lautet. Auch hier kann man per Header noch Filterausdr&uuml;cke &uuml;bergeben, mit denen nur den Kriterien entsprechende <b>page<\/b>-Elemente ermittelt werden.<\/li>\n<li><b>pages<\/b>: Ebenso wie auf <b>database<\/b>-Elemente k&ouml;nnen wir auch auf <b>page<\/b>-Elemente zugreifen. Dazu m&uuml;ssen wir zuvor die ID der jeweiligen Seite ermittelt haben, was wir beispielsweise mit dem obigen <b>databases<\/b>-Befehl erreichen.<\/li>\n<\/ul>\n<h2>Funktion zum Ausf&uuml;hren einer Anfrage an die Notion-API<\/h2>\n<p>Wir definieren als N&auml;chstes eine allgemeine Funktion f&uuml;r das Absenden einer HTTP-Anfrage an die Notion-API (siehe Listing 1). Diese erwartet die folgenden Parameter:<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>HTTPRequest(strURL<span style=\"color:blue;\"> As String<\/span>, strAuthorization<span style=\"color:blue;\"> As String<\/span>, <span style=\"color:blue;\">Optional<\/span> strMethod<span style=\"color:blue;\"> As String<\/span> = \"POST\", _\r\n         <span style=\"color:blue;\">Optional<\/span> strContentType<span style=\"color:blue;\"> As String<\/span> = \"application\/json\", <span style=\"color:blue;\">Optional<\/span> strVersion<span style=\"color:blue;\"> As String<\/span> = \"2022-06-28\", _\r\n         <span style=\"color:blue;\">Optional<\/span> strData<span style=\"color:blue;\"> As String<\/span>, <span style=\"color:blue;\">Optional<\/span> strResponse<span style=\"color:blue;\"> As String<\/span>)<span style=\"color:blue;\"> As Integer<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>objHTTP<span style=\"color:blue;\"> As <\/span>ServerXMLHTTP60\r\n     <span style=\"color:blue;\">Set<\/span> objHTTP = <span style=\"color:blue;\">New<\/span> MSXML2.ServerXMLHTTP60\r\n     <span style=\"color:blue;\">With<\/span> objHTTP\r\n         .Open strMethod, strURL, <span style=\"color:blue;\">False<\/span>\r\n         .setRequestHeader \"Accept\", strContentType\r\n         .setRequestHeader \"Content-Type\", strContentType\r\n         .setRequestHeader \"Authorization\", strAuthorization\r\n         .setRequestHeader \"Notion-Version\", strVersion\r\n         .send strData\r\n         strResponse = .responseText\r\n         HTTPRequest = .status\r\n     End <span style=\"color:blue;\">With<\/span>\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Prozedur zum Ausf&uuml;hren von HTTP-Anfragen<\/span><\/b><\/p>\n<ul>\n<li><b>strURL<\/b>: Aufzurufender API-Endpoint, beispielsweise <b>https:\/\/api.notion.com\/v1\/search<\/b><\/li>\n<li><b>strMethod<\/b>: Optionaler Parameter f&uuml;r die Methode des Aufrufs, also <b>POST<\/b> (Standard), <b>GET<\/b>, <b>PUT <\/b>oder <b>DELETE<\/b>.<\/li>\n<li><b>strAuthorization<\/b>: Parameter zum &Uuml;bergeben des Ausdrucks aus <b>Bearer <\/b>und <b>Token<\/b><\/li>\n<li><b>strContentType<\/b>: Optionaler Parameter zur &Uuml;bergabe des Inhaltstyps, standardm&auml;&szlig;ig <b>application\/json<\/b>.<\/li>\n<li><b>strVersion<\/b>: Optionaler Parameter zur &Uuml;bergabe der zu verwendenden API-Version, standardm&auml;&szlig;ig <b>2022-06-28<\/b>.<\/li>\n<li><b>strData<\/b>: Optionaler Parameter zur &Uuml;bergabe zus&auml;tzlicher Daten, in diesem Fall im JSON-Format<\/li>\n<li><b>strResponse<\/b>: Optionaler Parameter zum Zur&uuml;ckgeben des Ergebnisses des API-Aufrufs<\/li>\n<\/ul>\n<p>Bevor wir in die Beschreibung der Funktion einsteigen, f&uuml;gen wir noch einen Verweis auf die Bibliothek <b>Microsoft XML, v6.0 <\/b>zum Projekt hinzu. Das erledigen wir im <b>Verweise<\/b>-Dialog des VBA-Editors, den wir mit dem Men&uuml;befehl <b>Extras|Verweise <\/b>&ouml;ffnen (siehe Bild 8).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2022_06\/pic_1401_008.png\" alt=\"Notwendiger Verweis auf die Bibliothek Microsoft XML, v6.0\" width=\"499,5589\" height=\"393,8207\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 8: Notwendiger Verweis auf die Bibliothek Microsoft XML, v6.0<\/span><\/b><\/p>\n<p>Die Prozedur erstellt ein neues Objekt des Typs <b>ServerXMLHTTP60 <\/b>und ruft dessen <b>Open<\/b>-Methode auf, um die Methode (<b>POST<\/b>) und die URL der API zu &uuml;bergeben.<\/p>\n<p>Der dritte Parameter gibt mit dem Wert <b>False <\/b>an, dass der Aufruf nicht asynchron gestartet werden soll.<\/p>\n<p>Danach weist die Funktion einige Header hinzu. <b>Accept <\/b>und <b>Content-Type <\/b>erhalten den Wert aus <b>strContentType<\/b>, also standardm&auml;&szlig;ig <b>application\/json<\/b>. Den Header <b>Authorization <\/b>f&uuml;llen wir mit dem Wert des Parameters <b>strAuthorization<\/b>. Schlie&szlig;lich weisen wir <b>Notion-Version <\/b>den Wert aus <b>strVersion<\/b>, typischerweise <b>2022-06-28<\/b>, zu.<\/p>\n<p>Mit der <b>send<\/b>-Methode schicken wir noch den Inhalt von <b>strData<\/b>. strData nutzen wir, wenn wir zus&auml;tzliche Daten zu den mit der URL gesendeten Daten &uuml;bergeben m&uuml;ssen.<\/p>\n<p>Wenn wir nur Informationen zu verschiedenen Elementen von Notion abrufen wollen wie zu einem <b>database<\/b>&#8211; oder <b>page<\/b>-Objekt, brauchen wir nur eine ID per Parameter zu &uuml;bergeben. Wenn wir jedoch neue <b>database<\/b>&#8211; oder <b>page<\/b>-Objekte hinzuf&uuml;gen wollen, dann m&uuml;ssen wir die Eigenschaften dieser Objekte &uuml;bergeben.<\/p>\n<p>Diese stellen wir wiederum in einem JSON-Dokument zusammen und &uuml;bergeben dieses mit dem Parameter <b>strData<\/b>. Die <b>send<\/b>-Methode startet auch den eigentlichen Aufruf der API-Funktion von Notion. Das Ergebnis finden wir anschlie&szlig;end in verschiedenen Eigenschaften. <b>status <\/b>liefert einen Zahlenwert wie beispielsweise <b>200 <\/b>f&uuml;r einen erfolgreichen Aufruf.<\/p>\n<p>Diesen Wert gibt die Funktion als Ergebnis zur&uuml;ck. Das eigentliche Ergebnis, also beispielsweise Informationen &uuml;ber die Notion-Datenbanken, liefert die Eigenschaft <b>responseText<\/b>, deren Wert wir mit dem Parameter <b>strResponse <\/b>an die aufrufende Instanz zur&uuml;ckschicken.<\/p>\n<h2>Konstanten definieren<\/h2>\n<p>Im Kopf des Moduls <b>mdlNotion <\/b>speichern wir einige Werte in Konstanten. Diese sehen wie folgt aus:<\/p>\n<pre>Const cStrURLSearch<span style=\"color:blue;\"> As String<\/span> =  \"https:\/\/api.notion.com\/v1\/search\"\r\nConst cStrNotionKey<span style=\"color:blue;\"> As String<\/span> =  \"secret_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\"\r\nConst cStrContentType<span style=\"color:blue;\"> As String<\/span> = \"application\/json\"\r\nConst cStrVersion<span style=\"color:blue;\"> As String<\/span> = \"2022-06-28\"<\/pre>\n<h2>Alle Datenbanken abfragen<\/h2>\n<p>Unser erster Aufruf der Funktion <b>HTTPRequest <\/b>soll alle Datenbanken abfragen, die wir in unserem Notion-Workspace angelegt haben. Bevor wir die notwendige Funktion zum Einlesen der Datenbanken per JSON beschreiben, schauen wir uns die Prozedur an, mit der wir einen Test der Funktion starten.<\/p>\n<p>Diese ruft die Funktion <b>GetJSON <\/b>auf und &uuml;bergibt dieser den zu verwendenden Link (aus <b>cStrURLSearch<\/b>), die Art des Zugriffs (hier <b>POST<\/b>) sowie eine leere <b>String<\/b>-Variable, die mit dem JSON-Dokument gef&uuml;llt werden soll. Wenn die Funktion den Wert <b>True <\/b>zur&uuml;ckliefert, enth&auml;lt die Variable <b>strResponse <\/b>das JSON-Dokument mit den gew&uuml;nschten Daten. Falls nicht, enth&auml;lt es die entsprechende Fehlermeldung:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>Test_SEARCH()\r\n     <span style=\"color:blue;\">Dim <\/span>strResponse<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">If <\/span>GetJSON(cStrURLSearch, \"POST\", strResponse) = <span style=\"color:blue;\">True<\/span><span style=\"color:blue;\"> Then<\/span>\r\n         <span style=\"color:blue;\">Debug.Print<\/span> strResponse\r\n         ShowJSONDOM strResponse, <span style=\"color:blue;\">True<\/span>\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         <span style=\"color:blue;\">Debug.Print<\/span> strResponse\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><!--30percent--><\/p>\n<p>Die hier aufgerufene Prozedur <b>GetJSON<\/b> finden Sie in Listing 2. Sie nimmt die zu verwendende URL entgegen sowie die zu f&uuml;llende Variable <b>strResponse<\/b>. Als Methode verwenden wir <b>POST<\/b>, den Wert f&uuml;r den Authentifizierungs-Header stellen wir mit der Zeichenkette <b>Bearer <\/b>plus einem Leerzeichen plus dem in der Konstanten <b>cStrNotionKey <\/b>gespeicherten Token zusammen.<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>GetJSON(strUrlSearch<span style=\"color:blue;\"> As String<\/span>, strMethod<span style=\"color:blue;\"> As String<\/span>, strResponse<span style=\"color:blue;\"> As String<\/span>)<span style=\"color:blue;\"> As Boolean<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strData<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strAuthorization<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>intStatus<span style=\"color:blue;\"> As Integer<\/span>\r\n     strAuthorization = \"Bearer \" & cStrNotionKey\r\n     intStatus = HTTPRequest(strUrlSearch, strAuthorization, strMethod, cStrContentType, cStrVersion, strData, strResponse)\r\n     Select Case intStatus\r\n         <span style=\"color:blue;\">Case <\/span>200\r\n             GetJSON = <span style=\"color:blue;\">True<\/span>\r\n         <span style=\"color:blue;\">Case Else<\/span>\r\n             GetJSON = <span style=\"color:blue;\">False<\/span>\r\n     <span style=\"color:blue;\">End Select<\/span>\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 2: Funktion zum Einlesen eines JSON-Dokuments<\/span><\/b><\/p>\n<p>Dann rufen wir die bereits oben beschriebene Funktion <b>HTTPRequest <\/b>auf und &uuml;bergeben dieser die ben&ouml;tigten Daten per Parameter.<\/p>\n<p>Den R&uuml;ckgabewert speichern wir in der Variablen <b>intStatus<\/b>. Ist dieser Wert <b>200<\/b>, war die Abfrage erfolgreich und wir k&ouml;nnen den Wert von <b>strResponse <\/b>im Direktbereich ausgeben.<\/p>\n<h2>Auswertung des JSON-Dokument mit den Datenbanken<\/h2>\n<p>Die Struktur eines JSON-Dokuments ist auf den ersten Blick normalerweise nicht gut zu erkennen, zumindest nicht, wenn diese keine Zeilenumbr&uuml;che und Einr&uuml;ckungen enth&auml;lt. Und selbst dann ist es noch schwierig, auf diese Elemente zuzugreifen.<\/p>\n<p>Zu diesem Zweck haben wir die im Beitrag <b>JSON-Daten auslesen <\/b>(<b>www.access-im-unternehmen.de\/1403<\/b>) beschriebene Funktion <b>ShowJSONDOM <\/b>programmiert.<\/p>\n<p>Diese Funktion gibt f&uuml;r alle Elemente des JSON-Dokuments die Ausdr&uuml;cke aus, mit denen wir auf diese zugreifen und ihre Werte auslesen k&ouml;nnen. Voraussetzung daf&uuml;r ist, dass Sie &uuml;ber eine weitere dort beschriebene Funktion namens <b>ParseJSON <\/b>ein <b>Dictionary<\/b>-Objekt namens <b>objJSON <\/b>mit den entsprechenden Daten gef&uuml;llt haben. Diese sehen f&uuml;r unser JSON-Dokument wie in Listing 3 aus.<\/p>\n<pre>objJSON.Item(\"object\"):list\r\nobjJSON.Item(\"results\").Item(1).Item(\"object\"): database\r\nobjJSON.Item(\"results\").Item(1).Item(\"id\"): d303bedf-ca40-42ad-8474-86f41e1b5bc6\r\nobjJSON.Item(\"results\").Item(1).Item(\"cover\"): \r\nobjJSON.Item(\"results\").Item(1).Item(\"icon\"): \r\nobjJSON.Item(\"results\").Item(1).Item(\"created_time\"): 2022-09-07T07:53:00.000Z\r\nobjJSON.Item(\"results\").Item(1).Item(\"created_by\").Item(\"object\"): user\r\nobjJSON.Item(\"results\").Item(1).Item(\"created_by\").Item(\"id\"): 6bdb779f-645a-4714-b485-a3bc240e0add\r\nobjJSON.Item(\"results\").Item(1).Item(\"last_edited_by\").Item(\"object\"): user\r\nobjJSON.Item(\"results\").Item(1).Item(\"last_edited_by\").Item(\"id\"): 6bdb779f-645a-4714-b485-a3bc240e0add\r\nobjJSON.Item(\"results\").Item(1).Item(\"last_edited_time\"): 2022-09-09T17:18:00.000Z\r\nobjJSON.Item(\"results\").Item(1).Item(\"title\").Item(1).Item(\"type\"): text\r\nobjJSON.Item(\"results\").Item(1).Item(\"title\").Item(1).Item(\"text\").Item(\"content\"): Artikeldatenbank\r\nobjJSON.Item(\"results\").Item(1).Item(\"title\").Item(1).Item(\"text\").Item(\"link\"): <\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 3: Ausdr&uuml;cke f&uuml;r den Zugriff auf Elemente des JSON-Dokuments<\/span><\/b><\/p>\n<p>Damit k&ouml;nnen wir nun zum Beispiel alle Datenbanknamen des aktuellen Workspace auslesen. Dazu nutzen wir die Prozedur <b>DatenbankenAuslesen <\/b>aus Listing 4.<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>DatenbankenAuslesen()\r\n     <span style=\"color:blue;\">Dim <\/span>objJSON<span style=\"color:blue;\"> As <\/span>Dictionary\r\n     <span style=\"color:blue;\">Dim <\/span>strResponse<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strObject<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strDatabaseTitle<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strDatabaseID<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n     <span style=\"color:blue;\">Dim <\/span>i<span style=\"color:blue;\"> As Integer<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     <span style=\"color:blue;\">If <\/span>GetJSON(cStrURLSearch, \"POST\", strResponse) = <span style=\"color:blue;\">True<\/span><span style=\"color:blue;\"> Then<\/span>\r\n         <span style=\"color:blue;\">Set<\/span> objJSON = ParseJson(strResponse)\r\n         Inzwischenablage strResponse\r\n         For i = 1 To objJSON.Item(\"results\").Count\r\n             strObject = objJSON.Item(\"results\").Item(i).Item(\"object\")\r\n             Select Case strObject\r\n                 <span style=\"color:blue;\">Case <\/span>\"Database\"\r\n                     strDatabaseTitle = objJSON.Item(\"results\").Item(i).Item(\"title\").Item(1).Item(\"text\").Item(\"content\")\r\n                     strDatabaseID = objJSON.Item(\"results\").Item(i).Item(\"id\")\r\n                     On Error Resume <span style=\"color:blue;\">Next<\/span>\r\n                     db.Execute \"INSERT INTO tblDatabases(DatabaseID, DatabaseTitle) VALUES(''\" & strDatabaseID _\r\n                         & \"'', ''\" & strDatabaseTitle & \"'')\", dbFailOnError\r\n                     <span style=\"color:blue;\">If <\/span>Err.Number = 3022<span style=\"color:blue;\"> Then<\/span>\r\n                         db.Execute \"UPDATE tblDatabases SET DatabaseTitle = ''\" & strDatabaseTitle _\r\n                             & \"'' WHERE DatabaseID = ''\" & strDatabaseID & \"''\", dbFailOnError\r\n                     <span style=\"color:blue;\">End If<\/span>\r\n                 <span style=\"color:blue;\">Case Else<\/span>\r\n             <span style=\"color:blue;\">End Select<\/span>\r\n         <span style=\"color:blue;\">Next<\/span> i\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         <span style=\"color:blue;\">Debug.Print<\/span> strResponse\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 4: Auslesen der Datenbanken eines Workspaces<\/span><\/b><\/p>\n<p>Diese ermittelt mit der Funktion <b>GetJSON <\/b>die entsprechenden Elemente. Dann schreibt sie das JSON-Dokument in die <b>Dictionary<\/b>-Variable <b>objJSON<\/b>. Darauf k&ouml;nnen wir nun nach dem Schema zugreifen, das wir mit der Funktion <b>ShowJSONDOM <\/b>ausgegeben haben.<\/p>\n<p>Wir ermitteln also die Anzahl der Elemente aus <b>objJSON.Item(&#8222;results&#8220;)<\/b> und durchlaufen diese in einer <b>For&#8230;Next<\/b>-Schleife.<\/p>\n<p>Hier schreiben wir als Erstes den Wert des Unterelements <b>object <\/b>in die Variable <b>strObject<\/b>. Diese enth&auml;lt nun beispielsweise Elemente des Typs <b>database <\/b>oder <b>page<\/b>.<\/p>\n<p>Im Falle eines <b>database<\/b>-Elements wollen wir weitere Untersuchungen anstellen. Dazu lesen wir den Inhalt der Eigenschaft <b>title<\/b>, die wir wie folgt erhalten, in die Variable <b>strDatabaseTitle <\/b>ein:<\/p>\n<pre>strDatabaseTitle = objJSON.Item(\"results\").Item(i).Item(\"title\").Item(1).Item(\"text\").Item(\"content\")<\/pre>\n<p>Das Gleiche erledigen wir f&uuml;r die <b>ID <\/b>der Datenbank:<\/p>\n<pre>strDatabaseID = objJSON.Item(\"results\").Item(i).Item(\"id\")<\/pre>\n<p>Da wir diese Daten noch ben&ouml;tigen, um sp&auml;ter auf die enthaltenen Elemente zuzugreifen, schreiben wir den Namen und die ID der Datenbank in eine neue Tabelle namens <b>tblDatabases<\/b>.<\/p>\n<p>Diese enth&auml;lt aktuell nur die beiden Felder <b>DatabaseID <\/b>und <b>DatabaseTitle<\/b>. Das Feld <b>DatabaseID <\/b>haben wir als Prim&auml;rschl&uuml;sselfeld eingerichtet (siehe Bild 9).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2022_06\/pic_1401_012.png\" alt=\"Tabelle zum Speichern der Datenbanken in der Entwurfsansicht\" width=\"549,559\" height=\"353,8897\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 9: Tabelle zum Speichern der Datenbanken in der Entwurfsansicht<\/span><\/b><\/p>\n<p>Auf diese Weise wird beim Aufrufen der <b>INSERT INTO<\/b>-Anweisung in der Prozedur ein Fehler mit der Nummer <b>3022 <\/b>ausgel&ouml;st, wenn die <b>DatabaseID <\/b>bereits vorhanden ist. Dann wird eine <b>UPDATE<\/b>-Anweisung aufgerufen, die nur den Datenbanktitel neu in den entsprechenden Datensatz eintr&auml;gt.<\/p>\n<h2>Weitere Informationen des Database-Objekts<\/h2>\n<p>Das <b>Database<\/b>-Objekt enth&auml;lt noch viele weitere Informationen. Allein der <b>title<\/b>-Abschnitt enth&auml;lt noch einige Zeilen mit Informationen zur Formatierung des Titels.<\/p>\n<p>Wichtiger jedoch sind noch die im Element <b>properties <\/b>enthaltenen Daten. Hier finden wir im Prinzip die Felder der Datenbank mit ihren Datentypen und, wenn es sich um ein Element des Typs <b>select <\/b>handelt, auch die verschiedenen Optionen.<\/p>\n<p>Das erste Element namens <b>Ver&ouml;ffentlichungsdatum <\/b>wird beispielsweise wie folgt definiert:<\/p>\n<pre>\"properties\": {\r\n   \"Ver&ouml;ffentlichungsdatum\": {\r\n     \"id\": \"Eqsc\",\r\n     \"name\": \"Ver&ouml;ffentlichungsdatum\",\r\n     \"type\": \"date\",\r\n     \"date\": {}\r\n   },<\/pre>\n<p>Danach folgt das Feld <b>Status<\/b>, den wir als <b>select<\/b>-Eigenschaft deklariert haben, mit seinen verschiedenen Optionen.<\/p>\n<p>Hier haben wir nur zwei davon abgebildet:<\/p>\n<pre>   \"Status\": {\r\n     \"id\": \"adPI\",\r\n     \"name\": \"Status\",\r\n     \"type\": \"select\",\r\n     \"select\": {\r\n       \"options\": [\r\n         {\r\n           \"id\": \"a515b1b8-c1ae-4670-a33d-c4505ba60ab7\",\r\n           \"name\": \"Geplant\",\r\n           \"color\": \"gray\"\r\n         }, ...\r\n         {\r\n           \"id\": \"f5050a9a-61e1-4734-a167-cc059baa\",\r\n           \"name\": \"Ver&ouml;ffentlicht\",\r\n           \"color\": \"default\"\r\n         }\r\n       ]\r\n     }\r\n   },<\/pre>\n<p>Schlie&szlig;lich folgen noch die Elemente <b>Beschreibung <\/b>und <b>Artikelname<\/b>:<\/p>\n<pre>   \"Beschreibung\": {\r\n     \"id\": \"cw%40y\",\r\n     \"name\": \"Beschreibung\",\r\n     \"type\": \"rich_text\",\r\n     \"rich_text\": {}\r\n   },\r\n   \"Artikelname\": {\r\n     \"id\": \"title\",\r\n     \"name\": \"Artikelname\",\r\n     \"type\": \"title\",\r\n     \"title\": {}\r\n   }\r\n},<\/pre>\n<p>Wozu aber interessieren uns all diese Details zum <b>database<\/b>-Objekt? Wir ben&ouml;tigen diese, wenn wir gleich erstens lesend auf die enthaltenen Daten zugreifen wollen und auch noch, wenn wir neue Datens&auml;tze hinzuf&uuml;gen wollen.<\/p>\n<h2>database-Eigenschaften gezielt auslesen<\/h2>\n<p>Wenn wir nicht wie oben alle f&uuml;r die Integration freigegebenen Elemente des Workspaces auslesen wollen, k&ouml;nnen wir auch nur einzelne Elemente auslesen. Dazu definieren wir ein Mini-JSON-Dokument, das wie folgt aussieht:<\/p>\n<pre>{\"query\": \"Artikeldatenbank\"}<\/pre>\n<p>Dieses Dokument &uuml;bergeben wir der Funktion <b>GetJSON <\/b>wie folgt mit dem <b>strData<\/b>-Parameter:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>Test_SEARCH()\r\n     <span style=\"color:blue;\">Dim <\/span>strResponse<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strData<span style=\"color:blue;\"> As String<\/span>\r\n     strData = \"{\"\"query\"\": \"\"Artikeldatenbank\"\"}\"\r\n     If GetJSON(cStrURLSearch, \"POST\", strResponse, _\r\n             strData) = <span style=\"color:blue;\">True<\/span> Then\r\n         Inzwischenablage strResponse\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         <span style=\"color:blue;\">Debug.Print<\/span> strResponse\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Das Ergebnis aus <b>strResponse <\/b>speichern wir in dieser Prozedur mit der Hilfsprozedur <b>InZwischenablage <\/b>in die Zwischenablage.<\/p>\n<p>Wenn Sie sich die reinen JSON-Dokumente einmal ordentlich formatiert ansehen wollen, gibt es dazu einige Tools im Internet.<\/p>\n<p>Wer Visual Studio auf dem Rechner hat, kann auch dort einfach ein neues JSON-Dokument erstellen und das Dokument dort hineinkopieren.<\/p>\n<h2>page-Elemente einer Datenbank ermitteln<\/h2>\n<p>Ein <b>database<\/b>-Element enth&auml;lt unter Notion in der Regel <b>page<\/b>-Elemente.<\/p>\n<p>So entspricht jede in der tabellarischen Ansicht einer Datenbank angezeigte Zeile einem <b>page<\/b>-Element.<\/p>\n<p>Diese <b>page<\/b>-Elemente haben wiederum eine Reihe von Eigenschaften, die wie oben beschrieben schon im <b>database<\/b>-Objekt festgelegt werden. Au&szlig;erdem k&ouml;nnen wir diese auch wieder auslesen. Dazu ben&ouml;tigen wir eine weitere API-Funktion.<\/p>\n<p>Weiter oben haben wir schon gesehen, wie wir den Aufbau des <b>database<\/b>-Objekts mit seinen Eigenschaften ermitteln k&ouml;nnen. Nun wollen wir uns den eigentlichen Inhalt der Datens&auml;tze ansehen.<\/p>\n<p>Dazu nutzen wir diesmal die API-Funktion, die wir in der folgenden Konstanten speichern:<\/p>\n<pre>Const cStrQueryDatabase<span style=\"color:blue;\"> As String<\/span> = \"https:\/\/api.notion.com\/v1\/databases\/{database_id}\/query\"<\/pre>\n<p>In der Prozedur <b>PagesAbfragen <\/b>aus Listing 5, welche als Parameter den Namen der zu untersuchenden Datenbank erwartet, ermitteln wir zuerst die ID zu der als Parameter angegebenen Datenbank. Dabei muss es sich um eine Datenbank handeln, deren Daten wir, wie weiter oben beschrieben, bereits ermittelt und in der Tabelle <b>tblDatabases <\/b>gespeichert haben.<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>PagesAbfragen(strDatabaseTitle<span style=\"color:blue;\"> As String<\/span>)\r\n     <span style=\"color:blue;\">Dim <\/span>objJSON<span style=\"color:blue;\"> As <\/span>Dictionary\r\n     <span style=\"color:blue;\">Dim <\/span>strResponse<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strObject<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strDatabaseID<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n     <span style=\"color:blue;\">Dim <\/span>i<span style=\"color:blue;\"> As Integer<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strQuerydatabase<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     strDatabaseID = DLookup(\"DatabaseID\", \"tblDatabases\", \"DatabaseTitle = ''\" & strDatabaseTitle & \"''\")\r\n     strQuerydatabase = <span style=\"color:blue;\">Replace<\/span>(cStrQueryDatabase, \"{database_id}\", strDatabaseID)\r\n     <span style=\"color:blue;\">If <\/span>GetJSON(strQuerydatabase, \"POST\", strResponse) = <span style=\"color:blue;\">True<\/span><span style=\"color:blue;\"> Then<\/span>\r\n         Inzwischenablage ShowJSONDOM(strResponse, <span style=\"color:blue;\">True<\/span>)\r\n         <span style=\"color:blue;\">Set<\/span> objJSON = ParseJson(strResponse)\r\n         For i = 1 To objJSON.Item(\"results\").Count\r\n             strObject = objJSON.Item(\"results\").Item(i).Item(\"object\")\r\n             Select Case strObject\r\n                 <span style=\"color:blue;\">Case <\/span>\"page\"\r\n                     On Error Resume <span style=\"color:blue;\">Next<\/span>\r\n                     <span style=\"color:blue;\">Debug.Print<\/span> objJSON.Item(\"results\").Item(i).Item(\"properties\").Item(\"Artikelname\"). _\r\n                         Item(\"title\").Item(1).Item(\"text\").Item(\"content\")\r\n                     <span style=\"color:blue;\">Debug.Print<\/span> objJSON.Item(\"results\").Item(1).Item(\"properties\").Item(\"Ver&ouml;ffentlichungsdatum\"). _\r\n                         Item(\"date\").Item(\"start\")\r\n                     <span style=\"color:blue;\">Debug.Print<\/span> objJSON.Item(\"results\").Item(1).Item(\"properties\").Item(\"Status\").Item(\"select\"). _\r\n                         Item(\"name\")\r\n                     <span style=\"color:blue;\">On Error GoTo<\/span> 0\r\n                 <span style=\"color:blue;\">Case Else<\/span>\r\n             <span style=\"color:blue;\">End Select<\/span>\r\n         <span style=\"color:blue;\">Next<\/span> i\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         <span style=\"color:blue;\">Debug.Print<\/span> strResponse\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 5: page-Elemente einer Datenbank abfragen<\/span><\/b><\/p>\n<p>Den Platzhalter <b>{database_id} <\/b>in der URL ersetzen wir nun durch die Datenbank-ID. Dann rufen wir die Funktion <b>GetJSON <\/b>auf und &uuml;bergeben die URL, als Methode <b>POST <\/b>und als leere Variable f&uuml;r das Ergebnis <b>strResponse<\/b>.<\/p>\n<p>Der Aufruf f&uuml;r diese Funktion lautet wie folgt:<\/p>\n<pre>PagesAbfragen \"Artikeldatenbank\"<\/pre>\n<p>Das Ergebnis speichern wir im ersten Schritt mit der Funktion <b>ShowJSONDOM <\/b>in der Zwischenablage und schauen uns die Ausdr&uuml;cke an, die wir f&uuml;r den anschlie&szlig;enden Zugriff auf die f&uuml;r uns interessanten Informationen ben&ouml;tigen.<\/p>\n<p>Im ersten Schritt bedeutet in diesem Fall, dass die Prozedur <b>PagesAbfragen <\/b>zuerst einmal nur die Anweisungen zum Aufruf der API-Funktion und zum Ausgeben der Ausdr&uuml;cke f&uuml;r den Zugriff auf die Elemente enthielt. Nach deren Analyse haben wir dann die &uuml;brigen Zeilen, die wir nachfolgend beschreiben, hinzugef&uuml;gt. F&uuml;r den Namen des Artikels verwenden wir beispielsweise:<\/p>\n<pre>objJSON.Item(\"results\").Item(i).Item(\"properties\").Item(\"Artikelname\").Item(\"title\").Item(1).Item(\"text\").Item(\"content\")<\/pre>\n<p>Dann lesen wir den Inhalt des JSON-Dokuments aus der Variablen <b>strResponse <\/b>mit der Funktion <b>ParseJson <\/b>in die <b>Dictionary<\/b>-Variable <b>objJSON <\/b>ein.<\/p>\n<p>Nun durchlaufen wir in einer <b>For&#8230;Next<\/b>-Schleife mit den Werten von <b>1 <\/b>bis zur Anzahl der gefundenen Elemente alle <b>results<\/b>-Elemente. In dieser Schleife pr&uuml;fen wir, ob es sich bei dem aktuellen Element um ein <b>page<\/b>-Element handelt.<\/p>\n<p>Falls ja, geben wir mit entsprechenden Ausdr&uuml;cken den Titel, das Ver&ouml;ffentlichungsdatum und den Status im Direktbereich aus. Damit k&ouml;nnen wir auch noch auf andere Eigenschaften zugreifen, sofern diese vorhanden sind.<\/p>\n<p>Wir k&ouml;nnen also nun auf alle <b>page<\/b>&#8211; und <b>database<\/b>-Elemente von Notion zugreifen und ihre Eigenschaften einlesen. W&auml;hrend wir die Datenbank-ID noch in einer Tabelle der Access-Datenbank gespeichert haben, haben wir bei den <b>page<\/b>-Elementen, also den Datens&auml;tzen des <b>database<\/b>-Objekts, darauf verzichtet.<\/p>\n<h2>Daten zu einer Notion-Datenbank hinzuf&uuml;gen<\/h2>\n<p>Wir wollen abschlie&szlig;end noch zeigen, wie man Datens&auml;tze zu einer Notion-Datenbank hinzuf&uuml;gt. Genaugenommen war dies der Anlass, dass wir uns die Programmierung von Notion einmal angesehen haben.<\/p>\n<p>Das System ist sehr durchdacht, aber wir konnten keinen Weg finden, gr&ouml;&szlig;ere Datenmengen automatisiert hinzuzuf&uuml;gen. Wie das geht, erl&auml;utern wir jetzt.<\/p>\n<p>Das Erstellen einer Datenbank, also eines <b>database<\/b>-Objekts, wollen wir an dieser Stelle nicht per Code erledigen, da diese Aufgabe einmalig zu erledigen ist &#8211; wenn die Datenbank mit ihren Properties einmal steht, sind dort erst einmal keine &Auml;nderungen n&ouml;tig. Daher wollen wir die bereits als Beispiel verwendete Datenbank namens <b>Artikeldatenbank <\/b>verwenden.<\/p>\n<p>Die URL der API-Funktion, die wie diesmal verwenden wollen, speichern wir in dieser Konstanten:<\/p>\n<pre>Const cStrCreatePage<span style=\"color:blue;\"> As String<\/span> =  \"https:\/\/api.notion.com\/v1\/pages\"<\/pre>\n<p>Die Prozedur <b>Test_CreatePage <\/b>liest zu Beginn wieder die ID der Datenbank ein, in der wir den Datensatz anlegen wollen (siehe Listing 6).<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>Test_CreatePage()\r\n     <span style=\"color:blue;\">Dim <\/span>strResponse<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strDatabaseID<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strBody<span style=\"color:blue;\"> As String<\/span>\r\n     strDatabaseID = DLookup(\"DatabaseID\", \"tblDatabases\", \"DatabaseTitle = ''Artikeldatenbank''\")\r\n     strBody = \"{\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strBody = strBody & \"  \"\"object\"\": \"\"page\"\",\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strBody = strBody & \"  \"\"parent\"\": {\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strBody = strBody & \"    \"\"type\"\": \"\"database_id\"\",\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strBody = strBody & \"    \"\"database_id\"\": \"\"\" & strDatabaseID & \"\"\"\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strBody = strBody & \"  },\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strBody = strBody & \"  \"\"properties\"\": {\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strBody = strBody & \"    \"\"title\"\": {\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strBody = strBody & \"      \"\"title\"\": [\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strBody = strBody & \"        {\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strBody = strBody & \"          \"\"type\"\": \"\"text\"\",\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strBody = strBody & \"          \"\"text\"\": { \"\"content\"\": \"\"Neuer Artikel 1\"\" }\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strBody = strBody & \"        }\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strBody = strBody & \"      ]\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strBody = strBody & \"    },\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strBody = strBody & \"    \"\"Status\"\": {\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strBody = strBody & \"      \"\"id\"\": \"\"adPI\"\",\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strBody = strBody & \"      \"\"type\"\": \"\"select\"\",\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strBody = strBody & \"      \"\"select\"\": {\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strBody = strBody & \"        \"\"name\"\": \"\"Beispiel erstellt\"\"\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strBody = strBody & \"      }\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strBody = strBody & \"    },\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strBody = strBody & \"    \"\"Ver&ouml;ffentlichungsdatum\"\": {\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strBody = strBody & \"      \"\"id\"\": \"\"Eqsc\"\",\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strBody = strBody & \"      \"\"type\"\": \"\"date\"\",\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strBody = strBody & \"      \"\"date\"\": {\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strBody = strBody & \"        \"\"start\"\": \"\"2022-09-01\"\",\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strBody = strBody & \"        \"\"end\"\": null,\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strBody = strBody & \"        \"\"time_zone\"\": null\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strBody = strBody & \"      }\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strBody = strBody & \"    }\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strBody = strBody & \"  }\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strBody = strBody & \"}\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     <span style=\"color:blue;\">If <\/span>GetJSON(cStrCreatePage, \"POST\", strResponse, strBody) = <span style=\"color:blue;\">True<\/span><span style=\"color:blue;\"> Then<\/span>\r\n         Inzwischenablage strResponse\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         <span style=\"color:blue;\">Debug.Print<\/span> strResponse\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 6: Anlegen eines neuen Artikels in unserer Notion-Datenbank<\/span><\/b><\/p>\n<p>Dann beginnt schon die Zusammenstellung eines etwas umfangreicheren JSON-Dokuments. Dieses enth&auml;lt alle Daten, die wir f&uuml;r das Anlegen des neuen Elements ben&ouml;tigen. Hier arbeiten wir auch wie folgt die ID der Datenbank ein, und zwar im Element <b>parent<\/b>, wo wir angeben, in welcher Datenbank das Element angezeigt werden soll:<\/p>\n<pre>{\r\n   \"object\": \"page\",\r\n   \"parent\": {\r\n     \"type\": \"database_id\",\r\n     \"database_id\": \"d303bedf-ca40-42ad-8474-86f41e1b5bc6\"\r\n   },<\/pre>\n<p>Danach folgen die Eigenschaften wie <b>Artikelname<\/b>, <b>Status <\/b>und <b>Ver&ouml;ffentlichungsdatum<\/b>, denen wir die Daten entsprechend hinzuf&uuml;gen:<\/p>\n<pre>   \"properties\": {\r\n     \"title\": {\r\n       \"title\": [\r\n         {\r\n           \"type\": \"text\",\r\n           \"text\": { \"content\": \"Neuer Artikel 1\" }\r\n         }\r\n       ]\r\n     },\r\n     \"Status\": {\r\n       \"id\": \"adPI\",\r\n       \"type\": \"select\",\r\n       \"select\": {\r\n         \"name\": \"Beispiel erstellt\"\r\n       }\r\n     },\r\n     \"Ver&ouml;ffentlichungsdatum\": {\r\n       \"id\": \"Eqsc\",\r\n       \"type\": \"date\",\r\n       \"date\": {\r\n         \"start\": \"2022-09-01\",\r\n         \"end\": null,\r\n         \"time_zone\": null\r\n       }\r\n     }\r\n   }\r\n}<\/pre>\n<p>Diesen Code stellen wir per VBA in der Variablen <b>strBody <\/b>zusammen und &uuml;bergeben diesen f&uuml;r den vierten Parameter an die Funktion <b>GetJSON<\/b>. Diese liefert nach dem Ausf&uuml;hren mit <b>strResponse<\/b> die Antwort zur&uuml;ck, die wir an dieser Stelle einfach in der Zwischenablage speichern.<\/p>\n<h2>Daten aus einer Access-Tabelle nach Notion schicken<\/h2>\n<p>Ein praktischer Anwendungsfall w&auml;re, die Daten aus einer Access-Tabelle in unsere Notion-Tabelle zu schreiben. Damit wir diese Daten sp&auml;ter aus der Access-Tabelle aktualisieren k&ouml;nnen, schreiben wir allerdings nicht nur die Daten dort hinein, sondern wir wollen auch die ID, welche der Datensatz in Notion erh&auml;lt, ermitteln und in der Access-Tabelle speichern. Auf diese Weise k&ouml;nnen wir den Datensatz, wenn er in Access ge&auml;ndert wurde, dann in Notion aktualisieren.<\/p>\n<p>Das alles schauen wir uns in einem weiteren Beitrag namens <b>Access und Notion synchronisieren <\/b>(<b>www.access-im-unternehmen.de\/1409<\/b>) an.<\/p>\n<h2>Zusammenfassung und Ausblick<\/h2>\n<p>Notion ist ein faszinierendes und sehr flexibles Tool. Noch flexibler wird es, wenn wir seine Daten von Access aus per VBA auslesen k&ouml;nnen und auch Daten von einer Access-Datenbank nach Notion &uuml;bertragen und aktualisieren k&ouml;nnen.<\/p>\n<p>Anwendungszwecke sind beispielsweise das &Uuml;bertragen von Projektdaten, von Terminen oder allen anderen Daten, die Sie &uuml;ber Notion verf&uuml;gbar machen wollen.<\/p>\n<h2>Downloads zu diesem Beitrag<\/h2>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>MitAccessAufNotionZugreifen.accdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/A5CADE95-B8B4-449F-848C-45BD8EC38D2C\/aiu_1401.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Notion ist die Produktivit&auml;tsapp der Stunde, wenn es um Verwaltung von Listen, Projekten, Teams und vieles mehr geht. Eigentlich sind die M&ouml;glichkeiten nur durch die Phantasie begrenzt. Logisch, dass wir uns ansehen wollen, ob man die Daten, die man in Notion angelegt hat, auch von Access aus einlesen kann oder ob man sogar Daten von Access aus nach Notion verschieben kann.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[662022,66062022,44000026],"tags":[],"class_list":["post-55001401","post","type-post","status-publish","format-standard","hentry","category-662022","category-66062022","category-Interaktiv"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Mit Access auf Notion zugreifen - Access im Unternehmen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-im-unternehmen.de\/Mit_Access_auf_Notion_zugreifen\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Mit Access auf Notion zugreifen\" \/>\n<meta property=\"og:description\" content=\"Notion ist die Produktivit&auml;tsapp der Stunde, wenn es um Verwaltung von Listen, Projekten, Teams und vieles mehr geht. Eigentlich sind die M&ouml;glichkeiten nur durch die Phantasie begrenzt. Logisch, dass wir uns ansehen wollen, ob man die Daten, die man in Notion angelegt hat, auch von Access aus einlesen kann oder ob man sogar Daten von Access aus nach Notion verschieben kann.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Mit_Access_auf_Notion_zugreifen\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2022-12-01T11:16:06+00:00\" \/>\n<meta name=\"author\" content=\"Andr\u00e9 Minhorst\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andr\u00e9 Minhorst\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"21\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mit_Access_auf_Notion_zugreifen\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mit_Access_auf_Notion_zugreifen\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Mit Access auf Notion zugreifen\",\"datePublished\":\"2022-12-01T11:16:06+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mit_Access_auf_Notion_zugreifen\\\/\"},\"wordCount\":3271,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"articleSection\":[\"2022\",\"6\\\/2022\",\"Interaktiv\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Mit_Access_auf_Notion_zugreifen\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mit_Access_auf_Notion_zugreifen\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mit_Access_auf_Notion_zugreifen\\\/\",\"name\":\"Mit Access auf Notion zugreifen - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"datePublished\":\"2022-12-01T11:16:06+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mit_Access_auf_Notion_zugreifen\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Mit_Access_auf_Notion_zugreifen\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mit_Access_auf_Notion_zugreifen\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Mit Access auf Notion zugreifen\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"name\":\"Access im Unternehmen\",\"description\":\"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access\",\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/access-im-unternehmen.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\",\"name\":\"Andr\u00e9 Minhorst Verlag\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"contentUrl\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"width\":370,\"height\":111,\"caption\":\"Andr\u00e9 Minhorst Verlag\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Mit Access auf Notion zugreifen - Access im Unternehmen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/access-im-unternehmen.de\/Mit_Access_auf_Notion_zugreifen\/","og_locale":"de_DE","og_type":"article","og_title":"Mit Access auf Notion zugreifen","og_description":"Notion ist die Produktivit&auml;tsapp der Stunde, wenn es um Verwaltung von Listen, Projekten, Teams und vieles mehr geht. Eigentlich sind die M&ouml;glichkeiten nur durch die Phantasie begrenzt. Logisch, dass wir uns ansehen wollen, ob man die Daten, die man in Notion angelegt hat, auch von Access aus einlesen kann oder ob man sogar Daten von Access aus nach Notion verschieben kann.","og_url":"https:\/\/access-im-unternehmen.de\/Mit_Access_auf_Notion_zugreifen\/","og_site_name":"Access im Unternehmen","article_published_time":"2022-12-01T11:16:06+00:00","author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"21\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Mit_Access_auf_Notion_zugreifen\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Mit_Access_auf_Notion_zugreifen\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Mit Access auf Notion zugreifen","datePublished":"2022-12-01T11:16:06+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Mit_Access_auf_Notion_zugreifen\/"},"wordCount":3271,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"articleSection":["2022","6\/2022","Interaktiv"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Mit_Access_auf_Notion_zugreifen\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Mit_Access_auf_Notion_zugreifen\/","url":"https:\/\/access-im-unternehmen.de\/Mit_Access_auf_Notion_zugreifen\/","name":"Mit Access auf Notion zugreifen - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"datePublished":"2022-12-01T11:16:06+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Mit_Access_auf_Notion_zugreifen\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Mit_Access_auf_Notion_zugreifen\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Mit_Access_auf_Notion_zugreifen\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Mit Access auf Notion zugreifen"}]},{"@type":"WebSite","@id":"https:\/\/access-im-unternehmen.de\/#website","url":"https:\/\/access-im-unternehmen.de\/","name":"Access im Unternehmen","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access","publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/access-im-unternehmen.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/access-im-unternehmen.de\/#organization","name":"Andr\u00e9 Minhorst Verlag","url":"https:\/\/access-im-unternehmen.de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/","url":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","contentUrl":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","width":370,"height":111,"caption":"Andr\u00e9 Minhorst Verlag"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","caption":"Andr\u00e9 Minhorst"}}]}},"_links":{"self":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001401","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/comments?post=55001401"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001401\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001401"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001401"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001401"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}