最近两三天被SharePoint的Web Services搞得晕头转向,网上查了一大堆例子,就没一个做得成的。没有一个可供下载的完整的源代码,从代码行间又觉察不出哪里有问题。一开始是弄不明白WSlists是个什么类,后来又碰到GetListCollection、GetListItems获取不到所需内容……周围无人可问,自己整个瘫掉,最终还是在国外朋友的一言半语中找到了问题的根源(中文的怎么就搜不到?),在这里和各位共享一下~
• 首先,要调用SharePoint的Web Services,必须为工程添加 Web 引用(如图)。
注意这里填写的Web 引用名,就是我之前一直找不到的“WSlists类”——其实是通过添加了引用生成的,也可以起别的名字,比如也有的人喜欢起spwsLists这种。
• 关于GetListCollection() ,默认情况下,它会返回根站点下的所有list(注意,不管你在添加 Web 引用时指定的是根站点URL还是 根站点\子站点 URL,都是如此)。在上图中,填写的URL,指定的是testsite子站点,但事实上在调用GetListCollection()时还是返回了根站点的list。如果要筛选返回指定(子)站点的list,必须修改.Url属性值(即wsLists.Url = "http://www.gl.com:8800/testsite/_vti_bin/lists.asmx"这样,wsLists是一个WSLists对象)。
[* 注意:/_Vti_bin/... 前面填写的是站点(可以含子站点)Url,而不能是具体到列表的Url,“http://www.gl.com:8800/testsite/mylist/_vti_bin/lists.asmx” 则是错误的]
• 同样的,只有在设置了.Url属性值后,GetListItems()才能正确获取列表项,而且GetListItems方法的第一个参数,要求指定listName,建议输入列表的ID(MSDN例子也这样写)。
• 使用Web Service进行列表操作时,涉及到书写CAML语句的, 指定某个列表栏目时,应使用<FieldRef Name="栏目内部名称">,同时Name不能为中文的(因为内部名称不会有中文的)。