我必须为SharePoint列表编写事件接收器(SharePoint 2013)。出于记录目的,我在全局声明我的Guid变量(对应于一个项目),然后在事件接收器中需要时为其分配值(项目添加,项目更新等)。
以下是代码示例:
public class ClassName : SPItemEventReceiver
{
Guid prjguid;
public override void ItemAdding(SPItemEventProperties properties)
{
base.ItemAdding(properties);
try
{
prjguid = new Guid(properties.Site.OpenWeb().AllProperties["MSPWAPROJUID"].ToString());
.
.
.
}
catch (Exception ex)
{
// Exception Handling
WriteLog(prjguid + ex.message);
}
}
public void WriteLog(string message)
{
// Logging
}
}
此代码抛出异常: 对象引用未设置为对象的实例。
我出错的任何可能的解释?
答案 0 :(得分:1)
由于您没有提到抛出此异常的位置,因此存在此异常的几个可能原因:
可能的原因1:
如果properties.Site.OpenWeb().AllProperties["MSPWAPROJUID"].ToString()
内发生异常
调用 prjguid 变量将不会被分配。
然后在你的catch WriteLog方法中打印出这个* prjguid *变量。
这是你的变量可以为null的地方。
在您的捕获中,您可以尝试将代码更改为
catch (Exception ex)
{
// Exception Handling
if(prjguid != null)
{
WriteLog(prjguid + ex.message);
}else
{
WriteLog(ex.message);
}
}
可能的原因2:
properties.Site.OpenWeb()返回null
可能的原因3:
properties.Site.OpenWeb()。AllProperties [" MSPWAPROJUID"]返回null
对于案例2和案例3,您必须将这些调用分开检查两个部分的空值。