Archiv der Kategorie: SharePoint-Entwicklung

Achtung wichtige Änderungen an ItemStyle.xsl

Ich arbeitete mit ItemStyle.xsl zum Anpassen der Darstellung einer Inhaltsabfrage-Webpart und rechts über Mittag, Ich habe ein Bruch mit der XSL-Datei ändern. Ich wußte nicht, es, aber dies hatte weitreichende Auswirkungen auf die Websitesammlung. Ich ging zum Mittagessen und nach meiner Rückkehr, Diese Meldung erscheint in einer Reihe von Orten bemerkt:

Nicht in der Lage, dieses Webpart anzeigen. Um das Problem zu beheben, Öffnen Sie diese Web-Seite in einer Windows SharePoint Services-kompatiblen HTML-Editor wie Microsoft Office SharePoint Designer. Wenn das Problem weiterhin besteht, Kontaktieren Sie Ihren Serveradministrator Web.

Ich machte den client (nicht erkannte noch, dass es meine Schuld an dieser Stelle) aber schließlich bemerkte, dass visual Studio Intellisense wurde warnt mich, dass ich aufgrund eines fehlerhaften XSL hatte. Ich es korrigiert und alles begann.

Verdammt vorsichtig mit ItemStyle.xsl arbeiten (und die globale XSL-Dateien) — brechen sie wirkt sich auf viele Artefakte in der Websitesammlung.

<Ende />

Content Query Web Teil Ergebnisse in einem Raster anzeigen / Tabelle

Übersicht und Zielsetzung

Out of the box, MOOS’ Webpart für Inhaltsabfragen (CQWP) zeigt die Ergebnisse in Form einer Liste, ähnlich zu den Suchergebnissen. Es ist auch möglich, die Ergebnisse in einem Raster-Format anzeigen (dh. HTML-Tabellenformat). Raster-Formate sind unter Umständen besser. Ich beschreibe wie man diesen Effekt in diesem Artikel zu erreichen.

Business-Szenario

Ich arbeite mit einem Client auf eine unternehmensweite MOSS-rollout. Wir haben ihre Taxonomie gestaltet, so dass Projekte Bürger der ersten Klasse in der Hierarchie sind und ihre eigene Top-Level-Website haben. Projektmanager erhalten eine Singleton-Liste von Projektzusammenfassungsinformationen, wie Titel, Budget, erwarteter Fertigstellungstermin, verbleibende Budget und anderen Übersicht Typ Felder. Von "singleton" Ich meine eine benutzerdefinierte SharePoint-Liste, die garantiert, dass nur ein Element enthalten. Vereinfachender, Es sieht wie folgt aus:

Bild

Der technische Ansatz ist ähnlich wie beschrieben Hier (http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!447.entry). Der CQWP wird eine XSL-Transformation ausgeben von HTML für den Browser zum Rendern verwendet..

Ich stelle mir vor immer das Ergebnis vor dem Tauchen in die XSL-Datei, da XSL ein Alptraum ist. Hier ist meine gewünschte Ergebnis:

Bild

HTML wie folgt generiert, die sich ergeben:

<HTML>
 <Körper>
 <Zentrum>
 <Tabelle Grenze= 1>

<!-- Etiketten-->
 <TR bgcolor= blau>
 <TD><Schriftart Farbe= weiß><b>Projektname</b></Schriftart></TD>
 <TD ausrichten= rechts><Schriftart Farbe= weiß><b>Vollständiges Datum</b></Schriftart></TD>
 <TD ausrichten= rechts><Schriftart Farbe= weiß><b>Budget</b></Schriftart></TD>
 <TD ausrichten= rechts><Schriftart Farbe= weiß><b>Tatsächliche Kosten</b></Schriftart></TD>
 <TD><Schriftart Farbe= weiß><b>Gesamtstatus</b></Schriftart></TD>
 </TR>

<TR>
 <TD>Computerraum neu verkabeln.</TD>
 <TD ausrichten= rechts>02/01/08</TD>
 <TD ausrichten= rechts>22,500.00</TD>
 <TD ausrichten= rechts>19,000.00</TD>
 <TD>In Bearbeitung</TD>
 </TR>

<TR>
 <TD>Bereitstellung Server für SQL Upgrade</TD>
 <TD ausrichten= rechts>04/01/08</TD>
 <TD ausrichten= rechts>7,500.00</TD>
 <TD ausrichten= rechts>0.00</TD>
 <TD>Geplant</TD>
 </TR>

</Tabelle>
 </Zentrum>
 </Körper>
</HTML>

Ansatz

Gehen Sie folgendermaßen vor um das Raster zu erstellen:

  1. Identifizieren Sie die Komponenten des Rasters (Zeilen/Spalten).
  2. Definieren und Erstellen der erforderlichen Websitespalten.
  3. Unterseiten für die Projekte und Singleton-Listen zu erstellen.
  4. Fügen Sie die CQWP zu einer Webseite hinzu und konfigurieren Sie es für Ihre Listen suchen.
  5. Ändern der CQWP XML um die zusätzlichen Spalten zu sammeln.
  6. Ändern Sie die XSL-Datei um eine Tabelle zu erzeugen.

Ich werde auf Nummer sechs konzentrieren. Zahlen eins bis vier sind geradlinig und etwas, das jeder Benutzer CQWP bereits getan hat. Nummer fünf wurde gut dokumentiert, andere einschließlich dieser erschöpfenden Screenshot beladenen Artikel aus MSDN Hier (http://msdn2.microsoft.com/en-us/library/bb897399.aspx) und Heather Solomon's blog Hier (http://www.heathersolomon.com/blog/articles/CustomItemStyle.aspx).

Schrauben und Muttern

Beginnen Sie und implementieren Sie die Schritte eins bis fünf nach der MSDN-Dokumentation und Heather Solomon Artikel.

An diesem Punkt, Sie haben Ihre CQWP zur Seite hinzugefügt, und Sie haben Ihre <CommonViewFields> nach Bedarf konfiguriert.

Die üblichen Schritte, Ich bekomme diese Zwischenergebnisse:

1. Erstellen eines Inhaltstyps, templatized benutzerdefinierte Listen für dieses Inhaltstyps und zwei Standorte. Hier ist der Content-type:

Bild

Hier ist die Websitestruktur:

Bild

2. Fügen Sie die CQWP nach Listenerstellung mein Projekt Unterwebsites und Singleton Projekt Zusammenfassung:

Bild

3. Fügen Sie alle zusätzliche Informationen, die ich über will die <CommonViewFields>:

        <Eigenschaft Name="CommonViewFields" Typ="Zeichenfolge">Project_x0020_Name;Project_x0020_Expenses;Project_x0020_Status;Project_x0020_Start_x0020_Date;Project_x0020_End_x0020_Date;Project_x0020_Budget</Eigenschaft>

Anmerkung, die ich hatte weiterhin die Eigenschaftenfelder auf einer Linie, oder es würde nicht funktionieren. (CQWP sagen mir, dass die Abfrage keine Elemente zurückgegeben).

4. An diesem Punkt, Wir sind bereit, über die MSDN-Artikel bewegen und Flip Sie Heather Solomon-Artikel. Ihre Schritte, beginnend in der Nähe von Schritt #5 um eine benutzerdefinierte erstellen / nicht duplizierte Version der ItemStyle.xsl. Ich befolgen Heathers Rat, bis hinauf Schritt 11 und erhalten diese Zwischenergebnisse:

4.1: Mein XSL-Vorlage wie folgt zu nennen:

<XSL:Vorlagenname = "Grid" Match = "Zeile[@Style = "Grid"]" Modus = "Itemstyle">

Ich passe auch leicht ihr vorgeschlagen <XSL:für jeden …> durch das Hinzufügen einer <BR /> Tag, um eine sauberere Liste bereitstellen:

    <XSL:für jeden Wählen Sie="@*">
      P:<XSL:Wert der Wählen Sie="Name()" /><BR/>
    </XSL:für jeden>

4.2: Ändern Sie das Webpart, zur Darstellung und wählen Sie meine "Gitter" Stil:

Bild

Die Änderung übernommen und hier ist das Ergebnis:

Bild

Aus dem Gesagten sehen wir, dass wir wollen, dass die Felder (Projektname, Kosten, Status, usw.) stehen für uns zu nutzen, wenn wir den HTML-Code ausgeben. Nicht nur das, aber wir sehen die Namen, mit denen wir diejenigen Spalten die XSL-Datei verweisen muss. Zum Beispiel, Wir verweisen auf Projekt-Status als "Project_x005F_x0020_Name".

An diesem Punkt, Wir fahren von Heather's Blog und von den Schultern der Riesen, Ich hinzufügen mein eigenes kleines bisschen.

ContentQueryMain.xsl

HINWEIS: Wenn sowohl ContentQueryMain.xsl als auch ItemStyle.xsl ändern, Checken Sie diese Dateien wieder, bevor die Auswirkungen Ihrer Änderungen angezeigt werden sollen.

Raster zu Zwecken, MOSS verwendet zwei verschiedene XSL-Dateien, um die Ergebnisse zu produzieren, sehen wir von einer CQWP. Das vorherige Bit Ausgabe generieren, Wir modifiziert ItemStyle.xsl. MOSS nutzt eigentlich ein weiteres XSL-Datei, ContentQueryMain.xsl, in Verbindung mit ItemStyle.xsl seine HTML generieren. Wie der Name schon sagt, ContentQueryMain.xsl ist der "main" XSL, das steuert den gesamten Fluss der Übersetzung. Durchläuft alle gefundenen Elemente und übergibt sie eins nach dem anderen zu Vorlagen in ItemStyle.xsl. Wir werden ItemStyle.xsl zum Generieren von geöffnetem ändern. <Tabelle> Tag vor dem Ausgeben von der ersten Zeile der Daten und dem schließenden <Tabelle> Tag nach der letzten Zeile ausgeben. Um dies zu erreichen, ContentQueryMain.xsl wird geändert, um unsere "Gitter zwei Parameter übergeben" Vorlage in ItemStyle.xsl, "letzte Zeile" und die "aktuelle Zeile". ItemStyle.xsl verwendet diese bedingt die erforderlichen Tags ausgeben.

Heather Solomon Technik, Wir suchen ContentQueryMain.xsl. Es befindet sich an der gleichen Stelle wie ItemStyle.xsl. Dieser Screenshot sollte helfen:

Bild

Wir müssen die folgenden Änderungen vornehmen:

  • Eine Xsl-Vorlage ändern, "CallItemTemplate" aufruft, die tatsächlich unser Grid-Vorlage in ItemStyle.xsl. Wir geben zwei Parameter der Grid-Vorlage weiter, sodass es die Daten haben wird, die es bedingt zu generieren, öffnen und schließen muss <Tabelle> Schlagwörter.
  • Ändern Sie ein weiteres Stück der ContentQueryMain.xsl, die CallItemTemplate"aufruft" ein "LastRow weiterzugeben" Parameter, so dass LastRow unsere Grid-Vorlage weiterbelastet werden kann.

Suchen Sie die Vorlage mit dem Namen "OuterTemplate.CallItemTemplate" durch die Zeichenfolge identifiziert:

  <XSL:Vorlage Name="OuterTemplate.CallItemTemplate">

Das gesamte Template wie folgt zu ersetzen:

  <XSL:Vorlage Name="OuterTemplate.CallItemTemplate">
    <XSL:param Name="CurPosition" />

    <!--
      Hinzufügen der "LastRow" Parameter.
      Wir verwenden, nur wenn der Element-Stil-Pass in "Grid" ist.
    -->
    <XSL:param Name="LastRow" />

    <XSL:Wählen Sie>
      <XSL:Wenn Test="@Style = 'NewsRollUpItem'">
        <XSL:anwenden-Vorlagen Wählen Sie="." Modus="ItemStyle">
          <XSL:mit param Name="EditMode" Wählen Sie="$cbq_iseditmode" />
        </XSL:anwenden-Vorlagen>
      </XSL:Wenn>
      <XSL:Wenn Test="@Style = 'NewsBigItem'">
        <XSL:anwenden-Vorlagen Wählen Sie="." Modus="ItemStyle">
          <XSL:mit param Name="CurPos" Wählen Sie="$CurPosition" />
        </XSL:anwenden-Vorlagen>
      </XSL:Wenn>
      <XSL:Wenn Test="@Style = 'NewsCategoryItem'">
        <XSL:anwenden-Vorlagen Wählen Sie="." Modus="ItemStyle">
          <XSL:mit param Name="CurPos" Wählen Sie="$CurPosition" />
        </XSL:anwenden-Vorlagen>
      </XSL:Wenn>

      <!--
              Übergeben Sie aktuelle Position und Lastrow an die Gitter itemstyle.xsl Vorlage.
              ItemStyle.xsl verwenden, die die offene ausgeben und schließen <Tabelle> Schlagwörter.
      -->
      <XSL:Wenn Test="@Style = "Grid"">
        <XSL:anwenden-Vorlagen Wählen Sie="." Modus="ItemStyle">
          <XSL:mit param Name="CurPos" Wählen Sie="$CurPosition" />
          <XSL:mit param Name="Letzter" Wählen Sie="$LastRow" />
        </XSL:anwenden-Vorlagen>
      </XSL:Wenn>

      <XSL:sonst>
        <XSL:anwenden-Vorlagen Wählen Sie="." Modus="ItemStyle">
        </XSL:anwenden-Vorlagen>
      </XSL:sonst>
    </XSL:Wählen Sie>
  </XSL:Vorlage>

Die Kommentare werden der Zweck der Änderungen.

Natürlich, die "OuterTemplate.CallItemTemplate" nennt sich aus einer anderen Dokumentvorlage. Suchen Sie nach dieser Vorlage für diese Textzeichenfolge:

<XSL:Vorlage Name="OuterTemplate.Body">

Blättern Sie durch die Anweisungen im OuterTemplate.Body und fügen den LastRow-Parameter wie folgt ein (als Kommentar in kursiv dargestellt):

<XSL:Call-template Name="OuterTemplate.CallItemTemplate">
  <XSL:mit param Name="CurPosition" Wählen Sie="$CurPosition" />
  <!-- Den LastRow Parameter einfügen. -->
  <XSL:mit param Name="LastRow" Wählen Sie="$LastRow"/>
</XSL:Call-template>

Nach all dem, Endlich haben wir die Dinge richtig einrichten, so dass unsere ItemStyle.xsl ausgeben kann <Tabelle> Markierungen an der richtigen Stelle.

ItemStyle.Xsl

HINWEIS: Wieder, ItemStyle.xsl nach Sie Änderungen vornehmen, so dass Sie die Auswirkungen dieser Änderungen sehen Einchecken.

Wir haben hier zwei Aufgaben:

  • Ersetzen Sie die gesamte Grid-Vorlage. Sie können von unten kopieren.
  • Fügen Sie einige Mumbo Jumbo außerhalb der Template-Definition, die "Formatcurrency ermöglicht" Vorlage arbeiten. (Sie können sagen, dass ich einen schwach Handle auf XSL).

Erste, im oberen Bereich der ItemStyle.xsl, Fügen Sie diese Zeile:

  <!-- Einige Hokuspokus, die uns ermöglicht, U.S anzeigen. Währung. -->
  <XSL:Dezimal-format Name="Personal" Ziffer="D" />

  <XSL:Vorlage Name="Standard" Spiel="*" Modus="ItemStyle">

Beachten Sie, dass ich fügte hinzu, es direkt vor der <XSL:Vorlagenname = "Standard" …> Definition.

Nächste, gehen Sie zurück zu unserer Grid-Vorlage. Ersetzen Sie die gesamte Grid-Vorlage durch folgenden code. Es ist gründlich kommentierte, aber zögern Sie nicht, mich per e-Mail oder Kommentare auf meinem Blog zu hinterlassen, wenn Sie Fragen haben.

  <XSL:Vorlage Name="Raster" Spiel="Zeile[@Style = "Grid"]" Modus="ItemStyle">

    <!--
      ContentMain.xsl übergibt, CurPos und zuletzt.
      Wir verwenden diese bedingt die offene ausgeben und schließen <Tabelle> Schlagwörter.
    -->
    <XSL:param Name="CurPos" />
    <XSL:param Name="Letzter" />

    <!-- Die folgenden Variablen sind unverändert aus der Norm ItemStyle.xsl -->
    <XSL:Variable Name="SafeImageUrl">
      <XSL:Call-template Name="OuterTemplate.GetSafeStaticUrl">
        <XSL:mit param Name="UrlColumnName" Wählen Sie=""ImageUrl""/>
      </XSL:Call-template>
    </XSL:Variable>
    <XSL:Variable Name="SafeLinkUrl">
      <XSL:Call-template Name="OuterTemplate.GetSafeLink">
        <XSL:mit param Name="UrlColumnName" Wählen Sie=""LinkUrl""/>
      </XSL:Call-template>
    </XSL:Variable>
    <XSL:Variable Name="DisplayTitle">
      <XSL:Call-template Name="OuterTemplate.GetTitle">
        <XSL:mit param Name="Titel" Wählen Sie="@Title"/>
        <XSL:mit param Name="UrlColumnName" Wählen Sie=""LinkUrl""/>
      </XSL:Call-template>
    </XSL:Variable>
    <XSL:Variable Name="LinkTarget">
      <XSL:If Test="@OpenInNewWindow = 'True'" >_blank</XSL:If>
    </XSL:Variable>

    <!--
      Hier definieren wir eine variable, "TableStart".  Diese enthält den HTML-Code, mit dem wir die Eröffnung der Tabelle sowie die Spaltenbeschriftungen definieren.  Beachten Sie, dass bei CurPos = 1, Es enthält den HTML-Code in einem CDATA-tag.
      Ansonsten, Es wird leer sein.

      Der Wert des TableStart ist ausgegeben, jedes Mal ItemStyle über ContentQueryMain.xsl aufgerufen wird.
    -->
    <XSL:Variable Name="tableStart">
      <XSL:If Test="$CurPos = 1">
        <![CDATA[
        <Tabellenrahmen = 1>
          <TR-Bgcolor = "blau">
            <TD><Schriftfarbe = "White"><b>Projektname</b></Schriftart></TD>
            <TD align = "Right"><Schriftfarbe = "White"><b>Vollständiges Datum</b></Schriftart></TD>
            <TD align = "Right"><Schriftfarbe = "White"><b>Budget</b></Schriftart></TD>
            <TD align = "Right"><Schriftfarbe = "White"><b>Tatsächliche Kosten</b></Schriftart></TD>
            <TD><Schriftfarbe = "White"><b>Gesamtstatus</b></Schriftart></TD>
          </TR>
        ]]>
      </XSL:If>
    </XSL:Variable>

    <!--
      Eine andere variable, Simple einfach definiert das schließende Tag Tabelle.

      Wie bei tableStart, Es ist immer ausgegeben.  Deshalb dessen Wert zugeordnet ist bedingt basierend auf, ob wir die letzte Zeile von ContentQueryMain.xsl übergeben wurde, haben.
    -->
    <XSL:Variable Name="Simple">
      <XSL:If Test="$CurPos = $Last">
        <![CDATA[ </Tabelle> ]]>
      </XSL:If>
    </XSL:Variable>

    <!--
      Strahlen Sie immer den Inhalt des tableStart.  Ist dies nicht die erste Zeile von ContentQueryMain.xsl an uns übergeben, Wir wissen, dass ihr Wert leer sein wird.

      Deaktivieren der Ausgabeschutz weil wenn TableStart es nicht blank, Es enthält aktuelle HTML, das wollen wir durch den Browser gerendert werden.  Wenn wir sagen, nicht Ausgabe der XSL-Parser deaktivieren entkommen, Es werden Sachen wie generieren"&lt;Tabelle&gt;" anstelle von"<Tabelle>".
    -->
    <XSL:Wert der Wählen Sie="$tableStart" Das Disable-Output-escaping="Ja"/>


    <TR>
      <!--
      P:Project_x005F_x0020_Name P:Project_x005F_x0020_End_x005F_x0020_Date P:Project_x005F_x0020_Budget P:Project_x005F_x0020_Expenses P:Project_x005F_x0020_Status
      -->
      <TD>
        <XSL:Wert der Wählen Sie="@Project_x005F_x0020_Name"/>
      </TD>

      <TD ausrichten="rechts">
        <XSL:Wert der Wählen Sie="@Project_x005F_x0020_End_x005F_x0020_Date"/>
      </TD>

      <TD ausrichten="rechts">
        <XSL:Call-template Name="FormatCurrency">
          <XSL:mit param Name="Wert" 
Wählen Sie="@Project_x005F_x0020_Budget"></XSL:mit param> </XSL:Call-template> </TD> <TD ausrichten="rechts"> <XSL:Call-template Name="FormatCurrency"> <XSL:mit param Name="Wert" Wählen Sie="@Project_x005F_x0020_Expenses">
</XSL:mit param> </XSL:Call-template> </TD> <TD> <XSL:Wert der Wählen Sie="@Project_x005F_x0020_Status"/> </TD> <!-- Alle folgenden auskommentiert, Dinge zu klären. Jedoch, bringen Sie es zurück und stopfen ihn in eine <TD> um seine Wirkung zu sehen. --> <!-- <Div Id = "Linkitem" Klasse = "Element"> <XSL:Wenn testen = "String-Length($SafeImageUrl) != 0"> <Div Class = "Bild-Raum-Links"> <a Href = "{$SafeLinkUrl}" Ziel = "{$LinkTarget}"> <IMG-Klasse = "Bild-fixed-Width" Src = "{$SafeImageUrl}"
Alt = "{@ImageUrlAltText}"/> </eine> </div> </XSL:If> <Div Class = "Link-Element"> <XSL:Call-template
Name="OuterTemplate.CallPresenceStatusIconTemplate"/> <a Href = "{$SafeLinkUrl}"
Ziel = "{$LinkTarget}" Titel = "{@LinkToolTip}"> <XSL:Wert-wählen Sie "$DisXSLyTitle" = /> </eine> <Div Class = "Beschreibung"> <XSL:Wert von select="@Description" /> </div> </div> </div>
--> </TR> <!-- Emit dem schließenden Tag Tabelle. Wenn wir nicht auf die letzte Zeile, Dies wird leer sein.. --> <XSL:Wert der Wählen Sie="$Simple" Das Disable-Output-escaping="Ja"/> </XSL:Vorlage> <XSL:Vorlage Name="FormatCurrency"> <XSL:param Name="Wert" Wählen Sie="0" /> <XSL:Wert der Wählen Sie='Format-Nummer($Wert, "$DDD,DDD,DDD.EDC, "Personal")' /> </XSL:Vorlage>

Norm WSS/MOSS Dateneingabemasken unterstützen keine CSS Drop-downs (oder andere Intra-Mitteilung)

UPDATE (04/2008): Dieser große Blog-Eintrag zeigt einen gute Javascript basierten Ansatz für dieses problem: http://webborg.blogspot.com/2008/04/add-functions-and-events-to-sharepoint.html

UPDATE II: (04/2008): Dieser Blog-Eintrag sieht vielversprechend als auch: http://www.cleverworkarounds.com/2008/03/13/free-mosswss-2007-web-part-hide-controls-via-javascript/

Mehrmals pro Woche, Wenn nicht täglich, Forumbenutzer beschreiben eine Anforderung, die normalerweise über cascading Drop-Downs erfüllt sein würde. Zum Beispiel, Ich habe zwei Dropdown-Steuerelemente:

  • Liste der U.S. Staaten
  • Liste der U.S. Städte.

Als verantwortliche Benutzeroberflächenautomatisierungs-Anbietern, Wir wollen es wie das Arbeiten:

  • Paul wählt eine U.S. Zustand aus der Dropdown-Liste.
  • Dies bewirkt, dass die Städte Dropdown-Filtern nur Orte, die zu den ausgewählten Zustand gehören.
  • Paul wählt eine Stadt aus der gefilterten Liste.

Es gibt keine Out-of-Box-Unterstützung für dieses feature. Tatsächlich, Es gibt keine OOB Unterstützung für jede Art von Kommunikation direkte Intra-form. Dazu gehören programmgesteuert ausblenden/aktivieren/deaktivieren Felder Feld Veränderungen an anderer Stelle auf dem Formular.

Das eigentliche Ziel dieses Artikels zu beschreiben, mögliche Lösungen und diese sind die Optionen, wie ich sie kennen:

  1. Entwickeln eines benutzerdefinierten Spaltentyps. Als ein Custom-Spalte-Entwickler, Sie haben die volle Kontrolle über die Welt"" dieser benutzerdefinierten Spalte. Sie können ein kaskadierendes Dropdown-auf diese Weise implementieren.
  2. Erwägen, workflow. In einigen Fällen, Sie möchten automatisch Feld basierend auf einem anderen Feld Wert einen Wert zuweisen. In diesem Fall, Sie würden normalerweise versuchen, eine berechnete Spalte verwenden, aber einige Male, es erhalten nicht nur die Arbeit.. SharePoint Designer-Workflows ist eine relativ verwalten-freundliche Alternative zu herunterfallen in Code und visual studio. Wenn Sie diesen Weg zu gehen, Beachten Sie das Problem durch behoben in diesem Artikel (http://paulgalvin.spaces.live.com/blog/cns!CC1EDB3DAA9B8AA!405.entry).
  3. Event-Handler: Wie workflow, Dies ist eine Lösung nach der Tatsache. Der Ereignishandler ist eine .NET-assembly (C#, VB.NET) auf welche SharePoint übergibt die Steuerung. Das Objekt, die, das Sie entwickeln, hat Zugriff auf die Daten der Liste (und das gesamte Objektmodell) und kann jede benötigte Berechnung.
  4. Verwenden Sie SharePoint Designer, um benutzerdefinierte Formulare erstellen. Ich habe keine direkten Erfahrung mit diesem Ansatz, but I hear they are doing good things with NewForm.aspx these days 🙂
  5. Rollen Sie Ihre eigenen ASP.NET Daten Eingabefunktion (als eigenständige Webseite oder als Webpart) und verwenden Sie stattdessen.

Wenn jemand weiß, dass andere bzw. bessere Optionen, Bitte einen Kommentar und ich werde den Körper von diesem Post zu aktualisieren.

<Ende />

Technorati Tags:

Balkendiagramme in SharePoint erstellen

Übersicht:

(UPDATE 12/04/07: Eine andere interessante Ressource hinzugefügt am Ende Verknüpfung zu einem anderen Blog, der diese Adressen über ein sehr interessantes Webpart)

Dieser Blog-Eintrag beschreibt, wie erstellen Sie ein Balkendiagramm in SharePoint. Dies funktioniert in WSS und MOSS-Umgebungen, wie es nur die Datenansicht-Webpart abhängt.

Das Gesamtkonzept ist wie folgt:

  1. Erstellen einer Liste oder Dokumentbibliothek, die die Daten enthält, die Sie grafisch darstellen möchten.
  2. Legen Sie die zugehörige Dokumentbibliothek / benutzerdefinierte Liste auf einer Seite und konvertieren es in eine Datenansicht-Webpart (DVWP).
  3. Ändern der DVWP XSL, HTML zu generieren, die zeigt, wie ein Diagramm.

Business-Szenario / Einrichtung:

Ich habe eine benutzerdefinierte Liste mit standard Title-Spalte und eine zusätzliche Spalte erstellt., "Status". Diese Modelle (sehr einfach) eine "Ermächtigung für Kosten" Szenario, wo der Titel des Projekts und den Status einen Wert aus der Liste der darstellt:

  • Vorgeschlagen
  • Im Prozess
  • Ins Stocken geraten

Ziel ist es, ein interaktives Balkendiagramm zu erzeugen, das diese Statuscodes zeigt.

Ich habe die Liste aufgefüllt und es sieht wie folgt aus:

Bild

Datenansicht-Webpart erstellen:

Erstellen Sie die DVWP durch Hinzufügen der benutzerdefinierten Liste zu einer Seite (Seite in meinem Fall) und folgen Sie den Anweisungen Hier (http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!395.entry).

Zusätzlich zu den DVWP einfach erstellen, Wir müssen auch die Auslagerungsdatei Eigenschaftensatz alle verfügbare Zeilen anzeigen. Für mich, Dies sieht etwa wie folgt:

Bild

An diesem Punkt, Ich schließe immer SPD und browser. Ich öffnen erneut dann die Seite mit dem browser. Dadurch wird vermieden, das Web-Teil-Layout auf der Seite versehentlich mucking.

Ändern der XSLT-Datei:

Es ist jetzt Zeit, um die XSLT-Datei ändern.

Ich benutze immer visual Studio dafür. (Siehe Hier für ein wichtiger Hinweis über Intellisense, das Ihnen viel hilft).

Erstellen Sie ein leeres Projekt vier neue Dateien hinzufügen (die Worte "Original ersetzen" und "neu" gegebenenfalls):

  • Original.XSLT
  • New.XSLT
  • Original Params.xml
  • Neue Params.xml

In meinem Fall, Es sieht wie folgt aus:

Bild

Ändern Sie das Webpart und kopieren Sie die Params und XSL zum "Original" Version in Visual Studio.

Hier soll dazu führen, dass die XSL-Datei, die Ergebnisse erhalten wir wieder aus der Abfrage DVWP in HTML, das als Diagramm dargestellt wird.

Zu diesem Zweck, Es hilft, um zuerst zu prüfen, wie der HTML-Code aussehen sollte, bevor wir durch den Wahnsinn verwirrt werden, die bekannt ist als "XSL". (Klar, Das folgende ist nur ein Beispiel; nicht geben Sie ein oder kopieren und Einfügen in visual studio. Ich biete einen vollen Schlag Ausgangspunkt dafür später in der Zuschreibung). Die folgende Beispiel-Grafik wird gemäss den HTML-Code direkt im Anschluss dargestellt.:

Beispielgraph

Entsprechende HTML:

<HTML>
<Körper>
<Zentrum>
<Tisch Breite = 80 %>
<TR><TD><Zentrum>Horizontale Balken Diagramm</TD></TR>
<TR>
<td align = "center">
<Tabelle Border = "1" Breite = 80 %>
<TR>
<TD-Breite = 10 %>Offen</TD>
<TD><Tabelle Cellpadding ="0" Cellspacing ="0" Border = 0 Width = 50 %><TR Bgcolor = rot><TD>&nbsp;</TD></TR></Tabelle></TD>
</TR>
<TR>
<TD-Breite = 10 %>Geschlossen</TD>
<TD><Tabelle Cellpadding ="0" Cellspacing ="0" Border = 0 Width = 25 %><TR Bgcolor = rot><TD>&nbsp;</TD></TR></Tabelle></TD>
</TR>
<TR>
<TD-Breite = 10 %>Ins Stocken geraten</TD>
<TD><Tabelle Cellpadding ="0" Cellspacing ="0" Border = 0 Width = 25 %><TR Bgcolor = rot><TD>&nbsp;</TD></TR></Tabelle></TD>
</TR>
</Tabelle>
</TD>
</TR>
</Tabelle>
</Körper>
</HTML>

Ich habe einen Tote einfachen Ansatz zum Erstellen meiner Balken durch Festlegen der Hintergrundfarbe einer Zeile auf "rot".

Das ist hier der Take-Away: Am Ende, alles, was wir tun, ist HTML mit Zeilen und Spalten erstellen.

Vorlage XSLT:

Ich habe die XSLT-Datei kopiert, die ein Balkendiagramm generiert. Es ist ziemlich gut kommentiert, so dass ich viel hier außer diese Notizen hinzufügen, wird nicht:

  • Ich begann mit der standardmäßigen XSL, die SharePoint Designer mir, gab wenn ich zuerst die DVWP erstellt.
  • Ich konnte dies von der SPD zu senken 657 Linien 166 Linien.
  • Ich Herumspielen nicht mit der Parameter-XML-Datei (ist die aus dem XSL getrennt und Sie wissen was ich meine, wenn Sie gehen zu den DVWP selbst ändern; Es gibt zwei Dateien, die Sie ändern können). Jedoch, um es zu vereinfachen, Ich fast alle von ihnen aus dem XSL entfernen.. Das heißt, wenn Sie möchten verwenden Sie dieser Parameter, Sie müssen nur ihre Variablendefinitionen wieder die XSL-Datei hinzufügen. Das wird leicht sein, da Sie die ursprünglichen XSL Variablendefinitionen in visual Studio-Projekt müssen.
  • Sie sollten können kopieren und fügen diesen direkt in Ihre visual Studio-Projekt. Dann, Entfernen Sie meine Anrufe und legen Sie Ihre eigenen Aufrufe von "ShowBar".
  • Die Drilldown-Werke durch die Schaffung einer <ein href> So: http://server/List?FilterField1=fieldname&FilterValue1=actualFilterValue. Diese Technik kann sein Wert in anderen Kontexten. Auf den ersten, Ich dachte, ich müsste zu einem komplexeren Format entsprechen: http://server/List/AllItems.aspx?View={guid}&FilterField1=blah&FilterValue1=blah, aber in meinem Umfeld, das ist nicht nötig. Der Liste URL wird von SharePoint an uns übergeben, so ist dies ganz einfach zu verallgemeinern.

Hier ist es:

<XSL:Stylesheet Version="1.0" Exclude-Ergebnis-Präfixe="RS z o s Ddwrt dt msxsl" 
xmlns:msxsl="urn:Schemas-Microsoft-com:XSLT" xmlns:XSL="http://www.w3.org/1999/XSL/Transform"
xmlns:SharePoint="Microsoft.SharePoint.WebControls" xmlns:__designer="http://Schemas.Microsoft.com/Webparts/v2/DataView/Designer"
xmlns:ASP="http://Schemas.Microsoft.com/ASPNET/20" xmlns:ddwrt="http://Schemas.Microsoft.com/Webparts/v2/DataView/Runtime"
xmlns:o="urn:Schemas-Microsoft-com:Büro" xmlns:s="UUID:BDC6E3F0-6DA3-11D1-A2A3-00AA00C14882"
xmlns:dt="UUID:C2F41010-65B3-11 d 1-A29F-00AA00C14882" xmlns:RS="urn:Schemas-Microsoft-com:Rowset" xmlns:z="#RowsetSchema"
xmlns:ddwrt2="urn:FrontPage:intern"
> <XSL:Ausgabe Methode="HTML" Gedankenstrich="Nein" /> <XSL:Dezimal-format NaN="" /> <XSL:param Name="ListUrlDir"></XSL:param> <!-- Ich brauche diese eine Drilldown-Unterstützung. --> <XSL:Vorlage Spiel="/" xmlns:SharePoint="Microsoft.SharePoint.WebControls"
xmlns:__designer=http://schemas.microsoft.com/WebParts/v2/DataView/designer xmlns:ASP="http://Schemas.Microsoft.com/ASPNET/20"
> <XSL:Variable Name="dvt_StyleName">Tabelle</XSL:Variable> <XSL:Variable Name="Zeilen" Wählen Sie="/DsQueryResponse/Zeilen/Zeile" /> <XSL:Variable Name="dvt_RowCount" Wählen Sie="Anzahl($Zeilen)" /> <XSL:Variable Name="IsEmpty" Wählen Sie="$Dvt_RowCount = 0" /> <XSL:Variable Name="dvt_IsEmpty" Wählen Sie="$Dvt_RowCount = 0" /> <XSL:Wählen Sie> <XSL:Wenn Test="$dvt_IsEmpty"> Es gibt keine Daten zum Diagramm!<BR/> </XSL:Wenn> <XSL:sonst> <!-- Hier beginnt die interessante Sachen. Wir müssen ein paar Variablen für jede Zeile in der Grafik definieren: Gesamtzahl der Elemente und Prozent. --> <XSL:Variable Name="totalProposed" Wählen Sie="Anzahl(/DsQueryResponse/Zeilen/Zeile[Normalisieren-Raum(@Status) = 'Schlug'])" /> <XSL:Variable Name="percentProposed" Wählen Sie="$TotalProposed Div $dvt_RowCount" /> <XSL:Variable Name="totalInProcess" Wählen Sie="Anzahl(/DsQueryResponse/Zeilen/Zeile[Normalisieren-Raum(@Status) = "In Bearbeitung"])" /> <XSL:Variable Name="percentInProcess" Wählen Sie="$TotalInProcess Div $dvt_RowCount" /> <XSL:Variable Name="totalStalled" Wählen Sie="Anzahl(/DsQueryResponse/Zeilen/Zeile[Normalisieren-Raum(@Status) = "Ins Stocken geraten"])" /> <XSL:Variable Name="percentStalled" Wählen Sie="$TotalStalled Div $dvt_RowCount" /> <!-- Wir definieren unsere HTML-Tabelle hier. Ich bin von einigen standard SharePoint-Stile hier um konsistent zu machen Kreditaufnahme.. Ich denke, dass es Änderungen an der globalen Css-Datei nachkommen wird, ebenso wie Thema überschreibt. --> <Tabelle Breite="100%" cellspacing="0" CellPadding="2" Stil="Grenze-rechts: 1 Solid #C0C0C0; Grenze-Boden: 1 Solid #C0C0C0; Border-Left-style: solide; Border-Left-width: 1; Border-Top-style: solide; Border-Top-width: 1;"> <TR> <TD ausrichten="Zentrum"> <Tabelle Grenze="1" Breite="100%"> <!-- Für jeden Status, die wir wollen graph, Wir nennen das "ShowBar" Vorlage. Wir übergeben: 1. Eine Bezeichnung für die Zeile. Dieses wird in einen Hyperlink umgewandelt.. 2. Die Prozent (Variable von oben). 3. Die tatsächlichen Feldnamen des Codes aus der zugrunde liegenden Liste. Dies muss nicht die Display-Bezeichnung übereinstimmen. 4. Feldwert für abgestimmt #3. 5. Insgesamt Elemente dieses Status-Codes (nicht die Gesamtsumme aller Status-Codes). Es gibt eine <TR></TR> und die Linie horizontales Balkendiagramm. Wir nennen diese Vorlage für jeden Statuscode, den wir anzeigen möchten. --> <XSL:Call-template Name="ShowBar"> <XSL:mit param Name="BarDisplayLabel" Wählen Sie=""Vorgeschlagen""/> <XSL:mit param Name="BarPercent" Wählen Sie="$percentProposed"/> <XSL:mit param Name="QueryFilterFieldName" Wählen Sie="'Status'"/> <XSL:mit param Name="QueryFilterFieldValue" Wählen Sie=""Vorgeschlagen""/> <XSL:mit param Name="TotalItems" Wählen Sie="$totalProposed"></XSL:mit param> </XSL:Call-template> <XSL:Call-template Name="ShowBar"> <XSL:mit param Name="BarDisplayLabel" Wählen Sie=""Zum Stillstand gekommen""/> <XSL:mit param Name="BarPercent" Wählen Sie="$percentStalled"/> <XSL:mit param Name="QueryFilterFieldName" Wählen Sie="'Status'"/> <XSL:mit param Name="QueryFilterFieldValue" Wählen Sie=""Zum Stillstand gekommen""/> <XSL:mit param Name="TotalItems" Wählen Sie="$totalStalled"></XSL:mit param> </XSL:Call-template> <XSL:Call-template Name="ShowBar"> <XSL:mit param Name="BarDisplayLabel" Wählen Sie=""In Bearbeitung""/> <XSL:mit param Name="BarPercent" Wählen Sie="$percentInProcess"/> <XSL:mit param Name="QueryFilterFieldName" Wählen Sie="'Status'"/> <XSL:mit param Name="QueryFilterFieldValue" Wählen Sie=""In Bearbeitung""/> <XSL:mit param Name="TotalItems" Wählen Sie="$totalInProcess"></XSL:mit param> </XSL:Call-template> </Tabelle> </TD> </TR> </Tabelle> </XSL:sonst> </XSL:Wählen Sie> </XSL:Vorlage> <!-- Diese Vorlage funktioniert die einzelne Linien in das Balkendiagramm anzeigen. Sie werden wahrscheinlich die meisten Ihrer Optimierungen hier tun.. --> <XSL:Vorlage Name="ShowBar"> <XSL:param Name="BarDisplayLabel" /> <!-- Etikett zu zeigen --> <XSL:param Name="BarPercent"/> <!-- Prozent der Gesamtsumme. --> <XSL:param Name="QueryFilterFieldName"/> <!-- Verwendet, um die Abfrage zu springen & Filter --> <XSL:param Name="QueryFilterFieldValue"/> <!-- Verwendet, um die Abfrage zu springen & Filter --> <XSL:param Name="TotalItems" /> <!-- Gesamtzahl der dieses barlabel --> <TR> <!-- Die Bar selbst beschriften. --> <TD Klasse="MS-formbody" Breite="30%"> <!-- Diese nächste Anweisungen, Bauen einer Abfragezeichenfolge, die uns erlaubt, einen Drilldown in einer gefilterten Ansicht der zugrunde liegenden Daten. Wir machen ein paar Dinge hier verwenden: 1. Wir können FilterField1 und FilterValue1 zu einer Liste filtern für eine Spalte übergeben.. 2. SharePoint ist ein Schlüsselparameter an uns übergeben., ListUrlDir, die auf die zugrunde liegende Liste für den diese DVWP zeigt "ausgeführt wird". Ist nicht XSL-Spaß? --> <XSL:Text Das Disable-Output-escaping="Ja"> <![CDATA[<a Href ="]]></XSL:Text> <XSL:Wert der Wählen Sie="$ListUrlDir"/> <XSL:Text Das Disable-Output-escaping="Ja"><![CDATA[?FilterField1 =]]></XSL:Text> <XSL:Wert der Wählen Sie="$QueryFilterFieldName"/> <XSL:Text Das Disable-Output-escaping="Ja"><![CDATA[&FilterValue1 =]]></XSL:Text> <XSL:Wert der Wählen Sie="$QueryFilterFieldValue"/> <XSL:Text Das Disable-Output-escaping="Ja"><![CDATA[">]]></XSL:Text> <XSL:Wert der Wählen Sie="$BarDisplayLabel"/> <XSL:Text Das Disable-Output-escaping="Ja"><![CDATA[</eine>]]></XSL:Text> <!-- Das nächste Bit zeigt einige Zahlen im format: "(insgesamt / % von insgesamt)" --> (<XSL:Wert der Wählen Sie="$TotalItems"/> / <!-- Dies schafft eine schöne Prozent Bezeichnung für uns. Vielen Dank, Microsoft! --> <XSL:Call-template Name="PercentFormat"> <XSL:mit param Name="Prozent" Wählen Sie="$BarPercent"/> </XSL:Call-template>) </TD> <!-- Schließlich, Ausgeben einer <TD> Tag für die Bar selbst.--> <TD> <Tabelle CellPadding="0" cellspacing="0" Grenze="0" Breite="{Runde($BarPercent * 100)+1}%"> <TR bgcolor="rot"> <XSL:Text Das Disable-Output-escaping="Ja"><![CDATA[&nbsp;]]></XSL:Text> </TR> </Tabelle> </TD> </TR> </XSL:Vorlage> <!-- Dies wird direkt von einigen XSL genommen, fand ich in einer MS-Vorlage. --> <XSL:Vorlage Name="PercentFormat"> <XSL:param Name="Prozent"/> <XSL:Wählen Sie> <XSL:Wenn Test="Format-Nummer($Prozent, '#,##0%;-#,##0%')= 'NaN'">0%</XSL:Wenn> <XSL:sonst> <XSL:Wert der Wählen Sie="Format-Nummer($Prozent, '#,##0%;-#,##0%')" /> </XSL:sonst> </XSL:Wählen Sie> </XSL:Vorlage> </XSL:Stylesheet>

Die Ergebnisse:

Die XSL-Datei von oben generiert dieses Diagramm:

Bild

Einen Drilldown zum zugrunde liegenden Daten durch Klicken auf den Statuscode:

Bild

Abschließende Gedanken:

Dies kann verallgemeinert werden?

Ich liebe diese Grafik Konzept, aber ich hasse die Tatsache, dass ich zu gehen und tun, soviel Hand-Codierung. Ich habe ein wenig Gedanken, ob es verallgemeinert werden kann und ich bin optimistisch, aber ich bin auch ein wenig Angst, dass es möglicherweise eine Mauer irgendwo entlang des Weges, die Problemumgehung anbieten werden nicht. Wenn jemand einige guten Ideen auf dieser, Bitte notieren Sie in den Kommentaren oder mailen Sie mir.

Vertikale Diagramme:

Dies ist ein Balkendiagramm. Es ist sicherlich möglich, ein vertikaler Graph erstellen. Wir müssen nur den HTML-Code ändern. Ich würde die gleiche Weise starten.: Erstellen Sie eine HTML-Darstellung ein vertikales Balkendiagramm und dann ausrechnen Sie wie zu erhalten, die über XSL. Wenn jemand interessiert ist, Ich konnte davon überzeugt werden, probieren es aus und erarbeiten die Schleifen. Wenn jemand schon gemacht hat, Bitte lassen Sie mich wissen und ich werde Link gerne in einen Blog 🙂

Ich denke, dass die Herausforderung mit einem vertikalen Diagramm ist, dass die Etiketten für den Graphen schwieriger sind zu verwalten, aber sicherlich nicht unmöglich.

Feld Name Gotcha:

Es gibt mindestens zwei Dinge zu achten, mit den Feldnamen.

Erste, ein Feldname mit einem Leerzeichen muss in dem XSL mit Escapezeichen versehen werden. Dies wird wohl hier ein Problem sein.:

        <XSL:Variable Name="totalProposed" 
Wählen Sie="Anzahl(/DsQueryResponse/Zeilen/Zeile[Normalisieren-Raum(@Status) = 'Schlug'])" />

Wenn Ihr Status"" Spalte ist tatsächlich mit dem Namen "Status Code" dann müssen Sie es als "Status_x0020_Code" verweisen:

   <XSL:Variable Name="totalProposed" 
Wählen Sie="Anzahl(/DsQueryResponse/Zeilen/Zeile[Normalisieren-Raum(@ Status_x0020_Code) = 'Schlug'])" />

Sekunde, und ich bin ein wenig fuzzy zu diesem, aber du musst auch auf der Hut vor Feld Namensänderungen werden. Wenn Sie das Feld "Status Code nennen" und dann später, Benennen sie die "AFE-Status", der interne Name"" ändert sich nicht. Der interne Name wird noch "Status-Code sein." und muss verwiesen werden, als "Status_x0020_Code". Die "anderen Ressourcen" Links kann zu diagnostizieren und korrigieren Sie diese Art von Problem helfen.

Über die Farbe:

Ich nahm "rot" Da es mir im Moment erfreut. Es wäre keine große Sache, um mehr als nur eine visuelle Beschreibung einer Reihe bieten verschiedene Farben zeigen, sondern auch einen nützlichen KPI zu schaffen. Zum Beispiel, Wenn der Prozentsatz der "ins Stocken geraten" Der AFE ist > 10% dann zeigen Sie es rot, zeigen Sie es andernfalls in schwarz. Verwendung <XSL:Wählen Sie> um dies zu erreichen.

Weitere Ressourcen:

Glücklich verändern!

<Ende />

Onnieren Sie meinen Blog ab!

OM Daten über eine benutzerdefinierte Liste (oder, Noch ein weiterer OM Daten Anzeigenoder [wie YACC, aber unterschiedliche])

Heute, Ich verbrachte eine Handvoll Stunden die Ursache hinter der Meldung "der eingegebene Spaltenname wird bereits verwendet oder reservierte aufspüren. Wählen Sie einen anderen Namen."

Die betreffende Spalte erstellt werden konnte., gelöscht und neu erstellt, in einer anderen Umgebung, so dass ich, es wusste war kein reservierter.. Jedoch, Ich konnte einfach die Spalte überall über die Standardschnittstelle für SharePoint-Benutzer auf einer Website in der Websitesammlung nicht finden.

Ich hing auf MSDN-Foren hier und der unbeugsamen Andrew Woodward wies mich in die Richtung der zugrunde liegenden Objekt-Modell-Daten.

Ich ging nach CodePlex Einige Tools zu finden, die mir in den zugrunde liegenden Daten OM peer und hilf mir die Mühe zu finden helfen würde.

Ich habe versucht, verschiedene Tools und sie waren sehr cool und interessant, aber am Ende, die Benutzeroberfläche war nicht gut genug für meine Zwecke. Ich bin nicht kritisieren sie mit allen Mitteln, aber eindeutig die Werkzeugmacher nicht schwebt mein Problem Wenn sie ihre Benutzeroberfläche erstellt :). Die meisten Menschen scheinen eine ganze Menge Zeit und Mühe bei der Erstellung von Arbeitsstation zu investieren, werden / Clientanwendungen, die Strukturansichten bereitstellen, mit der rechten Maustaste Kontext-Menüs, usw.. Diese sind schön und alle, aber es ist eine Menge Arbeit, eine Top-of-the-Line-Benutzererfahrung zu erstellen, die auch sehr flexibel ist.

Ich brauchte wirklich eine Antwort auf dieses problem. Es fiel mir ein, dass wenn ich würde alle Websitespalten in der Websitesammlung in einer benutzerdefinierten Liste, Ich könnte Filtern, Sortieren und Erstellen von Ansichten, die mir diese angeblich vorhandenen Spalte finden helfen würde (Dies geschah, BTW). Ich ging voran und Tat, und ein oder zwei Stunden später, eine benutzerdefinierte Liste mit Gruppierung hatte alle meine Websitespalten geladen werden, Sortieren, usw.. Fünf Minuten später fand ich meine Antwort.

Wenn ich erfolgreich die Welt übernehmen, Ich denke, dass ich Dekret wird, dass alle SharePoint-Werkzeuge-Anbieter ernsthaft in Erwägung ziehen müssen ihre Objektdaten Modell in einer benutzerdefinierten Liste auftauchen. Auf diese Weise, Ich habe die Macht um eine Suche möchte ich weg (eingeschränkt, Natürlich, von standard-Sharepoint-features).