Comment puis-je itérer des listes et des sous-sites SharePoint à partir d'un programme C#? Est-ce que le SharePoint.dll
est requis à partir d'une installation SharePoint ou y a-t-il une DLL "client Sharepoint" disponible pour accéder à distance à ces données?Accès par programme aux listes et sous-sites SharePoint?
Répondre
Utilisez les services Web Sharepoint; en particulier les webservices Webs et Lists font ce que vous demandez.
Pour Sharepoint 2007: http://msdn.microsoft.com/en-us/library/bb862916(v=office.12).aspx
Pour Sharepoint 2007, vous aurez besoin pour accéder aux services Web. Dans SharePoint 2010, il existe un modèle d'objet client SharePoint.
http://msdn.microsoft.com/en-us/library/ee857094%28office.14%29.aspx
Ou si le code est en cours d'exécution sur le serveur SharePoint, utilisez l'API. –
J'arrive à faire face à cette chose maintenant ... cela fonctionne. J'ai un peu baissé le code pour me concentrer uniquement sur la mécanique. C'est dur sur les bords, mais j'espère que vous avez l'idée. Cela fonctionne pour moi.
De même, veillez à configurer une référence Web à l'aide de l'URL de votre site Sharepoint. Utilisez cela comme votre "référence web" ci-dessous.
private <web reference> _Service;
private String _ListGuid, _ViewGuid;
private Initialize()
{
_Service = new <web reference>.Lists();
_Service.Credentials = System.Net.CredentialCache.DefaultCredentials;
_Service.Url = "https://sharepointsite/_vti_bin/lists.asmx";
}
private String SpFieldName(String FieldName, Boolean Prefix)
{
return String.Format("{0}{1}", Prefix ? "ows_" : null,
FieldName.Replace(" ", "_x0020_"));
}
private String GetFieldValue(XmlAttributeCollection AttributesList,
String AttributeName)
{
AttributeName = SpFieldName(AttributeName, true);
return AttributesList[AttributeName] == null ?
null : return AttributesList[AttributeName].Value;
}
public void GetList()
{
string rowLimit = "2000"; // or whatever
System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument();
System.Xml.XmlElement query = xmlDoc.CreateElement("Query");
System.Xml.XmlElement viewFields = xmlDoc.CreateElement("ViewFields");
System.Xml.XmlElement queryOptions =
xmlDoc.CreateElement("QueryOptions");
queryOptions.InnerXml = "";
System.Xml.XmlNode nodes = _Service.GetListItems(_ListGuid, _ViewGuid,
query, viewFields, rowLimit, null, null);
foreach (System.Xml.XmlNode node in nodes)
{
if (node.Name.Equals("rs:data"))
{
for (int i = 0; i < node.ChildNodes.Count; i++)
{
if (node.ChildNodes[i].Name.Equals("z:row"))
{
XmlAttributeCollection att =
node.ChildNodes[i].Attributes;
String title = GetFieldValue("Title");
String partNumber = GetFieldValue("Part Number");
}
}
}
}
}
}
En outre, le procédé SpFieldName est non blindée. C'est juste une bonne idée, pour la plupart des noms de champs dans une liste. Ceci, malheureusement, est un voyage de découverte. Vous devez exposer le code XML pour trouver les noms de champs réels s'ils ne correspondent pas.
Bonne chasse.
Est-ce SharePoint 2007 ou 2010? –