- Strip emojis from 47 markdown files across docs/, sql/, and root - Add docs/DOCS_CONSOLIDATION_PLAN.md with plan to reduce 45 docs to 8 - Establish no-emoji rule for documentation going forward 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
290 lines
8.5 KiB
Markdown
290 lines
8.5 KiB
Markdown
# Machine Pages Phase 2 Migration - Fixes Summary
|
|
|
|
**Date:** 2025-11-07
|
|
**Status:** COMPLETE
|
|
|
|
---
|
|
|
|
## Overview
|
|
|
|
Successfully migrated all machine management pages from Phase 1 schema (separate `pc` and `machines` tables) to Phase 2 schema (consolidated `machines` table). These fixes serve as templates for upcoming PC page migration.
|
|
|
|
---
|
|
|
|
## Files Fixed
|
|
|
|
### 1. displaymachine.asp
|
|
**Purpose:** Individual machine view page with 5 tabs
|
|
**Status:** Working
|
|
|
|
**Changes:**
|
|
- Updated SQL to query `machines` table only (equipment = `pctypeid IS NULL`)
|
|
- Fixed column names: `vlan`, `machinedescription` → removed (don't exist)
|
|
- Fixed column names: `notes` → `machinenotes`
|
|
- Updated network query from `pc_network_interfaces` → `communications`
|
|
- Fixed: `ipaddress` → `address` in communications table
|
|
- Removed inline edit form (310 lines)
|
|
- Added link to `machine_edit.asp`
|
|
|
|
### 2. machine_edit.asp (formerly editmachine.asp)
|
|
**Purpose:** Machine edit form
|
|
**Status:** Working
|
|
|
|
**Changes:**
|
|
- Renamed from `editmachine.asp` due to IIS caching issue (HTTP 414)
|
|
- Updated SQL to query `machines` table
|
|
- Fixed communications query: `ipaddress` → `address`
|
|
- Fixed compliance columns:
|
|
- `thirdpartymanaged` → `is_third_party_managed`
|
|
- `thirdpartyvendorid` → `third_party_manager`
|
|
- `otassetsystem` → `ot_asset_system`
|
|
- `dodassettype` → `ot_asset_device_type`
|
|
- Fixed controlling PC query direction (Lines 107-118)
|
|
- Added string conversion with `& ""` for all text fields (Lines 58, 61, 62)
|
|
|
|
### 3. displaymachine.asp link update
|
|
**Change:** Updated edit link to point to `machine_edit.asp`
|
|
|
|
---
|
|
|
|
## Critical Fixes Applied
|
|
|
|
### Fix 1: Column Name Corrections
|
|
**Files:** displaymachine.asp, machine_edit.asp
|
|
|
|
```asp
|
|
' WRONG
|
|
rs("ipaddress") -- communications table
|
|
rs("notes") -- machines table
|
|
rs("function") -- functionalaccounts table
|
|
|
|
' CORRECT
|
|
rs("address") -- communications table
|
|
rs("machinenotes") -- machines table
|
|
rs("functionalaccount") -- functionalaccounts table
|
|
```
|
|
|
|
### Fix 2: Type Conversion for HTMLEncode
|
|
**File:** machine_edit.asp (Line 58, 61, 62)
|
|
**Issue:** Type mismatch error when text fields contain special characters
|
|
**Solution:** Explicitly convert to string with `& ""`
|
|
|
|
```asp
|
|
' WRONG - causes Type_mismatch error
|
|
machinenumber = rsMachine("machinenumber")
|
|
alias = rsMachine("alias")
|
|
machinenotes = rsMachine("machinenotes")
|
|
|
|
' CORRECT - explicitly convert to string
|
|
machinenumber = "" : If NOT IsNull(rsMachine("machinenumber")) Then machinenumber = rsMachine("machinenumber") & ""
|
|
alias = "" : If NOT IsNull(rsMachine("alias")) Then alias = rsMachine("alias") & ""
|
|
machinenotes = "" : If NOT IsNull(rsMachine("machinenotes")) Then machinenotes = rsMachine("machinenotes") & ""
|
|
```
|
|
|
|
**Example:** Machine 142 has notes with pipe characters: `Auto-discovered | Connected PCs: ... | PC Count: 1`
|
|
|
|
### Fix 3: Relationship Query Direction
|
|
**File:** machine_edit.asp (Line 107-118)
|
|
**Issue:** Controls relationship query was backwards
|
|
**Solution:** Reverse WHERE clause for correct direction
|
|
|
|
```asp
|
|
' WRONG - looks for equipment controlled BY this equipment
|
|
WHERE mr.machineid = ? AND rt.relationshiptype = 'Controls'
|
|
SELECT related_machineid
|
|
|
|
' CORRECT - looks for PC that controls THIS equipment
|
|
WHERE mr.related_machineid = ? AND rt.relationshiptype = 'Controls'
|
|
SELECT mr.machineid AS controlpcid
|
|
```
|
|
|
|
**Relationship Direction:**
|
|
- Controls: PC → Equipment (one-way)
|
|
- Equipment page shows: Which PC controls me?
|
|
- PC page shows: Which equipment do I control?
|
|
|
|
### Fix 4: Include ID Columns in SELECT
|
|
**File:** displaymachine.asp (Line 79-97)
|
|
**Issue:** Dropdowns failed because only names selected, not IDs
|
|
**Solution:** Include all ID columns
|
|
|
|
```asp
|
|
' WRONG
|
|
SELECT vendor, modelnumber, businessunit
|
|
|
|
' CORRECT
|
|
SELECT v.vendor, v.vendorid,
|
|
mo.modelnumber, mo.modelnumberid,
|
|
bu.businessunit, bu.businessunitid
|
|
```
|
|
|
|
### Fix 5: LEFT JOIN for Optional Tables
|
|
**Files:** displaymachine.asp, machine_edit.asp
|
|
**Issue:** INNER JOIN fails when optional relationship is NULL
|
|
**Solution:** Use LEFT JOIN
|
|
|
|
```asp
|
|
' Required relationships (INNER JOIN)
|
|
INNER JOIN models ON ...
|
|
INNER JOIN vendors ON ...
|
|
INNER JOIN businessunits ON ...
|
|
|
|
' Optional relationships (LEFT JOIN)
|
|
LEFT JOIN machinetypes ON ...
|
|
LEFT JOIN functionalaccounts ON ...
|
|
LEFT JOIN printers ON ...
|
|
```
|
|
|
|
### Fix 6: IIS Caching Workaround
|
|
**File:** editmachine.asp → machine_edit.asp
|
|
**Issue:** HTTP 414 "URL Too Long" error persisted after fixes
|
|
**Solution:** Renamed file to bypass IIS cache corruption
|
|
|
|
---
|
|
|
|
## Testing Results
|
|
|
|
### Verified Working:
|
|
- Machine list (displaymachines.asp)
|
|
- Machine view (displaymachine.asp)
|
|
- All 5 tabs load correctly
|
|
- Network interfaces display from communications table
|
|
- Relationships display correctly
|
|
- Compliance data loads
|
|
- Applications display
|
|
- Machine edit (machine_edit.asp)
|
|
- Form loads with all data
|
|
- Controlling PC pre-fills correctly (verified: PC 5295 controls equipment 194)
|
|
- Network interfaces pre-fill (up to 3)
|
|
- Compliance data pre-fills
|
|
- Map location selector works
|
|
|
|
### Test Cases Passed:
|
|
- Machine 194: Has controlling PC relationship
|
|
- Machine 142: Has special characters in notes (pipe |)
|
|
- Machine 43: Standard machine
|
|
|
|
---
|
|
|
|
## Schema Reference
|
|
|
|
### machines Table (Consolidated)
|
|
```sql
|
|
-- Equipment: pctypeid IS NULL
|
|
-- PCs: pctypeid IS NOT NULL
|
|
|
|
Key columns:
|
|
- machineid (PK)
|
|
- machinenumber (equipment number)
|
|
- alias (friendly name)
|
|
- hostname (for PCs)
|
|
- serialnumber
|
|
- machinenotes (was 'notes')
|
|
- pctypeid (NULL = equipment, NOT NULL = PC)
|
|
- modelnumberid (FK)
|
|
- businessunitid (FK)
|
|
- osid (FK)
|
|
- printerid (FK)
|
|
- machinestatusid (FK)
|
|
```
|
|
|
|
### communications Table
|
|
```sql
|
|
-- Replaces: pc_network_interfaces
|
|
|
|
Key columns:
|
|
- comid (PK, was interfaceid)
|
|
- machineid (FK, was pcid)
|
|
- address (was ipaddress) ← CRITICAL
|
|
- macaddress
|
|
- interfacename
|
|
- isprimary
|
|
- comstypeid (FK)
|
|
```
|
|
|
|
### machinerelationships Table
|
|
```sql
|
|
-- Replaces: pc_dualpath_assignments
|
|
|
|
Key columns:
|
|
- relationshipid (PK)
|
|
- machineid (FK - first machine)
|
|
- related_machineid (FK - second machine)
|
|
- relationshiptypeid (FK)
|
|
- isactive
|
|
|
|
Relationship Types:
|
|
- Controls: PC → Equipment (one-way)
|
|
- Dualpath: PC ↔ PC (bidirectional)
|
|
```
|
|
|
|
---
|
|
|
|
## Lessons Learned
|
|
|
|
### 1. Always Verify Column Names
|
|
Check actual database schema before assuming column names. Don't trust documentation or old code.
|
|
|
|
**Method:**
|
|
```sql
|
|
DESCRIBE machines;
|
|
DESCRIBE communications;
|
|
DESCRIBE compliance;
|
|
```
|
|
|
|
### 2. String Conversion is Critical
|
|
All text fields passed to `Server.HTMLEncode()` must be explicitly converted to strings.
|
|
|
|
**Rule:** Use `& ""` for all text fields loaded from database
|
|
|
|
### 3. Relationship Direction Matters
|
|
Understand one-way vs bidirectional relationships.
|
|
|
|
**Controls:** PC → Equipment (query differently for PC vs Equipment pages)
|
|
**Dualpath:** PC ↔ PC (same query for both)
|
|
|
|
### 4. Include All Required Columns
|
|
Don't assume `SELECT *` will work. Explicitly list all columns needed, including IDs.
|
|
|
|
### 5. Use LEFT JOIN for Optional Data
|
|
Any table that might have NULL relationships should use LEFT JOIN.
|
|
|
|
### 6. Test with Edge Cases
|
|
- Special characters in text fields
|
|
- NULL values
|
|
- Missing relationships
|
|
- Multiple relationships
|
|
|
|
---
|
|
|
|
## Next Steps
|
|
|
|
Use these fixes as templates for PC page migration:
|
|
|
|
1. **displaypcs.asp** - Mirror displaymachines.asp logic
|
|
2. **displaypc.asp** - Mirror displaymachine.asp logic (change WHERE clause for PCs)
|
|
3. **pc_edit.asp** - Mirror machine_edit.asp logic (reverse relationship queries)
|
|
|
|
**Key Difference for PC Pages:**
|
|
- WHERE clause: `pctypeid IS NOT NULL` (instead of IS NULL)
|
|
- Relationships: Show controlled equipment (instead of controlling PC)
|
|
- May have PC-specific fields (pctype, etc.)
|
|
|
|
---
|
|
|
|
## Related Documentation
|
|
|
|
- `/home/camp/projects/windows/shopdb/BUGFIX_2025-11-07.md` - Detailed bug fix log
|
|
- `/home/camp/projects/windows/shopdb/PHASE2_PC_MIGRATION_TODO.md` - PC migration guide
|
|
- `/home/camp/projects/windows/shopdb/MACHINE_MANAGEMENT_COMPLETE.md` - Original implementation
|
|
- `/home/camp/projects/windows/shopdb/sql/migration_phase2/` - Phase 2 SQL scripts
|
|
|
|
---
|
|
|
|
**Completion Date:** 2025-11-07
|
|
**Total Time:** ~4 hours
|
|
**Files Modified:** 2 (displaymachine.asp, machine_edit.asp)
|
|
**Files Created:** 1 (machine_edit.asp - renamed from editmachine.asp)
|
|
**Database Changes:** None (query-only changes)
|
|
**Status:** PRODUCTION READY
|