Mittwoch, 13. Oktober 2010

Benutzerdefinierte Inhaltsabfragen in Sharepoint 2010

Mit Sharepoint 2010 kommen auch eine vielzahl Webparts mit, eines davon schauen wir uns heute an:

Inhaltsabfrage / Conten Query

Das Inhaltsabfrage Webpart ist dazu gedacht, Listen oder Bibliotheksinhalte an anderer Stelle wiederzugeben. Dies funktioniert out-of-the-box schon mal ganz gut. In den Webpart Eigenschaften kann man einiges Einstellen, zb was angezeigt werden soll.

In meinem Besipiel verwende ich einen Blog der auf einer Benutzerdefinierte Liste mit ein paar Spalten (Titel, Veröffentlichung, Kategorie (Metadaten), Teaser) aufbaut. Ich will den Ihnalt des Blogs auf meiner StartSeite angezeigt bekommen und verwende dazu das Inhaltsabfrage Webpart.
Die vordefinierten Einstellungsmöglichkeiten bei "Präsentation -> Formate" treffen jedoch leider nicht meinen Geschmack. Z.b gibt es kein Format dass mein Blog wie eine Liste anzeigt:

Gewünschtes Format für Inhaltsabfrage

Abhilfe kann geschaffen werden indem man sich sein eigenes Webpart, auf Basis Inhaltsabfrage, baut.

Dazu wird ein standard Inhaltsabfrage Webpart auf der Seite erstellt und mit den Beiträgen in meinem Medienspiegel-Blog verknüpft. Danach kann das Webpart exportiert und mit einem Editor geöffnet werden. Ich verwende dazu das Visual Studio 2010:








In dieser Ansicht sind alle Einstellungen zu finden. Bei

<property name="CommonViewFields" type="string" >Title,Text;PublishedDate,Date;PostCategory,Lookup</property>


werden die zu verwendeten Spalten eingetragen. In meinem Beispiel wählte ich Title,Text; PublishedDate,Date; und PostCategory,Lookup aus. Das letzt ist wiederum ein "Nachfrage - Field Item" auf eine Kategorie Liste.

Nun wird das bearbeitete Webpart abgespeichert - zb. mit dem Namen: Medienspiegel - die letzten 5 Beiträge. Im Sharepoint zurück wird die oberste Seite im Sharepoint Designer geöffnet und unter "Style Library->XSL Style Sheets" die Datei ItemStyle.xsl ausgecheckt und geöffnet.

In dieser Datei finden sich nun viele XSL templates, die die Gestaltung der Webparts behandeln. Wir fügen für unseres ein neues Template ein:

Als Präfix am Beginn der Datei:
xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime" 

Am Ende nach dem eignetlichen Code:

<!-- Eigenes Webpart Format MedienSpiegel -->
 

<xsl:template name="Medienspiegel" match="Row[@Style='Medienspiegel']" mode="itemstyle">
   <xsl:variable name="SafeLinkUrl"> 

            <xsl:call-template name="OuterTemplate.GetSafeLink">
                 <xsl:with-param name="UrlColumnName" select="'LinkUrl'"/>
            </xsl:call-template>
       </xsl:variable>
  <div id="linkitem" class="ItemActually">


<!-- hier Beginnt das eigentliche Basteln--> 

    <table class="PageTitle" cellpadding="3" cellspacing="3">
      <tr>
        <td>
            <span class="PageTitle" style="display:inline">
              <xsl:value-of disable-output-escaping="yes" select="ddwrt:FormatDate(string(@PublishedDate) ,1031 ,1)"/> <!-- 1031 für DE-->
              </span>
        </td>
        <td width="400">           
              <xsl:call-template name="OuterTemplate.CallPresenceStatusIconTemplate"/>
             <a href="{$SafeLinkUrl}" title="{@LinkToolTip}"><xsl:value-of disable-output-escaping="yes" select="@Title" /></a><br /><xsl:value-of select="@Teaser0"/>
        </td>
        <td> 
            <xsl:text>Kategorie: </xsl:text><br /> <a href="{$SafeLinkUrl}" title="{@LinkToolTip}"><xsl:value-of select="@Kategorien" /></a>
           </td>
     </tr>
    </table>
   <div style="clear:both;"></div>
  </div>
</xsl:template>



Die in Blau gekennzeichneten variablen müssen von euch angepasst werden. In der Benutzerdefinierten Liste des Blogs kann man diese Variablen auslesen (Listeinstellungen)

Die Variable "SafeLinkUrl" und ihr dazugehöriger Code ist von den anderen, im ItemStyle.xsl oberbei vordefinierten, Templates gestohlen und soll mir eine sichere Verlinkung zurück auf den Blogartikel liefern.

Die Uhrzeit der Veröffentlichung (PublishedDate) kann im Format 1031 für DE oder im Format 1033 für US angegeben werden.

Nachdem das XSL File nun bearbeitet ist wird es gespeichert und wieder eingecheckt. Zurück auf der SiteCollection kann man das alte WebPart löschen und im Bearbeitungsmodus das vohin lokal gespeicherte Medienspiegel Webpart in den Katalog hochladen. Auswählen, platzieren und bearbeiten - der Name des Templates der XSL Datei ist dann auch der Name im Format Drop-Down Menü:






















Wenn dann dem neuen Webpart das Format Medienspiegel gegeben wird, erscheinen direkt darunter unsere zuvor definierten Felder. In diese werden dann die Spaltennamen eingetragen und.. Voilla!

Je nach Bedarf können beliebig viele Webparts so bearbeitet und den Formaten hinzugefügt werden. In meinem Beispiel Foto könnt ihr sehen dass ich zb. noch ein eigenes Format für den Betriebsrats-Blog angelegt habe.
Dieser Artikel ist eine Anlehnung an Katharina Biedermann's Blog, jedoch mit einigen Modifikationen.


So, viel Spass damit!