2009-06-26 12 views
7

वर्कफ़्लो के अंदर मैं संभाल और त्रुटि करना चाहता हूं जैसे कि उपयोगकर्ता नाम देखने में सक्षम न हो जिसे मैं कार्य सौंपा चाहता हूं। तो उपयोगकर्ता नाम exsist नहीं है, मैं इस के ईमेल द्वारा एक व्यवस्थापक को सूचित करने जा रहा हूँ, इसे वर्कफ़्लो इतिहास में लॉग इन करें और फिर वर्कफ़्लो को समाप्त करें।प्रोग्रामेटिक रूप से एक SharePoint वर्कफ़्लो को रद्द करें

प्रश्न यह है कि वर्कफ़्लो के अंदर से वर्कफ़्लो को कैसे समाप्त किया जाए, जैसे कि मैं SharePoint वेबपृष्ठ पर 'समाप्त कार्यप्रवाह' बटन पर क्लिक कर रहा था।

[अद्यतन] मैंने SPWorkflowManager.CancelWorkflow() को आजमाया है जो वास्तव में वर्कफ़्लो को रद्द करता है लेकिन तुरंत नहीं। क्या होता है कोड को रद्द करने के लिए कोड होता है लेकिन फिर मेरा वर्कफ़्लो अगले कार्य को बनाने के लिए जारी रहता है और फिर जब यह कार्य करता है तो अगले कार्य को टास्क चेंज गतिविधि पर दबाया जाता है। केवल एक बार सो जाने के बाद वर्कफ़्लो समाप्त हो जाता है, न कि जब CancelWorkflow कहा जाता है।

यह स्पष्ट समस्या का कारण बनता है कि मैं अगले कार्य को नहीं बनाना चाहता हूं। मैं CancelWorkflow को कॉल कर रहा हूं क्योंकि मैं इसे वहां और वहां रद्द करना चाहता हूं।

+0

क्या आपको कभी इस प्रश्न का उत्तर मिला? –

+0

अफरीद नहीं। आप मध्य वर्कफ़्लो को रद्द करने के लिए इसे ध्वजांकित कर सकते हैं लेकिन फिर वहां और वहां नहीं रोक सकते हैं। –

उत्तर

9

काफी इस MSDN थ्रेड पर कुछ सुझाव हैं:

Terminating a SharePoint Workflow Programatically

यहाँ एक ब्लॉग पोस्ट है कि succintly ठीक उसी में जानकारी शामिल है: Cancelling a SharePoint Workflow

अन्त में, और सबसे विशेष रूप से , आपको स्थिर विधि का उपयोग करने की आवश्यकता है: SPWorkflowManager.CancelWorkflow(SPWorkflow workflowInstanceToBeCancelled)

संपादित करें

रद्द करें वर्कफ़्लो एक स्थिर वर्ग है, इसलिए मैंने कॉल में संशोधन किया है।

+0

मैंने कोशिश की है लेकिन इसने मेरी समस्या हल नहीं की है। मैंने इसे प्रतिबिंबित करने के लिए मुख्य पोस्ट को अपडेट किया है। –

+0

यदि कोई और SPWorkflowManager.CancelWorkflow() की कोशिश करता है तो आप इसे पहली बार याद कर सकते हैं। विधि स्थैतिक है इसलिए आप इसे कक्षा में ही कॉल करना चाहते हैं, न कि वर्कफ़्लो प्रबंधक ऑब्जेक्ट जिसे मैंने एसपीएससाइट से प्राप्त किया है जैसा मैंने कोशिश की थी। –

+2

लेकिन जब आप इसे सही तरीके से कॉल करते हैं, तो यह सही तरीके से काम करता है, है ना? यही है, जब आप इसे कक्षा में स्वयं को SPWorkflowManager कहते हैं।CancelWorkflow (SPWorkflow वर्कफ़्लो इंस्टेंस); तो यह वही करता है जो इसे करना है। – DevinB

0

मुझे यकीन नहीं है कि यह सबसे अच्छा तरीका है, लेकिन मैं सिर्फ त्रुटि पकड़ता हूं, इसे लॉग करता हूं, और फिर इसे फिर से फेंक देता हूं। इसके परिणामस्वरूप सूची में "त्रुटि हुई" स्थिति होती है और तुरंत वर्कफ़्लो बंद हो जाती है।

protected override ActivityExecutionStatus Execute(ActivityExecutionContext provider) 
{ 
    try 
    { 
     // do work 
     // ... 
    } 
    catch (Exception e) 
    { 
     // log the error to the history list 
     // ... 
     throw; 
    } 

    return ActivityExecutionStatus.Closed; 
} 
0

यह सुंदर पुराने सवाल है, लेकिन खुद से कार्यप्रवाह रद्द करने का अधिकार दूर कोड के इस टुकड़े का उपयोग कर आसान है: इस उदाहरण में

SPWorkflowManager.CancelWorkflow(workflowProperties.Workflow); 
throw new Exception(); 

workflowProperties

public SPWorkflowActivationProperties workflowProperties = 
      new SPWorkflowActivationProperties(); 

CancelWorkflow विधि है वर्कफ़्लो को "रद्द करने" के रूप में ध्वजांकित करेगा, लेकिन वर्कफ़्लो में विराम (जैसे ऑनटास्चेंज ईवेंट की प्रतीक्षा करने) या अपवाद तक इसे रोक नहीं पाएगा। तो फेंक नया अपवाद() का अगला बयान वर्कफ़्लो को रोक देगा और इसकी स्थिति "रद्द" की स्थिति निर्धारित करेगा।

संबंधित मुद्दे