我已经构建了一个工作流设计器,允许输入电子邮件地址列表。列表中的每个电子邮件都需要是InArgument(Of String),因此可以使用变量单独编辑/添加它们。
在我的Activity上,我有一个声明如下的属性:
Public Property [To] As ObservableCollection(Of InArgument(Of String))
我的设计师已正确连接并正确填充此集合。
但是在执行期间,我不知道如何获取添加的每个InArgument的运行时值。
当我们执行工作流并迭代添加到列表中的每个InArgument时,我试图获得如下所示的值,但是失败了:
For Each toAddress As InArgument(Of String) In Me.To.ToList()
Dim emailToAddress As String = toAddress.Get(_Context)
Next
我们得到的错误是“The argument of type '<type>' cannot be used. Make sure that it is declared on an activity”
,而在我的情况下,type是一个字符串...
我们得到的错误有意义,因为我们没有在活动上声明属性,因为它是动态添加到列表中的,因此无法使用下面显示的语法获取值:
The_Property_Name.Get(_Context)
有人可以帮忙吗?我似乎无法找到任何东西。我应该采取不同的方法吗?
答案 0 :(得分:0)
我想通了,所以我会回答我自己的问题!我们需要做的就是通过覆盖活动上的CacheMetadata()方法将集合项显式添加到元数据中。然后,它使其可用于工作流程上下文。
首先我们将它们添加到上下文中:
Protected Overrides Sub CacheMetadata(ByVal metadata As CodeActivityMetadata)
MyBase.CacheMetadata(metadata)
Dim i As Integer = 0
For Each item As InArgument(Of String) In Me.To
Dim runTimeArg As RuntimeArgument = New RuntimeArgument("TO" & i.ToString(), item.ArgumentType, item.Direction, False)
metadata.Bind(item, runTimeArg)
metadata.AddArgument(runTimeArg)
i = i + 1
Next
End Sub
然后在执行时,我们得到像这样的值
For Each item As InArgument(Of String) In Me.To
Dim email As String = _Context.GetValue(item)
Next