Set InArgument value from a cs

本文关键字:cs from value InArgument Set | 更新日期: 2023-09-27 18:36:25

我正在一个工作流基础项目中工作,我发现了一个麻烦。我解释我的项目:

  • 我有一个主窗口,我可以在其中设置要运行的工作流名称。当我运行此工作流时,我调用 VisualTracking.cs 类以查看调试的位置。这个 cs 类构造函数具有以下方法(工作流设计器 wd,字符串文件路径,字符串名称)名称是我在主窗口中设置的工作流名称。

  • 我有一个 dll 项目,其中包含一些自定义活动,我在以前的重新托管工作流中使用了这些活动。在其中一个活动中,我有一个InArgument,它被称为textValue。我希望这个 InArgument 获取工作流名称值,因此为此,我执行以下代码:

主窗口:

    ......
    VisualTracking tracker = new VisualTracking(wd, workflowFilePathName, this.workflowName);
    .....

可视化跟踪类:

    .......
    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);
       ...........

所以我希望字符串文本中具有我在可视化跟踪类中关联的工作流名称值......但是当我调试时,总是检索一个值作为空值....

任何解决方案都将不胜感激!!!!

Set InArgument value from a cs

您的可视化跟踪类中何时设置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;
}