好好学习,天天向上

分享技术研究的心得

博客园 首页 新随笔 联系 订阅 管理

在开发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却是相同的。
看起来问题还不是这么简单。

posted on 2005-02-18 15:25  喜欢逛街  阅读(1589)  评论(3编辑  收藏  举报