2012-09-27 3 views
0

Je l'ai réussi à l'ajouter à une liste spécifiée, mais je souhaite parcourir toutes les listes de la collection de sites. Je ne peux pas trouver ce qui fait que cela ne fonctionne pas.Sharepoint ajouter un champ à toutes les listes/bibliothèques de documents dans une collection de sites

code qui fonctionne pour une liste:

void btnAdd_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      using (SPSite site = new SPSite("http://asdf:150/sites/test")) 
      { 
       using (SPWeb web = site.OpenWeb()) 
       { 
        SPList list = web.Lists["test8"]; 

        //Needed? 
        site.AllowUnsafeUpdates = true; 
        web.AllowUnsafeUpdates = true; 

        string mainLocation = list.Fields.Add("New Field", SPFieldType.Text, false, false, null); 
        readOnly(list, mainLocation); 

        //Add to default view (will be removed after testing) 
        SPView view = list.DefaultView; 
        defaultView(view, "New Field"); 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
     } 
    } 

Je veux ajouter le champ à toutes les listes de la collection de sites, mais je ne sais pas ce que je pourrais faire mal, c'est ce que j'ai à ce jour .

void btnAdd_Click(object sender, EventArgs e) 
     { 
      using (SPSite site = new SPSite("http://asdf:150/sites/test")) 
      { 
       using (SPWeb web = site.OpenWeb()) 
       { 
        //Needed? 
        site.AllowUnsafeUpdates = true; 
        web.AllowUnsafeUpdates = true; 
        try 
        { 
         SPListCollection lists = web.Lists; // ?? 
         foreach (SPList list in lists) 
         { 
          string mainLocation = list.Fields.Add("New Field", SPFieldType.Text, false, false, null); 
          readOnly(list, mainLocation); 

          //Add to default view (will be removed after testing) 
          SPView view = list.DefaultView; 
          defaultView(view, "New Field"); 
         } 
        } 
        catch (Exception) 
        { 
         // some exception handling 
        } 
        finally 
        { 
         //web.Dispose(); 
        } 
       } 
      } 
     } 

Méthodes d'aide

void readOnly(SPList list, string name) 
{ 
    SPField listField = list.Fields.GetFieldByInternalName(name); 
    listField.ReadOnlyField = true; 
    listField.Update(); 
} 

void defaultView(SPView view, string field) 
{ 
    view.ViewFields.Add(field); 
    view.Update(); 
} 

Hope toute une d'entre vous sont plus intelligents que moi ici :)

+0

Alors qu'est-ce qui ne va pas? Avez-vous une exception? –

Répondre

0

Je cours votre code et vous avez 2 problèmes principaux. 1. La vue par défaut peut être nulle dans certaines listes. Donc, vous devriez le vérifier.

SPView view = list.DefaultView; 
if(view != null) 
{ 
    defaultView(view, "New Field"); 
} 

2. SPListCollection est modifiée lorsque vous modifiez la liste. Vous devriez avoir IEnumerable temporaire pour parcourir les listes.

using System.Linq; 

SPListCollection listCollection = web.Lists; 
IEnumerable<SPList> lists = listCollection.Cast<SPList>(); 
foreach (SPList list in lists) 
{ 

3. N'ignorez pas Excaptions. Ajoutez du code pour attraper le bloc, cela peut vous aider.

catch (Exception ex) 
{ 
    Console.WriteLine(ex.ToString()); 
} 
+0

Super! J'ai ajouté: catch (Exception ex) { label.Text = ex.Message; } pour l'ajouter à l'étiquette de la partie wap où se trouvait ce bouton. Et j'ai eu l'exeption: Collection a été modifiée; l'opération d'énumération peut ne pas s'exécuter. Très utile! – user1217169

+0

Maintenant, j'ai juste besoin de savoir pourquoi Cast n'est pas reconnu. – user1217169

+0

Je ne pense pas que 'Cast' est une méthode d'instance de' SPListCollection'. Il n'est pas répertorié ici: http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.splistcollection_methods.aspx. Notez qu'il existe un 'GetEnumerator' et' GetTypedEnumerator '. – Kache

0

La première chose que je pris est que vous vérifiez que toutes les listes à la racine SPWeb de la collection de sites.

Le SPWeb racine peut également avoir des SPWebs enfants que vous devrez traverser. Mis à part cela, il serait utile si vous avez spécifié ce qui ne fonctionne pas ou "faux"?

+0

Merci pour ce conseil, je vais probablement devoir y aller aussi. Je me souviendrai de préciser ce qui ne va pas la prochaine fois :) Ce qui n'allait pas, c'était qu'il ne faisait rien, je ne pouvais pas voir que les listes avaient été changées, et je n'avais pas d'endroit pour vérifier l'exception. – user1217169

Questions connexes