2011-09-10 42 views
1

我將自定義活動(用代碼編寫,C#編寫)列表中,其中每個活動都是從NativeActivity派生的,現在我將通過foreach循環將所有這些活動添加到序列中。 現在的問題是,如果我需要從活動中獲得某些價值並將其傳遞給其他活動,應該如何繼續。在工作流程活動之間共享數據

說,activity1將一個字符串屬性值設置爲「某個文件名」(允許一個圖像文件路徑),並基於它旁邊的活動,這樣在ever for循環的幫助下添加到該序列中,它作爲翻轉該圖像的輸入。

用於獲取文件的邏輯是在活動1的Execute方法中執行的,並且與在Activity2的Execute方法中翻轉圖像相同。

在此先感謝

+0

這個問題沒有意義。如果您足夠了解創建從NativeActivity擴展的活動,則應該能夠弄清楚進/出參數,變量甚至工作流擴展的工作方式。 – Will

+0

嘿威爾,它不是關於感覺,我在這裏阻礙,這就是爲什麼問這個問題,用你的話說,它可以是無知的,但對我來說,我可能會失去一些東西。如果你知道一些稱爲明智的答案,讓我知道,可能會對我有用。 你的幫助可以給我的想法添加詞語。 –

+0

然後將activity1的外部參數綁定到工作流的變量,然後將activity2的參數綁定到同一個變量。 – Will

回答

2
 var workflow = new Sequence();   
     Variable<Dictionary<string,object>> variable = new Variable<Dictionary<string,object>> 
     { 
      Name = "SharedData" 
     }; 
     workflow.Variables.Add(variable); 
     foreach (MyCustomActivity activity in mAddedActivities) 
     {     
      workflow.Activities.Add(activity);          
     } 

     WorkflowInvoker invoker = new WorkflowInvoker(workflow); 
     invoker.Invoke(); 

這是我做過什麼對於實際的實現來說,不需要任何公理/超越,變量「共享數據」具有足夠的能力來保存跨活動的數據。

現在,在重寫代碼活動「Execute」方法的每個活動級別,您必須使用此摘錄的代碼來獲取輸入/獲取此工作流變量的值「SharedData」。

 WorkflowDataContext dataContext = context.DataContext; 
     PropertyDescriptorCollection propertyDescriptorCollection = dataContext.GetProperties(); 
     foreach (PropertyDescriptor propertyDesc in propertyDescriptorCollection) 
     { 
      if (propertyDesc.Name == "SharedData") 
      { 
       myData = propertyDesc.GetValue(dataContext) as Dictionary<string, object>; 
       if (myData == null) //this to check if its the initial(1st) activity. 
        myData = new Dictionary<string, object>(); 
       //I'm adding here an additional value into the workflow variable 
       //its having signature same as that of workflow variable 
       //dictionary's key as what it is and value as an object 
       //which user can cast to what actually one wants. 
       myData.Add("islogonrequired", Boolean.TrueString); 


       //here I'm fetching some value, as i entered it in my previous activity. 
       string filePath = myData["filepath"].ToString(); 
       propertyDesc.SetValue(dataContext, myData); 
       break; 
      } 
     } 

希望這能幫助別人.. 感謝所有的人在那裏爲他們的幫助n載體。

0
 var workflow = new Sequence(); 
     //Variable<string> v = new Variable<string> 
     //{ 
     // Name = "str" 
     //}; 

     //workflow.Variables.Add(v); 

     Dictionary<string, object> abc = new Dictionary<string, object>(); 
     abc.Add("thedata", "myValue"); 

     foreach (MyCustomActivity activity in mAddedActivities) 
     { 
      if (activity.ActivityResult == null) 
       activity.ActivityResult = new Dictionary<string, object>(); 
      activity.ActivityResult = abc;     
      workflow.Activities.Add(activity); 

      //new Assign<string> 
      //   { 
      //    To = v, 
      //    Value = activity.ActivityResult["thedata"].ToString() 
      //   };     

     } 
     WorkflowInvoker invoker = new WorkflowInvoker(workflow); 
     invoker.Invoke(); 

這是我做的,不知何故這是工作。我不知道它的正確方法,建議我事情會!!,這裏ActivityResult是它的各種增值活動中的共享屬性,通過某種接口成員..

+0

@ will:請檢查n讓我知道。 –

+0

任何人都可以幫助我解決這個問題.. –