【问题标题】:Set InArgument value from a cs从 cs 设置 InArgument 值
【发布时间】:2012-06-07 13:59:49
【问题描述】:

我正在从事一个工作流基础项目,但遇到了麻烦。我解释我的项目:

  • 我有一个 MainWindow,我在其中设置了我想运行的工作流名称。当我运行这个工作流时,我调用 VisualTracking.cs 类来查看调试在哪里。这个cs类构造函数有以下方法(WorkflowDesigner wd,string filePath,string name) 该名称是我在主窗口中设置的工作流名称。

  • 我有一个 dll 项目,其中包含一些我在之前重新托管的工作流中使用的自定义活动。在其中一项活动中,我有一个称为 textValue 的 InArgument。我希望这个 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);
       ...........

所以我希望在字符串文本中具有我在视觉跟踪类中关联的 workflowName 值....但是当我调试时,总是将值检索为 null....

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

【问题讨论】:

    标签: c# visual-studio-2010 workflow-foundation-4


    【解决方案1】:

    workflowName 何时在您的 VisualTracking 类中设置?在我看来,当您从 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;
    }
    

    【讨论】:

    • 对不起,我忘了把 this.workflowName = name;在visualTracking类中;-),但仍然没有工作
    猜你喜欢
    • 1970-01-01
    • 2013-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-16
    • 1970-01-01
    相关资源
    最近更新 更多