用于提取集合数据的蓝色棱镜代码阶段

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,您可以将以下操作串联起来以实现所需的功能:

  1. 操作:获取列名称

    • Object: Utility - Collection Manipulation
    • 输入:My_Collection
    • 输出:Column Names - My_Collection (Collection)
  2. 循环开始

    • Collection: Column Names - My_Collection
  3. 操作:计算列数

    • Object:内部 -> Collections
    • 输入:"My_Collection"
    • 输出:Count of Columns - My_Collection(数字)
  4. 决定:这是最后一个专栏吗?

    • 表达式:[Count of Columns - My_Collection] <= 1
    • Yes路径:#7
    • No路径:#5
  5. 操作:删除列

    • Object: Utility - Collection Manipulation
    • 输入(输入Collection):[My_Collection]
    • 输入(列名):[Column Names - My_Collection.Field Name]
    • 输出(输出Collection):[My_Collection]
  6. 循环结束

  7. 操作:重命名字段

    • Object: Utility - Collection Manipulation
    • 输入(Collection中):My_Collection
    • 输入(字段名称):[Column Names - My_Collection.Field Name]
    • 输入(新名称):"Result"(或您选择的名称)
    • 输出(输出Collection):[My_Collection]
  8. 循环开始

    • Collection: My_Collection
  9. 处理逻辑

    • 使用表达式[My_Collection.Result]引用当前行中的值
  10. 循环结束