设为首页 收藏本站
查看: 649|回复: 0

[经验分享] Sharepoint 2007 Sdk常用基础操作

[复制链接]

尚未签到

发表于 2015-9-28 13:47:24 | 显示全部楼层 |阅读模式
  SPSite的使用
SPSite作为网站集对应的对象模型,其主要的用处是获取某个特定的网站,它最常用的几个功能如下:
„        构造函数
SPSite的构造函数有两种,分别以Site的url和Guid作为参数。
在SharePoint对象模型中,大部分对象都拥有一个Guid作为它唯一的标识符,通过这个Guid可以获取该对象的实例,例如Site(SPSite)、Web(SPWeb)、列表(SPList)、视图(SPView)以及SPS中的区域(Area)、门户列表(AreaListing)等。但也有一些是采用整型作为标识符的,例如列表项(SPListItem)、角色(SPRole)和用户(SPUser)等。
„        AllWebs属性
该属性是一个SPWebCollection类型的变量,通过这个属性,便可以获取到该网站集中的所有网站,包括一个顶级网站和它下面的所有子网站。然后通过以下三种形式之一,便可以得到某个特定的SPWeb的对象:
·      webs[int index]:根据在该集合中的下标获取一个Web;
·      webs[string url]:根据Web的相对url(相对于包含该网站的Site)获取Web;
·      webs[Guid guid]:根据唯一标识该Web的guid获取。
在WSS对象模型中,集合(Collection)是一个比较重要的概念,它实际上是一种对象的存储方式(即.NET框架中集合的概念)。一般来说SPxxxCollection便是SPxxx这个类所对应的集合类,例如SPWebCollection、SPListCollection和SPFileCollection等。但是应该注意到的是,SPSiteCollection并不是包含在Microsoft.SharePoint命名空间中的类,而是在Microsoft.SharePoint.Administration这一命名空间中的,这也说明了Site的主要意义在于网站本身的管理,而非网站内容的管理。
„        RootWeb属性
该属性是一个SPWeb类型的变量,它所对应的对象是该网站集中的顶级网站,通过它可以逐步获得该网站级中的层级结构。(关于顶级网站和子网站的概念,请参考本书中“2.1.2Windows SharePoint 站点架构简介”部分。)
„        OpenWeb函数
该函数返回一个SPWeb类型的变量,通过该函数可以获得该网站集中一个特定的网站。它有以下三种使用形式:
·      OpenWeb():在命令行模式中,该方法返回网站级中的顶级网站对象;但是在网络环境中使用该方法会有不同的效果,详见第11章11.3小节“WebPart编程中的对象模型”;
·      OpenWeb(Guid guid):返回该guid所对应的网站对象;
·      OpenWeb(string url):返回该url所对应的网站对象,注意该url为相对地址(相对于服务器根路径或者网站集根路径)。
    SPSite的基本使用。
在这个示例中,展示了SPSite的基本用法,包括上面所提到的几个重要功能:
using System;
using Microsoft.SharePoint;

namespace WSSModelObject
{
    class Example1_1
    {
        [STAThread]
        static void Main(string[] args)
        {
            // 使用构造函数创建网站集对象
            SPSite site = new SPSite("http://localhost");
            // 获取根网站信息
            Console.WriteLine("Root:" + site.RootWeb);
            // 遍历网站集中的所有网站
            Console.WriteLine("All Webs in site:");
            foreach(SPWeb web in site.AllWebs)
            {
                Console.WriteLine(web);
            }
            // 打开某个特定的网站
            try
            {
                SPWeb web = site.OpenWeb("subweb1");
                Console.WriteLine(web);
            }
            catch(Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
    }
}
在编写程序的过程中,合理地使用try-catch语句是一种良好的编程习惯。SharePoint是一套相对庞大的对象模型体系,在编写程序的过程中,难免会出现预料之外的问题,因此应该尽可能对所有可能出错的语句进行try-catch,如果有必要,捕获每种特定的异常,并提供更加友好的出错信息,使得程序更加人性化。在本书中,为了节省篇幅,除非特殊的需要和说明,在后面的示例程序中一般不进行try-catch处理,请读者注意。
编写SharePoint的程序需要在引用中添加Microsoft.SharePoint.dll,如果是在安装了WSS的机器上,在VS.NET中添加引用界面选择Windows SharePoint Services即可,也可以将dll复制到其他的机器上再引用(但是仍然需要在装有WSS的机器上才能运行),该dll的默认安装路径为:C:\Program Files\Common Files\Microsoft Shared\web server extensions\60\ISAPI。在本书后续章节中除非特殊情况,不再使用完整的代码,而使用代码片段作为示例。Gmail中国ZR]'P?$P*UG ZS4m
Gmail中国h _3nK }'[['P

SPWeb的使用 在一般的应用场景下,SPWeb是使用最多的一个对象模型,因为几乎所有的WSS的内容都是依附于SPWeb对象的,在编程中也是使用SPWeb来获取其他的对象模型。而获取SPWeb对象的方法在本章9.2.2小节“SPSite的使用”中已经有所提及,就不在这里重复了。
大多数和WSS相关的内容都是通过使用SPWeb的一些成员变量来获取的,这些成员变量主要有:
·      AllUsers网站内的所有成员,以及通过域组(domain group)来浏览网站的用户;
·      Files:网站下的所有文件;
·      Folders:网站下的所有目录;
·      Groups:所有跨网站用户组;
·      Lists:网站下的所有列表;
·      ListTemplates:网站下的所有列表模板;
·      Permissions:网站下的权限;
·      Roles:网站下的所有角色;
·      Users:属于该网站的所有用户;
·      Webs:该网站的所有子网站。
通过使用这些成员变量,就可以获取到相应内容的对象集合(Collection),进而获取需要的内容。
此外,SPWeb的某些成员变量对应于该网站的一些属性,例如:
·      AllowAnonymousAccess:网站是否允许匿名访问(只读);
·      Author:网站的创建者(只读);
·      Created:网站的创建时间(只读);
·      CurrentUser:当前的用户(只读);
·      ID:唯一标识该网站的Guid(只读);
·      IsRootWeb:该网站是否为顶级网站(只读);
·      ParentWeb:该网站的父网站(只读);
·      Site:该网站所属的网站集(只读);
·      Title:该网站的标题;
·      Url:该网站的url(绝对路径)(只读);
·      WebTemplate:该网站的模板(只读)。
SPWeb对象还提供了一些方法,例如:
·      GetFile:通过url获取一个文件的对象(SPFile);
·      GetFolder:通过url获取一个目录的对象(SPFolder);
·      GetListOfType:获取特定类型的列表的集合;
·      GetSubwebsForCurrentUser:获取该网站的子网站(可以指定模板);
·      GetViewFromUrl:通过url获取一个列表的视图(SPView);
·      SaveAsTemplate:将网站保存为模板;
·      SearchDocuments:搜索网站的文档库(需要开启全文检索功能);
·      SearchListItems:搜索列表条目;
·      Update:使网站属性的修改生效。
在SharePoint的对象模型中,一些比较重要的对象都会拥有Update方法(例如SPWeb、SPList、SPField和SPListItem),在修改这些对象的属性时,只有在调用Update方法之后,这些修改才会真正生效。仅限普通属性,不包括集合类的属性,比如SPWeb.Lists中添加或删除一个列表,不需要调用SPWeb.Update方法。这一点需要特别引起注意 。
得到一个网站集中的所有网站,并输出它们的标题、url、父网站及子网站。
SPSite site = new SPSite("http://localhost");
foreach(SPWeb web in site.AllWebs)
{
    Console.WriteLine("Title: " + web.Title);
    Console.WriteLine("Url: " + url);
    Console.WriteLine("ParentWeb: " + web.ParentWeb);
    Console.Write("SubWebs: ");
    foreach(SPWeb subweb in web.Webs)
        Console.Write(subweb.ToString() + " ");
    Console.WriteLine();
}
一个小技巧:在.NET对象模型中,每个类都会有ToString函数(继承自Object类),一般来说每个类也都会对这个方法进行重写。SPWeb的ToString方法一般情况下就是返回了SPWeb.Title这个属性。在大多数字符串操作过程中,一个对象的ToString方法是可以被隐式调用的(例如示例9-1中就使用了这个特性),在不知道该对象是否为空(null)的时候,如果显式调用ToString方法会造成一个异常(NullReferenceException),但是在隐式调用的时候便不会产生这个异常,如果仅是作为输出的需要,隐式的调用要比显式的调用更加方便。
在示例中,输出每个网站的父网站,但是对于顶级网站来说,其父网站为空,如果显示调用的话,便会出现异常,采用隐式调用就可以避开这个问题,只显示一个空的字符串。
示例使用了三种输出网站标题的方法:SPWeb.Title属性,隐式调用SPWeb.ToString方法,显式调用SPWeb.ToString方法。 stsadm.exe的一些不同用法:


  • addpath
  • addtemplate
  • adduser
  • addwppack
  • backup
  • binddrservice
  • createadminvs
  • createsite
  • createsiteinnewdb
  • createweb
  • deleteadminvs
  • deleteconfigdb
  • deletepath
  • deletesite
  • deletetemplate


  • deleteuser
  • deleteweb
  • deletewppack
  • disablessc
  • disablestsisapis
  • email
  • enablessc
  • enablestsisapis
  • enumroles
  • enumsites
  • enumsubwebs
  • enumtemplates
  • enumusers
  • enumwppacks
  • extendvs


  • extendvsinwebfarm
  • getadminport
  • getproperty
  • removedrservice
  • renameweb
  • restore
  • setadminport
  • setconfigdb
  • setproperty
  • siteowner
  • unextendvs
  • uninstall
  • upgrade
  • userrole

============================================
DSC0000.gif using Microsoft.SharePoint;

SPWeb site = SPControl.GetContextWeb(Context);
SPListItemCollection items = site.Lists["ListName"].Items;

SPListItem item = items.Add();

item["Field_1"] = OneValue;

item["Field_2"] = TwoValue;

item.Update();


删除sharepoint list数据
=============================================
using Microsoft.SharePoint;

SPWeb site = SPControl.GetContextWeb(Context);

SPListItemCollection items = site.Lists["ListName"].Items;

items[0].Delete();


上传文件到sharepoint
=============================================
using System.IO;

using Microsoft.SharePoint;

if( htmlInputFile1.PostedFile != null )
DSC0001.gif DSC0002.gif DSC0003.gif {
DSC0004.gif           SPWeb site = new SPSite(destinationURL).OpenWeb();
          Stream stream = htmlInputFile1.PostedFile.InputStream;

          byte[] buffer = new bytes[stream.Length];

          stream.Read(buffer, 0, (int) stream.Length);

          stream.Close();

          site.Files.Add(destinationURL, buffer);
DSC0005.gif }

查询记录及更新数据
===============================================
using Microsoft.SharePoint;

SPWeb web = new SPSite("http://nick").OpenWeb("test");  //Open website

web.AllowUnsafeUpdates = true;

SPList list = web.Lists["ListName"];

SPQuery query = new SPQuery();

query.Query = "<Where>"+
          "<And><And>"+
          "<Eq><FieldRef Name=\"Filed_1\"/><Value Type=\"Text\">Test</Value></Eq>" +
          "<Eq><FieldRef Name=\"Filed_2\"/><Value Type=\"Text\">" + (string)OneValue + "</Value></Eq>" +
          "</And>"+
          "<Eq><FieldRef Name=\"Filed_3\"/><Value Type=\"Text\">" + (string)TwoValue + "</Value></Eq>" +
          "</And>"+
          "</Where>";

query.RowLimit = 10;

//查询
SPListItemCollection items = list.GetItems(query);
try
{
  if (Items.Count != 0)
DSC0006.gif DSC0007.gif   {
     //更新sharepoint list 数据
     foreach (SPListItem list in listItems)
     {
         list["Filed_1"] = TextBox1.text.ToString();
         list["Filed_2"] = TextBox2.text.ToString();
         list["Filed_3"] = TextBox3.text.ToString();

         listItem.Update();
DSC0008.gif      }                       
  }
  else
  {   //将数据记录添加进sharepoint
      SPListItem addlist = List.Items.Add();

      addlist["Filed_1"] = TextBox1.Text.ToString();
      addlist["Filed_2"] = TextBox2.Text.ToString();
      addlist["Filed_3"] = TextBox3.Text.ToString();

      addlist.Update();
  }
}
catch
{

}

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-120061-1-1.html 上篇帖子: 【半原创】SharePoint CAML 查询生成器[SharePoint 2010 CAML Query Builder] 下篇帖子: project 应用服务在sharepoint server 管理中心无法启动服务!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表