示例:存储上次输入的值

此示例显示如何使用 TDConnection 对象实现操作之间数据的持久性。例程中变量生存期仅限于例程运行时间。因此,如果以后要用它,必须存储持久的数据。建议您尽可能用 ALM API 存储持久数据,而不使用外部对象、文件或注册表。

在此示例中,用户发布缺陷时,用户定义的函数 SW_KeepLastValue 使用 Settings 对象保存输入到字段 BG_DETECTION_VERSIONBG_USER_01BG_USER_03 中的值。此用户添加新缺陷时,将检索这些值并分配为默认值。

用户发布新缺陷之前,用 SET 操作从 Bug_CanPost 调用用户定义的函数。字段中的值已存储。

Function Bug_CanPost() 
        ' Initialize the function's return value to
	 ' avoid unpredictable behavior.
        Bug_CanPost = True 
        If Bug_Fields("BG_BUG_ID").Value = "" Then
            SW_KeepLastValue ("SET")
        End If
End Function

GET 操作从 Bug_New 事件过程调用该函数。用户添加新缺陷时,在此用户的字段中存储的值将输入到这些字段中。

Sub Bug_New()
        SW_KeepLastValue ("GET")
End Sub 

根据作为参数传递的操作,用户定义的函数 SW_KeepLastValue 在当前用户的常用设置表中存储字段的值,或从 Settings 对象读取值并将值分配到相应字段。

Sub SW_KeepLastValue(action)
Dim tdc, vals, flds
Dim uset, pairs, pair
Dim bld
On Error Resume Next
        bld = ""
        Set tdc = TDConnection
        Set uset = tdc.UserSettings 
        If action = "SET" Then
            flds = Array("BG_DETECTION_VERSION", _
            "BG_USER_01", "BG_USER_03")
            vals = ""
            For i = 0 To UBound(flds)
                If vals <> "" Then vals = vals & ";"
                vals = vals & flds(i) & "=" & _
		 Bug_Fields(flds(i)).Value
            Next
            'Open category KeepLValueSetting
            uset.Open ("KeepLValueSetting")
            'Setting KeepValueFields in category KeepLValueSetting
            uset.Value("KeepValueFields") = vals
            uset.Close
        End If 'SET
        If action = "GET" Then
            uset.Open ("KeepLValueSetting")
            vals = uset.Value("KeepValueFields")
            If vals <> "" Then
                pairs = Split(vals, ";")
                For i = 0 To UBound(pairs)
                    pair = Split(pairs(i), "=")
                    If UBound(pair) = 1 Then
                        Select Case pair(0)
                            Case "BG_USER_03"
                                bld = pair(1)
                            Case Else
                                If Bug_Fields(pair(0)).Value = "" Then
                                   Bug_Fields(pair(0)).Value = pair(1)
				 End If
                        End Select
                        If Bug_Fields("BG_DETECTION_VERSION").Value _
			 <> ""
                        And bld <> "" Then
                            SW_SetLists_VersionsBuilds _
                            "BG_DETECTION_VERSION", _
                            "BG_USER_03"
                            Bug_Fields("BG_USER_03").Value = bld
                            If Err.Number <> 0 Then Err.Clear
                        End If 'Bug_Fields
                    End If 'UBound(pair)
                Next
            End If 'vals <> ""
        End If 'GET
        uset.Close
        PrintError ("Keep Last Value (" & action & ")")
        On Error GoTo 0
End Sub