Consolidate documentation: archive 45+ historical docs
- Move completed migration docs to docs/archive/ - Move session summaries to docs/archive/sessions/ - Rename API_ASP_DOCUMENTATION.md to docs/API.md - Archive redundant Claude reference files - Update docs/README.md as simplified index - Reduce active docs from 45+ files to 8 essential files Remaining docs: - CLAUDE.md (AI context) - TODO.md (task tracking) - docs/README.md, API.md, QUICK_REFERENCE.md - docs/ASP_DEVELOPMENT_GUIDE.md, STANDARDS.md 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
289
docs/archive/MACHINE_PAGES_FIXES_SUMMARY.md
Normal file
289
docs/archive/MACHINE_PAGES_FIXES_SUMMARY.md
Normal file
@@ -0,0 +1,289 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user