CallOutActions-Menu in Listen und Bibliotheken anpassen

Einige Kunden möchten in SharePoint die bestehenden Menüs anpassen und bestimmte Buttons oder hinzufügen. Im Fall des Ribbons, Websiteeinstellungen und anderer Menüs ist das relativ einfach über CustomAction-Definitionen. Das in SharePoint 2013 neu eingeführte CallOut-Menü verhält sich allerdings etwas anders, da es komplett durch JavaScript erzeugt wird:

 

Um dieses anzupassen, muss also ein wenig mit JavaScript entwickelt werden. Problematisch ist hier vor allem, dass es kein entwicklerfreundliches Framework hierfür gibt, sondern das Erzeugen des kompletten Menüs überschrieben werden müsste. Microsoft macht sich das selbst zunutze, wenn des “Following Content”-Feature aktiviert wird: Die Render-Methode wird überschrieben, alle Buttons neu erzeugt und der Follow-Button hinzugefügt. Dies macht die Angelegenheit etwas komplex.

Nach einigen Stunden Arbeit habe ich jedoch eine recht einfache Möglichkeit gefunden, die an die Variante des “Following Content”-Features angelehnt ist: Das darin enthaltene JavaScript ruft eine vom System bereitgestellte Methode auf, die den Edit- und Share-Button erzeugt und nur der Follow-Button ist hardcoded in dem JavaScript. Und genau diese zentrale Methode wird in meiner Variante überschrieben und angepasst. Damit funktioniert die Anpassung sowohl mit Following-Content, als auch ohne.

Für diese Lösung wird nichts weiter benötigt als ein Visual Studio-Projekt mit einem Feature und einer CustomAction-Definition:

<CustomAction
 Id="CustomCalloutOnPostRenderTemplate"
 Location="ScriptLink" ScriptBlock="(function(){
CalloutOnPostRenderTemplate = function CalloutOnPostRenderTemplate(renderCtx, calloutActionMenu) {
var listItem = renderCtx.CurrentItem;
var openText = GetCallOutOpenText(listItem, renderCtx);
calloutActionMenu.addAction(new CalloutAction({
text: openText,
onClickCallback: function(calloutActionClickEvent, calloutAction) {
CalloutAction_Open_OnClick(calloutActionClickEvent, calloutAction, renderCtx);
}
}));
//calloutActionMenu.addAction(new CalloutAction({
// text: Strings.STS.L_CalloutShareAction,
// onClickCallback: function(calloutActionClickEvent, calloutAction) {
// CalloutAction_Share_OnClick(calloutActionClickEvent, calloutAction, renderCtx);
// },
// isVisibleCallback: function(calloutAction) {
// return CalloutAction_Share_IsVisible(calloutAction, renderCtx);
// }
//}));
};
})();"/>
 

Das JavaScript-Snippet definiert hierbei die Methode CalloutOnPostRenderTemplate neu und hierin kommentiere ich einfach die auszublendenden Buttons aus oder kann anhand des Beispiels auch neue erzeugen. Dieses JavaScript wird in das Script-Link-Delegate-Control eingebunden und das Ergebnis sieht dann so aus:

 

Wichtig: Das JavaScript darf nicht in eine externe JS-Datei ausgelagert werden (oder wenn, dann muss deutlich mehr Aufwand betrieben werden), da es ansonsten mit aktivierter “Minimal Download Strategy” nicht mehr funktioniert.

Nützlicher Schalter beim Anlegen eines Identity Providers: SignOutUrl

Vor Kurzem habe ich festgestellt, dass eine derzeit noch undokumentierte Eigenschaft in SharePoint gibt, die es einem erlaubt, beim Anlegen (und auch danach) eines Identity Providers in SharePoint eine SignOut-URL anzugeben.
Dies ist sehr nützlich, da hiermit das Ausloggen aus einer SAML-basierte Infrastruktur, wie z.B. ADFS möglich ist.

Die neue Option lässt sich bei der Verwendung von “New-SPTrustedIdentityTokenIssuer” mit dem Parameter SignOutUrl nutzen oder später mit Hilfe der Eigenschaft ProviderSignOutUrl festlegen.

Für die Nutzung in Verbindung mit ADFS könnte das Setzen der Eigenschaft per PowerShell beispielsweise so aussehen (vorausgesetzt, es gibt nur einen Identity Provider):

$ti = Get-SPTrustedIdentityTokenIssuer
$ti.ProviderSignOutUri = "https://login.firma.de/adfs/ls/?wa=wsignout1.0&wreply={UrlZurWeiterleitungNachSignOut}
$ti.Update()

Damit erspart man sich das leidige Anpassen der Login-Infrastruktur per Code. Die Eigenschaft kam mit einem der letzten Post-SP1-Updates, also zwischen April und Juli.

Probleme bei TMG und Web Application Proxy

Heute hatte ich mal wieder eine interessant Konstellation: Für eine ADFS-Authentifizierung für Office 365 sollte ein ADFS Proxy über das Internet verfügbar gemacht werden. In Windows Server 2012 R2 gibt es hierfür den Web Application Proxy, der gleichzeitig ADFS Proxy ist. Eine separate Rolle gibt es in ADFS 3.0 nicht mehr.

Sollte eigentlich einfach sein: TMG ist bereits im Einsatz, Listener ohne Authentifizierung und mit passendem Zertifikat existiert bereits. Also einfach neue Web Publishing Rule anlegen, mit der entsprechenden URL und auf den WAP zeigen lassen.

Resultat:

Obwohl die Pfade und Adressen alle stimmen, sagt er, er könne den Host nicht finden.

Lösung: Derzeit gibt es keine für dieses Szenario, der Web Application Proxy kann nicht über eine Web Publishing Rule veröffentlicht werden. Wenn man allerdings den ADFS Server direkt published, funktioniert es, aus Sicherheitsgründen empfiehlt es sich aber nicht.

Es gibt zwei Möglichkeiten, dieses Szenario umzusetzen:

  1. Authentifizierung auf TMG und Kerberos-Authentifizierung am ADFS. Nachteil: Der eingegeben Benutzername im Office 365 wird nicht in das TMG-Formular übernommen, das müsste dann noch per JavaScript implementiert werden. Und damit geht natürlich auch nur die interne Authentifizierung, kaskadierte ADFS-Konstrukte sind damit nicht möglich.
  2. Port-Weiterleitung auf den WAP. Sollten allerdings noch andere Publishing Rules auf dem Listener liegen und keine weitere IP-Adresse zur Verfügung stehen, müssen die bestehenden Veröffentlichungen dann auch auf den WAP umgezogen werden und damit der TMG komplett umgangen werden.

Seltsames Verhalten der Office Web Apps bei Sites im SharePoint 2010-Modus

Heute habe ich bei einem Kunden wieder ein seltsames Verhalten feststellen können, dass sich als Bug herausgestellt hat. Der Kunde hat seine Produktivumgebung auf SharePoint 2013 angehoben, lässt die meisten Sites aber noch im 2010-Modus laufen, da das neue Design noch nicht fertig ist. Einige Sites, z.B. das Search Center werden aber bereits im 2013er-Modus betrieben.

Zusätzlich wurden natürlich die Office Web Apps eingebunden. Wenn man nun von einer 2010er-Site ein Dokument in den Web Apps öffnet und dieses über Datei –> Beenden wieder schließt, sollte man eigentlich zur letzten URL zurück kommen. In diesem Fall kann es jedoch sein, dass man auf einer “beliebigen” SharePoint 2013-Site landet.

Der Grund hierfür ist recht einfach: Die 2013er-Sites setzen ein WmaContext-Cookie, die 2010er nicht. Die Web Apps-Integration in SharePoint verwendet dieses Cookie, um den Parameter sc im Aufruf der Web Apps mit der zuletzt besuchten URL zu befüllen.

Folge: Man landet beim Schließen der Datei nicht mehr auf der 2010er-Site, sondern auf der letzten 2013er-Site, auf der man die Web Apps verwendet hat.

Mal schauen, ob es hierfür jemals einen Fix geben wird, denn diese Kombination ist auch nicht gerade alltäglich 😉

Aktualisierungen im Microsoft Azure Portal

Microsoft hat in den letzten Wochen und Monaten ein neu designtes Management-Portal für Microsoft Azure entwickelt und als Preview bereitgestellt. Inzwischen sind einige neue Komponenten dazu gekommen, die bestehende Funktionen des alten Portals abbilden und erweitern.

Details zu den Erweiterungen finden sich in ScottGu’s Blog: http://weblogs.asp.net/scottgu/azure-virtual-machine-machine-learning-iot-event-ingestion-mobile-sql-redis-sdk-improvements

Das neue Portal befindet sich unter dieser Adresse: https://portal.azure.com/

Fehler bei Convert-SPWebApplication in SharePoint 2013

Wer nach der Installation von Service Pack 1 in SharePoint 2013 versucht, eine Datenbank von SharePoint 2010 anzuhängen und danach in den Claims-Mode zu konvertieren, könnte eine Überraschung erleben.

Normalerweise hängt man die Datenbank mit Mount-SPContentDatabase an, SharePoint migriert dann das Datenbankschema und danach kann man mittels Convert-SPWebApplication „[URL]“ –To Claims –RetainPermissions die Benutzernamen migrieren lassen.

Sollte bei diesem Vorgang die Nachfrage nach eine derzeit im Technet undokumentierten Schalter „-From“ erscheinen, muss dort der Wert „Legacy“ eingegeben werden. Es handelt sich hierbei um eine neue Option. Allerdings hat die Sache einen Haken: Die Benutzermigration funktioniert in dieser Variante noch nicht, es handelt sich hierbei um einen Bug.

Wer das Kommando benötigt, muss zuvor das Cumulative Update vom Juni 2014 installieren, damit ist der Fehler behoben und die Benutzernamenmigration funktioniert wieder einwandfrei. Alternativ kann die Datenbank natürlich auch schon in SharePoint 2010 in den Claims-Modus migriert werden.

Quo vadis, SharePoint?

Nach der SharePoint-Konferenz in Las Vegas gab es viele Spekulationen und Gerüchte über die Zukunft von SharePoint. Vor allem ein Beitrag in der Computerwoche hat sehr viele Diskussionen ausgelöst, was denn nun in Zukunft mit OnPremise-Umgebungen von SharePoint passieren wird. Auch in meinem Kundenkreis hat dieser Beitrag für große Unsicherheit gesorgt. Daher habe ich mich entschlossen, meine persönliche Sichtweise auf das Thema in diesem Beitrag niederzuschreiben.

SharePoint Conference 2014

Ja, die SharePoint Conference in Las Vegas war sehr cloud-lastig, vor allem, wenn man sich nur die Tags der jeweiligen Session anschaut. Bei einem Blick auf den Inhalt wird aber schnell klar, dass viele der Sessions auch Funktionen zeigen, die man auch OnPremise nutzen kann. SharePoint 2013 setzt sehr stark auf JavaScript und die Schnittstellen sind in beiden Welten nutzbar.

Ankündigungen

Jeff Teper hat auf der SharePoint Conference für 2015 die nächste OnPremise-Version von SharePoint angekündigt. Richtig ist auch, dass Kunden empfohlen wird, in Richtung Cloud zu gehen, aber ein Großteil der Kunden wird diesem Trend in den nächsten 5-8 Jahren sicher nicht folgen, dafür sind die Investitionen in die lokale Infrastruktur derzeit noch zu präsent und die Bedenken seitens Datenschutz noch zu groß.

Doch auch bei diese Ankündigung wurde wieder viel spekuliert und interpretiert: Jeff Teper habe nur die nächste Version angekündigt und nichts darüber hinaus verlauten lassen. Warum sollte er auch? In den letzten Jahren hat sich Microsoft etwas verhaltener bei den Roadmaps gezeigt und bei den kommenden Funktionen. Die nächste Version ist für nächstes Jahr angekündigt, man denke nur an das Jahr 2012, als SharePoint 2013 angekündigt wurde. Davor war auch relativ wenig an die Öffentlichkeit gedrungen, allen TAP-Kunden wurde zudem ein NDA auferlegt. Warum sollte das diesmal anders sein? Und wenn es nichts Neues zu berichten gibt, warum sollten sich die meisten Sessions mit OnPremise beschäftigen?

Die Zukunft und meine persönliche Meinung

Die Frage bleibt also, was uns die Zukunft bringen wird. Und genau da weiß Microsoft auch nur, wie es bis in 2-3 Jahren aussehen wird. Und darüber hinaus wird es von den Kunden enschieden. Man erinnere sich nur an die Ankündigung zu Exchange 2007, dass die Public Folder aus einer der nächsten Version verschwinden werden. Der Aufschrei der Kunden war enorm und zu was hat es geführt? Public Folder werden auch in Exchang 2013 unterstützt. Sie werden zwar nicht mehr groß weiter entwickelt, aber sie sind immer noch da.

Doch bei SharePoint sieht das sogar noch anders aus: SharePoint als Produkt ist ein zentraler Bestandteil von Office 365. Somit erhält Microsoft quasi fast als “Abfallprodukt” eine OnPremise-Version für Endkunden. Somit können beide Welten wunderbar bedient werden. Wieso sollte man dies in Zukunft nicht nutzen und durch eine Abkündigung einen Teil der Kunden verlieren? Das dürfte Microsoft beim vormals umsatzstärksten Produkt nicht riskieren wollen.

Doch eines ist auch klar: Der komplette Funktionsumfang von SharePoint Online wir sich lokal nicht realisieren lassen. Schon heute sehen wir die Hardware- und Infrastrukturanforderungen von SharePoint 2013 als ein nicht ganz unbedeutenden Faktor bei Projekten. Die Ressourcenanforderungen sind bereits immens und dazu kommen die zusätzlichen Produkte drum herum, die installiert, überwacht und gewartet werden müssen (Workflow Services, Office Web Apps, Distributed Cache, usw.). In der nächsten Version werden wir sicher nicht alle Funktionen aus der Cloud seien, weil sie einfach mit den derzeitigen lokalen Infrastrukturen nicht abbildbar sind, z.B. einige Teile von Power BI wie Power Q&A.

Und genau an diesen Punkten werden wir in den nächsten Jahren sicher auch vermehrt Hybrid-Umgebungen sehen, die das beste aus beiden Welten integrieren wollen. Wo dann der Schwerpunkt sein wird, wird von Kunde zu Kunde unterschiedlich sein. Und genau dieses Verhalten wird auch langfristig zeigen, in welche Richtung Microsoft und auch andere Hersteller gehen müssen.

SPC 2014: Wie geht es weiter nach dem Ende von InfoPath?

Vor wenigen Wochen hat Microsoft öffentlich bekannt gegeben, dass es bei InfoPath keine Weiterentwicklung mehr geben wird, das Produkt wird eingestellt. Zwar wird die jetzige Version bis 2023 voll unterstützt, jedoch kann es natürlich sein, dass bereits in der für nächstes Jahr angekündigten neuen SharePoint-Version für on premise die Unterstützung schwindet, z.B. in Form der Forms Services.

 
 

Für die SharePoint Conference hat man eine Ankündigung eines Nachfolgers versprochen, allerdings sind die Meinungen nach der Session gemischt. InfoPath wird nicht durch ein Nachfolgeprodukt ersetzt, sondern durch eine Reihe neuer Technologien, von denen die meisten auf Access basieren und die Funktionen auch noch nicht vollumfänglich definiert sind. Microsoft ruft unter http://officeforms.uservoice.com/ dazu auf, Anregungen einzureichen und darüber abzustimmen, welche Funktionen in Zukunft gefordert sind.

 
 

Excel Surveys (aka FoSS)

Excel Surveys (oder Forms on top of Spread Sheets) sind bereits in Office 2013 verfügbar und erlauben das Erstellen von SharePoint-Umfragen mit Hilfe von Excel 2013. Dies funktioniert bereits in SharePoint 2013 on premises und wird in SharePoint Online bald auch verfügbar sein.

 
 

Forms on top of SharePoint Lists (FoSL)

FoSL wird eine neue webbasierte Technologie, die das Anpassen von Formularen in SharePoint im Browser direkt ermöglichen soll. Derzeit befindet sich die Technologie noch in Entwicklung und ist noch nicht einmal feature-complete. Die Funktion erlaubt es wie beim Modifizieren des Formulars mit Hilfe von InfoPath das Eingabe- und Anzeigeformular zu bearbeiten, hier jedoch im Browser.

Die Technologie basiert auf den Access Services und ist derzeit in einem sehr frühen Stadium. Die Demo in der Session war daher sehr dünn. In dieser Form wird es wahrscheinlich im Sommer in SharePoint Online bereitgestellt werden. Wenigstens sollen die meisten Feldtypen wie auch Nachschlagefelder und sogar kaskadierte Drop-Down-Felder unterstützt werden. Anfang 2015 sollen dann Regelfunktionen, Anzeigen/Verstecken von Bereichen, Unterstützung mobiler Geräte und Profilinformationen folgen. Weiterhin stehen für später WebService-Aufrufe, Enterprise-Daten und eSignature auf der Agenda. Wir sind gespannt, wie das tatsächlich aussehen wird.

 
 

Structured Documents

Oftmals werden in Unternehmen Formulare in Word generiert und ausgefüllt, damit man sie einfach drucken, in PDF umwandeln, archivieren und dergleichen kann. Hier soll zum Ende des Jahres vom Word Team eine Ankündigung gemacht werden, welche Änderungen und neuen Funktionen zukünftige Word Versionen bringen werden, aber derzeit gibt es hier gar nichts zu berichten.

 
 

App Forms

Hierauf konzentriert sich Microsoft offensichtlich am meisten. Die App Forms, die mit den Access Services erstellt werden, stellen die Zukunftstechnologie für Formulare in SharePoint OnPremise und Online dar. Also: Revival of Access. Die Access Services waren bereits in SharePoint 2010 dabei und nicht sonderlich beliebt, wir werden sehen, ob Microsoft das Ruder hier Herumreißen kann und einen deutlichen Mehrwert in allen Bereichen durch diese Technologie bieten kann oder ob der Begriff “Access” schon für lange Gesichter bei den Kunden sorgt.

 
 

Fazit

Ich bin sehr skeptisch bezogen auf die Ersatzprodukte von InfoPath. InfoPath war dermaßen mächtig und flexibel einsetzbar, dass es schwer wird mit solchen Ankündigungen hier das Vertrauen der Nutzer von InfoPath hoch zu halten. Klar, war es teilweise schwer damit umzugehen und einige Dinge funktionierten auch nicht so richtig, aber es kam – mal abgesehen von manchen Drittherstellerlösungen – nichts an die Möglichkeiten von InfoPath heran.

SPC 2014: Identity Federation, Load Testing und Power BI

Der Dienstag wurde für mich von Spencer Harbor mit einem Vortrag zur Identity Federation für Office 365 mit Windows Azure Active Directory eröffnet. Zunächst einmal stellte er klar, dass man Identity Mangement benötigt, sobald man SharePoint im Einsatz hat. Wer schon einmal mit Organisationsstrukturen in Genehmigungsprozessen, der Personensuche oder einer einfachen Auflistung von Mitarbeitern einer Abteilung in SharePoint zu tun hatte, weiß genau, wovon Spencer Harbar hier spricht. Und der technische Teil dieses Managements macht gerade einmal 10% aus, der Rest sind politische Themen innerhalb des Unternehmens.

 
 

Technisch zeigte Spencer dann wie man mit Hilfe von Windows Azure eine hochverfügbare Infrastruktur für die Identity Federation aufbauen kann. Wer eine solche haben möchte, muss mit insgesamt sieben Servern (2x ADFS Proxy, 2x ADFS, 2x SQL Server und 1x DirSync) eine ganze Reihe an Maschinen bereitstellen und warten. Diese sind in Windows Azure eventuell nicht weniger verfügbar und es ergibt sich unter Umständen auch ein Vorteil bei der Bandbreite für Internet-Clients. Die Maschinen bleiben trotzdem Teil der internen Domäne und kommunizieren über eine verschlüsselte VPN-Verbindung mit dem eigenen Netzwerk.

 
 

Das größte Problem bei der Identity Federation ergibt sich jedoch aus der Domänenstruktur: Wer eine größere Anzahl an Domänen oder sogar Forests hat oder dessen Domäne über eine nicht öffentlich verifizierbare Adresse verfügt (.local) muss besondere Wege gehen: Im ersten Fall wird ein separater FIM-Server benötigt, im zweiten muss der UPN der Benutzeraccounts entsprechend angepasst werden.

 
 

Weiter ging es mit einem sehr unterhaltsamen Beitrag von Shane Young und Todd Klindt, die zeigten, wie einfach Load Testing von SharePoint 2013 mit Visual Studio 2013 auch für Nichtentwickler sein kann. Sie unterschieden dabei auch zweckmäßig den Performance-Test, Last-Test und Stress-Test voneinander und wie diese umsetzbar sind, um beispielsweise zu bestimmen bis zu welcher Anzahl Benutzer die Farm ausgelegt ist und wo der Schwachpunkt liegt.

 
 

Den Abschluss bildete an diesem Tag für mich ein Vortrag über Power BI für IT Professionals. Matt Mason zeigte in diesem Vortrag die Mächtigkeit von Power BI in Office 365, indem er verschiedene Kennzahlen mit Hilfe von Power Query in Excel importierte, mit Power Pivot das Datenmodell erstellte, mit Power View und Power Map als Diagramm und als Landkarte visualisierte und diese dann auf Office 365 veröffentlichte. Dort lassen sich dann anhand der Datenquellen mittels Power Q&A menschliche Abfragen formulieren, um andere Visualisierungen zu erhalten, beispielsweise “issues by nr of tenants and priority”. Power Q&A erstellt dann eine passende Ansicht dieser strukturierten Datenquelle. Voraussetzung ist natürlich eine gute Datenmodellierung, damit Q&A die Begrifflichkeiten auch entsprechenden Dateneigenschaften zuordnen kann.

SPC 2014: Upgrade, Migration und Performance

Montagnachmittag hatte ich noch zwei Sessions besucht. Zunächst den Vortrag zu Upgrade und Migration auf SharePoint 2013 und Office 365 von Dan Holme. Er ist weniger auf die technischen Feinheiten, als auf die Business-Entscheidungen dahinter eingegangen. Sehr richtig fand ich die Aussage: “Soll ich auf SharePoint 2013 bzw. In die Cloud migrieren? – Nein!”. Denn im Gründe muss eine Änderung einen Business Value haben und darf kein Selbstzweck haben. Eine weitere Empfehlung von ihm: möglichst früh die neuen Produkte parallel einführen und für die Zwecke nutzen, die dort besser gehen. Im Grunde genommen bei SharePoint 2013 eben alle Workloads.

Dies hat natürlich zur Folge, dass man zwei Umgebungen betreuen muss, daher muss man sich die Frage stellen, ob eine Migration der alten Inhalte dann nicht doch einen Business Value hat.

Eine weitere Absage erteilte er der weit verbreiteten Mär, dass man bei neuen Produkten besser bis Service Pack 1 warten sollte. Mal davon abgesehen, dass diese Wartezeit bei SharePoint 2013 nun vorüber ist, werden die neuen Releases bereits bei Microsoft mit Millionen von Benutzern getestet, im Rahmen von Office 365. wir haben es also mit’m feiner völlig anderen Test zu tun, der die Bugfreiheit enorm erhöht.

Beim zweiten Vortrag von Ryan Campbell ging es um Advanced Performance Analysis. Er stellte anhand eines Kundenszenarios mit einer sehr großen SharePoint Farm dar, mit welchen Mitteln er beim Kunden Flaschenhälse entdeckt hatte.

Hierzu sammelte er 400GB Rohdaten von IiS Logs, Performance Countern, TraceRoutes, ULS Logs und so weiter und analysierte diese per SQL Server, Power BI und Excel, um Grafiken zu erstellen

Das Resultat der Untersuchung ergab folgende Action Items:

• Abschalten vergessener Überwachungsfunktionen
• Erhöhen der Dateianzahl der TempDB
• RAM-Erweiterung
• Setzen von MAXDOP im SQL Server auf 1
• Erhöhen der Netzwerkbandbreite bei einigen Verbindungen

Im Endeffekt also genau die Punkte, die sich bereits in den Empfehlungen des TechNet finden.