我很高兴继承了一个写得很糟糕的 SharePoint 项目。
显然,最初的开发人员非常喜欢可重用代码(30% 的代码在 20 个项目中被重用,而不使用任何库——你猜怎么着?)。
我经常会发现他的代码调用了一些Common.OpenWeb
方法来检索SPWeb
用于操作 SharePoint 内容的对象。大多数这个函数的化身看起来完全一样:
public SPWeb OpenWeb()
{
String strSiteUrl = ConfigurationManager.AppSettings["SiteUrl"].ToString();
SPSite site = null;
SPWeb web = null;
try
{
using (site = new SPSite(strSiteUrl))
{
using (web = site.OpenWeb())
{
return web;
}
}
}
catch (Exception ex)
{
LogEvent("Error occured in OpenWeb : " + ex.Message, EventLogEntryType.Error);
}
return web;
}
现在我真的很担心。
这如何在生产中起作用?这个方法总是返回一个已处理的对象,对吧?
它到底有多不稳定?
更新:
此方法以下列方式使用:
oWeb = objCommon.OpenWeb();
SPList list = oWeb.Lists["List name"];
SPListItem itemToAdd = list.Items.Add();
itemToAdd["Some field"] = "Some value";
oWeb.AllowUnsafeUpdates = true;
itemToAdd.Update();
oWeb.AllowUnsafeUpdates = false;
为简洁起见,我省略了吞咽try-catch
。
此代码将值插入列表!这是一个写操作,我很确定Request
属性正在用于此。那么它是如何工作的呢?