您的位置:首页 > 运维架构 > 网站架构

微软的SDK出错啦!另:Sharepoint Webpart在网站的不同位置工作时的一个问题的讨论。

2005-02-18 15:25 585 查看
在开发Sharepoint上的应用系统,写到对portal server上的Area进行操作的时候,Portal Server上面的区域有两种数据,一种和一般的WSS内容一样,是以List的方式保存的,这时候只要有WSS的Object Model就可以操作。但是另一种数据就不一样,要用portal里面的方法来做,一个例子就是区域的列表的内容以及区域本身,结果操作的时候发现一个很气愤的东西,就是SDK里面提到区域的列表是一个AreaListingCollection,说对这个东西的任何写操作,如果不调用Update就无效,SDK里面还列出了Update()方法的一个介绍。但是等我去写代码的时候,居然Listing有Update,Area也有Update,但是ListingCollection就是没有Update。而如果你真的写成Listings.Add(...)的话,果然被SDK说中,无效!这时候你必须要调用Area的Update()方法,才能保证这个ListingCollection的添加是成功的。

然后去写webpart,结果又遇到问题了,在webpart的代码里面,居然不能SQLConnection.Open(),这次我猜是我错,因为以前看到有人出过类似的错,可是如何解决忘记了。。。:(

代码如下,哪个大侠帮忙分析下。签了StrongName,也放到GAC里面了。

   SPWeb web = SPControl.GetContextWeb(Context);

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

   list.Permissions.CheckPermissions(SPRights.AddListItems);

   SqlConnection conn = new SqlConnection("Persist Security Info=true;Integrated Security=SSPI;database=Server_Data;server=server;User ID=user;Password=password;Connect Timeout=30");

   conn.Open();

问题解决了,是这样子的:

上面这段代码是一个webpart的代码,它是一个实现对某个List的特殊操作的webpart,为了方便用户使用,它可以在网站首页上调出来,那么这时,就可以用上面这样的代码,没有任何问题,但是如果把这个webpart拿到一个List的view上面,它就出错了。而如果在第一句后面,加上web = web.Site.RootWeb;就没有问题了。

按照这个问题的现象,是在List下工作和在首页下工作的ContextWeb不相同造成的。

我另外有一个webpart,是对Document Library做操作的,那个就不存在这个问题,我看了一下代码,它是这样的:

   SPWeb site = SPControl.GetContextWeb(Context);

   SPFolder folder = site.GetFolder("Doclib");

而这个代码在首页上和Document Library上工作的时候,却没有任何的问题。也就是说,在这种情况下,这两个不同的ContextWeb取到的Doclib却是相同的。

看起来问题还不是这么简单。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐