Add the webreference to the Lists.asmx in sharepoint site.
HTTP://localhost/_vti_bin/Lists.asmx
(SharePoint virtual Directory URL/_vti_bin/Lists.asmx
write the following methods in your webservice.
private data.DataTable GetDataTableFromWSS(bool onlySchema)
{
string WssSiteUrl = http://192.168.111.21;
string WssSiteUrl = ConfigurationSettings.AppSettings[“WssSiteUrl”];
WssSite.Lists lists = new WssSite.Lists();
lists.Url = WssSiteUrl + “_vti_bin/Lists.asmx”;
lists.Credentials = System.Net.CredentialCache.DefaultCredentials;
lists.PreAuthenticate = true;
//you have to pass the List Name here
string CommandText = “Employee Info”;
XmlNode ListCollectionNode = lists.GetListCollection();
XmlElement List = (XmlElement)ListCollectionNode.SelectSingleNode(String.Format(“wss:Список[@Title='{0}"]”, CommandText), NameSpaceMgr);
якщо (List == null)
{
throw new ArgumentException(String.Format(“The list {0} could not be found in the site {1}”, CommandText, WssSiteUrl));
}
string TechListName = List.GetAttribute(“Назва”);
data.DataTable result = new data.DataTable(“список”);
XmlNode ListInfoNode = lists.GetList(TechListName);
System.Text.StringBuilder fieldRefs = new System.Text.StringBuilder();
System.Collections.Hashtable DisplayNames = new System.Collections.Hashtable();
Еогеасп (XmlElement Field in ListInfoNode.SelectNodes(“wss:Fields/wss:Field”, NameSpaceMgr))
{
якщо (Field.HasChildNodes)
{
Еогеасп (XmlElement Fld in Field.SelectNodes(“wss:Fields/wss:Field”, NameSpaceMgr))
{
string FieldName = Fld.GetAttribute(“Назва”);
string FieldDisplayName = Fld.GetAttribute(“DisplayName”);
якщо (result.Columns.Contains(FieldDisplayName))
{
FieldDisplayName = FieldDisplayName + ” (” + FieldName + “)”;
}
result.Columns.Add(FieldDisplayName, TypeFromField(Field));
fieldRefs.AppendFormat(“”, FieldName);
DisplayNames.Add(FieldDisplayName, FieldName);
}
}
ще
{
string FieldName = Field.GetAttribute(“Назва”);
string FieldDisplayName = Field.GetAttribute(“DisplayName”);
якщо (result.Columns.Contains(FieldDisplayName))
{
FieldDisplayName = FieldDisplayName + ” (” + FieldName + “)”;
}
result.Columns.Add(FieldDisplayName, TypeFromField(Field));
fieldRefs.AppendFormat(“”, FieldName);
DisplayNames.Add(FieldDisplayName, FieldName);
}
}
якщо (onlySchema) return result;
XmlElement fields = ListInfoNode.OwnerDocument.CreateElement(“ViewFields”);
fields.InnerXml = fieldRefs.ToString();
XmlNode ItemsNode = lists.GetListItems(TechListName, “”, null, полів, “1000000”, null);
// Lookup fields always start with the numeric ID, then ;# and then the string representation.
// We are normally only interested in the name, so we strip the ID.
System.Text.RegularExpressions.Regex CheckLookup = new System.Text.RegularExpressions.Regex(“^\d ;#”);
Еогеасп (XmlElement Item in ItemsNode.SelectNodes(“rs:data/z:row”, NameSpaceMgr))
{
data.DataRow newRow = result.NewRow();
Еогеасп (data.DataColumn col in result.Columns)
{
якщо (Item.HasAttribute(“ows_” + (рядок)DisplayNames[col.ColumnName]))
{
string val = Item.GetAttribute(“ows_” + (рядок)DisplayNames[col.ColumnName]);
якщо (CheckLookup.IsMatch((рядок)val))
{
string valString = val as String;
val = valString.Substring(valString.IndexOf(“#”) + 1);
}
// Assigning a string to a field that expects numbers or
// datetime values will implicitly convert them
newRow[col] = val;
}
}
result.Rows.Add(newRow);
}
return result;
}
// The following Function is used to Get Namespaces
private static XmlNamespaceManager _nsmgr;
private static XmlNamespaceManager NameSpaceMgr
{
get
{
якщо (_nsmgr == null)
{
_nsmgr = new XmlNamespaceManager(new NameTable());
_nsmgr.AddNamespace(“wss”, “HTTP://schemas.microsoft.com/sharepoint/soap/”);
_nsmgr.AddNamespace(“з”, “uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882”);
_nsmgr.AddNamespace(“dt”, “uuid:C2F41010-65B3-11d1-A29F-00AA00C14882”);
_nsmgr.AddNamespace(“rs”, “urn:schemas-microsoft-com:rowset”);
_nsmgr.AddNamespace(“z”, “#RowsetSchema”);
}
return _nsmgr;
}
}
private Type TypeFromField(XmlElement field)
{
switch (field.GetAttribute(“Type”))
{
case “DateTime”:
return typeof(DateTime);
case “Integer”:
return typeof(int);
case “Number”:
return typeof(float);
default:
return typeof(рядок);
}
}
WssSite object on this code, I am getting error on this, “you are missing a using directive or an assembly reference?” any idea
Hi Bala,
WssSite is an Webreference for the lists.asmx
Ура,
Удай
Excellent. Thanks Uday. Your post saved me lot of time in my migration project 🙂
You are welcome Jaya