讨论:为什么Web不行?Console可以?---为什么Document Library不行?Generic List可以?(MOSS2007)

Update 2006-9-8 这个事Beta2的一个Bug,在B2TR中修复了,B2TR的下载马上会公布
-----------------------------------------------------------------------
最近两天,被MOSS2007下代码添加文档库折磨得体无完肤。你说,在代码里面你表面上看,他的确没有啥问题,一运行就有问题,这个郁闷?不知道其他的朋友有没有碰到过呢?MOSS2007下,用SPList.Add添加文档库会出现奇怪的问题的。下面详细说说:

一、为什么Web不行?Console可以?
1)Web下
在Visual Studio中建立一个Web工程,界面如下:
 
代码如下:

public partial class _Default : System.Web.UI.Page 
{
    
protected void Page_Load(object sender, EventArgs e)
{
 
//解决Security Validation问题
        SPGlobalAdmin globalAdmin = new SPGlobalAdmin();
        Context.Items[SPGlobalAdmin.RequestFromAdminPort] 
= true;
        Page.RegisterHiddenField(
"__REQUESTDIGEST", globalAdmin.AdminFormDigest); 

    }

    
protected void Button1_Click(object sender, EventArgs e)
    
{
        SPSite mysite 
= new SPSite("http://oss2007");
  
//允许不安全的更新
        mysite.AllowUnsafeUpdates = true;
        mysite.RootWeb.AllowUnsafeUpdates 
= true;
  
//添加Demo文档库
        mysite.RootWeb.Lists.Add("Demo""Demo", SPListTemplateType.DocumentLibrary);
        
this.Label1.Text = mysite.RootWeb.Lists["Demo"].ID.ToString();
    }

}

运行出现问题如下:
 
但是,虽然出错,Demo文档库其实已经创建出来:
 
2)Console下

SPSite mysite = new SPSite("http://oss2007");
            mysite.AllowUnsafeUpdates 
= true;
            mysite.RootWeb.AllowUnsafeUpdates 
= true;
            mysite.RootWeb.Lists.Add(
"Demo""Demo", SPListTemplateType.DocumentLibrary);
Console.WriteLine(
"The Created Document Library's Guid :"+mysite.RootWeb.Lists["Demo"].ID.ToString());

代码功能和Web下一样,运行成功!
 
为什么Web不行?Console可以?

二、为什么Document Library不行?Custom List可以?
改变以上Web工程中的一句代码,改成添加自定义列表

mysite.RootWeb.Lists.Add("Demo""Demo", SPListTemplateType.GenericList);

运行成功:
 
在SharePoint站点中出现创建的列表
 
为什么Document Library不行?Generic List就可以?

三、讨论
1)这个是不是WSS V3 Beta的一个Bug?我也不知道
2)Web下和Console下都用的应该是管理员权限,Web用了localhost访问,所以应该不是权限的问题;
2)从出错的地方看,可能是Feature或者WorkFlow的问题,但是Document Library和Generic List是同属于一个基类,问题的可能就是处在Generic List和Document Library不同的地方,所以这个问题的解决可以从Document Library 和Generic List两种ListTemplate的不同上来找。

问题的出处会继续寻找,得到了答案会更新post。

大家有什么答案的话请不吝赐教!

现在阶段,利用代码添加文档库的办法,我是这么干:

try
{
mysite.RootWeb.Lists.Add(
"Demo""Demo", SPListTemplateType.DocumentLibrary);
}
catch
{}

加上Try-Catch,因为其实文档库已经存在了。

posted on 2006-08-24 12:18  Ipark  阅读(641)  评论(5编辑  收藏  举报

导航

Creative Commons License
本作品采用知识共享署名 2.5 China许可协议进行许可。