Podcast-Schleuder SharePoint

von

Übersicht

Unser Kunde hat erkannt, dass Podcasts für die interne Kommunikation immer wichtiger werden. Er möchte seinen ca. 45.000 Mitarbeitern ein Podcast-Portal für interne Zwecke anbieten. Als Intranet kommt beim Kunden Microsoft SharePoint 2013 On-premise zum Einsatz. Für mich lag es daher nahe, SharePoint als schnelle und einfache Lösung vorzuschlagen.

Problemstellung

Die angestrebte Lösung sollte schnell verfügbar sein, weil die ersten Geschäftsbereiche bereits damit begonnen haben, Podcasts zu veröffentlichen. Außerdem sollte die Lösung natürlich günstig sein, also z.B. keine großen Entwicklungskosten mit sich bringen. Und sie sollte das direkte Abspielen von Podcast Episoden (z.B. im Webbrowser) ermöglichen, als auch das Herunterladen der Audiodateien erlauben. Es sollte eine Abonnier-Funktion zur Verfügung stehen und mehrere Podcast Folgen sollten in chronologisch richtiger Reihenfolge nacheinander angehört werden können. Zuletzt bestand noch die Anforderung, mehrere unterschiedliche Podcasts anbieten zu können.

Lösungsansatz und Umsetzung

Aus meinen Erfahrungen mit dem Content Query Web Part (CQWP), die ich in meinem Blogpost SharePoint als RSS Generator [1] beschrieben habe, wusste ich bereits, dass diese Anforderungen mit SharePoint 2013 On-Prem leicht umzusetzen sein würden.

Ich habe zwei Custom Listen angelegt. Die Liste CustomListPodcasts enthält die Namen der Podcasts. Die Liste CustomListEpisodes enthält alle Details jeder Episode, nämlich:

  • Titel der Episode (einzeiliger Text)
  • Cover der Episode (einzeiliger Text)
  • Name des Podcasts (Referenz zur Liste CustomListPodcasts) und
  • Link zur Audiodatei (Hyperlink)

Die Cover-Bilder liegen alle in der Images Bibliothek der Site und die Audiodateien befinden sich in der Documents Bibliothek. Für jeden Podcast habe ich eine eigene Page angelegt. Alle Pages haben den selben Aufbau:

  • Einleitungstext (entweder zum Podcastportal oder zum jeweiligen Podcast)
  • CQWP (zeigt entweder alle Items von CustomListEpisodes oder gefiltert nach Name des Podcasts)
  • Script Editor Web Part (SEWP) mit Referenz auf eine CSS-Datei um das bekannte Look & Feel des Intranet beizubehalten

Bei den CQWPs habe ich jeweils die RSS-Feed Generierung (Option: Enable feed for this web part) und das Abspielen von Mediadateien im Browser (Option: Play media links in browser) aktiviert.

Damit wird auf jeder Podcast-Seite ein für diesen Podcast individuekller RSS-Feed generiert. Auf der Homepage des Podcastportals erhalten die Besucher der Seite einen Überblick über alle Podcasts und können auf Wunsch auch einen Feed abonnieren, der alle Podcasts beinhaltet.

Vor- und Nachteile der vorgeschlagenen Lösung

Die vorgeschlagene und auch umgesetzte Lösung war schnell verfügbar und ist günstig, da bis auf das CSS Styling nur Out-of-the-box-Funktionen zum Einsatz kommen. Sie deckt alle Anforderungen ab. Die Pflege neuer Podcast Episoden dürfte recht einfach von der Hand gehen, da die SharePoint Plattform im Unternehmen bekannt ist.

Die in meinem Blogpost SharePoint als RSS Generator beschriebenen Nachteile in Verbindung mit dem Freigabeprozess/Aus- und Einchecken von Seiten trifft bei Verwendung von Custom Listen nicht zu.

Als erfreulicher Nebeneffekt ist zu nennen, dass die Einbindung der Podcasts in die Unternehmens-App mit relativ geringem Entwicklungsaufwand umgesetzt werden kann. Ich hatte bei meinem Vorschlag berücksichtigt, dass es bereits einen Connector zwischen SharePoint Custom Listen und der Unternehmens-App gibt und war mir sicher, dass eine Einbindung einfach sein würde.

Als kleiner Kritikpunkt bleibt vielleicht zu nennen, dass bei grundsätzlichen Änderungen nicht eine einzige Seite bearbeitet werden muss, sondern je eine Seite pro Podcast.

Problem mit defekten Links im RSS-Feed des CQWP

Bei meinen Tests habe ich bemerkt, dass die Links im RSS-Feed des CQWP defekt sind. Dazu muss man wissen, dass das CQWP in den Einstellungen für die Präsentation der gefundenen Ergebnisse für den Typ Link nur Spalten des Typs Hyperlink akzeptiert. Intern verwaltet SharePoint aber für Spalten des Typs Hyperlink zwei Werte, nämlich Web address und description. Während Web address ein Pflichtfeld ist, kann man description zwar leer lassen, allerdings wird es intern dann mit dem Wert von Web address befüllt.

Die Ausgabe des CQWP ist zwar fehlerfrei, aber der generierte RSS-Feed enthält defekte Links. Scheinbar ist das RSS XML-Template von SharePoint 2013 so angelegt, dass es Links im RSS-Feed zusammensetzt aus dem Wert von Web address und dem Wert von description, mit einem Komma getrennt.

Damit ergibt sich der Link im RSS-Feed wie folgt:

http://my-sharepoint-box/my-subsite/media/my-media-file.mp3,%20My%20Media%20File

Lösung durch Anpassen des RSS XML-Templates

Das CQWP verwendet bei der Generierung des RSS-Feeds das XML-Template Rss.xml aus der Style Biliothek des Site-Collection. Dieses Template muss entsprechend geändert werden, so daß der Link im Feed nicht mehr zusammengesetzt wird aus Web address und description, sondern nur noch Web address enthält.

Die Style Bibliothek findet man in den Site-Contents auf oberster Ebene der Site-Collection. Das XML-Template befindet sich dort im Verzeichnis XSL Style Sheets. Folgende Änderung ist im Template Rss.xml vorzunehmen:

Original Template

<xsl:if test="$UseCopyUtil != 'True'">
    <xsl:call-template name="OuterTemplate.GetSafeStaticUrl">
        <xsl:with-param name="Url" select="$Url"/>
    </xsl:call-template>
</xsl:if>

Das eigentliche Zusammensetzen der falschen URL geschieht außerhalb des Templates und kann vermutlich nicht so einfach verhindert werden. Deshalb nehmen wir durch die Änderung des Codes des Templates folgende zwei Manipulationen der URL vor:

  1. Anhängen eines Kommas an die URL (um sicherzustellen, dass das anschließende Trennen beim Komma auf jeden Fall erfolgreich sein wird; falls aus irgendeinem Grund SharePoint doch mal eine URL ohne Komma liefern sollte)
  2. Trennen der URL beim ersten auftretenden Komma und nur den linken Teil der URL weiter verwenden

Geändertes Template

<xsl:if test="$UseCopyUtil != 'True'">
    <xsl:call-template name="OuterTemplate.GetSafeStaticUrl">
        <xsl:with-param name="Url" select="substring-before(concat($Url,','),',')"/>
    </xsl:call-template>
</xsl:if>

Diesen Lösungsvorschlag habe ich so auch im SharePoint 2013 - General Discussions and Questions Forum im Microsoft TechNet vorgestellt [2].

Haftungsausschluss

Mit der vorgestellten Änderung am XML-Template liefert SharePoint in meinem Fall zuverlässig RSS-Feeds mit korrekten Links. Allerdings habe ich nicht untersucht, wie sich die Änderung auf z.B. RSS-Feeds von Views auswirkt. Das RSS-Feed Site-Feature der betroffenen Site ist deaktiviert.

Ergebnis

Mit der vorgestellten Lösung läßt sich recht einfach eine firmeninterne Podcast-Schleuder bauen. Bis auf wenig CSS-Styling kommen nur Out-of-the-box-Funktionen zum Einsatz, so daß keine zusätzlichen Entwicklungs- und Wartungskosten entstehen.

Die Inhalte der Podcast-Schleuder beruhen auf Custom Listen, die auch von wenig erfahrenen Bearbeitern gepflegt werden können. Das Setup ist so angelegt, dass die Podcast-Schleuder mehrere unterschiedliche Podcasts verwalten kann. Damit ist die vorgestellte Lösung auch für zukünftige Podcast-Anforderungen gut gerüstet. Dies beinhaltet auch z.B. das ggf. zukünftig angedachte externe Hosting der Podcast-Folgen.

Kategorien: Sharepoint

Zurück