2010-12-09 7 views

Antwort

8

Server Object Model

string siteUrl = "http://mysite"; 
using (SPSite site = new SPSite(siteUrl)) 
{ 
    using (SPWeb web = site.OpenWeb()) 
    { 
     SPList list = web.Lists["my forum"]; 
     for (int i = 0; i < list.Fields.Count; i++) 
     { 
      if (list.Fields[i].Title == "xyz") 
      { 
       - 
       - 
      } 
     } 
    } 
} 

Clientobjektmodell

string siteUrl = "http://MyServer/sites/MySiteCollection"; 
ClientContext clientContext = new ClientContext(siteUrl); 
SP.List List = clientContext.Web.Lists.GetByTitle("my forum"); 
for (int i = 0; i < list.Fields.Count; i++) 
{ 
    if (list.Fields[i].Title == "xyz") 
    { 
     - 
     - 
    } 
} 
+0

Es ist Server-Objektmodell in Ihrem Beispiel – axk

+0

ihre in beiden Codes mit Ausnahme des Client-Kontext –

+0

Ashutosh keinen großen Unterschied ist, Dank für Ihre Antworten. +1 – MagicAndi

2

ich die Details der meine Operation vor der Felder der Liste Abrufen endete, und sie in einer allgemeinen Liste der structs Speichern (enthaltend Details jedes Feldes). Ich frage dann diese (generische) Liste ab, um zu sehen, ob das aktuelle Feld tatsächlich in der gegebenen (SharePoint) Liste existiert.

// Retrieve detail sof all fields in specified list 
using (ClientContext clientContext = new ClientContext(SharePointSiteUrl)) 
{ 
    List list = clientContext.Web.Lists.GetByTitle(listName); 
    _listFieldDetails = new List<SPFieldDetails>(); 

    // get fields name and their types 
    ClientObjectPrototype allFields = list.Fields.RetrieveItems(); 
    allFields.Retrieve(FieldPropertyNames.Title, 
         FieldPropertyNames.InternalName, 
         FieldPropertyNames.FieldTypeKind, 
         FieldPropertyNames.Id, 
         FieldPropertyNames.ReadOnlyField); 
    clientContext.ExecuteQuery(); 

    foreach (Field field in list.Fields) 
    { 
     SPFieldDetails fieldDetails = new SPFieldDetails(); 
     fieldDetails.Title = field.Title; 
     fieldDetails.InternalName = field.InternalName; 
     fieldDetails.Type = field.FieldTypeKind; 
     fieldDetails.ID = field.Id; 
     fieldDetails.ReadOnly = field.ReadOnlyField; 
     listFieldDetails.Add(fieldDetails); 
    } 
} 

// Check if field name exists 
_listFieldDetails.Exists(field => field.Title == fieldName); 

// Struct to hold details of the field 
public struct SPFieldDetails 
{ 
    public string Title { get; set; } 
    public string InternalName { get; set; } 
    public Guid ID { get; set; } 
    public FieldType Type { get; set; } 
    public bool ReadOnly { get; set; } 
} 
11

fanden gerade diese, während für die gleiche Sache suchen, aber es sieht aus wie Sharepoint 2010 etwas gebaut in dafür hat, zumindest für das Server-Modell: list.Fields.ContainsField("fieldName");

Nicht sicher, ob es für Client-Seite vorhanden ist obwohl. Ich dachte, es wäre ein guter Ort, um diese Informationen zu speichern.

3

Das folgende Verfahren zeigt, wie Sie feststellen können, ob eine bestimmte Spalte in einer List existiert mit CSOM:

static class FieldCollectionExtensions 
{ 
    public static bool ContainsField(this List list,string fieldName) 
    { 
     var ctx = list.Context; 
     var result = ctx.LoadQuery(list.Fields.Where(f => f.InternalName == fieldName)); 
     ctx.ExecuteQuery(); 
     return result.Any(); 
    } 
} 

Nutzungs

using(var ctx = new ClientContext(webUrl)) 
{ 
    var list = ctx.Web.Lists.GetByTitle(listTitle); 
    if(list.ContainsField("Title")){ 
     //... 
    } 
} 
0

ich die Sharepoint-Plus-Bibliothek bevorzugen, wie es ist wirklich sauber: http://aymkdn.github.io/SharepointPlus/symbols/%24SP%28%29.list.html

$SP().list("My List").get({ 
    fields:"Title", 
    where:"Author = '[Me]'" 
},function getData(row) { 
    console.log(row[0].getAttribute("Title")); 
}); 

Sie könnten eine for-Schleife einrichten, um die Zeile zu durchlaufen und zu überprüfen, ob die gesuchte Spalte existiert.

3

Hier ist ein Erweiterungscode (CSOM) für Sharepoint-Liste

public static bool DoesFieldExist(this List list, ClientContext clientContext, string internalFieldname) 
    { 
     bool exists = false; 

     clientContext.Load(list.Fields, fCol => fCol.Include(
       f => f.InternalName 
      ).Where(field => field.InternalName == internalFieldname)); 
     clientContext.ExecuteQuery(); 

     if (list.Fields != null && list.Fields.Count > 0) 
     { 
      exists = true; 
     } 

     return exists; 
    } 

Nutzung

List targetList = this.Context.Web.Lists.GetById(<ListID>); 
targetList.DoesFieldExist(<ClientContext>, <Field internal Name>) 

:)

2

Einige gute Antworten oben genießen. Ich persönlich diese eine verwendet:

  List list = ctx.Web.Lists.GetByTitle("Some list"); 
      FieldCollection fields = list.Fields; 
      IEnumerable<Field> fieldsColl = ctx.LoadQuery(fields.Include(f => f.InternalName)); 
      ctx.ExecuteQuery(); 

      bool fieldMissing = fieldsColl.Any(f => f.InternalName != "Internal_Name"); 

Sie können auch ‚Wo‘ nach Verfahren einbeziehen und überprüfen, ob zurückgegeben Sammlung/Feld null ist. Es geht um persönliche Vorlieben, da beide Optionen auf der Clientseite abgefragt werden.

-2

zu viel Code Verwendung dieses

Last Felder zuerst, dann

bool exists= clientContext2.Site.RootWeb.Fields.Any(o => o.Id.ToString() == a.Id.ToString());