1.SPWebApplication包含网站集,是网站集的容器。 获取当前系统下所有Web应用程序的集合: SPWebApplicationCollection webs = SPWebService.ContentService.WebApplications; 2.SPSite和SPWeb (1).SPSite:WebApplication下的网站集。SPSite的RootWeb代表网站集的顶级网站(首要网站)。 (2).SPWeb:代表网站集下的每个站点和子站点。访问站点的内容从SPWeb开始。 (3).关系:网站集SPSite是SPWeb的集合。 (4).获取网站 SPSite site = new SPSite("http://yang:9000"); 使用AllWebs得到知识库子站点kb: SPWeb web = site.AllWebs['kb']; 使用OpenWeb得到知识库子站点kb: SPWeb web = site.OpenWeb("kb"); 注意:OpenWeb方法中的参数是一个相对的地址。 (5).当在SharePoint环境中开发时,可以使用Http当前上下文Context来取得当前URL所对应的站点: 利用SPControl控件的上下文: SPWeb web = SPControl.GetContextWeb(Context); 利用WSS对象的上下文SPContext SPWeb web = SPContext.Current.Web; 顶级网站(首要网站)访问子网站kb下的KB列表: string listname = "KB"; SPWeb web = SPControl.GetContextWeb(Context).Webs["kb"]; SPList treeList = web.Lists[listname]; 子站点访问顶级网站(首要网站)下的tree分类列表: string sourceTreeList = "tree"; SPWeb rootweb = SPControl.GetContextSite(Context).RootWeb; SPList treeList = rootweb.Lists[sourceTreeLis]; 3.列表对象 对象 说明 SPList 列表对象 SPListCollection 列表集合。SPWeb.Lists返回网站所有列表的集合 SPListItem 列表的项 SPListItemCollection 列表项的集合。SPList.Items返回列表的所有列表项 SPViewCollection 视图集合对象 SPViewFieldCollection 视图字段集合 SPView 视图对象 SPDocumentLibrary 特殊的列表-文档库对象 SPField 列表字段 SPFieldCollection 列表字段集合 (1).获取列表Case SPWeb web = SPControl.GetContextWeb(Context); SPList list = web.Lists["Case"]; (2).添加列表 SPWeb web = SPControl.GetContextWeb(Context); SPList list = web.Lists["Case"]; SPListItemCollection lists = list.Items; SPListItem listItem = list.Items.Add(); listItem["标题"] = this.txtTitel.Text; listItem["分类"] = getTypeName(); listItem.Update(); (3).得到列表项 SPWeb web = SPControl.GetContextWeb(Context); SPList list = web.Lists["Case"]; //得到列表项的ID Int ID=1; SPListItem listItem = list.Items.GetItemById(ID); if(listItem["分类"] !=null) { this.Label1.Text = listItem["分类"].ToString(); } (4).列表循环输出 SPSite site = new SPSite("http://yang:9000"); SPWeb spweb = site.OpenWeb(); SPList list = spweb.Lists["Case"]; SPListItemCollection listitems = list.Items; foreach(SPListItem listitem in listitems) { this.textbox1.Text += listitem["标题"].ToString() + Environment.NewLine; } (5).删除列表 SPSite site = new SPSite("http://yang:9000"); SPWeb web = site.OpenWeb(); SPListCollection lists = web.Lists; //删除Case列表 SPList list = lists["case"]; System.Guid listGuid = list.ID; lists.Delete(listGuid); (6).操作视图 SPSite site = new SPSite("http://yang:9000"); SPWeb spweb = site.OpenWeb(); SPList list = spweb.Lists["Case"]; //Case列表下的所有视图 SPViewCollection listitems = list.Views; MessageBox.Show(listitems.Count.ToString()); //列出标题 foreach(SPView oViewSrc in listitems) { this.textbox1.Text += oViewSrc.Title + Environment.NewLine; } //得到单个视图的信息 Guid viewguid = list.Views["我的日常工作"].ID; SPView sv=list.GetView(viewguid); SPListItemCollection collItemsSrc = list.GetItems(sv); SPViewFieldCollection collViewFields = sv.ViewFields; foreach(SPListItem oItemSrc in collItemsSrc) { for(int intIndex=0; intIndex<collViewFields.Count; intIndex++) { this.textbox1.Text += collViewFields[intIndex].ToString() + "::" + oItemSrc[collViewFields[intIndex]].ToString() + Environment.NewLine;; } } (7).列表到DataTable a.使用SPListItemCollection列表项的集合对象的GetDataTable方法 private DataTable GetData() { string sourceTreeList = "tree"; SPWeb rootweb = SPControl.GetContextSite(Context).RootWeb; SPList treeList = rootweb.Lists[sourceTreeList]; SPListItemCollection Items = treeList.Items; return Items.GetDataTable(); } b.自定义实现列表对象转化为DataTable string[] pSourceSPListFields = {"ClassID","ClassName","ParentID"}; private DataTable _sourceDataTable; private DataTable ListToDataTable() { //构造表头 this._sourceDataTable = this.ColumnNameDataTable(); SPWeb web = SPControl.GetContextWeb(Context); SPList treeList = web.Lists[sourceTreeList]; DataTable dt = new DataTable(); SPListItemCollection caseItems = treeList.Items; foreach(SPListItem caseItem in caseItems) { try { DataRow rowNew= _sourceDataTable.NewRow(); for(int intI=0;intI<this.pSourceSPListFields.Length;intI++) { if(caseItem[pSourceSPListFields[intI]] != null) { if(treeList.Fields[this.pSourceSPListFields[intI]].FieldValueType.ToString() == "Microsoft.SharePoint.SPFieldUserValue") { string createUserName = caseItem[this.pSourceSPListFields[intI]].ToString(); int index = createrUserName.Indexof(';'); int createrUserID= Convert.ToInt32(createUserName.Substring(0,index)); SPUser createrUser = web.AllUsers.GetByID(creater.UserID); rowNew[pSourceSPListFields[intI]] = createrUser.Name; } else { Object columnType= _sourceDataTable.Columns[this.pSourceSPListFields[intI]].DataType; rowNew[pSourceSPListFields[intI]] = caseItem[pSourceSPListFields[intI]]; } } } _sourceDataTable.Rows.Add(rowNew); } catch { } return this._sourceDataTable; } } 构造表头 public DataTable ColumnNameDataTable() { SPWeb web = SPControl.GetContextWeb(Context); SPList treeList = web.Lists[sourceTreeList]; DataTable dt = new DataTable(); SPListItemCollection castItems = treeList.Items; for(int intI=0; intI<pSourceSPListFields.Length;intI++) { DataColumn columnNew = new DataColumn(); columnNew.ColumnName = pSourceSPListFields[intI]; dt.Columns.Add(columnNew); } return dt; } 调用过程 private DataTable GetData() { return ListToDataTable(); } 4.操作文档库 文档库具有列表的所有属性,但是作为文档库又具有文件格式的所有属性。列表中每个项目可以使用SPListItem对象来操作。文档库中的项目则可以使用SPFile对象来操作。 SPSite site = new SPSite("http://yang:9000/kb"); SPWeb spweb = site.OpenWeb(); SPFolder myFolder = spweb.GetFolder("kb"); SPFileCollection myFiles = myFolder.Files; FileStream fStream = File.OpenRead(@"c:/aaa.txt"); byte[] contents = new byte[fStream.Length]; fStream.Read(contents,0,(int)fStream.Length); fStream.Close(); string path = site.Url + "/kb/KB/"; string filename= DateTime.Now.ToString().Replace(" ","").Replace(":","")+".txt"; SPFile file = myFile.Add(path+filename,contents); file.Item["知识库标题"] = "测试知识库"; file.Item["分类"] = 4; file.Item.Update(); 使用SPFolder myFolder=spweb.GetFolder("kb")代码段来得到文档库KB的文件夹。 之后使用SPFileCollection myFiles = myFolder。Files来得到文件集合。然后使用myFiles.Add对象来添加一个文本文件,这里可以为任意文件。最后通过file对象的item来赋值并完成更新操作。 当然,还可以用操作列表的方法来操作文档库。通过file对象能够获取文件的版本、大小等信息。 5.操作用户和用户组 用户和用户组的对象模型 对象 说明 SPUSer 用户对象、域用户或者表单验证用户 SPUserCollection 用户对象的集合 SPGroup 用户组 SPGroupCollection 用户组的集合 (1).得到站点下所有的用户 SPSite site = new SPSite("http://yang:9000"); SPWeb web= site.OpenWeb(); foreach(SPUser user in web.SiteUsers) { this.textbox1.Text += user.Name + Environment.NewLine; } (2).得到站点小所有的用户组 SPSite site = new SPSite("http://yang:9000"); SPWeb web= site.OpenWeb(); foreach(SPGroup group in web.Groups) { this.textbox1.Text += group.Name + Environment.NewLine; } 6.查询 通过SPQuery类来完成对列表的查询操作。 SPQuery类的属性说明 属性 说明 ViewFields 查询结果中要显示的字段。这个属性的设置如:<FieldRef Name="Title" /> Query 查询条件包括分组与排序条件 RowLimit 返回结果的行数 其中查询条件的设置需要满足CAML(协作应用程序标记语言)的语法标准。 CAML语言的操作符说明 操作符 说明 Geq >= EQ = Gt > Lt < Neq != Contains 包含 使用CAML查询有一点需要清楚,在CAML语法中使用的字段名并不是创建的字段名,而是MOSS系统内部的名称InternalName,代码如下: SPSite site = new SPSite("http://yang:9000"); SPWeb spweb = site.OpenWeb(); SPList list= spweb.Lists["case"]; SPListItemCollection myItems = list.Items; SPListItem item = myItems[0]; for(int i=0;i<item.Fields.Count;i++) { this.textbox1.Text += item.Fields[i].Title + ":" + itme.Fields[i].InternalName + Environment.NewLine; } 通过运行结果,看到前面的正是MOSS中创建的字段,而冒号之后的则是系统内部处理的名称。如果把一个栏删除,再添加同样的栏,相应的InternalName会发生变化,需要重新获取。 接下来进行CAML的查询,从列表Case的标题中找到包含“计算机”的记录,并且显示5条。 在界面上增加了一个dataGridView表格控件。代码如下: SPSite site = new SPSite("http://yang:9000"); SPWeb spweb = site.OpenWeb(); SPList list = spweb.Lists["case"]; SPQuery query = new SPQuery(); query.ViewFields= "<FieldRef Name='Title'/><FieldRef Name='_x95ee_x9898_x89e3_x51b3_x65'/><FieldRef Name='Created'/>"; query.Query="<Where><Contains><FieldRef Name='Title'/><Value Type='Text'>计算机</Value></Contains></Where>"; query.RowLimit=5; SPListItemCollection myItems = list.GetItems(query); this.dataGridView1.DataSource = myItems.GetDataTable(); 注意这个表格显示了标题、故障情况说明和创建时间。其中_x6545_x969c_x60c5_x51b5_x8b是故障情况说明字段的InternalName。如果把代码中<FieldRef Name='Title'/>改成<FieldRef Name='标题'/>,即: query.Query="<Where><Contains><FieldRef Name='标题'/><Value Type='Text'>计算机</Value></Contains></Where>"; 则系统会报告一个错误,如下: 一个或多个域类型未正确安装。请转到类表列表设置页删除这些域。