讨论:为什么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工程,界面如下:
代码如下:
{
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下
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工程中的一句代码,改成添加自定义列表
运行成功:
在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。
大家有什么答案的话请不吝赐教!
现在阶段,利用代码添加文档库的办法,我是这么干:
{
mysite.RootWeb.Lists.Add("Demo", "Demo", SPListTemplateType.DocumentLibrary);
}
catch
{}
加上Try-Catch,因为其实文档库已经存在了。