Fix application tracking in api.asp for Phase 2 schema

Issues Fixed:
1. UpdateInstalledApps() was using wrong table name 'machineapplications'
   - Changed to correct table 'installedapps'
2. INSERT was missing 'isactive' column required by installedapps table
3. GetOrCreateApplication() was using wrong column names:
   - 'applicationid' → 'appid' (primary key)
   - 'applicationname' → 'appname'
   - Removed 'version' column (doesn't exist in applications table)
   - Now stores version info in 'appdescription' field

How It Works Now:
- PowerShell script collects installed apps from registry
- Filters to tracked apps (UDC, PPDCS, Oracle, Tanium, eDNC, etc.)
- Sends to api.asp with action=updateInstalledApps
- API deletes old app mappings for PC: DELETE FROM installedapps
- API creates/finds apps in 'applications' table
- API inserts new mappings: INSERT INTO installedapps (machineid, appid, isactive)

Tables Used:
- applications (appid, appname, appdescription, isactive)
- installedapps (machineid, appid, isactive)

Impact: Application tracking now works correctly with Phase 2 schema

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
cproudlock
2025-11-21 10:44:56 -05:00
parent bfaa68d5d0
commit bb95615ca9

37
api.asp
View File

@@ -319,7 +319,7 @@ Sub UpdateInstalledApps()
Dim cmdDelete
Set cmdDelete = Server.CreateObject("ADODB.Command")
cmdDelete.ActiveConnection = objConn
cmdDelete.CommandText = "DELETE FROM machineapplications WHERE machineid = ?"
cmdDelete.CommandText = "DELETE FROM installedapps WHERE machineid = ?"
cmdDelete.Parameters.Append cmdDelete.CreateParameter("@machineid", 3, 1, , CLng(machineid))
cmdDelete.Execute
@@ -343,13 +343,14 @@ Sub UpdateInstalledApps()
LogToFile "GetOrCreateApplication returned appid: " & appid
If appid > 0 Then
' Insert mapping
' Insert mapping (installedapps table uses appid not applicationid)
Dim cmdInsert
Set cmdInsert = Server.CreateObject("ADODB.Command")
cmdInsert.ActiveConnection = objConn
cmdInsert.CommandText = "INSERT INTO machineapplications (machineid, applicationid) VALUES (?, ?)"
cmdInsert.CommandText = "INSERT INTO installedapps (machineid, appid, isactive) VALUES (?, ?, ?)"
cmdInsert.Parameters.Append cmdInsert.CreateParameter("@machineid", 3, 1, , CLng(machineid))
cmdInsert.Parameters.Append cmdInsert.CreateParameter("@appid", 3, 1, , CLng(appid))
cmdInsert.Parameters.Append cmdInsert.CreateParameter("@isactive", 11, 1, , 1) ' 1 = active
cmdInsert.Execute
If Err.Number = 0 Then
@@ -1224,9 +1225,9 @@ Function GetOrCreateApplication(appName, appVersion)
Exit Function
End If
' Check if application exists
' Check if application exists (applications table has appid and appname columns)
Dim strSQL, rsResult
strSQL = "SELECT applicationid FROM applications WHERE applicationname = ?"
strSQL = "SELECT appid FROM applications WHERE appname = ?"
Set rsResult = ExecuteParameterizedQuery(objConn, strSQL, Array(appName))
If Err.Number <> 0 Then
@@ -1236,8 +1237,8 @@ Function GetOrCreateApplication(appName, appVersion)
End If
If Not rsResult.EOF Then
GetOrCreateApplication = rsResult("applicationid")
LogToFile "Found existing applicationid: " & GetOrCreateApplication
GetOrCreateApplication = rsResult("appid")
LogToFile "Found existing appid: " & GetOrCreateApplication
rsResult.Close
Set rsResult = Nothing
Exit Function
@@ -1247,17 +1248,23 @@ Function GetOrCreateApplication(appName, appVersion)
LogToFile "Application not found, creating new..."
' Create new application
' Prepare parameter value (VBScript doesn't have IIf)
Dim pVersion
If appVersion <> "" Then pVersion = appVersion Else pVersion = Null
' Create new application (note: applications table doesn't have version column)
' Version info is tracked elsewhere or ignored for now
Dim cmdInsert
Set cmdInsert = Server.CreateObject("ADODB.Command")
cmdInsert.ActiveConnection = objConn
cmdInsert.CommandText = "INSERT INTO applications (applicationname, version) VALUES (?, ?)"
cmdInsert.Parameters.Append cmdInsert.CreateParameter("@appname", 200, 1, 255, appName)
cmdInsert.Parameters.Append cmdInsert.CreateParameter("@version", 200, 1, 50, pVersion)
cmdInsert.CommandText = "INSERT INTO applications (appname, appdescription, isactive) VALUES (?, ?, ?)"
cmdInsert.Parameters.Append cmdInsert.CreateParameter("@appname", 200, 1, 50, appName)
' Use version as description if available
Dim pDescription
If appVersion <> "" Then
pDescription = "Version: " & appVersion
Else
pDescription = "Auto-detected application"
End If
cmdInsert.Parameters.Append cmdInsert.CreateParameter("@description", 200, 1, 255, pDescription)
cmdInsert.Parameters.Append cmdInsert.CreateParameter("@isactive", 11, 1, , 1)
cmdInsert.Execute
If Err.Number <> 0 Then