[英]Set InArgument value from a cs
我在工作流基礎項目中工作,發現麻煩。 我解釋一下我的項目:
我有一個MainWindow,可在其中設置要運行的工作流名稱。 運行此工作流程時,我調用VisualTracking.cs類以查看調試位置。 此CS類構造函數具有以下方法(WorkflowDesigner wd,字符串filePath,字符串名稱)。該名稱是我在主窗口中設置的工作流名稱。
我有一個dll項目,其中包含一些在先前重新托管的工作流程中使用的自定義活動。 在這些活動之一中,我有一個InArgument,它稱為textValue。 我希望這個InArgument獲取工作流名稱值,因此,我執行以下代碼:
主窗口:
......
VisualTracking tracker = new VisualTracking(wd, workflowFilePathName, this.workflowName);
.....
VisualTracking類:
.......
private string workflowName { get; set; }
.......
public VisualTracking(WorkflowDesigner wd,string filePath,string name) {
.......
foreach (Activity v in idActivityMap.Values)
{
string val = v.GetType().FullName;
activityLists.Add(val);
if (v.GetType().FullName == "RulesDll.Status_Activity.StatusActivity")
{
((StatusActivity)v).textValue = this.workflowName;
}
}
........
在此foreach中,對於每個工作流程活動,我都會檢查他的名稱空間是否是我想要設置工作流程名稱的目標活動。
狀態活動
........
public InArgument<string> textValue;
public InArgument<string> Text
{
get { return this.textValue; }
set { this.textValue = value; }
}
........
protected override void Execute(CodeActivityContext context)
{
...........
string text = context.GetValue(this.Text);
...........
因此,我希望在字符串文本中具有我在visualtracking類中關聯的工作流名稱值。...但是在調試時,請始終將值檢索為null。
任何解決方案將不勝感激!
什么時候在VisualTracking類中設置了workflowName
? 在我看來,當您從MainWindow創建實例時,您正在傳遞所需的值,但實際上從未設置過。 我猜您實際上要使用從MainWnidow傳遞給name
參數的值。 我建議您替換以下代碼行:
if (v.GetType().FullName == "RulesDll.Status_Activity.StatusActivity")
{
((StatusActivity)v).textValue = this.workflowName;
}
用這些:
// This will also catch cases where your class inherits
// from StatusActivity.
StatusActivity activity = v as StatusActivity;
// Using 'as' cast will return null if the type cannot be
// cast to a StatusActivity.
if (activity != null)
{
// You passed in a reference to MainWindow's "this.workflowName"
// in the name parameter of this constructor.
activity.textValue = name;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.