Example: Storing the Last Values Entered

This example shows how to use the TDConnection object to implement persistent data between actions. The lifetime of a variable in a routine is only for the routine run. Therefore, persistent data must be stored if it must be available later. It is recommended that you use the ALM API to store persistent data whenever possible instead of using external objects, files, or the registry.

In this example, a user-defined function SW_KeepLastValue uses the Settings object to save the values typed into the fields BG_DETECTION_VERSION, BG_USER_01, and BG_USER_03 when a user posts a defect. These values are retrieved and assigned as default values when this user adds a new defect.

The user-defined function is called with the SET action from Bug_CanPost, before a new defect is posted by the user. The values in the fields are stored.

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

The function is called with the GET action from the Bug_New event procedure. When a user adds a new defect, the values stored in the fields for this user are entered into these fields.

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

Depending on the action passed as a parameter, the user-defined function SW_KeepLastValue stores the values of the fields in the common settings table for the current user, or reads the values from the Settings object and assigns the values to the appropriate fields.

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