Mat*_*t S 5 c# sharepoint timer timer-jobs sharepoint-2010
我创建了一个计时器作业(SPJobDefintion),它已正确注册并在sharepoint 2010环境中工作.
在Timer Job 的Execute方法中,我能够使用以下代码,该代码设置特定SPListItem的字段.这很好用.
using (SPSite mySite = new SPSite(mySiteId))
{
using (SPWeb myWeb = mySite.OpenWeb(myWebId)))
{
SPList myList= myWeb.Lists[myListId];
SPListItem myItem = myList.GetItemById(myItemId);
myItem["myField"] = myValue;
myItem.Update();
}
}
Run Code Online (Sandbox Code Playgroud)
出于设计原因,我想将该代码放在单独类的单独方法中.所以我创建了以下类:
namespace myNamespace
{
class myClass
{
[...some stuff...]
public myClass()
{
[...more stuff...]
}
public void setField()
{
using (SPSite mySite = new SPSite(mySiteId))
{
using (SPWeb myWeb = mySite.OpenWeb(myWebId)))
{
SPList myList = myWeb.Lists[myListId];
SPListItem myItem = myList.GetItemById(myItemId);
myItem["myField"] = myValue;
myItem.Update();
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
其实我希望的是,在调用这个下面的代码执行定时作业的方法应该在同样的结果.
MyClass myClassInstance = new myClass();
myClassInstance.setField();
Run Code Online (Sandbox Code Playgroud)
不幸的是,我会得到以下异常:
Microsoft.SharePoint.SPException was unhandled by user code
Message=""
Source=Microsoft.SharePoint
ErrorCode=-2147418113
NativeErrorMessage=FAILED hr detected (hr = 0x8000ffff)
NativeStackTrace=""
StackTrace:
bei Microsoft.SharePoint.SPGlobal.HandleComException(COMException comEx)
bei Microsoft.SharePoint.Library.SPRequest.AddOrUpdateItem(String bstrUrl, [...])
bei Microsoft.SharePoint.SPListItem.AddOrUpdateItem(Boolean bAdd, Boolean bSystem, [...])
bei Microsoft.SharePoint.SPListItem.UpdateInternal(Boolean bSystem, [...])
bei Microsoft.SharePoint.SPListItem.Update()
bei myNamespace.myClass.<>c__DisplayClass1.<setField>b__0()
InnerException: System.Runtime.InteropServices.COMException
Message=<nativehr>0x8000ffff</nativehr><nativestack></nativestack>
Source=""
ErrorCode=-2147418113
StackTrace:
bei Microsoft.SharePoint.Library.SPRequestInternalClass.AddOrUpdateItem(String bstrUrl, [...])
bei Microsoft.SharePoint.Library.SPRequest.AddOrUpdateItem(String bstrUrl, [...])
InnerException:
Run Code Online (Sandbox Code Playgroud)
当我把setField()直接方法的类,其中执行方法,该方法将正常工作.如果我将此方法声明为static,则会发生相同的Exception.
我也试着运行SPListItem.Update() ,在发生异常时,以高特权(应该不是这个原因,因为代码应在OWSTIMER上下文中运行).我也试着玩的allowUnsafeUpdates()上的SPSite和的SPWeb.两者都没有成功.
在网上我发现这个问题只有一个描述http://codekicker.de/fragen/sharepoint-2010-Sharepoint-2010-TimerJob-wirft-Fehler-timer(德语),遗憾的是没有任何解决方案.
还有什么可能是因为这个星座不起作用?任何的想法?
小智 2
它肯定需要 myWeb.AllowUnsafeUpdates = true; 在更新任何列表项之前。更新后不要忘记将其重置回 false。
我要确保的一件事是确保运行代码的用户拥有更新项目的完全权限。我建议以站点管理员身份登录并尝试从按钮单击事件(而不是计时器作业)或其他一些事件运行代码,以确保这不是用户权限问题。
谢谢
森蒂尔S
| 归档时间: |
|
| 查看次数: |
3577 次 |
| 最近记录: |