我在工作流基础项目中工作,我发现了一个麻烦。我解释我的项目:
我有一个MainWindow,我在其中设置了我想要运行的工作流名称。当我运行这个工作流程时,我调用VisualTracking.cs类来查看调试的位置。这个cs类构造函数有以下方法(WorkflowDesigner wd,string filePath,string name) 该名称是我在主窗口中设置的工作流名称。
我有一个dll项目,其中包含我在之前的重新托管工作流程中使用的一些自定义活动。在其中一个活动中,我有一个InArgument,它叫做textValue。我希望这个InArgument得到workflowname值,所以要做它我做以下代码:
主窗口:
......
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中,我检查他的命名空间是否是我想要设置工作流名称的目标活动。
StatusActivity
........
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类中关联的workflowName值....但是当我调试时,总是将值检索为null ....
任何解决方案都将受到赞赏!!!!!
答案 0 :(得分:0)
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;
}