You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确向Workflow工作流添加传递参数?附代码及报错示例

报错根因

你混淆了Windows Workflow Foundation(WF)中*变量(Variable)和输入参数(InArgument)*的作用边界:

  • 你代码中定义的Hehe是挂载在Sequence下的内部变量,作用域仅限Sequence内部子活动访问,不属于Sequence对外暴露的可接收输入的参数
  • WorkflowApplication构造函数接收的输入字典,仅支持给根活动公开的输入参数传值,无法直接给活动内部变量赋值,因此会抛出字典键无法映射到参数的错误。
修复方案

你可以根据场景选择以下两种实现方式:

方案1:保留内部变量,新增根活动输入参数做映射

如果Hehe变量需要在Sequence的多个子活动中复用,就给Sequence新增同名输入参数,将内部变量绑定到该参数上,输入字典直接给根参数传值即可:

private void Button_Click(object sender, RoutedEventArgs e)
{
    // 定义根活动的对外输入参数
    InArgument<string> inputUrl = new InArgument<string>("Hehe");
    // 定义内部变量,绑定到输入参数取值
    Variable<string> myVariable = new Variable<string>("Hehe", context => inputUrl.Get(context));

    Dictionary<string, object> mainInputs = new Dictionary<string, object>();
    mainInputs.Add("Hehe", "https://www.youtube.com");

    OpenBrowser samsungPortalBrowser = new OpenBrowser();
    samsungPortalBrowser.NewSession = true;
    samsungPortalBrowser.BrowserType = BrowserType.Chrome;
    samsungPortalBrowser.Url = myVariable;

    Sequence createSequence = new Sequence();
    // 输入参数要加入Arguments集合,不是Variables集合
    createSequence.Arguments.Add(inputUrl);
    createSequence.Activities.Add(samsungPortalBrowser);
    createSequence.Variables.Add(myVariable);

    WorkflowApplication app = new WorkflowApplication(createSequence, mainInputs);
    app.Run();
}

方案2:移除冗余中间变量,直接绑定活动属性到输入参数

如果URL值只需要给OpenBrowser活动使用,不需要跨活动复用,可以直接去掉中间变量,把OpenBrowser的Url属性直接绑定到根输入参数,代码更简洁:

private void Button_Click(object sender, RoutedEventArgs e)
{
    InArgument<string> inputUrl = new InArgument<string>("Hehe");

    Dictionary<string, object> mainInputs = new Dictionary<string, object>();
    mainInputs.Add("Hehe", "https://www.youtube.com");

    OpenBrowser samsungPortalBrowser = new OpenBrowser();
    samsungPortalBrowser.NewSession = true;
    samsungPortalBrowser.BrowserType = BrowserType.Chrome;
    samsungPortalBrowser.Url = new InArgument<string>(context => inputUrl.Get(context));

    Sequence createSequence = new Sequence();
    createSequence.Arguments.Add(inputUrl);
    createSequence.Activities.Add(samsungPortalBrowser);

    WorkflowApplication app = new WorkflowApplication(createSequence, mainInputs);
    app.Run();
}

注意:WF的参数、变量名称大小写敏感,输入字典的键名必须和定义的InArgument名称完全一致,否则仍会出现映射错误。

内容的提问来源于stack exchange,提问作者Avrigeanu Laurian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 01:39:18