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.




programmatisch Ordnerinhaltstypen ermitteln

Dieser Beitrag hat 4 Antworten

Ohne Rang
54 Beiträge
Remei erstellt 20 Feb. 2013 16:35
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Sehr geehrte Leser und Leserinnen,

mein Ziel ist es programmatisch den Ordnerinhaltstypen zu erhalten, damit die Felder dieses Typ zu erfahren und mit den bereits befüllten Werten widerum die Metadaten eines hinzugefügten Items zu setzen. Leider suche ich schon seit einer Stunde einen Weg, finde ihn aber nicht.

Die bisherige Umsetzung sieht einen EventReceiver vor. Er wird bei einem hinzugefügten Item ausgelöst. Ein SPFolder-Objekt wollte ich gern verwenden, um den Ordnerinhaltstyp zu ermitteln.

Wie komme ich an den ContentType heran? Sobald man den Inhaltstypen hat, komme dann an die Felder und deren Auswahlwerte?

public class EventReceiver1 : SPItemEventReceiver
    {
       /// <summary>
       /// An item was added.
       /// </summary>
       public override void ItemAdded(SPItemEventProperties properties)
       {
           SPFolder ordner = null;
           base.ItemAdded(properties);
           SPListItem _dateiUpload = properties.ListItem;
           if (String.Equals("Eventdokument", _dateiUpload.ParentList.ToString()))
           {
               ordner = _dateiUpload.Web.GetFolder(_dateiUpload.Url.Replace(_dateiUpload.Name.ToString(),""));
               //ordner.c;
               _dateiUpload.Update();
           }
       }
    }

 

Vielen Dank im Voraus.

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 20 Feb. 2013 16:41
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

properties.ListItem lifert das Element, für das das Ereignis ausgelöst wurde. Jedes SPListItem hat die Eigenschaften ContentType und ContentTypeId, die Du auswerten kannst. Wenn es sich um einen Ordner handelt, kommst Du über SPListItem.Folder an genau diesen. Wenn es sich um eine Datei handelt, kommst Du über SPListItem.File an das entsprechende SPFile. Das wiederum hat eine Eigenschaft Folder, das den Ordner liefert, in dem die Datei liegt.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
54 Beiträge
Remei Als Antwort am 25 Feb. 2013 11:52
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Danke, genau das war es.

 

Der SharePoint ContenType beinhaltet leere Felder oder eine Auswahl für ein Feld. Wie komme ich an die Auswahl heran, die sich in dieser Inhaltstyp-Spalte befindet?

Hintergrund hierzu ist bei einem Event, z.B. Datei wird hochgeladen, sollen die Metadaten des Elements per Inhaltstypen des Ordners befüllt werden.

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 25 Feb. 2013 12:18
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Remei"]die Metadaten des Elements per Inhaltstypen des Ordners befüllt werden.[/quote]

Dazu könntest Du die Feldwerte ja einfach kopieren ohne den Feldtyp zu beachten:
docItem["Field"] = folderItem["Field"];

Wenn Du an ein Feld heran möchtest, kannst Du es Dir entweder aus dem Inhaltstyp oder der Liste/Bibliothek holen. Beide haben eine Fields-Eigenschaft.

Dabei bekommst Du zunächst eine Instanz der Basisklasse SPField. Wenn Du einen Bestimmten Typ brauchst, mußt Du den noch casten:
SPFieldChoice field = (SPFieldChoice)list.Fields["Field"];

An die Auswahlmöglichkeiten kommst Du über SPFieldChoice.Choices.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
54 Beiträge
Remei Als Antwort am 27 Feb. 2013 09:14
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Danke nochmals! Vielen Dank! meine gewählten Events führen nur nicht zum Ziel.