Мне нужно программно определить сериализуемую потоковую диаграмму Windows Workflow, которая принимает входные аргументы и возвращает результат.Я понимаю, как создавать эти рабочие процессы с помощью конструктора, но мне нужно сделать это в коде, чтобы рабочий процесс потоковой диаграммы был сериализуемым (чтобы не было лямбда-выражений).
У меня проблемы с получением поля «Кому»Назначения.Приведенный ниже код создает рабочий поток потоковой диаграммы WriteLine с последующим назначением.
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;
}
}
Приведенный выше код завершается ошибкой, когда я пытаюсь преобразовать ActivityBuilder в Activity, говоря «Не удалось создать OutArgument из текста».до свидания'."Это прекрасно работает, если я не использую OutArgument и просто передаю вещи.
Мой вопрос: что добавить в свойство To?Как мне ссылаться на OutArgument, который я добавляю в ActivityBuilder.Properties?VisualBasicReference не является OutArgument.Я делаю это более сложным, чем нужно?
Спасибо за любые подсказки!
Редактировать: Я хочу создать рабочий процесс программно.Рабочий процесс должен иметь входные аргументы и возвращать результаты (выходные аргументы).
Я понимаю, как создать рабочий процесс и как объявлять и использовать входные аргументы.Я использую ActivityBuilder для создания рабочего процесса и для установки InArgument через свойства ActivityBuilder.Я создаю рабочий процесс из ActivityBuilder путем сериализации в XAML, а затем десериализации с использованием ActivityXamlServices.Load.
Я не понимаю, как получить результат из рабочего процесса.Я предполагаю, что это включает OutArgument.Как / где я могу добавить OutArgument в рабочий процесс?Я думал, что фрагмент кода, который я дал, назначит значение OutArgument, но вызов ActivityXamlServices.Load завершается неудачно с жалобой на то, что он не может создать OutArgument.
- Является ли подход использования ActivityBuilder правильным?
- Правильно ли указано поле "Кому" действия Assign, ссылающегося на OutArgument?
- Как сделать ActivityBuilderзнаете об OutArgument и все еще сможете конвертировать в Activity / workflow?
Надеюсь, это прояснит мою проблему.