close

Development, Coding

AllgemeinDevelopment, CodingHow-To, Tutorial, SzenarioOn-PremisesSharePoint 2013SharePoint 2016

SharePoint Basics: Publishing Pages

Beitragsbild-Übern-den-Wolken-fliegen-Freiheit

Site Pages in SharePoint programmatisch zu verändern wäre einfach und böte viele Möglichkeiten, wären da nicht die Publishing Pages. Sie verhindern oft konsistente Änderungen über alle Pages, da sie im Hintergrund anders verwaltet werden.

Besonders bei dynamischen Änderungen (zB über ein Http-Module) ist Vorsicht geboten. Beim Aufruf einer normalen Page sind viele Möglichkeiten offen, die bei Publishing Pages ausgeschlossen wurden. Die Unterschiede resultieren daraus, dass bei Publishing Pages im Hintergrund „TemplateRedirectionPages“ verwendet werden, die die Erstellung der eigentlichen Page kapseln.

mehr lesen
AllgemeinAzureCloudDevelopment, CodingHow-To, Tutorial, SzenarioHybridKünstliche IntelligenzTool, Bot, App, Add-In

Bot Framework Emulator – ein muss für jeden Bot Entwickler

beitragsbild-frage-wie-digital-transformation-1800×1200

Wir wollen hiermit den Bot Framework Channel Emulator (Kurz: Bot Emulator) vorstellen. Wie der Name schon sagt kann man damit das Verhalten seines Bots „nachspielen“ um zum Beispiel Probleme zu lösen indem man die Kommunikation zwischen seinem Bot (FrontEnd) und dem Bot Diensten (Endpunkt) einsehen kann. Ideal auch um einfach die Funktionalität seines Bots zu testen. Somit also ein unverzichtbares Tool für jeden Bot Entwickler.

Schritt 1 – Es war einmal ein Bot…

Zuerst braucht man einmal einen Bot logischerweise. Diesen kann man sich ganz einfach mit den Azure Bot Services generieren und je nach Bedarf den Bot um eine entsprechende Bot Intelligenz mittels Coding erweitern.

mehr lesen
Development, CodingHow-To, Tutorial, SzenarioOn-PremisesSharePoint 2013SharePoint 2016

SharePoint Basics: Erhöhte Rechte

beitragsbild-loesung-anleitung-punktgenau-beschreibung-zielorientiert

Rechte sind im SharePoint einer der wichtigsten Bereiche. Deshalb folgt hier ein How-To, wie die erhöhte Rechte im SharePoint für Zugriffe richtig verwendet werden. Die Standardmethode, um Funktionen oder Codeabschnitte mit erhöhten Rechten auszuführen, ist die Funktion „SPSecurity.RunWithElevatedPrivileges“. Sie änderte die Rechte des aktuellen Users zum Application Pool Account.

Es wird bei dieser Funktion auch kein wirklich neuer Thread im Hintergrund angelegt, sondern nur eine Personifikation mit der Identity des Application Pool Accounts durchgeführt. Diese wird beim Verlassen zurückgesetzt.

01. SPSecurity.RunWithElevatedPrivileges(delegate()
02.{
03.   using (SPSite site = new SPSite(siteID))
04.   {

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

Vorstellung: Eigenen Bot mit Microsoft Azure Bot Service erstellen

beitragsbild-automatisierung-workflow-roboter-power

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 lesen
AllgemeinCloudCollaboration, ProduktivitätDevelopment, CodingHybridOffice 365On-PremisesSharePoint 2016SharePoint OnlineVeranstaltung, Event, Konferenz

SharePoint.AT Blogger auf der #ESPC16 in Wien

beitragsbild-teamwork-herausforderung-loesung

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

Beitragsbild Web Page Source Codes Macro

#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

beitragsbild-source-code-scripting-coding-terminal

 

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?

beitragsbild-mann-sucht-loesung-in-den-wolken

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 lesen
AllgemeinDevelopment, CodingHow-To, Tutorial, SzenarioHybridOn-PremisesScripting, PowerShellSharePoint 2013SharePoint Online

SharePoint 2013 Social Tag Manager

Beitragsbild Collaboration Cloud Productivity allgemein

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 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 lesen
1 2 3
Page 1 of 3