in

SharePoint Blogs

The Best Place for SharePoint-related Blogs

This Blog

Syndication

News

Ein guter Blog lebt auch vom Feedback der Leser. Aus diesem Grund möchte ich alle Leser bitten und auffordern, Feedback und Bewertung für einzelne Posts abzugeben. Ich freue mich natürlich auch, wenn mein Blog oder auch einzelne Posts verlinkt werden. Dies hilft anderen Leser und ist zugleich auch Ansporn für mich!

Meine SharePoint-Notizen

SharePoint-Notizen aus meiner täglichen Projektarbeit mit dem Microsoft Office SharePoint Server 2007

Individuelles Ein-/Ausblenden von Spalten bei SharePoint Listen und Bibliotheken

Bei einem Projekt wurde gefordert, dass wir ein kleines Bestellwesen für Büromaterial auf einer Seite eines SharePoint-Portals implementieren. 'Keine große Sache' dachte ich mir und begann mit dem Design. Das Bestellwesen sollte auf einer einfachen SharePoint-Liste basieren und die Benachrichtigungen an die User sollten über Workflows erfolgen, die mit dem SharePoint-Designer erstellt werden. Wie gesagt - keine große Sache! (Anmerkung: die Anforderungen an das Bestellwesen waren natürlich größer, als hier dargestellt. Es soll hier nur als Beispiel dienen.)

Die Probleme begannen aber, als ich mir Gedanken über ein Status-Feld machte. Zu jeder Bestellung sollte es ein Status-Feld geben, in dem der Status der Bestellung (z.B. offen / genehmigt / bestellt / eingetroffen / abgelehnt) hinterlegt ist. Dieses Statusfeld sollte auch als Trigger für die Workflows benutzt werden. Gepflegt werden sollte dieses Statusfeld ausschließlich vom Sekretariat, weil hier auch die Bestellungen bearbeitet werden. Ein Mitarbeiter sollte nur eine neue Bestellung aufgeben, nicht aber seine Bestellung -und somit das Statusfeld- nachträglich bearbeiten können.

Somit war das Problem klar: bei der Eingabe einer neuen Bestellung sollte das Feld (bzw. die Spalte) 'Status' nicht veränderbar sein, beim Bearbeiten einer Bestellung hingegen schon. Beim Ansehen einer Bestellung sollte der Status natürlich auch ganz normal angezeigt werden.

Nach einigem Recherchieren und dem Hinweis eines Entwicklerkollegen habe ich eine Lösung gefunden.

SharePoint verwendet spezielle Forms, wenn Daten einer Liste hinzugefügt, editiert oder betrachtet werden. Beim Eingeben eines neuen Datensatzes in eine Liste wird die Form NewForm.aspx verwendet, beim Editieren eines Datensatzes wird EditForm.aspx verwendet und beim Betrachten eines Datensatzes wird DispForm.aspx verwendet.

Für das geschilderte Problem wäre es hilfreich, wenn die Status-Spalte nur bei 'EditForm' und 'DispForm' angezeigt werden würde, nicht aber bei 'NewForm'. Mitarbeiter verwenden beim Aufgeben einer neuen Bestellung 'NewForm'. Das Sekretariat verwendet 'EditForm' zum Ändern des Wertes der Status-Spalte (Mitarbeiter können eine einmal aufgegebene Bestellung nicht mehr verändern) und beide verwenden 'DispForm', um sich über den Stand einer Bestellung zu informieren.

Leider findet man eine entsprechende Einstellmöglichkeit nicht in den Eigenschaften einer SharePoint-Liste oder Bibliothek. Dennoch ist es aber möglich, für einzelne Listen festzulegen, welche Spalten in welcher Form angezeigt werden sollen - ein Blick in das SDK bzw. das Objektmodell von SharePoint hilft hier weiter.

Eine Liste wird im SharePoint-Objektmodell durch das Objekt SPList repräsentiert. Spalten werden durch das Objekt SPField repäsentiert und alle Spalten einer Liste werden in der Collection Fields des Objekts SPList zusammengefasst.

Um  eine spezielle Spalte bzw. deren SPField-Objekt aus dieser Collection zu bekommen, gibt es zwei Möglichkeiten. Die erste Möglichkeit besteht im bekannten Array-Zugriff (z.B. Fields["Status"]). Hierbei ist zu beachten, dass als Spaltenname der sprachabhängige Anzeigename (display name) verwendet wird. Die zweite Möglichkeit besteht darin, die Methode GetFieldByInternalName() der Collection Fields aufzurufen. Wie der Methodenname schon vermuten läßt, wird hier nicht der sprachabhängige Anzeigename als Parameter verwendet, sondern der sprachunabhängige interne Spaltenname (internal name). Die Unterscheidung zwischen display name und internal name ist also sehr wichtig und sollte bei der Programmierung beachtet werden!

Hat man nun das gewünschte SPField-Objekt und schaut es sich etwas genauer an, findet man u.a. diese drei Eigenschaften: ShowInEditForm, ShowInNewForm und ShowInDisplayForm. Alle drei sind vom Typ bool und sind standardmäßig auf null gesetzt. Um eine Spalte z.B. in der NewForm auszublenden, setzt man einfach die Eigenschaft ShowInNewForm der entsprechenden Spalte auf false. Um eine bestimmte Spalte wieder einzublenden, setzt man die entsprechende Eigenschaft auf true und um die Eigenschaft wieder auf ihren Standardwert zurückzusetzen, weist man dieser den Wert null zu. Diese Einstellungen brauchen nur ein einziges Mal vorgenommen zu werden, da sie wie alle anderen Listeneigenschaften auch gespeichert werden.

Zur Illustration (und weil ich es sicherlich auch noch öfters brauchen werde) habe ich eine kleine Windows-Applikation geschrieben (siehe Screenshot). Nach dem Starten der Applikation wählt man eine Site und eine Liste aus. Jetzt werden alle Spalten der ausgewählten Liste angezeigt und man kann einstellen, bei welcher Form welche Spalte angezeigt bzw. ausgeblendet werden soll. Zusätzlich kann man noch die Breite der Spalte (für NewForm und EditForm) einstellen und festlegen, ob diese read only sein soll. Um die Sache mit den unterschiedlichen Spaltenname (display name und internal name) zu verdeutlichen, kann zwischen beiden umgeschaltet werden. Dieses Tool kann man sich von unserer Homepage kostenlos (gegen eine kleine Registrierung) herunterladen - hier der Link.

 

Ich möchte an dieser Stelle noch erwähnen, dass es sich hierbei um ein Entwickler-Tool, welches direkt auf einem SharePoint-Server gestartet werden muss, handelt. Es dient ausschließlich als Anschauungsobjekt, kann und die Benutzung erfolgt auf eigenes Risiko!

Das SPField Objekt bietet aber noch einige weitere interessante Eigenschaften und Methoden. In nächster Zeit werde ich mich sicherlich noch mehrmals mit dem SPField Objekt beschäftigen. Weitere Erkenntnisse oder Updates zum genannten Tool werde ich dann hier posten.

 

Add to Technorati Favorites

Comments

 

kunz said:

Interessante posts von dir hier, danke für die Veröffentlichungen. Wie ist es aber einfach möchlich ein Fields in der EditForm nur bestimmten Gruppen azuzeigen/editierbar zu machen? Muss ich dazu Code schreiben oder ist das konfigurierbar?

[Reply]

Leider ist es nicht möglich, an eine Spalte (bzw. an ein SPField-Objekt) Berechtigungen zu vergeben. Der Anzeigestatus (wie ich es hier gezeigt habe) ist eine globale Einstellung für die gesamte Liste und gilt somit für alle Benutzer. Mit Code (z.B. einem WebPart) wäre es zwar möglich, den Anzeigestatus einer Spalte in einer Form benutzerabhängig zu machen - aber das klappt nur, solange sichergestellt ist, dass es nicht mehrere zeitgleiche Zugriffe von mehreren unterschiedlichen Benutzern gibt.

September 21, 2007 3:45 AM
 

Ronny Lewandowski said:

Mit dem SharePoint Designer kann die EditForm.aspx per konditionierter Formatierung angepasst werden. Hier kann man z.b. per xslt Felder vorbelegen oder den aktuellen Benutzer abfragen und somit das Feld benutzerabhängig aus- oder einblenden.

September 28, 2007 3:32 PM
 

Meine SharePoint-Notizen said:

HowTo: Sharepoint Liste als eigenen Suchbereich einrichten

June 20, 2008 3:13 AM
 

Daniel said:

Hi,

bin gerade auf dein sehr nützliches Tool gestoßen, allerdings habe ich das Problem, dass diese Fehlermeldung immer geworfen wird sobald ich connecten will:

Die Datei oder Assembly Microsoft Sharepoint Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c oder eine Abhängigkeit davon wurden nicht gefunden. Das System kann die angegebene Datei nicht finden.

Wär super wenn du mir da helfen könntest!

 

@Daniel

Das erklärt sich ziemlich einfach: dieses Tool wurde geschrieben, um direkt auf dem SharePoint-Server ausgeführt zu werden. Wahrscheinlich hast Du es von einem Desktop-PC ausgeführt und hier fehlt dann die genannt DLL.

Kopiere es z.B. auf den Desktop eines SharePoint-Servers und starte es von dort!

Gruß,

Oliver

June 23, 2008 3:50 AM
 

Jan said:

Hallo Oliver,

super Tool eigentlich genau das was ich brauche. Kannst Du mir sagen wo die einstellungen gespeichert werden?

Ich würde nämlich gerne 2 Forms benutzen eine sagen wir mal für "Normale" User mit iengeschränkter Sicht und eine für "Besondere" User die mehr Felder sehen dürfen. Kannst Du mir evtl. dafür nen Tipp geben?

Danke Dir

   Jan

 

@Jan

Ich würde Dir zu der Vorgehensweise raten, die Ronny Lewandowski in seinem Kommentar angesprochen hat. Ich habe es selbst zwar noch nicht ausprobiert, aber es klingt nach einer guten Lösung für Dein Problem. Falls Du diese Lösung einsetzen möchtest, würde mich ein kurzer Erfahrungsbericht von Dir interessieren.

Gruß,

Oliver

June 27, 2008 6:41 AM
 

Jan said:

Danke Oliver,

 das Problem welches sich daraus ergibt ist leider das dann keine Datei mehr mit angehangen werden kann. :-(

Und dies ist eine vorrausetzung für mich.

Aber vielen Dank trotzdem.

 Jan

July 1, 2008 9:32 AM
 

Meine SharePoint-Notizen said:

Ein paar Tage ist es nun her seit mich ein Kunde angerufen hat, weil er Probleme mit einigen Benachrichtigungseinstellungen

September 23, 2008 9:07 AM

Leave a Comment

(required )  
(optional )
(required )  
Add

Need SharePoint Training? Attend a SharePoint Bootcamp!

Posts (c) their respective authors. Everything else (c) 2007 SharePoint Experts