在为重新托管的工作流设计器编写自定义活动时,它给出了一个错误,如果我没有,那么必需参数需要一个值,所以我使用如下所示的null或“ALL” ”。它不接受null或“ALL”或其他任何默认参数。请注意,我的必需参数是string类型。
[RequiredArgument]
[DefaultValue(null)]
[Description(@"The status of the job to perform")]
public InArgument<string> JobStatus { get; set; }
[RequiredArgument]
[DefaultValue("All")]
[Description(@"The status of the job to perform")]
public InArgument<string> JobStatus { get; set; }
运行工作流时出现错误消息:
工作流程控制台:启动工作流程...
无法启动工作流程。
消息:无法启动工作流DynamicActivity。
异常消息:处理工作流树时遇到以下错误: 'DynamicActivity':活动'1:DynamicActivity'的私有实现具有以下验证错误:未提供所需活动参数'JobStatus'的值。
堆栈跟踪:在System.Activities.Validation.ActivityValidationServices.ThrowIfViolationsExist(IList`1 validationErrors) 在System.Activities.Hosting.WorkflowInstance.ValidateWorkflow(WorkflowInstanceExtensionManager extensionManager) 在System.Activities.Hosting.WorkflowInstance.RegisterExtensionManager(WorkflowInstanceExtensionManager extensionManager) 在System.Activities.WorkflowApplication.EnsureInitialized() 在System.Activities.WorkflowApplication.Enqueue(InstanceOperation操作,布尔推送) 在System.Activities.WorkflowApplication.WaitForTurn(InstanceOperation操作,TimeSpan超时) 在System.Activities.WorkflowApplication.InternalRun(TimeSpan timeout,Boolean isUserRun) 在System.Activities.WorkflowApplication.Run()
感谢您的帮助
答案 0 :(得分:5)
工作流运行时和工作流设计器都不会查看DefaultValueAttribute
。搜索属性需要反映,这可能会对性能造成代价。而且这不是属性的目的。
无论如何,您可以使用默认值初始化变量。在构造函数上,例如:
public class MyCodeActivity : CodeActivity
{
public MyCodeActivity()
{
JobStatus = "All";
}
}
或通过访问者强制一个值。像这样:
private InArgument<string> text = "All";
[RequiredArgument]
public InArgument<string> Text
{
get { return text ?? "All"; }
set { text = value; }
}
这些是不同的方法,使用适合您想要的行为的方法。在这两种情况下,都可以通过XAML修改值,因此对运行时的小检查可能会很好:
protected override void Execute(CodeActivityContext context)
{
string text = context.GetValue(this.Text);
if (text == null)
{
text = "All";
}
Console.WriteLine(text);
}