Die Bar ist immer noch ziemlich hoch zu erweitern MOSS

Heute, Ich arbeitete mit einem Klienten und beschreiben, wie das Webpart für Inhaltsabfragen ändern und zusätzliche Bits von Informationen von einem Inhaltstyp angezeigt.

"Erste, Konfigurieren Sie die CQWP zum Herstellen einer Verbindung mit der Datenquellen, Anschließend exportieren Sie es an Ihrem Arbeitsplatz, Ändern <CommonViewFields>, Hochladen, Entfernen Sie das Original, und jetzt ist es "grundiert’ zum Anzeigen der anderen Spalten. Nächste, Öffnen Sie SharePoint Designer, Navigieren Sie zu der Website Auflistung Stamm, und suchen Sie ItemStyle.xsl. Kopieren Sie eine der Vorlagen als ein nützlicher Ausgangspunkt. Gehen Sie zurück und ändern die CQWP machen dieser neuen Vorlage verwenden. Schließlich, Ändern Sie die Vorlage um die neuen Felder zu rendern! (Vergessen Sie nicht, dass es wieder in so dass andere Benutzer die Ergebnisse sehen können)."

Es ist alles ganz klar für mich (und die meisten von uns SharePoint-Entwickler-Typen) Was hier vor sich geht und wie es ganz nett, wirklich, dass die Daten abrufen Aspekte der CQWP also gut getrennt von den Daten-Präsentation-Aspekten sind. Aber, Es ist nicht so einfach zu erklären, ist es?

<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:

Ja/Nein (das Kontrollkästchen) Filterung im Webpart für Inhaltsabfragen

Zum Filtern nach einer Abfrage für die ja/keine Kontrollkästchen unter dem Titel "PG Meilenstein", CQWP wie folgt konfigurieren:

Bild

Dies ist eine weitere dieser Fragen offensichtlich-einmal-Sie-wissen-It aber hard-to-find-an-answer-to: Gewusst wie: Filtern auf ein ja/kein Kontrollkästchen mithilfe des Inhaltsabfrage-Webparts.

Die erste Suchergebnis Ich finde, mit dem Suchbegriff "Filter Ja/Nein Inhaltsabfrage-Webpart" Hochdruck daran falsch ist, Also ich dachte, ich zieh das da oben und sehen, ob es das falsche Ergebnis in den typischen Suchergebnissen ersetzen kann.

Es ist ganz einfach: True Werte = "1" und falschen Werte ungleich "1" (schöne retro, tatsächlich).

Im obigen Beispiel, Ich erstellte Websitespalte vom Typ Ja/Nein" (CheckBox)" benannte "PG-Meilenstein". Ich habe es in eine Doc-Bibliothek, einige Dokumente hochgeladen, Legen Sie den Wert für ein paar und es getestet.

<Ende />

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!

SharePoint bietet nicht “Wer hat Zugriff” Berichte

UPDATE 01/28/08: Diese Codeplex-Projekt wird dieses Problem behoben: http://www.codeplex.com/AccessChecker. Ich habe es nicht verwendet, aber es sieht viel versprechend, wenn dies eine Frage ist, müssen Sie Adresse in Ihrer Umgebung.

UPDATE 11/13/08: Joel Oleson schrieb ein sehr guter Beitrag über die größere Sicherheit Verwaltung Frage hier: http://www.sharepointjoel.com/lists/posts/Post.aspx?Liste = 0cd1a63d % 2D183c % 2D4fc2 % 2 D 8320 % 2Dba5369008acb&ID = 113. Er verbindet einige andere nützlichen Ressourcen.

Forumbenutzer und Kunden Frage oft eine in diese Richtung: "Wie ich eine Liste aller Benutzer mit Zugriff auf eine Website generieren" oder "wie kann ich automatisch benachrichtigt alle Benutzer mit Zugriff auf die Liste zu Änderungen an der Liste?"

Es gibt keine Out-of-Box-Lösung für dieses. Wenn Sie für einen Moment darüber nachdenken, Es ist nicht schwer zu verstehen, warum.

SharePoint-Sicherheit ist sehr flexibel. Es gibt mindestens vier Hauptkategorien von Benutzern:

  • Anonyme Benutzer.
  • SharePoint-Benutzer und Gruppen.
  • Active Directory-Benutzer.
  • Formularbasierte Authentifizierung (FBA) Benutzer.

Flexibilität bedeutet, dass aus Sicht der Sicherheit, jede angegebene SharePoint-Website wird drastisch voneinander unterscheiden. Um einen Access-Liste-Bericht generieren, man braucht, um festzustellen, wie die Website gesichert ist, mehrere unterschiedliche Benutzer-Profil-Repositories Abfragen und dann auf nützliche Weise zu präsentieren. Das ist ein schwieriges Problem, generisch zu lösen.

Wie sind Organisationen mit dies tun.? Ich würde gerne in den Kommentaren von Ihnen zu hören oder E-Mail.

</Ende>

MOSS erzählt mir meine Spaltenname ist reserviert oder In Gebrauch … Aber es ist nicht

UPDATE 12/04/07: Siehe Diese Microsoft-KB (http://support.microsoft.com/kb/923589) Weitere Informationen.

Tatsächlich, Es stellt sich heraus, es ist, aber tückisch MOSS musste erschweren.

Mein Kunde hat einige Entwicklungsarbeit auf seiner MOSS-Website über das Wochenende. Es ist ein bisschen ein Durcheinander, was er tatsächlich tat, aber das Ergebnis ist das:

  • Er versucht, eine Websitespalte namens "Menge hinzufügen" und MOSS-Antworten: "Der eingegebene Spaltenname wird bereits verwendet oder reservierte. Wählen Sie einen anderen Namen."
  • Er versucht, eine andere Umgebung und jene Werk hinzufügen. Daher, "Menge" ist kein reservierter..
  • Er versucht, eine vorhandene Websitespalte mit dem Namen "Menge zu finden" dieser Websitesammlung. Er kann es nicht finden.

Ich habe einige Forschung, und sogar einige Codierung, philosophische gewachst und schließlich festgestellt, dass eine Spalte namens Menge Tat, Tatsächlich, vorhanden sind. Es war in der "_Hidden" Gruppe. Daher, Wir konnten es nicht über die SharePoint-Benutzeroberfläche finden.

Wie kommt es dahin? Ich weiß nicht, aber ich habe eine Theorie (oder wie meine Frau es nennen würde, "blah blah blah"). Irgendwo entlang der Linie, eine fabelhafte vierzig Vorlage hinzugefügt und wahrscheinlich auf einer Website in der Websitesammlung aktiviert wurde. Es wurde dann deaktiviert (oder der Standort entfernt). Die Websitespalte, jedoch, blieb aber in der "_Hidden" Gruppe. Wenn jemand besser weiß, informieren Sie mich bitte über E-Mail oder per post in den Kommentaren.

SharePoint wurde die Wahrheit gesagt.. Es ist kaum zu bemerken, dass diese Nachricht ist nicht so hilfreich, wie es sein könnte. Es wäre schön, diese Nachricht-Gabel in zwei unterschiedliche Meldungen in die Zukunft sehen: 1) Sagen Sie, dass der Spaltenname reserviert ist oder nicht. 2) Wenn es nicht reserviert werden kann, Anzeigen der Website, oder zumindest die Gruppe, wo die Spaltenname bereits verwendet wird.

</Ende>

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).

SharePoint Designer Workflows benutzerdefinierte Aktion — Beobachtung über <FieldBind Designer-Typ =”StringBuilder” … />

Nur eine schnelle Beobachtung, dass es ein sehr wichtiger Unterschied zwischen diesen zwei Definitionen ist:

<FieldBind Feld "InParam1 =" DesignerType = "StringBuilder" ID = "2" Text = "Input Parameter # 1" />

im Vergleich:

<FieldBind Feld "InParam1 =" ID = "2" Text = "Input Parameter # 1" />

Die erste zeigt, wie dies in der SPD:

Bild

während die letzteren zeigt wie folgt:

Bild

Ich bin nicht sicher, wie hilfreich diese Screenshots sind aber ich habe in der Anstrengung, sie zu machen, damit Sie sie sehen haben 🙂

Die Beobachtung ist dies: StringBuilder ermöglicht es Ihnen, eine Zeichenfolge erstellen (offensichtlich) durch das Mischen von Zeichenfolgenliteralen und Workflow-Daten (über die "hinzufügen Lookup" Schaltfläche in der linken unteren Ecke). Wenn Sie die Schaltfläche Hinzufügen Lookup verwenden, Es fügt ein Token in der Form"[%Token %]". Wenn SharePoint Ihre benutzerdefinierte Aktion aufruft, (C#-Code in meinem Fall), SharePoint übergibt das Token selbst, nicht der Wert des Tokens. Wenn Sie den Standard-Designer-Typ verwenden (der zweite Typ), SharePoint erweitert das Token und Istwert des Tokens an Ihrer Aktion.

StringBuilder = schlecht, Standard Designertyp = gut.

Natürlich, Das ist nicht das, was ich wirklich meine. Eben nicht versuchen und einen Parameter an Ihre benutzerdefinierte Aktion übergeben, wenn der Designer geben = StringBuilder. Verwenden Sie der Standardtyp Designer und Kette ein StringBuilder-Objekt darauf nach vorne, wenn Sie komplexe Zeichenfolgen in Ihrem Workflow erstellen müssen (Das ist übrigens genau das, was man tut, um einen dynamischen Betreff für die e-Mail-Aktion erstellen, aber das ist ein Thema für einen anderen Blogeintrag, Har har).

<Ende />

Vorzeitige Workflow-Aktivierung — Eine nicht-medizinische Lösung

UPDATE: Finden Sie in diesem MSDN-Diskussion, besonders der letzte Eintrag: http://forums.microsoft.com/MSDN/showpost.aspx?postid=2631057&siteid=1. Es beschreibt eine Bedingung, die kurz das ganze Schaltung kann. Kurz gesagt, Es kann so einfach wie das Erstellen von mindestens eines der Felder obligatorisch sein.

Ich habe eine Dokumentbibliothek, die acht Inhaltstypen unterstützt.

Ich habe ein SharePoint Designer-Workflows, die will berechnen und "Erinnerungsdatum zuweisen" durch einfach subtrahieren 30 Tage aus einer anderen Spalte, "due Date". Dies sollte nur für eines der Inhaltstypen geschehen., "Versicherung". Geschäftsgegenstand ist einen KPI zu produzieren, die zwei Kategorien von Versicherungsformularen zeigt: "in Kürze ablaufen" und "abgelaufen." (Lesen Sie mehr über diese Art von KPI und weitere umfangreiche Detailinformationen Hier).

Ich habe den Workflow ausgelöst, wenn ein neues Element erstellt wird und wenn ein Element geändert wird konfiguriert. Die Idee ist, dass, wenn eine Versicherung Dokument hochgeladen wird, Wir berechnen eine Warnung Datum"" basierend auf das Ablaufdatum. Ein paar Ansichten arbeiten im Zusammenhang mit einer KPI-Liste, um diese Bedingungen zu markieren, wenn Benutzer ihre Homepage hit.

Diese Strategie funktioniert nicht, wenn ich ein Dokument hochladen.

Laden Sie das Dokument, und ich bin mit der Meta-Erfassungsbild legte. An diesem Punkt, Ich bin bereits in Schwierigkeiten. SharePoint hat bereits, vorzeitig aus meiner Sicht, ausgelöst wird den workflow. Ich hatte noch keine Gelegenheit, wählen Sie den richtigen Inhaltstyp noch weisen Sie ein Fälligkeitsdatum. Zur gleichen Zeit, der Workflow wird nicht ausgelöst, wenn ich auf "Senden" zu diesem Zeitpunkt. Es gibt einige integrierter Logik, die glaubt "" die zuerst vorzulegen ist Teil der "erstellen" Ereignis. Also … Mein Workflow ausgelöst hat und wann sie ausgeführt, Es wurde Standardwerte für Meta-Daten übergeben..

Die beste Problemumgehung kenne ich ist das eine "Pause bis zum Einfügen" Aktivität im workflow. Ich habe die Workflow-Pause für 1 Minute. Während es anhalten ist, Ich wähle den richtigen Inhaltstyp, die Meta-Daten eingeben und abschicken. Die Pause abgeschlossen ist und der Workflow wird fortgesetzt, nach Bedarf. (Beachten Sie, dass in meinem Umfeld, Zeitgeber-Workflow-Aktivitäten von SPD funktionieren nicht out of the box. Sie können die gleiche Schwierigkeiten haben.. Siehe Hier für weitere details).

Ich mag keine "magische Verzögerung" umgehen. Was passiert, wenn der Benutzer ein Dokument und das Telefon klingelt und das anschließende Gespräch hochlädt überdauert die pause? Ich kann die längere Pause machen., aber ich mag es immer noch nicht.

Ich schrieb über diese auf den MSDN-Foren hier: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2430725&SiteID=1