2010-03-12 12 views
2

J'essaie d'accéder à Dossier à partir de la bibliothèque de documents à l'aide des services Web en C#. J'utilise la méthode EnumerateFolder() de SiteData pour obtenir des sous-dossiers et des fichiers. Mais la méthode me donne seulement 3 propriétés pour chaque entrée.Problème lors de l'itération du contenu du dossier sharepoint

  1. IsFolder
  2. Url
  3. Dernière date de modification

Alors, comment pouvons-nous obtenir 'Modifié par' valeur du champ.

Ou il existe une autre solution pour l'énumération des dossiers et sous-dossiers.

Merci.

Répondre

1

Vous devez utiliser l'API List afin d'obtenir plus de propriétés de vos objets.

[Modifier - exemple de code complet]

L'échantillon doit être nettoyé, mais devrait vous donner ce que vous avez besoin

public void SomeFunction() 
{ 
    Lists lists = new Lists(); //http://server/_vti_bin/Lists.asmx 

    XmlNode coll = lists.GetListCollection(); 

    XmlNamespaceManager nsMgr = new XmlNamespaceManager(coll.OwnerDocument.NameTable); 
    nsMgr.AddNamespace("sp", "http://schemas.microsoft.com/sharepoint/soap/"); 
    nsMgr.AddNamespace("z", "#RowsetSchema"); 

    XmlDocument xmlDoc = new XmlDocument(); 
    XmlElement query = xmlDoc.CreateElement("Query"); 
    XmlElement viewFields = xmlDoc.CreateElement("ViewFields"); 
    XmlElement queryOptions = xmlDoc.CreateElement("QueryOptions"); 

    viewFields.InnerXml = "<FieldRef Name=\"Modified_x0020_By\" />"; 
    queryOptions.InnerXml = "<ViewAttributes Scope=\"RecursiveAll\"/>"; 

    XmlNodeList siteLists = coll.SelectNodes("//sp:List", nsMgr); 
    foreach (XmlNode list in siteLists) 
    { 
     if (list.Attributes["ServerTemplate"].Value != "101") continue; //101=DocLib 
     XmlNode listItemCollection = lists.GetListItems(list.Attributes["Name"].Value, string.Empty, query, 
                 viewFields, "4000", 
                 queryOptions, null); 

     XmlNodeList listItems = listItemCollection.SelectNodes("//z:row", nsMgr); 
     foreach (XmlNode listItem in listItems) 
     { 
      if (listItem.Attributes["ows_FSObjType"] == null) continue; 
      if (!listItem.Attributes["ows_FSObjType"].Value.EndsWith("#1")) continue; 
      PrintModifiedBy(listItem); 
     } 
    } 
} 

private void PrintModifiedBy(XmlNode listItem) 
{ 
    string modifiedBy; 
    if (listItem.Attributes["Modified_x0020_By"] != null) 
     modifiedBy = listItem.Attributes["ows_Modified_x0020_By"].Value; 
    else 
     modifiedBy = listItem.Attributes["ows_Editor"].Value; 
    Console.WriteLine(modifiedBy); 
} 
+0

J'utilise des services Web. – Royson

+0

J'ai édité ma réponse avec du code caml pour le ListService. Ce n'est pas complet mais devrait vous aider à démarrer. –

+0

Merci mikael..i va essayer la requête CAML. mais plz être mis à jour avec ma question. ;) – Royson