SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




Dokumentbibliothek Spalten read only

Unbeantwortet Dieser Beitrag hat 13 Antworten

Ohne Rang
26 Beiträge
FabianS erstellt 25 Jan. 2010 13:00
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo zusammen,

ich will folgendes in MOSS 2007 umsetzen.

  • Die Dokumentenbibliothek soll einen View erhalten, in dem die Dokumente nur angezeigt, aber nicht verändert bzw. geöffnet werden können.
  • Sämtliche anderen Felder sollen ebenfalls nur read only sein.
  • Die Ordner der Dokumentenbibliothek sollen navigierbar sein.

Habe versucht mit dem SharePoint Manage 2007 die Spalten auf read only zu setzen, doch leider, kann ich die Listeinträge immernoch bearbeiten. (Oder liegt das einfach am Systemaccount, der alles darf?).

Habe auch schon versucht dies über das SP Objektmodell abzubilden:

            item.Fields.GetField("link").ReadOnlyField = true;
            item.Fields.GetField("Title").ReadOnlyField = true;
            item.Update();

Weder wird das Item in den Spalten zu read only, noch die ganze Spalte (falls obiger code auf die ganze Spalte übergreifen sollte)

Habt ihr eine Idee, wie ich das in MOSS 2007 umsetzen kann?

Viele Grüße,
Fabian

 

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 25 Jan. 2010 13:28
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Und wie kommt dann der Inhalt in die ReadOnly-Felder? Aber egal, manche Felder z.B. Title, lassen sich nicht readonly setzen. Außerdem geht es nur für die ganze Spalte, nicht für einzelne Elemente und Du mußt dann SPField.Update() aufrufen.

Eine Ansicht kann nicht readonly sein. Jeder, der über die entsprechende Berechtigung verfügt, kann ein Element ändern - unabhängig von der Ansicht.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
26 Beiträge
FabianS Als Antwort am 25 Jan. 2010 14:16
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Im Prinzp geht es darum, dass in dem view keiner dokumente öffnen  oder properties bearbeiten darf, dafür alle ordner sehen, reinnavigieren oder dok. Details in der Liste sehen (name, autor, geändert am, content type,..)

Ich such nach einem Weg, dass User einer bestimmten Gruppe, Dokumente hinzufügen können, andere User wiederum, wenn sie auf die Dokumentenbibliothek navigieren, als default den View zu sehen bekommen, in dem sämtliche Elemente (Dokumente & Properties) nur read only sind.

Kann man das über die Userrechte regeln?

Gruß,
Fabian

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 25 Jan. 2010 15:23
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Das kann man nur über die Userberechtigungen regeln. Mit der Ansicht hat das wie gesagt nichts zu tun.

Füge die einen der Gruppe "Mitglieder" hinzu, die anderen der Gruppe "Besucher". Nur z.B.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
26 Beiträge
FabianS Als Antwort am 26 Jan. 2010 17:08
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Danke für die Antworten.

Ich bin nun zu folgendem gekommen:

  • Ich lege von der Document Library eine Data View an. Somit sind alle anzuzeigenden Felder nurnoch read only und das Kontextmenü fehlt komplett. Sprich soweit entspricht es meinen Anforderungen.
  • Nun suche ich nach einer Lösung wie ich Anfragen für bestimmte Spalten machen kann:

if spalte(type) == type ordner , dann klickbar (navigierbar)

  • Ich will praktisch erreichen, wenn es sich in der Spalte Type um den Typ Ordner erhält, dass dieser navigierbar ist, damit User den Inhalt des Ordners sehen, aber die in dem Ordner liegenden Dokumente nicht öffnen können.

Wie lässt sich eine solche Abfrage implementieren? Und wo pflege ich dann den Code ein?

 

EDIT: Beispielsweise ist der item type für Ordner anscheinend immer 1 und für Dokumente ist der item type 0. Hier könnte ich eine Abfrage starten. Bräuchte dann praktisch nurnoch zu wissen, wo ich diese Abfrage einbaue und mit welcher Url bzw. Data Source ich die Ordner verknüpfe oder?

Viele Grüße,

Fabian

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 26 Jan. 2010 17:11
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Die Datenansicht wird per XSLT gerendert, das Du beliebig anpassen kannst. Einfach im Designer auf Codeansicht umschalten. Dazu muß man allerdings XSLT kennen und können.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
26 Beiträge
FabianS Als Antwort am 26 Jan. 2010 18:14
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Gibt es keine Alternative, Ordner in nem DataView navigierbar zu gestalten. Dass man Dokumente nicht öffnen kann, stört nicht, doch ein Ordner sollte man öffnen können um die Inhalte (Dokumente) der Ordner sehen zu können.

 

Ohne Rang
26 Beiträge
FabianS Als Antwort am 1 Feb. 2010 14:07
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

In meinem Data View habe ich die Spalte Title, die ein Hyperlink Feld darstellt. Als Value (also URL) hab ich die Spalte URL path angegeben.

Damit kann man nun sowohl Ordner als auch Dokumente öffnen.

Nun such ich nach einer Möglich innerhalb des Code Snippets, das meine Title-Spalte darstellt eine Bedingung einzufügen, die testet welchen Content Type (folder oder Document) das Item besitzt und wenn das item den Content Type Folder hat, soll der User es öffnen können. Wenn der Content Type jedoch Document ist, soll der User das Document noicht öffnen dürfen. Wie realisier ich das am besten?

   <td class="ms-vb">
    <a href="{@FileRef}"><xsl:value-of select="@Title" /></a>
   </td>

Wie Andi bereits gesagt hat, muss man sich mit XSL auskennen. Besteht die Möglichkeit mit einer anderen Sprache (C#) diese Bedingung zu implementieren. Oder kennt jemand vielleicht gute Quellen zu XSL ?

 Viele Grüße,

Fabian

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 1 Feb. 2010 14:48
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Die Bedingung selbst kannst Du so realisieren:
<xsl:choose>
<xsl:when test="@ContentType = 'Ordner'">
<!-- mach was mit dem Ordner -->
</xsl:when>
<xsl:otherwise>
<!-- mach was mit dem Dokument -->
</xsl:otherwise>
</xsl:choose>

Wie ich Dir aber schon beschrieben habe, kannst Du so das Öffnen nicht ernsthaft unterbinden (so etwas macht man mit Berechtigungen). Du kannst höchstens für Ordner einen Link anbieten und für Dokumente nicht.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
26 Beiträge
FabianS Als Antwort am 1 Feb. 2010 14:53
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Vielen Dank,

werde es gleich probieren. Im Grunde will ich auch nichts anderes machen, als du in deinem letzten Satz beschrieben hast.

 EDIT:

Super, hat funktioniert für mich:

   <td class="ms-vb">
   <xsl:choose>
   <xsl:when test="@ContentType='Folder'">
   <a href="{@FileRef}"><xsl:value-of select="@Title" /></a>
   </xsl:when>
   <xsl:otherwise>
   <xsl:value-of select="@Title"/>
   </xsl:otherwise>
   </xsl:choose>
   </td>

Der Link für die Folder zeigen zu den Ordnern der Original-Dokumentenbibliothek. Darin sind die Dokumente logischerweise editierbar. Kann ich einem DataView, ein anderes DataView als DataSource zuordnen? Sprich ich will erreichen, dass die Dokumente, die in den Ordnern liegen, nicht editierbar sind.

Viele Grüße,

Fabian

Ohne Rang
26 Beiträge
FabianS Als Antwort am 1 Feb. 2010 16:38
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Kann man in XSLT C# Code einfügen?

Sprich ich will

Get all documents from folder XY dann create new dataview and show all listitems from folder XY

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 1 Feb. 2010 16:59
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Nein, das geht nicht. Und wie bereits mehrfach erwähnt, kannst Du das Öffnen der Dokumente nur durch entsprechende Rechtevergabe steuern.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
26 Beiträge
FabianS Als Antwort am 2 Feb. 2010 15:17
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo Andi,

nachdem das DataView WebPart wohl für die Anforderungen nicht geeignet ist, habe ich nun eine andere Idee:

  • Was ist mit einem eigenem Webpart auf einer ASPX Seite, das je DocLib die Inhalte abfragt?
  • Dann setze ich alle Doclib Webparts auf eine ASPX Seite untereinander und man kann sich durch klicken.
  • In einem eigenen Webpart könnte man dann doch auch „Rechte“ setzen, sprich: RunwithelevatedPriveleges?!

Ich dachte dabei entweder an das ListView WebPart oder an ein CustomWebPart.

Kann man bei das ootb ListViewWebPart mit RunwithelevatedPriveleges aufrufen?

Gibt es eine Möglichkeit innerhalb des ootb ListView WebParts eine Abfrage auf die ContentTypes zu machen, also wenn ContentType = Document, dann soll entweder das Icon-Type nicht dargestellt werden oder dem Name soll der Link entzogen werden.

Vielen Dank im Voraus,

Fabian

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 2 Feb. 2010 15:56
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Das Standard-ListView kannst Du nicht weiter konfigurieren. Evtl. kannst Du ein eigenes davon ableiten, aber die meisten MS-Klassen sind sealed...

Natürlich kannst Du selbst etwas entwickeln, aber was sollte das mehr können, als eine Datenansicht? Ich halte einfach nichts von dem Versuch, den Benutzern Einschränkungen vorzugaukeln, die jeder Power-User dann doch umgehen kann. Sowas nennt man "Security by Obscurity" und ist eine schlechte Idee.

Viele Grüße
Andi
af @ evocom de
Blog