2013-02-13 21 views
6

में गतिविधि पर घटक कैसे प्राप्त करें मुझे ईवेंट सिस्टम पर किसी गतिविधि से जुड़े घटक को प्राप्त करने की आवश्यकता है।ट्रिडियन वर्कफ़्लो - ईवेंट हैंडलर

मैं का उपयोग कर घटक आईडी प्राप्त करने की कोशिश:

public void OnActivityInstanceFinishPost(ActivityInstance activityInstance, string finishMessage, string nextActivity, string dynamicAssignee) 
    { 

     if (activityInstance.ProcessInstance.ProcessDefinition.Title.Equals("Component Process IESE")) 
     { 
      if (activityInstance.ActivityDefinition.Title.Equals("Create or Edit Component")) 
      { 
       WFE workflow = tdse.GetWFE(); 
       try 
       { 
        Component comp = (Component)activityInstance.ProcessInstance.Item; 

        XMLReadFilter filter = new XMLReadFilter(); 
        String processHistoryId = activityInstance.ProcessInstance.ID.Replace("131076", "131080"); 

        ProcessHistory hist = (ProcessHistory)tdse.GetObject(activityInstance.ProcessInstance.ID, EnumOpenMode.OpenModeView, Constants.URINULL, filter); 

       } 
       catch (Exception e) 
       { } 

      } 
     } 
    } 

हम विभिन्न विकल्पों का प्रयास करें:

Component comp = (Component)activityInstance.ProcessInstance.Item; 

लेकिन इस समाधान एक अशक्त देता है।

तो मैं अगले समाधान इंटरनेट में पाया:

XMLReadFilter filter = new XMLReadFilter(); 
String processHistoryId = activityInstance.ProcessInstance.ID.Replace("131076", "131080"); 

ProcessHistory hist = (ProcessHistory)tdse.GetObject(activityInstance.ProcessInstance.ID, EnumOpenMode.OpenModeView, Constants.URINULL, filter); 
Component comp = hist.Item as Component; 

लेकिन ProcessHistory वस्तु रिक्त है।

मैं गतिविधि से जुड़े घटक को कैसे निर्धारित कर सकता हूं?

धन्यवाद।

+0

इस कौन सा टीसीएम संस्करण है? –

+0

ट्रिडियन 200 एसपी 1 – Guskermitt

उत्तर

5

Guskermitt द्वारा आवश्यक कार्यक्षमता समीक्षा करने के बाद, मैं उसे वह करने की जरूरत है कि क्या करना है एक neater तरीका दिखाया है। संक्षेप में, इस मामले में इवेंट सिस्टम की आवश्यकता नहीं है।

उसका लक्ष्य के बाद एक घटक अनुमोदित किया गया है एक ईमेल भेजने के लिए है, दृष्टिकोण निम्नलिखित होगा:

  1. एक नया स्वचालित गतिविधि कार्यप्रवाह में जोड़े।
  2. एक नया .NET असेंबली बनाएं, इस मामले में एक सी # वर्ग जो वह करने की ज़रूरत है उसे करने के लिए।
  3. जीएसी में असेंबली पंजीकृत करें।
  4. .NET असेंबली का उपयोग करने के लिए वर्कफ़्लो में नई स्वचालित गतिविधि में तर्क जोड़ें।

2 #

[ProgId("WfHelper")] 
[ComVisible(true)] 
public class Helper 
{  
public void SendMail(string workItemId) 
{ 
var session = new Session(); 
. 
. 
. 

4 #

dim helper 
set helper = CreateObject("WfHelper") 
call helper.SendMail(CurrentWorkItem.ID) 
set helper = nothing 
FinishActivity “Email has been sent" 
3

ActivityInstance में WorkItems संपत्ति है (Activity से विरासत में मिली) जिसमें आपके Component का संदर्भ शामिल है।

+0

धन्यवाद, आर्जेन। हम गतिविधि से जुड़े कामों को नहीं ढूंढ सकते हैं। हमने ट्रिडियन 200 एसपी 1 स्थापित किया है। क्या आप एक उदाहरण पारित कर सकते हैं? – Guskermitt

2

OnActivityInstanceFinishPost का अर्थ है कि आपकी गतिविधि समाप्त हो गई है। इसलिए इसके साथ जुड़े कोई और काम आइटम नहीं है। हालांकि, आपको प्रक्रिया उदाहरण और उसके साथ जुड़े कार्य आइटम मिल रहे हैं। यदि आप वहां शून्य हो जाते हैं, तो यह सुझाव देता है कि आपकी वर्कफ़्लो प्रक्रिया पूरी हो गई है और घटक वर्कफ़्लो से बाहर हो गया है। अपने कोड को देखने से, यह संभावना है कि आपकी प्रक्रिया इंस्टेंस पूरी हो गई है (यह शून्य नहीं होगी, लेकिन इसमें कोई आइटम नहीं होगा)।

मुझे संदेह है कि आपने इस पोस्ट को http://www.tridiondeveloper.com/autopublishing-on-workflow-finish इतिहास में देखने का सुझाव दिया है। क्या आपने सीएम जीयूआई के माध्यम से इतिहास देखा है, क्या इतिहास वस्तु है? यदि ऐसा नहीं है, तो यही कारण है कि आप शून्य हो जाते हैं। वर्कफ़्लो प्रक्रिया को पूरा होने पर इतिहास में ले जाया जाता है। तो इतिहास को देखने से पहले जांचें कि आप वास्तव में अंतिम वर्कफ़्लो गतिविधि पर हैं।

अपना कोड देखकर, त्रुटि यह प्रतीत होती है कि आप गतिविधिInstance.ProcessInstance.ID का उपयोग कर इतिहास ऑब्जेक्ट प्राप्त करने का प्रयास कर रहे हैं। GetObject() को एक आइटम वापस करना चाहिए, लेकिन प्रोसेस हिस्ट्री में आपकी कास्ट तोड़नी चाहिए और फिर आप चुपचाप अपवाद खाएं। तुम्हें पता है, नहीं ProcessInstance आईडी में इतिहास आईडी पारित करने के लिए इस प्रकार की जरूरत है:

ProcessHistory hist = (ProcessHistory)tdse.GetObject(processHistoryId, EnumOpenMode.OpenModeView, Constants.URINULL, filter); 
+0

हैलो, मैंने आपके परिवर्तन के साथ अपने कोड की समीक्षा की लेकिन यह काम नहीं किया। – Guskermitt

+0

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

+0

मैंने सीएम जीयूआई में अपनी "इतिहास सूची" की समीक्षा की और सभी कार्यों में टीसीएम 131076 के साथ समाप्त हुआ। मैं 131080 में टीसीएम के साथ की गतिविधियों को नहीं देख सकता। गतिविधि जिसे मैं ऑनएक्टिविटी इंस्टेंसफिनिशपोस्ट पर संसाधित करता हूं वह पहली गतिविधि है जिसे मैं समाप्त करता हूं। धन्यवाद। – Guskermitt

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