close

Development, Coding

AllgemeinAzureCloudCollaboration, ProduktivitätDevelopment, CodingHow-To, Tutorial, SzenarioHybridKonfiguration, DeploymentOffice 365Teams, Groups

Vorstellung: Eigenen Bot mit Microsoft Azure Bot Service erstellen

Ein Bot unterstützt Benutzer einfach in einer Konversation oder einem Gespräch auf natürliche Art und Weise und liefert Informationen und/oder erledigt Aufgaben im Hintergrund. Wer hat nicht schon mit den kleinen intelligenten Helfern zu tun gehabt? (Ro)Bots sind in aller Munde und Microsoft bietet mit dem neuen Azure Bot Service (Preview) und dem Microsoft Bot Framework (Preview) die Möglichkeit eigene Bots zu entwickeln. So können Bots dann von verschiedenen Kanälen (z.B. in Teams, Skype, Slack, Facebook, uvm.) genutzt werden. Kurz: Azure bietet also eine Basis um Bot Dienste ohne eigene Server (=serverless) zu betreiben, die von Office 365 Diensten und anderen Lösungen verwendet werden können.

HINWEIS: Anpassungen und Erweiterungen des Azure Bot Service um eigene Bot Intelligenz erfolgt über den „Bot Builder“ im Azure Bot Service und mit dem Microsoft Bot Framework (Preview). Der „Bot Builder“ ermöglich das Codieren mittels C# oder NodeJS und bietet noch weitere Möglichkeiten der Konfiguration und Veröffentlichen des Bots im Bot Directory, uvm.

Schauen wir uns also mal an, wie man so ein eigenes Bot Service in Azure erstellen kann… (mehr …)

mehr lesen
AllgemeinCloudCollaboration, ProduktivitätDevelopment, CodingHybridOffice 365On-PremisesSharePoint 2016SharePoint OnlineVeranstaltung, Event, Konferenz

SharePoint.AT Blogger auf der #ESPC16 in Wien

Alle Beiträge die wir über die European SharePoint Conference 2016 in Wien geschrieben haben. Dieser Artikel wird laufend aktualisiert.

Welcome Europe to Vienna: SharePoint #ESPC16 aus dem schönen Wien (Nahed)
Tag 1-3

Tag 2-3

Tag 3-3

mehr lesen
AllgemeinDevelopment, CodingSharePoint 2013SharePoint 2016SharePoint Online

#ESPC16 Tag 2, Bericht 3-3, Meine Zusammenfassung

#ESPC16 Tag 1, Bericht 1, Meine ZusammenfassungAls Web-Developer der noch nicht allzu lange mit SharePoint zu tun hat, habe ich mir erhofft auf der ESPC2016 einen Einblick in die Best Practices und Erfahrungen der alteingesessenen SharePoint Frontend-Entwickler zu erhalten. In SharePoint gibt es verschiedene Vorgehensweisen um die Benutzeroberfläche mittels Javascript und CSS zu erweitern. Sei es über die Masterpage, Custom Actions, innerhalb eines Page Layouts oder über einen Skript-Editor Webpart. Durch das Einbinden von Skripts an verschiedenen Stellen kann es schnell etwas unübersichtlich werden und eine strikte Trennung von Logik, Design und Layout ist nicht immer möglich.
Genau aus diesem Grund wird der Fokus in Zukunft auf TypeScript, dem neuen SharePoint Framework (SPFx) und dem Frontend Framework Microsoft UI Fabric liegen. Die meißten Vorträge im Bereich Entwicklung drehten sich daher um diese neuen, sehr vielversprechenden Technologien.

Session 1: Developing Modular SharePoint Solutions using TypeScript
Da sich JavaScript nach und nach als die Standardmethode zum Anpassen der SharePoint Oberfläche durchsetzt, folgt als logischer nächster Schritt der Umstieg auf das von Microsoft entwickelte TypeScript. Es bietet Klassen, Module, Interfaces und weitere Features und liefert somit Entwicklern die nicht aus dem JavaScript Bereich kommen eine vertrautere Umgebung. Nach einer etwas längeren Einführung in diese relativ neue Programmiersprache zeigt Arto Kaitosaari wie TypeScript Module erstellt, kompiliert und letztendlich innerhalb von SharePoint verwendet werden können. Ein sehr interessanter Vortrag der dem Publikum vermitteln soll, wie die Zukunft der SharePoint Frontend-Entwicklung aussieht.

Session 2: Office 365 Microsoft Graph API Deep Dive
Die Microsoft Graph API ist eine Zusammenführung aller APIs, die Zugriff auf die Office 365 Plattform bieten. Sie ist sozusagen ein universeller Endpunkt mit dem es möglich ist, auf alle Office 365 Services zuzugreifen, ohne sich dabei mit mehreren Authentifizierungen herumplagen zu müssen. Sie vereint alles unter einem Dach. Donald Hessing erklärt zuerst den Authentifizierungsvorgang und zeigt danach an Hand einiger Beispiele wie der Zugriff auf die wichtigsten Endpunkte funktioniert. Trotz einiger Pannen bei der Demo ein sehr spannendes Tool mit viel Potential.

Session 3: Extending the SharePoint Search Experience with SharePoint Add-ins
Result Sources, Result Types, Display Templates, Managed Properties, Search Queries. Alles Dinge mit denen man sich bestens auskennen sollte, wenn es darum geht die SharePoint Suche optimal zu nutzen. Robrecht Van Caenegem erläutert die oft nicht ganz verständlichen Zusammenhänge zwischen diesen Komponenten. Weiters erläutert er wie mit Hilfe von SharePoint Add-Ins eine noch umfangreichere Sucherfahrung entwickelt werden kann.

Session 4: Explore the SharePoint Framework
Mike Ammerlaan spricht über das neue SharePoint Framework, kurz SPFx, welches sich aktuell in Entwicklung befindet und eine kleine Revolution im Bereich SharePoint Frontend-Development verspricht. Neben großen Veränderungen an der Oberfläche von SharePoint selbst wird sich auch die Art und Weise verändern, wie SharePoint Add-Ins in Zukunft entwickelt werden. Nämlich mit Hilfe von TypeScript und dem Frontend Framework Office UI Fabric.

Session 5: Beyond Bootstrap: Building a Ridiculously Lightweight Cross-platform Responsive Framework
Eine gute Einführung in die Welt des Responsive Web Design. Mit einigen Verweisen auf den SharePoint Blog von Stefan Bauer, der übrigens ebenfalls anwesend war, erklärt Bill Ayers was es beim Entwickeln von Responsive Websites zu beachten gibt und was die wesentlichen Eigenschaften eines solchen sind. Neben bewährten Frameworks wie Bootstrap bringt er den Zuhörern auch eine etwas unkonventionelle Lösung näher: Das Entwickeln eines eigenen, minimalistischen Frameworks dass sich auf die wichtigsten Dinge beschränkt und weitere Features wie Typografie, Farbgebung und zusätzliche Komponenten, welche es beispielsweise bei Bootstrap in Hülle und Fülle gibt, außen vor lässt. Gar keine so schlechte Idee, da SharePoint viele dieser Features bereits beinhaltet.

mehr lesen
AllgemeinCloudDevelopment, CodingHow-To, Tutorial, SzenarioHybridOffice 365On-PremisesSharePoint 2013SharePoint 2016SharePoint Online

Javascript und CSS einbinden mit User Custom Actions

 

User Custom Actions können einem spezifischem Web, einer Site, oder einer Liste (für unsere Zwecke eher uninteressant) zugewiesen werden. Sie bieten einem die Möglichkeit mittels ScriptLink Javascript einzubinden, ohne die Masterpage anrühren zu müssen. Generell stehen einem hierfür zwei Lösungsansätze zur Verfügung: Das Client Side Object Model (CSOM), oder die Sharepoint REST-API. Wir werden im Laufe dieses Artikels einige Anwendungsbeispiele mit REST anführen.

Jede User Custom Action besitzt die Eigenschaft „Location“, welche immer angegeben werden muss. Sie legt fest wo und wie die User Custom Action eingebunden wird. Um Beispielsweise eine Javascript Datei einzubinden muss der Wert „ScriptLink“ angegeben werden.

Folgende Parameter sind beim Einbinden von Scripts von Bedeutung:

  • Location: „ScriptLink“ gibt an dass es sich um ein Script handelt, dass eingebunden werden soll
  • Sequence: eine ganze Zahl, legt fest in welcher Reihenfolge Scripts eingebunden werden sollen
  • ScriptSrc: Der Pfad zur Datei, gleichzusetzten mit dem „src“-Attribute eines „script“-Tags in HTML
  • ScriptBlock: Optional, hier könnte direkt Javascript Code angegeben werden. Nicht empfehlenswert, da die Reihenfolge (Sequence) dann nicht eingehalten werden kann, jedoch notwendig um Stylesheets einzubinden.
  • Title & Description: Titel und Beschreibung der User Custom Action
  • ID: Optional, hier kann eine eigene ID angegeben werden. Falls nicht vorhanden wird von Sharepoint eine ID generiert


Wichtig: ScriptSrc darf in Sharepoint 2010 und 2013 keine absoluten Pfade beinhalten. Dies ist unbedingt zu vermeiden da Sharepoint sonst gar keine Seiten mehr anzeigt. In Sharepoint Online und Sharepoint 2016 lassen sich auch absolute Pfade problemlos einbinden.

Im folgenden Beispiel wird demonstriert, wie jQuery in eine Site eingebunden werden kann und somit auf allen Pages und Subsites dieser Site verfügbar ist.

$.post({
	url: "/pfad/zur/site/_api/site/usercustomactions",
	data: JSON.stringify({
		"__metadata": { "type": "SP.UserCustomAction" },
		"Location":"ScriptLink",
		"Sequence":"0",
		"Title":"jQuery 3.0.0",
		"Description":"User Custom Action zum Einbinden von jQuery",
		"ScriptSrc" : "~sitecollection/siteassets/css/jquery-3.0.0.min.js"
	}),
	headers: { 
		"X-RequestDigest": $("#__REQUESTDIGEST").val(),
		"content-type": "application/json;odata=verbose",
	},
	success: successHandler,
	error: errorHandler
});

Der angeführte REST-Call liefert einem nach erfolgreichem Erstellen der User Custom Action die eben erstellte UCA als Objekt oder in Form von XML zurück. Sie besitzt eine eindeutige ID (selber angegeben oder von Sharepoint generiert), mit deren Hilfe sie nachträglich wieder bearbeitet oder gelöscht werden kann.

Das folgende Beispiel zeigt wie man Änderungen an einer UCA vornimmt. Wir werden die Eigenschaft „ScriptSrc“ der eben erstellen UCA ändern, um eine aktuellere Version von jQuery zu laden.

$.post({
	url: "/pfad/zur/site/_api/site/usercustomactions('<GUID>')",
	data: JSON.stringify({
		"__metadata": { "type": "SP.UserCustomAction" },
		"ScriptSrc":"~sitecollection/siteassets/css/jquery-3.1.0.min.js"
	}),
	headers: { 
		"X-RequestDigest": $("#__REQUESTDIGEST").val(),
		"content-type": "application/json;odata=verbose",
		"X-HTTP-Method": "MERGE"
	},
	success: successHandler,
	error: errorHandler
});

Das folgende Beispiel zeigt wie die User Custom Action wieder gelöscht werden kann.

$.post({
	url: "/pfad/zur/site/_api/site/usercustomactions('<GUID>')",
	headers: { 
		"X-RequestDigest": $("#__REQUESTDIGEST").val(),
		"X-HTTP-Method": "DELETE"
	},
	success: successHandler,
	error: errorHandler
});

Da es auch Sinn macht Stylesheets einzubinden, ohne die Masterpage bearbeiten zu müssen, werden wir uns nun diesem Problem widmen. In Sharepoint hat man standardmäßig die Möglichkeit eine einzelne CSS Datei einzubinden (Websiteeinstellungen > Gestaltungsvorlage > Alternative URL für CSS-Datei). Dieses Feature hat jedoch einige Nachteile.

  • Es kann nur eine einzige Datei eingebunden werden
  • Erstellt man nachträglich eine Unterseite, muss die Einstellung erneut gespeichert werden damit diese auch für die neue Unterseite gilt.

Die Nutzung von User Custom Actions zum Einbinden von CSS Dateien ist wesentlich flexibler.

User Custom Actions bieten generell keine Möglichkeit, Stylesheets einzubinden. Es kann jedoch die „ScriptBlock“ Eigenschaft genutzt werden um eine Datei mit Javascript einzubinden.

Javascript zum einbinden einer CSS Datei:

(function(){
	var head = document.getElementsByTagName('head')[0];
	var link = document.createElement('link');
	link.type = 'text/css';
	link.rel = 'stylesheet';
	link.href = '~site/pfad/zu/einer/datei.css';
	head.appendChild(link);
})();

Alternatives Javascript zum einbinden einer CSS Datei (ab Sharepoint 2013):

(function(){ registerCssLink('~site/pfad/zu/einer/datei.css') })();

Einbinden eines Stylesheets mittels User Custom Action, diesmal nur für ein spezifisches Web (z.B. eine Unterseite):

var url = "~site/pfad/zu/einer/datei.css";

var block = [
	"(function(){",
	"var head = document.getElementsByTagName('head')[0];",
	"var link = document.createElement('link');",
	"link.type = 'text/css';",
	"link.rel = 'stylesheet';",
	"link.href = '" + url + "';",
	"head.appendChild(link);",
	"})();"
].join("");

$.post({
	url: "/pfad/zur/site/subsite/_api/web/usercustomactions",
	data: JSON.stringify({
		"__metadata": { "type": "SP.UserCustomAction" },
		"Location":"ScriptLink",
		"Sequence":"100",
		"Title":"",
		"Description":"",
		"ScriptBlock" : block
	}),
	headers: { 
		"X-RequestDigest": $("#__REQUESTDIGEST").val(),
		"content-type": "application/json;odata=verbose",
	},
	success: successHandler,
	error: errorHandler
});

 

Um Änderungen am Layout von Sharepoint vorzunehmen, oder zusätzliche Funktionen zu implementieren, müssen in der Regel diverse Javascripts und Stylesheets eingebunden werden. Dies kann entweder über Skript-Editor Webparts oder über die Masterpage erfolgen. Beide Varianten sind jedoch mit einer Reihe von Nachteilen und Einschränkungen behaftet. Skript-Editor Webparts sind auf eine Seite begrenzt. Die Masterpage wiederum ist umständlich zu bearbeiten und es besteht die Gefahr dass Anpassungen bei Sharepoint-Updates wieder verloren gehen. Daher haben wir uns nach einer besseren Lösung umgesehen: User Custom Actions

Published: 25.07.2016 14:09

Source: New feed

mehr lesen
AllgemeinAzureCloudDevelopment, CodingHybridOffice 365SharePoint 2016SharePoint Online

Azure AD, OAuth, OpenID, ADAL und OWIN… was noch?

Mit SharePoint 2016 und SharePoint online geht Microsoft den Weg Richtung Cloud und vor allem den Weg der hybriden Szenarien konsequent weiter. Umso öfter wird man dadurch aber gerade in der Entwicklung mit Begriffen konfrontiert, die immer wieder auch zu Verwirrung führen können und scheinbar nicht so genau einzuordnen sind. So wurde ich in der Vergangenheit schon mehrmals mit folgenden Fragen konfrontiert:

  • Warum brauche ich OAuth, wenn ich Azure AD nutze?
  • Was ist OpenID, ist das nicht OAuth?
  • Wofür brauch ich ADAL wenn ich Azure AD nutze?
  • OWIN? Was soll das sein?

Daher versuche ich hier einen kurzen Abriss über diese Begriffe, vor allem aus Entwicklersicht zu geben und dem interessierten Leser ein paar Links zur Verfügung zu stellen, um mehr zu erfahren bzw. sich in die Themen zu vertiefen.

(mehr …)

mehr lesen
AllgemeinDevelopment, CodingHow-To, Tutorial, SzenarioHybridOn-PremisesScripting, PowerShellSharePoint 2013SharePoint Online

SharePoint 2013 Social Tag Manager

In SharePoint 2013 gibt es die Möglichkeit, echte Hashtags zu nutzen, in der Form #tag. Als SharePoint Entwickler ist man natürlich daran interessiert, Hashtags programmatisch zu nutzen. Dafür gibt es natürlich auch eine API. Eine umfassende Dokumentation dazu gibt es in der MSDN (https://msdn.microsoft.com/EN-US/library/office/jj163864.aspx). Es werden selbstverständlich sämtliche APIs vom .NET client object model, Server object model bis hin zum JavaScript object model sowie REST services unterstützt. In diesem Beitrag wird das „Server object model“ als „Starting-Point“ gezeigt.

Will man also ein Hashtag programmatisch hinzufügen, ist die Klasse SocialTagManager notwendig. Sie befindet sich im Assembly Microsoft.Office.Server.UserProfiles (Namespace, Microsoft.Office.Server.SocialData). Dies ist noch keine wesentliche Neuerung, da diese bereits in SharePoint 2010 zur Verfügung stand. Der Unterschied ist jedoch erkennbar, wenn man das Term Store Management Tool aufruft. Dort werden Hashtags im System-Zweig des Taxonomy Term Stores abgelegt.

(mehr …)

mehr lesen
AllgemeinCloudDevelopment, CodingHow-To, Tutorial, SzenarioHybridKonfiguration, DeploymentOn-PremisesSharePoint 2013SharePoint Online

Lösung: SharePoint 2013 – Workflow startet nach Veröffentlichung nicht mehr

Wenn ein Workflow nach dem Veröffentlichen nicht mehr starten will kann es am SharePoint Designer Cache liegen. Die Workflow Status Spalte gibt dann nur folgendes aus „Failed on start“. Ob es am Cache des SP Designers liegt lässt sich überprüfen in dem man den Workflow von einem anderen Rechner aus veröffentlich. Startet der Workflow dann wieder wie gewollt war es wohl der Cache.

Um den Cache zu leeren muss man wie folg vorgehen:

  1. SP Designer schließen
  2. Mit Windows+R „Run“ aufrufen und
    %USERPROFILE%AppDataLocalMicrosoftWebsiteCache
    einfügen und ENTER drücken.
  3. Den Inhalt des Ordners der nun offen ist komplett löschen
  4. Wieder mit Windows+R „Run“ aufrufen und
    %APPDATA%MicrosoftWeb Server ExtensionsCache
    einfügen und ENTER drücken
  5. Wieder den gesamten Inhalt löschen
  6. Zusätzlich kann man in den SharePoint Designer Optionen Zwischenspeichern der Seiten Daten verhindern. Dazu im SP Designer (2010 und 2013): File -> Options -> Application Options

(mehr …)

mehr lesen
AllgemeinDevelopment, CodingHow-To, Tutorial, SzenarioKonfiguration, DeploymentOn-PremisesScripting, PowerShellSharePoint 2013

SharePoint 2013: Client Side Managed Meta Data Service

Wer schon mal versucht hat, die seit SharePoint 2013 neue Assembly Microsoft.SharePoint.Client.Taxonomy zu verwenden um mittels CSOM auf das Managed Meta Data Service zuzugreifen, hat vielleicht schon mal folgende Fehlermeldung gesehen.

Cannot invoke method or retrieve property from null object.
Object returned by the following call stack is null.
„GetDefaultSiteCollectionTermStore
Microsoft.SharePoint.Taxonomy.TaxonomySession.GetTaxonomySession“

Das Code-Fragment, das diese Fehlermeldung verursacht sieht beispielsweise so aus.

Anmerkung: Dieses Beispiel legt einen Termset “Intrigen der Macht, mit den Titeln von drei Büchern an, in der Gruppe “Books”.

(mehr …)

mehr lesen
AllgemeinDevelopment, CodingHow-To, Tutorial, SzenarioKonfiguration, DeploymentScripting, PowerShellSharePoint 2013SharePoint 2016

SharePoint 2013 und Unit Tests mit Visual Studio 2013

In der Vergangenheit war es nicht immer einfach die von Visual Studio mitgebrachte Möglichkeit für Unit Tests in Verbindung mit SharePoint zu nutzen. In den aktuellen Versionen (SharePoint 2013 und Visual Studio 2013) ist dies einfacher geworden und sollte auch anregen daran zu denken, wenn man SharePoint Apps entwickelt. Gerade wenn man an Auto-hosted Apps denkt, bei denen die Businesslogik außerhalb des SharePoints, in beispielsweise einem Azure Service gehostet wird, sollte man Unit Tests unbedingt nutzen.

Aber nicht nur für SharePoint Apps sind sie eine wichtige Möglichkeit Qualität in eine Lösung zu bringen, sondern auch für die traditionellen (Full-trusted) Lösungen, wie man sie hinlänglich kennt. Unit Tests im Zusammenspiel mit Full-trusted Solutions waren eben mitunter recht schwierig umzusetzen.

Beispielsweise kann man damit einen Unit Test schreiben, um Eventreceiver einer Liste zu testen. Legt man ein SharePoint Projekt an, dann ist es relativ leicht auch ein Unit Test Projekt zu erstellen, um das Ausführen von Eventreceivern zu testen. Geht man von einem Eventreceiver aus, der z.B. ein Datumsfeld setzt, wenn ein neues Item angelegt wird, so braucht man anschließend nur einen Unit Test, der genau diesen Fall überprüft, erstellen.

(mehr …)

mehr lesen
AllgemeinDevelopment, CodingHow-To, Tutorial, SzenarioOn-PremisesSharePoint 2013

SharePoint 2013 DEV: AngularJS

AngularJS ist die Werkzeugkiste schlecht hin. Mit dem Open-Source-Framework von Google lassen sich ganz leicht Single Page Applications (SPA) erstellen. AngularJS fügt HTML ein neues Konstrukt hinzu. Die Implementierung der AnuglarJS Library in ein SharePoint 2013 App Projekt ist auch nicht kompliziert, da zunächst die Library selbst von dem AngularJS Server heruntergeladen werden sollte. Anschließend wird im Projekt auf diese JavaScript-Datei verweisen mittels folgendem Tag
<script type=“text/javascript“ src=“Pfad/angular.js“></script>
wobei “Pfad” durch den richtigen Dateipfad zu ersetzten ist. Alternativ kann auch die Url des CDN verwendet werden:
https://ajax.googleapis.com/ajax/libs/angularjs/1.2.25/angular.min.js

Da die Library nun eingebunden und einsatzbereit ist, kann die Zwei-Wege-Datenbindung von AngularJS verwendet werden. Änderungen in der Ansicht (View) wirken sich so automatisch im Datenmodell (Model) aus und werden in den entsprechenden Elementen der Ansicht (View) direkt angezeigt.

Hier ein kleines Beispiel:

(mehr …)

mehr lesen
1 2 3 4
Page 2 of 4