用于提取集合数据的蓝色棱镜代码阶段
Blue prism code stage for extracting collection data
我有一个集合,它在执行期间被填充,因此没有声明字段。我需要提取最后一列的值,列数是动态的,我无法这样做。使用或不使用代码阶段如何做到这一点? (代码:仅VB,因为我还有其他代码块运行 VB)
我曾尝试在计算阶段用另一个变量替换该值,如下所示:[my_collection.[column_name]]。当我按下验证表达式时它抛出错误。
好吧,这是一个真正的开放式问题。
首先,像“[my_collection.[column_name]]”这样的语法是行不通的——如果你想做类似的事情,那么你可能需要使用 action "Get value from collection by row and column".
Dim Proper_Row As System.Data.DataRow
Dim i As Integer = Coll_in.Columns.IndexOf(Field_name)
Dim Rows_count as Integer = Coll_in.Rows.Count
if i = -1 Then Throw new Exception ("Field does not exist")
if Rows_count < Row_number Then Throw new Exception ("Row Number higher than actual row count")
Proper_Row = Coll_in.rows(Row_number - 1)
Result = Proper_Row(Field_name)
Proper_Row = nothing
i = nothing
Rows_Count = nothing
另一种方法是将最后一列重命名为已知名称。您可以执行 return 第 n=th 列名称的操作,并执行重命名该列的操作。作为一个小提示 - 您可以使用操作 "count columns" 从名为 "Collections".
的标准对象中找到许多列
//Finding n-th column name
outname = in_coll.columns(column_index).name
//renaming column
Collection_Out = Collection_In.Copy
For Each c As DataColumn in Collection_Out.Columns
If c.ColumnName = Field_Name Then
c.ColumnName = New_Name
Exit For
End If
Next
另一种方法是删除除所需列之外的所有列。不幸的是,我没有可以离开这里的代码。
最后,也许您可以使用仅 return 集合中的值列表的操作?
//Join field values to string
For Each dr As DataRow In DT.Rows
If dr(FieldName) <> "" Then
JoinedString = JoinedString & Separator + dr(FieldName)
End If
Next
If JoinedString <> "" Then
JoinedString = JoinedString.Substring(Separator.Length, JoinedString.Length - Separator.Length)
End If
OutString = JoinedString
坦率地说,为这么简单的事情使用自定义代码阶段有点矫枉过正,特别是考虑到可维护性 trade-off 在 long-run 中几乎总是不值得的。
使用 Utility - Collection Manipulation
VBO,您可以将以下操作串联起来以实现所需的功能:
操作:获取列名称
- Object:
Utility - Collection Manipulation
- 输入:
My_Collection
- 输出:
Column Names - My_Collection
(Collection)
循环开始
- Collection:
Column Names - My_Collection
操作:计算列数
- Object:内部 ->
Collections
- 输入:
"My_Collection"
- 输出:
Count of Columns - My_Collection
(数字)
决定:这是最后一个专栏吗?
- 表达式:
[Count of Columns - My_Collection] <= 1
Yes
路径:#7
No
路径:#5
操作:删除列
- Object:
Utility - Collection Manipulation
- 输入(输入Collection):
[My_Collection]
- 输入(列名):
[Column Names - My_Collection.Field Name]
- 输出(输出Collection):
[My_Collection]
循环结束
操作:重命名字段
- Object:
Utility - Collection Manipulation
- 输入(Collection中):
My_Collection
- 输入(字段名称):
[Column Names - My_Collection.Field Name]
- 输入(新名称):
"Result"
(或您选择的名称)
- 输出(输出Collection):
[My_Collection]
循环开始
- Collection:
My_Collection
处理逻辑
- 使用表达式
[My_Collection.Result]
引用当前行中的值
循环结束
我有一个集合,它在执行期间被填充,因此没有声明字段。我需要提取最后一列的值,列数是动态的,我无法这样做。使用或不使用代码阶段如何做到这一点? (代码:仅VB,因为我还有其他代码块运行 VB)
我曾尝试在计算阶段用另一个变量替换该值,如下所示:[my_collection.[column_name]]。当我按下验证表达式时它抛出错误。
好吧,这是一个真正的开放式问题。
首先,像“[my_collection.[column_name]]”这样的语法是行不通的——如果你想做类似的事情,那么你可能需要使用 action "Get value from collection by row and column".
Dim Proper_Row As System.Data.DataRow
Dim i As Integer = Coll_in.Columns.IndexOf(Field_name)
Dim Rows_count as Integer = Coll_in.Rows.Count
if i = -1 Then Throw new Exception ("Field does not exist")
if Rows_count < Row_number Then Throw new Exception ("Row Number higher than actual row count")
Proper_Row = Coll_in.rows(Row_number - 1)
Result = Proper_Row(Field_name)
Proper_Row = nothing
i = nothing
Rows_Count = nothing
另一种方法是将最后一列重命名为已知名称。您可以执行 return 第 n=th 列名称的操作,并执行重命名该列的操作。作为一个小提示 - 您可以使用操作 "count columns" 从名为 "Collections".
的标准对象中找到许多列//Finding n-th column name
outname = in_coll.columns(column_index).name
//renaming column
Collection_Out = Collection_In.Copy
For Each c As DataColumn in Collection_Out.Columns
If c.ColumnName = Field_Name Then
c.ColumnName = New_Name
Exit For
End If
Next
另一种方法是删除除所需列之外的所有列。不幸的是,我没有可以离开这里的代码。
最后,也许您可以使用仅 return 集合中的值列表的操作?
//Join field values to string
For Each dr As DataRow In DT.Rows
If dr(FieldName) <> "" Then
JoinedString = JoinedString & Separator + dr(FieldName)
End If
Next
If JoinedString <> "" Then
JoinedString = JoinedString.Substring(Separator.Length, JoinedString.Length - Separator.Length)
End If
OutString = JoinedString
坦率地说,为这么简单的事情使用自定义代码阶段有点矫枉过正,特别是考虑到可维护性 trade-off 在 long-run 中几乎总是不值得的。
使用 Utility - Collection Manipulation
VBO,您可以将以下操作串联起来以实现所需的功能:
操作:获取列名称
- Object:
Utility - Collection Manipulation
- 输入:
My_Collection
- 输出:
Column Names - My_Collection
(Collection)
- Object:
循环开始
- Collection:
Column Names - My_Collection
- Collection:
操作:计算列数
- Object:内部 ->
Collections
- 输入:
"My_Collection"
- 输出:
Count of Columns - My_Collection
(数字)
- Object:内部 ->
决定:这是最后一个专栏吗?
- 表达式:
[Count of Columns - My_Collection] <= 1
Yes
路径:#7No
路径:#5
- 表达式:
操作:删除列
- Object:
Utility - Collection Manipulation
- 输入(输入Collection):
[My_Collection]
- 输入(列名):
[Column Names - My_Collection.Field Name]
- 输出(输出Collection):
[My_Collection]
- Object:
循环结束
操作:重命名字段
- Object:
Utility - Collection Manipulation
- 输入(Collection中):
My_Collection
- 输入(字段名称):
[Column Names - My_Collection.Field Name]
- 输入(新名称):
"Result"
(或您选择的名称) - 输出(输出Collection):
[My_Collection]
- Object:
循环开始
- Collection:
My_Collection
- Collection:
处理逻辑
- 使用表达式
[My_Collection.Result]
引用当前行中的值
- 使用表达式
循环结束