#c# #dynamics-crm
#c# #dynamics-crm
Вопрос:
Я унаследовал проект CRM с несколькими рабочими процессами, которые выполняют очень похожие задачи, в основном они получают входную строку и выводят значение OptionSet для этой строки. Поскольку нам нужен новый рабочий процесс для каждого набора опций, я надеюсь улучшить много дублированного кода. Я решил создать абстрактный класс
public abstract class MyBaseWorkflow : CodeActivity
{
protected sealed override void Execute(CodeActivityContext executionContext)
{
// this is pseudo-code and I know it works, the last line is the issue
var input = ReadInputValue();
var query = BuildQuery();
var option = MatchWithInput(queryResults, input);
WriteToOutput(..., option);
}
protected string BuildQuery();
protected string ReadInputValue();
protected string WriteToOutput(CodeActivityContext executionContext, OptionMetadata selectedValue);
}
затем в моих рабочих процессах у меня есть (я опустил BuildQuery и ReadInputValues, поскольку я знаю, что они работают просто отлично)
public class MyWorkflow : MyBaseWorkflow
{
[Input("Account MyFieldAsText Input")]
public InArgument<string> OptionSetStringInput { get; set; }
[Output("Account MyFieldOptionSetValue Output")]
[AttributeTarget("account", "myField")]
public OutArgument<OptionSetValue> OptionSetValueOutput { get; set; }
protected overide string WriteToOutput(CodeActivityContext executionContext, OptionMetadata selectedValue)
{
this.OptionSetValueOutput.Set(executionContext, new OptionSetValue(selectedValue.Value.Value));
}
}
Я выполнил некоторую трассировку и смог увидеть, что правильное значение записывается в свойство, однако, похоже, ничего не выводилось на следующий шаг.
Я думал о том, чтобы сделать что-то вроде этого: context.OutputParameters["myField"] = selectedValue
посмотреть, устанавливает ли это значение, но я не уверен, как это сделать.
Есть идеи, что может пойти не так?
Имеют ли выходные параметры какие-либо ограничения при наследовании?
Должен ли я избегать наследования, как правило, при работе с рабочими процессами и плагинами?
Ответ №1:
Не ищите OutArgument
значения в IPluginExecutionContext
объекте. Аргументы Out принадлежат домену Windows Workflow Foundation. Вы можете найти их в пользовательском интерфейсе, когда добавляете действие в свой рабочий процесс в том месте, где вы добавили пользовательское действие.
Коллекция выходных параметров используется для плагинов.