03. September 2014 · von Joerg Sager

Erklärt: Adressvalidierung mit SharePoint und Bing Maps

Wer kennt das nicht? Sie haben eine Vielzahl an Adressen gesammelt. Jeder weiß, hierbei schleichen sich viele Fehler ein. Heute zeige ich Ihnen, wie Sie die Qualität Ihrer Adressdaten mit SharePoint erhöhen können.

In diesem Konzeptartikel gehe ich von folgendem Szenario aus: Ich möchte eine Veranstaltung starten und habe deshalb eine Teilnehmerliste angelegt. Die Teilnehmer müssen ihre Adresse angeben, damit ich sie später postalisch erreichen kann.

Die Teilnehmerliste ist eine benutzerdefinierte Liste aus dem SharePoint, welche um folgende Spalten erweitert wurde.

  • Forename (Single line of text)
  • Lastname (Single line of text)
  • Address (Single line of text)
  • Zipcode (Single line of text)
  • Location (Single line of text)
  • State (Single line of text)
  • Country (Single line of text)

In dieser Liste finden sich eine Vielzahl von möglicherweise falschen Adressen.

Teilnehmerliste

 

Um der deutschen Post – und natürlich auch mir – das Leben zu vereinfachen, möchte ich mögliche Fehler in der Adresse gerne automatisch korrigieren lassen. dieser Vorgang stellt mit den heute zur Verfügung stehenden Möglichkeiten und dem Internet ein kleineres Problem da, als viele vielleicht denken. In diesem Beispiel nutzen wir die Bing Maps API.

Vorbereitung für die Nutzung der Bing Maps API

Voraussetzung für die Nutzung der Bing Maps API ist ein sogenannter AccessKey, welchen man im Bing Maps Portal erzeugen kann. Unter https://www.bingmapsportal.com/ müssen Sie sich mit Ihrem Windows Live Account einloggen und können dann einen AccessKey generieren.

Haben wir diesen Schritt durchgeführt, so sind wir jetzt in der Lage, die Bing Maps API zu nutzen. Unter der URL http://msdn.microsoft.com/en-us/library/ff701713.aspx finden Sie eine Übersicht von allen Bing Maps Webservices. Wir nutzen in diesem Fall die Locations API.

Nutzung der Bing Maps API

Wenn wir den Bing Maps API Access Key erfolgreich eingerichtet haben, dann können wir nun die APIs nutzen. Ich bevorzuge die JSON-Ergebnisse, alternativ könnte man auch REST XML Webservices nutzen.

Die URL der Bing Maps API zur Überprüfung einer Adresse sieht wie folgt aus:

http://dev.virtualearth.net/REST/v1/Locations?query=AddressString&key=BING MAPS API ACCESSKEY

Das Ergebnis des URL-Aufrufes ist ein JSON-String, welcher alle Informationen inklusive korrigierter Adressdaten enthält. Damit wir das JSON etwas lesbarer darstellen können, empfehle ich die Seite json.parser.online.fr , welche JSON Strings in einer schöneren Ansicht darstellt.

Beispiel:

Ich suche nach einer Adresse über das Suchquery in der URL: http://dev.virtualearth.net/REST/v1/Locations?query=Godesberger Allee 139 Bonn&key=BING MAPS API

Das Ergebnis davon ist folgendes JSON:

{"authenticationResultCode":"ValidCredentials","brandLogoUri":"http://dev.virtualearth.net/Branding/logo_powered_by.png","copyright":"Copyright © 2014 Microsoft and its suppliers. All rights reserved. This API cannot be accessed and the content and any results may not be used, reproduced or transmitted in any manner without express written permission from Microsoft Corporation.","resourceSets":[{"estimatedTotal":1,"resources":[{"__type":"Location:http://schemas.microsoft.com/search/local/ws/rest/v1","bbox":[50.697871282429325,7.1277159424308962,50.705596717570678,7.1439780575691039],"name":"Godesberger Allee 139, 53175 Bonn","point":{"type":"Point","coordinates":[50.701734,7.135847]},"address":{"addressLine":"Godesberger Allee 139","adminDistrict":"NW","adminDistrict2":"Bonn","countryRegion":"Germany","formattedAddress":"Godesberger Allee 139, 53175 Bonn","locality":"Bonn","postalCode":"53175"},"confidence":"High","entityType":"Address","geocodePoints":[{"type":"Point","coordinates":[50.701734,7.135847],"calculationMethod":"Rooftop","usageTypes":["Display"]},{"type":"Point","coordinates":[50.701888,7.1362189999999988],"calculationMethod":"Interpolation","usageTypes":["Display","Route"]}],"matchCodes":["Good"]}]}],"statusCode":200,"statusDescription":"OK","traceId":"205e5feeeb1e4f1cb2c650d005311061|DB30012701|02.00.162.2400|DB3SCH010033122, DB3SCH010033134, DB3SCH010033725, DB3SCH010040215, DB3SCH010041003"}

Übersichtlicher dargestellt erkennt man sofort, dass dieser JSON-String die korrigierte Adresse enthält.

JSON

 

Diese korrigierte und/oder mit Zusatzinformationen verbesserte Adresse wollen wir jetzt in unsere Teilnehmerliste übernehmen.

SharePoint 2013 Workflow

Wir legen einen SharePoint 2013 Workflow für unsere Teilnehmerliste an.

Workflow

Wichtig: Achten Sie darauf, dass Sie einen SharePoint 2013 Workflow anlegen, da wir eine Aktion (Call HTTP Web Service) aus dieser Engine nutzen, welche in der SharePoint 2010 Workflow Engine noch nicht existiert.

Nachdem wir unseren Workflow angelegt haben, können wir auch schon loslegen. Um die URL mit der jeweilige Adresse aus dem aktuellen Element aufrufen zu können, müssen wir uns zuerst eine Hilfsvariable erstellen. Dazu nutzen wir die Aktion Set Workflow Variable und erstellen in der ersten Textmarke eine neue Variable namens AddressQuery vom Typ String.

setvariable

 

In der zweiten Textmarke value bauen wir jetzt unsere URL für den Webservice Aufruf zusammen.

Dazu klicken wir bei der zweiten Textmarke value auf … und kopieren dort die URL rein.

value textmarkeÜber den Button Nachschlagevorgang hinzufügen oder ändern fügen wir vom aktuellen Element alle Adressinformationen in der normalen Reihenfolge in der URL nach query= ein.

Haben wir diesen Schritt durchgeführt, dann fügen wir die neue Aktion Call HTTP Web Service ein. Diesem Webservice Aufruf müssen wir jetzt unsere generierte Variable übergeben. Dazu klicken wir auf this in der ersten Textmarke in der neu angelegten Aktion.

WebserviceWir klicken zuerst auf this und im danach erscheinenden Dialog HTTP-Webdienst aufrufen auf die „…“ bei der URL Eingabe. Im Zeichenfolgengenerator klicken auf wir auf den Button Nachschlagevorgang hinzufügen oder ändern und tragen dort aus der Datenquelle Workflowvariablen und -parameter unsere erstellte Variable AddressQuery ein. Wir bestätigen alle Dialoge mit OK.

Haben wir diesen Schritt durchgeführt, dann müssen wir dieser Aktion noch sagen, was mit unserer Antwort passieren soll. Dazu klicken wir bei der Aktion auf Eigenschaften.

option

In diesem Eigenschaftsfenster müssen wir festlegen, dass die Antwort (Response) ein Wörterbuch (Dictionary) ist.

adddict

 

Jetzt ist der Webservice Aufruf fertig und wir können damit beginnen, die Antwort auszuwerten und zu verarbeiten. Mit der Aktion Get Item from a Dictonary können wir nun aus unserem Ergebnis die einzelnen Werte rausholen. Bei dieser Aktion können wir mit sogenannten Pfaden arbeiten. Diese Pfade sind äquivalent zu dem JSON String Aufbau.

Beispiel:

test:
{
adresse:„strasse 1“,
ort:„Bonn“,
land:
{
LangerName:„Deutschland“
}
}

Um den Wert aus LangerName zu bekommen, wäre der Pfad bei diesem JSON String zum Beispiel : test/land/LangerName. Es werden sozusagen die Überschriften mit dem Zeichen „/“ verknüpft. Ist der gewünschte Wert in einem Wertebereich, er kann also mehrere Werte enthalten, dann muss man die Werte mit einer Indizierung herausnehmen.

Beispiel:

Länder:
[
{Name:„Deutschland“},
{Name:„Belgien“},
{Name:„Niederlande“}

]

Damit man bei dem Wertebereich Länder den Wert Niederlande erhält, muss man diesen nun indiziert abfragen. Der Pfad zu dem Eintrag wäre: Länder(2)/Name. Somit sagen wir, dass wir den dritten Wert Name aus dem Wertebereich Länder haben wollen.

Um die Postleitzahl zu erhalten, ist der Pfad für unseren Workflow zum Beispiel resourceSets(0)/resources(0)/address/postalCode, wenn wir unser JSON betrachten, was von der Bing Maps API kommt.

Das heißt, wir holen aus dem ersten Wertebereich von resourceSets den ersten Wertebereich aus resources und daraus den Wert postalCode von dem Wert von address.

Wir legen somit im SharePoint Designer die Aktion Get Item from a Dictonary an und fügen auf der ersten Textmarke item by name or path unseren Pfad ein. Bei der Textmarke from wählen wir unser Wörterbuch JsonResponse aus. Ich habe noch bei der Output –Textmarke eine neue Variable mit Namen PostalCode angelegt, damit ich diese später besser identifizieren kann.

Diesen Schritt wiederhole ich nun für alle Werte, welche ich haben möchte. Ich hole alle Werte äquivalent zu den Spalten, welche ich in der Teilnehmerliste angelegt habe.

Haben wir diesen Schritt durchgeführt, dann sollte der Workflow jetzt wie folgt aussehen:

SharePoint Variablen

Nun haben wir die einzelnen Werte aus dem Webservice Aufruf extrahiert und können diese zurück in die Teilnehmerliste schreiben. Dazu nutzen wir die Aktion Update List Item. Wir klicken auf die Textmarke this list und befüllen für das Aktuelle Element die jeweiligen Zeilen und verknüpfen diese mit den Variablen.

Update ListitemAls letztes müssen wir noch bei Übergang in Phase das Workflowende setzen. Jetzt können wir den Workflow hochladen und starten. In meinem Fall habe ich nur drei Einträge und kann für diese den Workflow per Hand starten. Falls Sie den Workflow für viele Einträge im SharePoint starten wollen, dann schauen Sie bei einem früheren Artikel von uns vorbei: Lösung: Alle Workflows stoppen oder starten im SharePoint . Mit dieser kleinen Lösung können Sie für alle Elemente in einer SharePoint Liste einen Workflow starten.

Das Ergebnis sieht jetzt wie folgt aus:

Vorher:

Teilnehmerliste

Nachher:

attendees_new

Man sieht, dass unser kleiner Workflow vollautomatisch alle Adressfehler beseitigt und um fehlende Adressinformationen ergänzt hat.

Fazit

Man kann mit geringem Aufwand einen großen Mehrwert erreichen. Gerade bei Adressen gibt es viele Möglichkeiten, Fehler zu machen oder Daten nicht in einem einheitlichen Format zu erfassen. Manche Anwender schreiben Str., andere Straße oder wieder andere Strasse. Mal fehlen Werte oder werden mit Buchstaben- oder Zahlendrehern erfasst. Heutzutage gibt es viele APIs, welche uns das Leben erleichtern und eine höhere Datenqualität ermöglichen. Also warum diese Möglichkeit nicht nutzen? Wenn Sie die Bing Maps API kommerziell Ihren Kunden zur Verfügung stellen wollen, müssen Sie die Lizenzbedingungen und -preise von Microsoft beachten (http://www.microsoft.com/maps/Licensing/licensing.aspx). Für Demo- oder Evaluierungszwecke ist die API kostenlos nutzbar. Die Bing Maps API ist allerdings nicht die einzige auf dem Markt. Es gibt auch diverse Alternativen wie Google Maps oder mit OpenStreetMap auch ein OpenSource Projekt, welches zu 100% kostenlos nutzbar ist.

Ich hoffe, dieses kleine HowTo hat Ihnen Spaß gemacht und ich freue mich auf Anregungen, Diskussionen oder Kommentare.



Diesen Blogeintrag bewerten:

4 Stimmen mit durchschnittlich 4/5 Punkten

Haben Sie Fragen zu diesem Artikel oder brauchen Sie Unterstützung?

Nehmen Sie mit uns Kontakt auf!

Wir unterstützen Sie gerne bei Ihren SharePoint-Vorhaben!


Schreibe einen Kommentar

Kontakt.
Lassen Sie sich von uns beraten
Wir freuen uns über Ihr Interesse an unseren Leistungen. Hinterlassen Sie
uns Ihren Namen, Ihre Telefonnummer und E-Mail Adresse – wir melden
uns schnellstmöglich bei Ihnen.
Kontakt aufnehmen