概要
在sharepoint中的自定义web part会涉及到对list里面的item进行操作,这篇文单将会讲解如何修改list里的item。
我们先看一个示例
/// <summary> /// /// </summary> /// <param name="ID"></param> /// <returns></returns> public SPListItemCollection GetSPListItemCollection(string ID) { SPListItemCollection itemCollection = new SPListItemCollection(); SPSecurity.RunWithElevatedPrivileges( delegate { using (SPSite spsite = new SPSite(this.CurrentUrl)) { using (SPWeb spWeb = spsite.OpenWeb()) { SPList listInstance = spWeb.Lists[this.ListName]; SPQuery query = new SPQuery(); query.Query = "<Where><Eq><FieldRef Name='ID' /><Value Type='Counter'>" + ID + "</Value></Eq></Where>"; itemCollection = listInstance.GetItems(query); } } } ); return itemCollection; }
SPSecurity.RunWithElevatedPrivileges()是用来提高操作权限级别来操作站点!
用法:
SPSecurity.RunWithElevatedPrivileges(delegate() {代码});提高权限将是让代码以sharepoint\system所具有的权限来执行!
更改指定的item代码
public string AddNewItem() { string retVal = string.Empty; try { SPSecurity.RunWithElevatedPrivileges(delegate() { using (SPSite site = new SPSite(SPContext.Current.Web.Url)) { using (SPWeb web = site.OpenWeb()) { SPList list = web.Lists["TEST"]; SPListItem item = list.Items.Add(); item["Title"] = string.Format("Test at {0}", DateTime.Now.ToString()); item.Update(); } } retVal = "operation success!"; }); } catch (Exception ex) { retVal += ex.Message; } return retVal; }
如果修改的不留痕迹,要使用SystemUpdate;
示例如下:
public string AddNewItem() { string retVal = string.Empty; try { SPSecurity.RunWithElevatedPrivileges(delegate() { using (SPSite site = new SPSite(SPContext.Current.Web.Url)) { using (SPWeb web = site.OpenWeb()) { SPList list = web.Lists["TEST"]; SPListItem item = list.Items.Add(); item["Title"] = string.Format("Test at {0}", DateTime.Now.ToString()); item.SystemUpdate(); } } retVal = "operation success!"; }); } catch (Exception ex) { retVal += ex.Message; } return retVal; }
在很多时候我们需要设置允许不安全的修改。使用这个AllowUnsafeUpdates.
示例如下:
public string AddNewItem() { string retVal = string.Empty; try { SPSecurity.RunWithElevatedPrivileges(delegate() { using (SPSite site = new SPSite(SPContext.Current.Web.Url)) { using (SPWeb web = site.OpenWeb()) { web.AllowUnsafeUpdates = true; SPList list = web.Lists["TEST"]; SPListItem item = list.Items.Add(); item["Title"] = string.Format("Test at {0}", DateTime.Now.ToString()); item.SystemUpdate(); web.AllowUnsafeUpdates = false; } } retVal = "operation success!"; }); } catch (Exception ex) { retVal += ex.Message; } return retVal; }
在sharepoint里面删除一条item的话可以进行如下操作.
/// <summary> /// /// </summary> /// <returns></returns> private SPList GetCurrentList() { using (SPSite siteCollection = new SPSite(SPContext.Current.Web.Url)) { using (SPWeb web = siteCollection.OpenWeb()) { SPList list = web.Lists[this.ListName]; return list; } } } /// <summary> /// /// </summary> /// <param name="id"></param> /// <param name="version"></param> /// <param name="recycle"></param> public void DeleteItemByIDVersion(int id, int version, bool recycle) { SPListItem item = GetCurrentList().GetItemById(id); if (recycle) { item.Versions.GetVersionFromID(version).Recycle(); } else { item.Versions.GetVersionFromID(version).Delete(); } } /// <summary> /// Property that holds the list name. /// </summary> public override string ListName { get { return "Test"; } }
如果只取item的发布过的版本的数据,可以做如下处理.
private NewEntity GetLastApproveVersionByItem(SPListItem item) { NewEntity result = null; if (item == null) return result; if (item.Level == SPFileLevel.Published) { result = this.ConvertToEntity(item); } else if (item.Versions != null && item.Versions.Count > 0) { foreach (SPListItemVersion itemVersion in item.Versions) { if (itemVersion.Level == SPFileLevel.Published) { result = this.ConvertToEntity(itemVersion); break; } } } return result; }
总结
sharepoint 对list的操作,主要有增加、删除和修改list里面的item数据,要注意的是这里打开的是当前操作的site。SPContext.Current.Web.Url取的是当前打开页面的值.
作者:spring yang
出处:http://www.cnblogs.com/springyangwc/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。