蓝色棱镜代码台,用于提取收集数据

时间:2019-04-07 15:05:08

标签: blueprism

我有在执行期间填充的集合,因此没有声明任何字段。我需要提取最后一列的值,并且列数是动态的,并且无法这样做。无论使用或不使用代码阶段,如何做到这一点? (代码:仅VB,因为我还有其他运行VB的代码块)

在计算阶段,我试图用另一个变量替换该值:[my_collection。[column_name]]。当我按Validate表达式时,它会引发错误。

2 个答案:

答案 0 :(得分:2)

嗯,这是一个开放式问题。

首先,“ [my_collection。[column_name]]”之类的语法将不起作用-如果您想执行类似的操作,则可能需要使用操作“从行和列中获取值”。

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

另一种方法是将最后一列重命名为已知名称。您可以执行一个操作,该操作将返回第n个列的名称,并执行一个操作,该操作将重命名该列。作为一个小技巧-您可以使用名为“集合”的标准对象中的“计数列”操作来找到许多列。

//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

另一种方法是删除除所需列之外的所有列。不幸的是,我周围没有可离开的代码。

最后,也许您可​​以使用仅从集合返回值列表的操作?

//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 

答案 1 :(得分:1)

坦率地说,对于如此简单的事情使用自定义代码阶段可能会有些过头,尤其是考虑到从长远来看,在可维护性方面的权衡几乎总是不值得的。

使用Utility - Collection Manipulation VBO,可以将以下操作组合在一起以实现所需的功能:

  1. 操作:获取列名

    • 对象:Utility - Collection Manipulation
    • 输入:My_Collection
    • 输出:Column Names - My_Collection(集合)
  2. 循环启动

    • 收藏:Column Names - My_Collection
  3. 操作:计数列

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

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

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

  7. 操作:重命名字段

    • 对象:Utility - Collection Manipulation
    • 输入(收件箱):My_Collection
    • 输入(字段名称):[Column Names - My_Collection.Field Name]
    • 输入(新名称):"Result"(或您选择的名称)
    • 输出(输出集合):[My_Collection]
  8. 循环启动

    • 收藏:My_Collection
  9. 处理逻辑

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