के उदाहरण में SPListItem.Update() का उपयोग करके मैंने टाइमर जॉब (SPJobDefintion) बनाया है जो उचित रूप से पंजीकृत है और शेयरपॉइंट 2010 वातावरण में काम कर रहा है।SharePoint TimerJob: किसी वर्ग/स्थैतिक विधि
टाइमर नौकरी की निष्पादित विधि में मैं निम्नलिखित कोड है, जो एक विशिष्ट 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();
}
}
डिजाइन कारणों मैं एक अलग वर्ग की एक अलग विधि में उस कोड डाल करने के लिए चाहते हैं के लिए
।
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();
}
}
}
}
}
असल में मैं उम्मीद करेंगे कि में यह निम्न कोड बुला निष्पादित टाइमर नौकरी के विधि एक ही परिणाम में समाप्त होना चाहिए: तो मैं निम्नलिखित वर्ग बनाया।
MyClass myClassInstance = new myClass();
myClassInstance.setField();
दुर्भाग्य से मैं निम्न अपवाद मिल जाएगा: मैं setField() विधि सीधे डाल जब वर्ग जहां निष्पादित विधि है में
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:
, विधि ठीक से काम करेंगे । अगर मैं इस विधि को स्थैतिक घोषित करता हूं, तो वही अपवाद होगा।
मैं भी (क्योंकि कोड OWSTIMER संदर्भ में चलाया जाना चाहिए, कारण नहीं होना चाहिए) SPListItem.Update(), जहां अपवाद तब होता है, ऊंचा विशेषाधिकारों के साथ भागने की कोशिश की। मैंने एसपीएससाइट और एसपीवेब पर allowUnsafeUpdates() के साथ खेलने की भी कोशिश की। दोनों सफलता के साथ।
वेब में मैं इस समस्या http://codekicker.de/fragen/sharepoint-2010-Sharepoint-2010-TimerJob-wirft-Fehler-timer (जर्मन में) का केवल एक ही वर्णन नहीं मिला, दुर्भाग्य से किसी भी समाधान के बिना।
और क्या कारण हो सकता है कि इस नक्षत्र काम नहीं करेगा? कोई उपाय?
मैंने कुछ गलत अपने कोड के साथ नहीं देख सकते हैं, और वहाँ एक टाइमर काम का मतलब है कि आप एक अलग वर्ग में इस तरह कोड फोन नहीं कर सकते हैं के बारे में कुछ खास नहीं है। मैं अपने कॉल स्टैक को लेकर चिंतित हूं -। आधार विधि 'myNamespace.myClass <> c__DisplayClass1 है। b__0() 'जब, टूर कोड उदाहरण से, मैं यह सिर्फ होने के लिए' myNamespace.myClass.setField उम्मीद चाहते हैं() '। क्या आपको यहां कुछ और जटिल हो रहा है? –
Rawling
आपका नमूना कोड गायब लाइनें जहां आप साइट/वेब आईडी पास/सेट करते हैं। सुनिश्चित नहीं है कि यह कोई समस्या है या नहीं, लेकिन नमूने प्रदान करने पर विचार करें जो सभी रोचक हिस्सों को दिखाते हैं ... साइड नोट: नमूने में भी पैरामीटर/सदस्यों के लिए "मेरा" उपसर्ग होने में कोई वास्तविक वाल्यू नहीं है। –
कक्षा को 'सार्वजनिक' नहीं होना चाहिए? इसके अलावा आप टाइमर नौकरियां डीबग कर सकते हैं (owstimer.exe से संलग्न करें) और आपका कोड ताकि अपवाद वास्तव में कहां हो? मुझे लगता है: 'myItem.Update(); '? –