Design Version Element
Design Version Elements represents individual material options within a design version’s material slots. They are generated by joining material slot definitions with attribute option configurations and visual ordering metadata.
Key Concept
Design Version Elements joins the following tables:
- Material Slots (defined per design version, owns material_type)
- AAOJ (Attribute_Attribute_Option_Junction) - junction table
- ForcegentoAttributeOptionVisualOrder (AV) - represents the actual material
When you create a new ForcegentoAttributeOptionVisualOrder record linked to an AAOJ, a corresponding Design Version Element automatically appears in the view.
What is a Design Version Element?
A Design Version Element combines data from Material Slot, AAOJ, and ForcegentoAttributeOptionVisualOrder to provide a complete picture of available material options for each material slot. It enables:
- Material Options - Each slot’s available material choices (fabrics, paints, etc.)
- Visual Configuration - Control color tinting, thumbnails, and display properties
- Attribute Linking - Connect product attributes to specific material options
- Ordering & Display - Position and visibility rules per material option
- Localization - Support multiple languages for element names and labels
Hierarchy Relationship
Design Family → Design Version → Material Slot → Design Version Element(s)
↓
Design Product Attribute Junction (DPJ)
↓
Attribute Attribute Option Junction (AAOJ) ←→ ForcegentoAttributeOptionVisualOrder (AV) ←→ Material
↓
(generates view records)
↓
Design Version ElementsDatabase Structure:
- Material Slot - Defined at Design Version level, owns a
material_type(fabric, paint, etc.) - AAOJ (Attribute_Attribute_Option_Junction) - Junction table that links attributes to attribute options
- ForcegentoAttributeOptionVisualOrder (AV) - Represents the actual material with visual properties, position, and metadata
- Design Version Element - Database VIEW that joins the above tables
Example: Sofa Customization
Design Family: "DANISH SOFA"
└── Design Version: "v2.0"
├── Material Slot: "Element0" (material_type: "fabric")
│ └── Design Version Elements (view records):
│ ├── Element: "Standard Gray Fabric" (AAOJ: #123)
│ ├── Element: "Premium Navy Fabric" (AAOJ: #124)
│ └── Element: "Luxury Velvet" (AAOJ: #125)
│
├── Material Slot: "Element1" (material_type: "paint")
│ └── Design Version Elements (view records):
│ ├── Element: "White Oak" (AAOJ: #126)
│ ├── Element: "Walnut Stain" (AAOJ: #127)
│ └── Element: "Black Matte" (AAOJ: #128)
│
└── Material Slot: "Element2" (material_type: "wood")
└── Design Version Elements (view records):
├── Element: "Natural Wood" (AAOJ: #129)
└── Element: "Brushed Metal" (AAOJ: #130)Key Insight:
- Material Slot defines WHERE and WHAT TYPE (e.g., “Element0” accepts “fabric” materials)
- AAOJ is a junction table linking attributes to attribute options
- ForcegentoAttributeOptionVisualOrder (AV) represents the material itself
- Each AV record linked via AAOJ creates a Design Version Element (the specific material option)
Attributes & Metadata
Design Version Elements are database view records that expose joined data from multiple tables. The attributes come from different source tables in the underlying data model.
Database View Nature
Since Design Version Element is a view (not a table), you cannot directly insert/update/delete records. Instead:
- Create/update AAOJ records to link attributes
- Create/update ForcegentoAttributeOptionVisualOrder (AV) records - these represent the materials
- The view automatically reflects these changes
Core Identity
Basic identifiers and naming (from AAOJ and related tables):
| Attribute | Type | Description |
|---|---|---|
sfid | String (18 chars) | Primary key, Salesforce ID format |
index_number | Integer | Numeric identifier for 3D App |
name | String (max 80) | Design version name |
element_name | String (max 255) | AV value name |
element_label_name | String (max 255) | material label name |
element_sfid | String (18 chars) | AV sfid |
Example:
sfid: "a80OQ000002A34BYAS"
index_number: 1
name: "v2.0"
element_name: "AV-xxxxxx"
element_label_name: "Burnt Orange Fabric"
element_sfid: "a81OQ000002A35CYAS"Relationships
Links to parent entities and attribute configurations (these define what appears in the view):
| Attribute | Type | Description |
|---|---|---|
design_family_sfid | Foreign Key | Reference to parent Design Family |
design_product_attribute_junction_sfid | Foreign Key | Junction to product attributes (links to Material Slot) |
attribute_attribute_option_junction_sfid | Foreign Key | AAOJ - Junction table linking attribute to attribute option |
Data Flow:
Design Version
├── Defines Material Slots (via design_product_attribute_junction)
│ └── Each slot has material_type (fabric, paint, etc.)
│
AAOJ (Attribute_Attribute_Option_Junction)
├── Junction table: links Attribute ↔ Attribute Option
├── Does NOT contain material data
└── Referenced by: attribute_attribute_option_junction_sfid
↓
ForcegentoAttributeOptionVisualOrder (AV)
├── Represents the MATERIAL itself
├── Contains: material properties, visual settings, position, thumbnails, RGBA
├── Links to AAOJ via aaoj_sfid
└── This is the actual material record
↓
Design Version Element (VIEW)
└── Joins Material Slot + AAOJ + AV → Shows materials per slotCreating a New Material Option:
To add a new material to a slot:
- AAOJ exists or create - Junction linking attribute to attribute option
- Create ForcegentoAttributeOptionVisualOrder (AV) - This represents the material
- Design Version Element automatically appears in the view
Example:
// Step 1: AAOJ junction (may already exist)
AAOJ Record #131
├── attribute_sfid: "element0_attribute" (links to Material Slot "Element0")
├── attribute_option_sfid: "burnt_orange_option"
└── Purpose: Junction linking attribute to option
// Step 2: ForcegentoAttributeOptionVisualOrder (THE MATERIAL)
AV Record #450
├── aaoj_sfid: #131 (references AAOJ)
├── sfid: "AV-xxxxxx"
├── name: "v2.0"
├── position: 10
├── thumbnail_on_app: "cloudinary.com/..."
├── r: 0.9, g: 0.5, b: 0.2, a: 1.0 (orange tint)
├── visibility_app_jp_ja: "Catalog, Search"
├── is_default: false
└── This IS the material record
// Step 3: Design Version Element appears automatically
Design Version Element (view record)
├── sfid: (computed from view)
├── attribute_attribute_option_junction_sfid: #131
├── name: "v2.0" (from AV)
├── material_slot: "Element0" (from Material Slot)
├── material_type: "fabric" (from Material Slot)
├── position: 10 (from AV)
├── thumbnail_on_app: "cloudinary.com/..." (from AV)
└── r, g, b, a: from AVMaterial Properties
Material type and slot information (inherited from Material Slot definition):
| Attribute | Type | Description | Source |
|---|---|---|---|
material_type | String (Enum) | Type of material (fabric, paint, leather, etc.) | From Material Slot |
base_material_type | String | Base material classification | From AV (ForcegentoAttributeOptionVisualOrder) |
replaceable_materials | String/Array | Materials that can replace this element | From Material Slot configuration |
material_slot | String | Slot identifier where material is applied | From Material Slot |
Material Type Values:
The material_type is owned by the Material Slot, not the individual element. All Design Version Elements within the same slot share the same material_type.
| Type | Common Use Cases |
|---|---|
fabric | Upholstery, cushions, curtains |
paint | Wood frames, walls, metal finishes |
leather | Premium upholstery, accents |
wood | Natural wood finishes, flooring |
metal | Hardware, legs, frames |
wallpaper | Wall coverings |
hdri | Environmental lighting |
floor | Flooring materials |
picture | Decorative images, artwork |
Example Configuration:
// Material Slot definition
Material Slot: "Element0"
├── material_type: "fabric"
├── material_slot: "cushion_main"
└── replaceable_materials: ["fabric", "leather", "velvet"]
// All materials (AV records) in this slot inherit the material_type
AV Record: "Gray Fabric" (material_type: "fabric" from slot)
AV Record: "Navy Fabric" (material_type: "fabric" from slot)
AV Record: "Beige Fabric" (material_type: "fabric" from slot)
// Separate slot with different material_type
Material Slot: "Element1"
├── material_type: "paint"
├── material_slot: "frame_surface"
└── replaceable_materials: ["paint", "stain", "lacquer"]
AV Record: "White Oak" (material_type: "paint" from slot)
AV Record: "Walnut" (material_type: "paint" from slot)Slot-Level Material Type
The material_type is defined at the Material Slot level, not per element. This ensures consistency - all fabric options appear together, all paint options together, etc.
Default Material Flags
Boolean flags indicating which default material category this element belongs to:
| Attribute | Type | Description |
|---|---|---|
default_fabric | Boolean | Default fabric material element |
default_paint | Boolean | Default paint material element |
default_leather | Boolean | Default leather material element |
default_floor | Boolean | Default floor material element |
default_curtain | Boolean | Default curtain material element |
default_hdri | Boolean | Default HDRI environment element |
default_wallpaper | Boolean | Default wallpaper material element |
default_picture | Boolean | Default picture/artwork element |
Usage Pattern:
Each Design Version Element typically has only one default flag set to true:
// Cushion fabric element
default_fabric: true
default_paint: false
default_leather: false
// ... other flags: false
// Frame paint element
default_fabric: false
default_paint: true
default_leather: false
// ... other flags: false
// Premium leather option
default_fabric: false
default_paint: false
default_leather: true
// ... other flags: falseApplication Flow:
- Initial Load - System checks default flags
- Material Assignment - Applies the flagged material type
- User Override - Customer can change if
replaceable_materialsallows - Rendering - 3D engine applies material to specified
material_slot
Default Material Priority
Only one default flag should be true per element. Multiple flags set to true may cause undefined behavior in material application.
Visual Properties
Controls appearance, color tinting, and thumbnail display (from ForcegentoAttributeOptionVisualOrder - the material record):
| Attribute | Type | Description | Source |
|---|---|---|---|
thumbnail_on_app | URL | Thumbnail image URL for app display | AV (ForcegentoAttributeOptionVisualOrder) |
element_thumbnail_url | URL | Element-specific thumbnail | AV (ForcegentoAttributeOptionVisualOrder) |
r | Float (0-1) | Red channel for texture tinting | AV (ForcegentoAttributeOptionVisualOrder) |
g | Float (0-1) | Green channel for texture tinting | AV (ForcegentoAttributeOptionVisualOrder) |
b | Float (0-1) | Blue channel for texture tinting | AV (ForcegentoAttributeOptionVisualOrder) |
a | Float (0-1) | Alpha channel for transparency | AV (ForcegentoAttributeOptionVisualOrder) |
original_h | Integer | Original texture height in pixels | AV (ForcegentoAttributeOptionVisualOrder) |
original_w | Integer | Original texture width in pixels | AV (ForcegentoAttributeOptionVisualOrder) |
RGBA Color Tinting:
The RGBA values allow runtime color adjustments without creating new textures:
// Pure white (no tint)
r: 1.0, g: 1.0, b: 1.0, a: 1.0
// Red tint (25% red overlay)
r: 1.0, g: 0.75, b: 0.75, a: 1.0
// Blue tint (50% blue overlay)
r: 0.5, g: 0.5, b: 1.0, a: 1.0
// Semi-transparent (50% opacity)
r: 1.0, g: 1.0, b: 1.0, a: 0.5Thumbnail URLs:
Both thumbnail fields serve different purposes:
thumbnail_on_app: Used in mobile/web apps for material selection UIelement_thumbnail_url: Used in catalog and preview contexts
Example:
thumbnail_on_app: "https://res.cloudinary.com/.../cushion_fabric_thumb.jpg"
element_thumbnail_url: "https://res.cloudinary.com/.../cushion_fabric_preview.jpg"
r: 1.0
g: 1.0
b: 1.0
a: 1.0
original_h: 1024
original_w: 1024Color Tinting Workflow:
- Load base texture from asset system
- Apply RGBA multipliers in shader
- Result: Tinted material without new texture file
- Performance: Fast, memory-efficient color variations
Positioning and Display
Controls element ordering and visibility (from ForcegentoAttributeOptionVisualOrder - the material record):
| Attribute | Type | Description | Source |
|---|---|---|---|
position | Integer | Sort order position in UI lists | AV (ForcegentoAttributeOptionVisualOrder) |
is_default | Boolean | Whether this is the default element for its slot | AV (ForcegentoAttributeOptionVisualOrder) |
visibility_app_jp_ja | String (Enum) | Visibility settings for Japanese app | AV (ForcegentoAttributeOptionVisualOrder) |
visibility_limited | Boolean | Whether visibility is restricted | AV (ForcegentoAttributeOptionVisualOrder) |
Position Sorting:
Lower position values appear first in UI. These values come from ForcegentoAttributeOptionVisualOrder (AV - the material records):
Material Slot: "Element0"
├── Material (AV): "Standard Gray" (position: 1, AAOJ: #123) ← Shown first
├── Material (AV): "Premium Navy" (position: 2, AAOJ: #124)
├── Material (AV): "Luxury Beige" (position: 3, AAOJ: #125)
└── Material (AV): "Exclusive Velvet" (position: 10, AAOJ: #126) ← Shown lastDefault Element:
Only one material per material_slot should have is_default: true. This is set in the ForcegentoAttributeOptionVisualOrder (AV) record:
// Element0 slot - multiple material options
Material (AV): "Standard Fabric" (is_default: true, AAOJ: #123) ← Selected by default
Material (AV): "Premium Fabric" (is_default: false, AAOJ: #124)
Material (AV): "Leather Option" (is_default: false, AAOJ: #125)Visibility Controls:
| Visibility Setting | Behavior |
|---|---|
"Catalog, Search" | Visible in both catalog and search |
"Catalog" | Catalog only, hidden from search |
"Exclusive Custom Catalog" | Custom/curated collections only |
"Don't Show in App" | Hidden from all UI |
Visibility Limited:
When visibility_limited: true:
- Element restricted to specific user groups
- May require special permissions
- Typically used for premium/exclusive options
Localization
Multi-language support for element names and labels (from various source tables):
| Attribute | Type | Description | Source |
|---|---|---|---|
japanese | String (max 50) | Japanese element name | AAOJ/Attribute Option |
color_palette_tab_label | String | English label for color palette UI | AV (ForcegentoAttributeOptionVisualOrder) |
color_palette_tab_label_ja | String | Japanese label for color palette UI | AV (ForcegentoAttributeOptionVisualOrder) |
Localization Example:
// Element configuration
name: "Seat Cushion Fabric"
japanese: "座面生地"
color_palette_tab_label: "Cushion Colors"
color_palette_tab_label_ja: "クッションカラー"UI Display Flow:
User Language: Japanese (ja-JP)
├── Element Name: Use 'japanese' field
│ └── Fallback: Use 'name' if japanese is empty
│
└── Color Palette Tab: Use 'color_palette_tab_label_ja'
└── Fallback: Use 'color_palette_tab_label' if _ja is empty
User Language: English (en-US)
├── Element Name: Use 'name' field
└── Color Palette Tab: Use 'color_palette_tab_label'Best Practices:
- Always provide English (
name,color_palette_tab_label) - Provide Japanese for Japan market (
japanese,color_palette_tab_label_ja) - Keep translations concise (50 character limit for Japanese names)
- Use culturally appropriate terminology
Localization Priority
Japanese market customization UI always checks localized fields first. Missing translations fall back to English to ensure UI functionality.
Basic Sofa Customization
Simple furniture with multiple material slots:
Example: Two-Tone Sofa
Design Family: "NORDIC SOFA"
└── Design Version: "1.0"
├── Material Slot: "Element0" (material_type: "fabric")
│ └── Materials (AV records):
│ ├── AV: "Gray Linen" (AAOJ: #110, position: 1, is_default: true)
│ ├── AV: "Navy Cotton" (AAOJ: #111, position: 2)
│ └── AV: "Brown Leather" (AAOJ: #112, position: 3)
│
├── Material Slot: "Element1" (material_type: "paint")
│ └── Materials (AV records):
│ ├── AV: "White Oak" (AAOJ: #120, position: 1, is_default: true)
│ ├── AV: "Walnut Stain" (AAOJ: #121, position: 2)
│ └── AV: "Black Matte" (AAOJ: #122, position: 3)
│
└── Material Slot: "Element2" (material_type: "wood")
└── Materials (AV records):
├── AV: "Natural Wood" (AAOJ: #130, position: 1, is_default: true)
├── AV: "Dark Walnut" (AAOJ: #131, position: 2)
└── AV: "Brushed Metal" (AAOJ: #132, position: 3)Data Structure Behind the Scenes:
Material Slot Table:
├── "Element0" → material_type: "fabric"
├── "Element1" → material_type: "paint"
└── "Element2" → material_type: "wood"
AAOJ Table (9 junction records):
├── #110, #111, #112 → linked to "Element0" attribute
├── #120, #121, #122 → linked to "Element1" attribute
└── #130, #131, #132 → linked to "Element2" attribute
ForcegentoAttributeOptionVisualOrder (AV) Table (9 material records):
├── Each AV record IS a material
├── Contains: name, thumbnails, position, visibility, RGBA, dimensions
├── References AAOJ via aaoj_sfid
└── These ARE the actual materials
Design Version Element VIEW:
└── Joins Material Slot + AAOJ + AV → Shows 9 materials across 3 slotsCustomization Flow:
- Customer selects sofa from catalog
- UI displays material slots (seat, frame, legs)
- Each slot shows its Design Version Elements in
positionorder - Default elements (is_default: true) are pre-selected
- Customer can change to other options within each slot
- 3D preview updates materials in real-time
Complex Multi-Element Design
Furniture with many customization options across multiple slots:
Example: Modular Sectional Sofa
Design Family: "MODULAR SECTIONAL"
└── Design Version: "3.0"
├── Material Slot: "main_cushion" (material_type: "fabric")
│ └── Design Version Elements (view records):
│ ├── "Standard Linen" (AAOJ: #200, position: 1, is_default: true)
│ ├── "Premium Cotton" (AAOJ: #201, position: 2)
│ ├── "Velvet Luxury" (AAOJ: #202, position: 3)
│ └── "Leather Premium" (AAOJ: #203, position: 4)
│
├── Material Slot: "accent_cushion" (material_type: "fabric")
│ └── Design Version Elements (view records):
│ ├── "Matching Accent" (AAOJ: #210, position: 1, is_default: true)
│ ├── "Contrast Blue" (AAOJ: #211, position: 2, r: 0.3, g: 0.5, b: 0.9)
│ └── "Contrast Red" (AAOJ: #212, position: 3, r: 0.9, g: 0.3, b: 0.3)
│
├── Material Slot: "back_panel" (material_type: "fabric")
│ └── Design Version Elements (view records):
│ ├── "Standard Fabric" (AAOJ: #220, position: 1, is_default: true)
│ └── "Leather Back" (AAOJ: #221, position: 2)
│
├── Material Slot: "frame_finish" (material_type: "paint")
│ └── Design Version Elements (view records):
│ ├── "Natural Oak" (AAOJ: #230, position: 1, is_default: true)
│ ├── "Walnut Stain" (AAOJ: #231, position: 2)
│ └── "Black Lacquer" (AAOJ: #232, position: 3)
│
├── Material Slot: "leg_hardware" (material_type: "metal")
│ └── Design Version Elements (view records):
│ ├── "Brushed Steel" (AAOJ: #240, position: 1, is_default: true)
│ ├── "Polished Chrome" (AAOJ: #241, position: 2)
│ └── "Matte Black" (AAOJ: #242, position: 3)
│
├── Material Slot: "piping" (material_type: "fabric")
│ └── Design Version Elements (view records):
│ ├── "Standard Piping" (AAOJ: #250, position: 1, is_default: true)
│ └── "Contrast Piping" (AAOJ: #251, position: 2, visibility_limited: true)
│
└── Material Slot: "throw_pillow" (material_type: "fabric")
└── Design Version Elements (view records):
├── "Matching Pillow" (AAOJ: #260, position: 1, is_default: true)
├── "Velvet Pillow" (AAOJ: #261, position: 2)
└── "Pattern Pillow" (AAOJ: #262, position: 3)Database Record Count:
- Material Slots: 7
- AAOJ Records: 20 (links to attribute options)
- ForcegentoAttributeOptionVisualOrder Records: 20 (visual properties)
- Design Version Elements (VIEW): 20 (automatically generated)
Benefits:
- ✅ Granular control over every material surface
- ✅ Each slot groups related material options
- ✅ Mix and match across slots
- ✅ Color tinting for accent elements (RGB values)
- ✅ Premium options via
visibility_limited - ✅ Organized by slot, then by
positionwithin slot
Room Scene Configuration
Environmental elements for 3D room scenes with multiple material slots:
Example: Complete Room Design
Design Family: "LIVING ROOM SCENE"
└── Design Version: "2.0"
├── Material Slot: "sofa_upholstery" (material_type: "fabric")
│ └── Design Version Elements:
│ ├── "Gray Linen" (AAOJ: #300)
│ ├── "Navy Cotton" (AAOJ: #301)
│ └── "Beige Velvet" (AAOJ: #302)
│
├── Material Slot: "wall_surface" (material_type: "paint")
│ └── Design Version Elements:
│ ├── "Warm White" (AAOJ: #310)
│ ├── "Light Gray" (AAOJ: #311)
│ └── "Sage Green" (AAOJ: #312)
│
├── Material Slot: "accent_wall" (material_type: "wallpaper")
│ └── Design Version Elements:
│ ├── "No Wallpaper" (AAOJ: #320, is_default: true)
│ ├── "Geometric Pattern" (AAOJ: #321)
│ ├── "Floral Design" (AAOJ: #322)
│ └── "Solid Color" (AAOJ: #323)
│
├── Material Slot: "floor_surface" (material_type: "floor")
│ └── Design Version Elements:
│ ├── "Oak Hardwood" (AAOJ: #330)
│ ├── "Marble Tile" (AAOJ: #331)
│ └── "Beige Carpet" (AAOJ: #332)
│
├── Material Slot: "window_treatment" (material_type: "fabric")
│ └── Design Version Elements:
│ ├── "Sheer White" (AAOJ: #340, default_curtain: true)
│ ├── "Linen Drapes" (AAOJ: #341)
│ └── "Blackout Curtain" (AAOJ: #342)
│
├── Material Slot: "artwork_frame" (material_type: "picture")
│ └── Design Version Elements:
│ ├── "Abstract Art 1" (AAOJ: #350, original_h: 1920, original_w: 1080)
│ ├── "Abstract Art 2" (AAOJ: #351, original_h: 1920, original_w: 1080)
│ └── "Landscape Photo" (AAOJ: #352, original_h: 1920, original_w: 1080)
│
└── Material Slot: "environment_light" (material_type: "hdri")
└── Design Version Elements:
├── "Daylight Soft" (AAOJ: #360, default_hdri: true)
├── "Sunset Warm" (AAOJ: #361)
└── "Studio Bright" (AAOJ: #362)Scene Composition:
This configuration enables complete room customization through 7 material slots:
| Slot | Material Type | Purpose | Elements |
|---|---|---|---|
| sofa_upholstery | fabric | Furniture materials | 3 options |
| wall_surface | paint | Wall finishes | 3 options |
| accent_wall | wallpaper | Feature wall | 4 options |
| floor_surface | floor | Flooring materials | 3 options |
| window_treatment | fabric | Curtains/drapes | 3 options |
| artwork_frame | picture | Wall decorations | 3 options |
| environment_light | hdri | Lighting atmosphere | 3 options |
Total: 7 Material Slots, 22 Design Version Elements (view records)
Premium Material Options
Exclusive materials with visibility controls managed through ForcegentoAttributeOptionVisualOrder:
Example: Luxury Armchair Collection
Design Family: "LUXURY ARMCHAIR"
└── Design Version: "1.0"
└── Material Slot: "upholstery" (material_type: "fabric")
└── Design Version Elements (view records from different tiers):
├── "Standard Fabric" (Public Tier)
│ ├── AAOJ: #400
│ ├── position: 1
│ ├── is_default: true
│ ├── visibility_app_jp_ja: "Catalog, Search"
│ └── visibility_limited: false
│
├── "Premium Linen" (Public Tier)
│ ├── AAOJ: #401
│ ├── position: 2
│ ├── is_default: false
│ ├── visibility_app_jp_ja: "Catalog, Search"
│ └── visibility_limited: false
│
├── "Premium Leather" (Limited Tier)
│ ├── AAOJ: #402
│ ├── position: 3
│ ├── is_default: false
│ ├── visibility_app_jp_ja: "Catalog"
│ └── visibility_limited: true
│
├── "Exclusive Velvet" (Exclusive Tier)
│ ├── AAOJ: #403
│ ├── position: 4
│ ├── is_default: false
│ ├── visibility_app_jp_ja: "Exclusive Custom Catalog"
│ └── visibility_limited: true
│
└── "Italian Leather" (Hidden)
├── AAOJ: #404
├── position: 5
├── is_default: false
├── visibility_app_jp_ja: "Don't Show in App"
└── visibility_limited: trueVisibility Configuration:
All visibility settings come from ForcegentoAttributeOptionVisualOrder records:
| AAOJ ID | Material Option | Visibility Setting | Limited? | Who Sees It |
|---|---|---|---|---|
| #400 | Standard Fabric | "Catalog, Search" | false | Everyone |
| #401 | Premium Linen | "Catalog, Search" | false | Everyone |
| #402 | Premium Leather | "Catalog" | true | Registered users |
| #403 | Exclusive Velvet | "Exclusive Custom Catalog" | true | VIP/Partners |
| #404 | Italian Leather | "Don't Show in App" | true | Admin only |
Data Flow Diagram
┌─────────────────┐
│ Design Version │
│ │
└────────┬────────┘
│ has many
▼
┌─────────────────┐ owns ┌──────────────┐
│ Material Slot │─────────────────│material_type │
│ │ └──────────────┘
└────────┬────────┘
│ defines attribute
▼
┌─────────────────────────┐
│ Attribute │
│ │
└────────┬────────────────┘
│ linked by
▼
┌────────────────────────────┐ ┌──────────────────┐
│ AAOJ │◄───────│ AttributeOption │
│ (junction table) │ links │ (japanese name) │
└────────┬───────────────────┘ └──────────────────┘
│ referenced by
▼
┌──────────────────────────────────┐
│ ForcegentoAttributeOption │
│ VisualOrder (AV) │
│ **THIS IS THE MATERIAL** │
│ │
│ Contains: │
│ - name, thumbnails │
│ - position, visibility │
│ - RGBA color values │
│ - dimensions (h, w) │
│ - localization labels │
│ - base_material_type │
└──────────────────────────────────┘
│
│ all joined into
▼
┌──────────────────────────────────┐
│ DesignVersionElement │
│ (DATABASE VIEW - read only) │
│ Shows materials per slot │
└──────────────────────────────────┘Working with the View
Read-Only View
You cannot directly INSERT, UPDATE, or DELETE Design Version Element records. All changes must be made to the underlying source tables.
Related Pages
Core Resources
- Design Version - Parent design version
- Design Family - Top-level design hierarchy
- Design Version Mesh - 3D mesh variants
- Material Slot - Material slot definitions (slot owns material_type)
Database Architecture
- AAOJ (Attribute_Attribute_Option_Junction) - Core junction table
- ForcegentoAttributeOptionVisualOrder - Visual ordering table
- Database Views - Understanding views vs tables
- Material Table - Material asset records
Material System
- Materials - Overview - Material system introduction
- Materials - Application - Applying materials to meshes
- Material Types - Fabric, paint, leather, etc.
Customization
- Color Palette System - Color selection UI
- Material Swapping - Runtime material changes
- Texture Tinting - RGBA color tinting
Technical Details
- Localization - Multi-language support
- Visibility Controls - Catalog visibility rules
- Asset Loading - Material texture loading
- Junction Tables - Many-to-many relationships