Workflow 以编程方式在流程图工作流中创建分配
我需要以编程方式定义一个可序列化的流程图Windows工作流,它接受输入参数并返回结果。我知道如何使用设计器创建这些工作流,但我需要在代码中这样做,并使流程图工作流可序列化(因此没有lambda表达式) 我在获取分配的“收件人”字段时遇到问题。下面的代码创建了一个WriteLine的流程图工作流,后跟一个AssignWorkflow 以编程方式在流程图工作流中创建分配,workflow,workflow-foundation,workflow-foundation-4,workflow-activity,Workflow,Workflow Foundation,Workflow Foundation 4,Workflow Activity,我需要以编程方式定义一个可序列化的流程图Windows工作流,它接受输入参数并返回结果。我知道如何使用设计器创建这些工作流,但我需要在代码中这样做,并使流程图工作流可序列化(因此没有lambda表达式) 我在获取分配的“收件人”字段时遇到问题。下面的代码创建了一个WriteLine的流程图工作流,后跟一个Assign var ab = new ActivityBuilder<string> { Name = "ActivityBuilt", Implementatio
var ab = new ActivityBuilder<string> {
Name = "ActivityBuilt",
Implementation = new Flowchart {
StartNode = new FlowStep {
Action = new WriteLine { Text = new VisualBasicValue<string>("greeting") },
Next = new FlowStep {
Action = new Assign {
DisplayName = "Set result",
To = new OutArgument<string>(new VisualBasicReference<string> {
ExpressionText = "results"}),
Value = new VisualBasicValue<string>("bye")
}
}
}
}
};
ab.Properties.Add(new DynamicActivityProperty {
Name = "greeting",
Type = typeof (InArgument<string>),
Value = "hello"});
ab.Properties.Add(new DynamicActivityProperty {
Name = "results",
Type = typeof (OutArgument<string>),
Value = "bye"});
// Convert the ActivityBuilder to a callable activity
using (var sw = new StringWriter()) {
using (var xw = ActivityXamlServices.CreateBuilderWriter(new XamlXmlWriter(sw, new XamlSchemaContext()))) {
XamlServices.Save(xw, LastCreated);
}
using (var sr = new StringReader(sw.ToString())) {
var wf = ActivityXamlServices.Load(sr);
return wf;
}
}
var ab=新建ActivityBuilder{
Name=“ActivityBuild”,
实施=新流程图{
StartNode=新流程步骤{
Action=newwriteline{Text=newvisualbasicvalue(“问候”)},
下一步=新流程步骤{
动作=新分配{
DisplayName=“设置结果”,
To=新的输出参数(新的VisualBasicReference{
ExpressionText=“results”}),
值=新的VisualBasicValue(“再见”)
}
}
}
}
};
ab.Properties.Add(新的DynamicActivityProperty{
Name=“问候语”,
类型=类型(无粘性),
Value=“hello”});
ab.Properties.Add(新的DynamicActivityProperty{
Name=“结果”,
Type=typeof(OutArgument),
Value=“bye”});
//将ActivityBuilder转换为可调用的活动
使用(var sw=new StringWriter()){
使用(var xw=ActivityXamlServices.CreateBuilderWriter(新的XamlXmlWriter(sw,新的XamlSchemaContext())){
XamlServices.Save(xw,LastCreated);
}
使用(var sr=newStringReader(sw.ToString())){
var wf=ActivityXamlServices.Load(sr);
返回wf;
}
}
当我尝试从ActivityBuilder转换为Activity时,上面的代码失败,并说“无法从文本“bye”创建“OutArgument”。“如果我不使用OutArgument,只需传入内容,则可以正常工作
我的问题是在to属性中放置什么?如何引用添加到ActivityBuilder.Properties的OutArgument?VisualBasicReference不是一个OutArgument。我是不是让这件事变得更加困难了
谢谢你的提示
编辑:我想以编程方式创建工作流。工作流需要有输入参数和返回结果(输出参数)
我了解如何创建工作流以及如何声明和使用输入参数。我正在使用ActivityBuilder创建工作流,并通过ActivityBuilder的属性设置InArgument。我通过序列化到XAML,然后使用ActivityXamlServices.Load反序列化,从ActivityBuilder创建工作流
我不明白的是如何从工作流中获得结果。我想这涉及到一场争论。如何/在何处向工作流添加OutArgument?我以为我给出的代码片段会给OutArgument赋值,但调用ActivityXamlServices.Load失败,并抱怨无法创建OutArgument
- 使用ActivityBuilder的方法正确吗
- 赋值操作的“To”字段是否正确引用了OutArgument
- 如何使ActivityBuilder知道OutArgument,并且仍然能够转换为活动/工作流
希望这能澄清我的问题。代码至少有3个问题:
var ab = new ActivityBuilder<string>
{
Name = "ActivityBuilt",
Implementation = new Flowchart
{
StartNode = new FlowStep
{
Action = new WriteLine { Text = new VisualBasicValue<string>("greeting") },
Next = new FlowStep
{
Action = new Assign
{
DisplayName = "Set result",
To = new OutArgument<string>(new VisualBasicReference<string>
{
ExpressionText = "results"
}),
Value = new InArgument<string>(new VisualBasicValue<string>("greeting"))
}
}
}
}
};
ab.Properties.Add(new DynamicActivityProperty
{
Name = "greeting",
Type = typeof(InArgument<string>),
Value = "hello"
});
ab.Properties.Add(new DynamicActivityProperty
{
Name = "results",
Type = typeof(OutArgument<string>)
});
// Convert the ActivityBuilder to a callable activity
using (var sw = new StringWriter())
{
using (var xw = ActivityXamlServices.CreateBuilderWriter(new XamlXmlWriter(sw, new XamlSchemaContext())))
{
XamlServices.Save(xw, ab);
}
using (var sr = new StringReader(sw.ToString()))
{
var wf = ActivityXamlServices.Load(sr);
WorkflowInvoker.Invoke(wf);
}
}
var ab=新建ActivityBuilder
{
Name=“ActivityBuild”,
实施=新流程图
{
StartNode=新流程步骤
{
Action=newwriteline{Text=newvisualbasicvalue(“问候”)},
下一步=新流程步骤
{
动作=新分配
{
DisplayName=“设置结果”,
To=新的输出参数(新的VisualBasicReference
{
ExpressionText=“结果”
}),
值=新的InArgument(新的VisualBasicValue(“问候”))
}
}
}
}
};
ab.Properties.Add(新的DynamicActivityProperty
{
Name=“问候语”,
类型=类型(无粘性),
Value=“你好”
});
ab.Properties.Add(新的DynamicActivityProperty
{
Name=“结果”,
Type=typeof(输出参数)
});
//将ActivityBuilder转换为可调用的活动
使用(var sw=new StringWriter())
{
使用(var xw=ActivityXamlServices.CreateBuilderWriter(新的XamlXmlWriter(sw,新的XamlSchemaContext()))
{
XamlServices.Save(xw,ab);
}
使用(var sr=newStringReader(sw.ToString()))
{
var wf=ActivityXamlServices.Load(sr);
WorkflowInvoker.Invoke(wf);
}
}
我看得越多,就越感到困惑。您正在尝试如何处理此工作流?请编辑以添加描述,例如“我正在尝试使用赋值来设置输出参数'foo'值XYZ”,或者您可以只指定“新赋值”