5

我想使用字段标签而不是名称来更新 QC 中的自定义用户字段

目前我们正在这样做

Set currentRun = QCUtil.CurrentRun
currentRun.Field("RN_USER_03") = 1
currentRun.Post

但我想这样做

Set currentRun = QCUtil.CurrentRun
currentRun.Field("Data Rows Passed") = 4
currentRun.Post

但我找不到这样做的方法。有任何想法吗?

4

2 回答 2

1

暗示所有标签都是唯一的(我怀疑..):

您可以创建一个接受标签的函数,在定义自定义字段的 QC 表中搜索正确的字段定义,然后返回字段名称。然后使用函数的结果值作为索引属性的索引。

假设该函数将被称为“GetNameOfLabel”,那么调用者的代码将如下所示:

Set currentRun = QCUtil.CurrentRun 
currentRun.Field(GetNameOfLabel ("Data Rows Passed")) = 1 
currentRun.Post 

当然,这个函数并不是真的很简单,但是在对 QC 数据模型进行一些挖掘并找到一种通过 SQL 从数据库中获取名称的有效方法之后就足够简单了。

或者,该函数可以在数组或字典中查找名称,然后您必须维护该字典,但您不必每次查找都去数据库。

缺点:

  • 标签错误的脚本可能更难调试
  • 如果标签不是唯一的,那么调试可能真的很“有趣”

如果在 DB 上查找:

  • 如果您不缓存或预加载这些查找的 SQL 查询结果,所有脚本都会变慢;
  • 复杂性,因为您必须执行正确的 SQL 查询,并且您以一种非常特殊的方式依赖 QC 的数据模型(升级时通常会感到恐惧)

如果在数组或字典中查找:

  • 您要么必须保持其初始化(打赌其他管理员添加 cust 字段会很容易忘记),要么必须从 QC 的表中“加载”它(这有点像上面的 SQL 解决方案,并且具有相同的缺点)。

我会选择 array/dictionary-initialized-from-db-idea。或者,如果你能接受已经提出的不变的想法,那是一个不错的选择。考虑到 QC 自定义脚本中没有独立于会话的范围,SQL 访问想法可能真的会降低性能,因为它必须为每个新用户会话执行。这就是为什么我也对这个不变的想法+1。

于 2010-10-27T17:18:21.917 回答
1

看这个:

Dim gFieldLabelToNameDICT: Set gFieldLabelToNameDICT = CreateObject("Scripting.Dictionary")
gFieldLabelToNameDICT.CompareMode = vbTextCompare

Function GetNameOfLabel (strFieldLabel)
    ' If it doesn't exist yet in fieldLabelToName dict -> search it using TDC and add it to the list to improve performance
    If Not gFieldLabelToNameDICT.Exists(strFieldLabel) Then
        Dim testSetFields As List

        Dim testSetFields: Set testSetFields = QCUtil.QCConnection.Customization.Fields.Fields("RUN")
        For Each aField in testSetFields
            If aField.UserLabel = strFieldLabel Then
                gFieldLabelToNameDICT.Item(strFieldLabel) = aField.ColumnName
            End If
        Next aField
    End If

    GetNameOfLabel = gFieldLabelToNameDICT.Item(strFieldLabel)
End Function

也许你会想要添加更多的错误处理,比如我们考虑到标签没有找到的情况。

于 2016-02-17T11:41:32.660 回答