Die Wissensecke zum Stöbern

Bereitstellen der Geolocation Funktionalität mit einer App und JavaScript

In SharePoint 2013 gibt es ein cooles neues Feature, von denen die meisten noch garnichts wissen. Geolocation Fields, zu deutsch Positionsfelder :-) In diesem Artikel möchte ich kurz zeigen, wie diese Funktionalität mittels einer App und JavaScript bereitgestellt werden kann. Ausführliche Informationen zu diesem Feature können auf einem älteren Artikel nachgelesen werden, wo auch die Konfiguration auf SQL Server Ebene beschrieben ist.

Create an App

Zunächst habe ich mit Visual Studio 2012 ein neues SharePoint 2013 App Projekt vom Typ SharePoint-Hosted App erzeugt.

Anschließend muss die App.js wie folgt angepasst werden:

var fieldXml = '<Field Type="Geolocation" DisplayName="Geo Location" />';

$(document).ready(function () {
    ProvisionBingMaps();
});

function ProvisionBingMaps() {
    var context = SP.ClientContext.get_current();
    var hostContext = new SP.AppContextSite(context, GetParam("SPHostUrl"));
    var web = hostContext.get_web();
    context.load(web);

    var listCreationInfo = new SP.ListCreationInformation();
    listCreationInfo.set_title("Bing Maps");
    listCreationInfo.set_description("You can use this list to store Geolocation Informations");
    listCreationInfo.set_templateType(SP.ListTemplateType.genericList);

    web.get_lists().add(listCreationInfo);

    var list = web.get_lists().getByTitle("Bing Maps");
    if (list != null || list != "undefined") {
        var fields = list.get_fields();
        fields.addFieldAsXml(fieldXml, true, SP.AddFieldOptions.addToDefaultContentType);
    }

    var webProperties = web.get_allProperties();
    webProperties.set_item("BING_MAPS_KEY", "<Valid Bing Maps Key>");
    web.update();

    context.executeQueryAsync(function () { $("#message").text("Provisioning succeeded.") }, Function.createDelegate(this,OnFailed));
}

function OnFailed(sender, args) {
    $("#message").text("Provisioning failed: " + args.get_message() + "\n" + args.get_stackTrace());
}

function GetParam(param) {
    var params = document.URL.split("?")[1].split("&");
    for (var i = 0; i < params.length; i++) {
        prop = decodeURIComponent(params[i]);
        if (prop.indexOf(param) > -1)
            return prop.split("=")[1];
    }
}

Wird die App das erste mal aufgerufen, so wird eine neue benutzerdefinierte Liste inklusive Geolocation Feld dem Host Web hinzugefügt. Darüber hinaus wird noch der Bing Maps Key im SharePoint bekannt gemacht, was sonst mittels PowerShell oder C# hätte gemacht werden müssen.

Kurz zusammengefasst, macht die App alles notwendige auf Seitens SharePoint, damit die Funktionalität am Ende komplett von den Benutzern genutzt werden kann.

Rufen die Benutzer die Liste auf, so ist die komplette Geolocation Funktionalität gegeben:

Fazit

Das es sich bei der Geolocation Funktionalität in SharePoint 2013 um ein sehr mächtiges Feature handelt, ist bei vielen bereits bekannt. Ein großer abschreckender Faktor waren die einzelnen Konfigurationsschritte:

  • SQL Server Feature aktivieren
  • Bing Maps Key im SharePoint bekannt machen
  • Geolocation Feld erzeugen
  • Liste erzeugen

Dieser Artikel zeigt, dass auch auf Basis einer App und mit JavaScript die 3 letzten Konfigurationsschritte automatisiert realisiert werden können. Und das mit recht wenig Aufwand und auch wenig Quellcode ;-)

Ich hoffe ich konnte euch damit weiterhelfen und wie immer freue ich mich über Feedback.

About the Author

Falco Ostermann is a software developer and deals with Microsoft Technologies with the focus on Microsoft SharePoint. He is one of the developer who like Javascript and CSS in addition to C#. Falco works at QSC AG in Dresden and is an active member of the SharePoint Usergroup Dresden. You can meet Falco online via Twitter (@Falco_Ostermann), Google+ or here.
  1. Na das geht ja recht einfach und ohne großen Entwicklungsaufwand. Allerdings hat der clientseitige App-Ansatz auch einen faden Geschmack (so wie wahrscheinlich jede “App”): Man weiß nie ob und wie das beim Kunden funktioniert. (Stichwort JavaScript-Engine des Browsers; oder die Robustheit des JavaScript-Schnippsel; oder das Thema Troubleshooting im Fehlerfall; …). Und das Thema Lizenzierung ist sicher immer noch so nebulös wie im Januar oder?

    • Hallo Axel,
      da SharePoint 2013 gewisse Browser Supported ist natürlich auch sichergestellt, dass das Client Object Model in diesen auch funktioniert. SharePoint selber verwendet es ja intern auch an manchen Stellen. Von daher sehe ich das nicht als Problem und zum Thema Troubleshooting bzw. Logging gibt es auch schon gute Komponenten. Man muss diese nur verwenden!

      http://msdn.microsoft.com/en-us/library/hh803115(v=office.14).aspx

      Was stellen sich dir noch für Fragen rund um das Thema Lizenzierung im Bezug auf Apps?

      • Hi Falco,

        danke für die Antworten.

        Zum Thema JavaScript: OK. Kann man so argumentieren. Als Idee würde ich anmerken, dass Du vielleicht schreiben könntest, dass der oben gezeigte Quellcode Beispielcode ist und nicht ohne Weiteres in Live-Umgebungen übernommen werden sollte (und Du keine Haftung übernimmst etc.). – Den Tipp mit dem Clientseitigen Loggen finde ich übrigens sehr spannend. Danke dafür!

        Zum Thema Lizenzen: Mir ging es hier hauptsächlich um das Thema Bing-Maps-Lizenzen. Aber das war ja nicht der Fokus des Blog-Beitrages, von daher verstehe ich, dass man es hier nicht diskutieren sollte.

        Weiter so! ;-)

        Beste Grüße,
        Axel