我需要允许用户从有效值列表(例如组合框)中指定 InArgument / 属性的值。有效值列表由另一个 InArgument 的值确定(其值将由表达式设置)。
例如,在设计时:
- 用户在工作流变量 FilePath 中输入文件路径
- DependedUpon InArgument 设置为 FilePath 的值
- 查询文件并向用户显示有效值列表以选择适当的值(可能通过自定义 PropertyValueEditor)。
这可能吗?
我需要允许用户从有效值列表(例如组合框)中指定 InArgument / 属性的值。有效值列表由另一个 InArgument 的值确定(其值将由表达式设置)。
例如,在设计时:
这可能吗?
您想在设计时还是运行时验证这一点?
设计时间是有限的,因为用户可以使用依赖于另一个变量的表达式,并且您无法在设计时从那里读取值。但是,您可以查看表达式并可能以这种方式推断出无效的组合。在这种情况下,您需要向 CacheMetadata 函数添加代码。
在运行时,您可以获得实际值并在 Execute 函数中验证它们。
考虑到这是在设计时完成的,我强烈建议您在设计器中提供所有这些逻辑,而不是在 Activity 本身中。
设计时逻辑不应包含在您的活动中。您的 Activity 应该能够独立于任何设计器运行。这样想吧……
您坐下来使用活动及其设计器设计您的工作流程。完成后,您将工作流安装/xcopy 到其他地方的服务器。当服务器在执行之前加载该 Activity 时,当您的设计逻辑在 CacheMetadata 中执行时会发生什么?使用一些启发式方法跳过它以确定您没有在设计时运行,或者您包含额外的逻辑以在无法找到该文件时跳过此代码。不管怎样,为什么服务器要执行这个设计时代码? 答案是它不应该执行它。该代码属于设计者。
这就是为什么如果您查看框架,您会发现活动及其设计器存在于不同的程序集中。您的代码应该采用相同的方式——以设计为中心的代码应该在与您的活动不同的程序集中交付,这样您就可以将两者交付给设计人员,而仅将活动程序集交付给您的应用程序服务器。