zoukankan      html  css  js  c++  java
  • WSS 3.0 对象模型

    WSS 3.0 对象模型

    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>";
    则系统会报告一个错误,如下:
    一个或多个域类型未正确安装。请转到类表列表设置页删除这些域。

  • 相关阅读:
    设计模式学习总结
    算法时间复杂度和空间复杂度表示
    SQLite简单使用
    接口,组合和继承的想法
    二叉树的学习
    Oracle 常用命令大汇总
    Oracle 最常用功能函数经典汇总
    oracle 常用command
    历史最牛演讲:Oracle总裁Yale演讲全文中英文对照
    深入abstract class和interface
  • 原文地址:https://www.cnblogs.com/chenjq0717/p/1730856.html
Copyright © 2011-2022 走看看