Publication note. I.T.S. reviewed the production captures in this article before publication. Confidential information was removed. Employee names that remain visible in audit fields are non-confidential and also appear in public corporate records.

Configuration boundary

Who Configures What?

Within ITS Framework, the database is the universal contract for configurable behavior: the application does not contain a separate hard-coded rule for every screen; it reads the rules it needs. Form structure, grid columns, cell styles, panels, module navigation, reports, validation, and access are described as governed data. The interface composes configured controls recursively, and SQL results map to those controls through shared runtime conventions.

Framework configuration: administrator or developer

This level defines the reusable scaffolding that the runtime interprets.

  • Define entity types and business classes, then determine which editors each one exposes.
  • Declare each editor's reusable control, data contract, category, properties, validation, and effective access.
  • Extend an entity by changing its relational schema, query contract, and metadata rather than adding another DTO, ORM mapping, or compiled form. The DataRow remains the runtime entity and changed rows return through structured persistence.
  • Configure validation rules, localized messages, and dialog behavior through one shared message mechanism.
  • Resolve permissions consistently across the module, editor, active class, and current read-only state.

Business configuration: end user

Within those governed boundaries, users own the catalogs and operating choices that shape daily work.

  • Create and maintain master lists such as document types, departments, titles, markets, labels, insurance types, and other business vocabularies.
  • Add, edit, reorder, activate, or retire the items in those lists without changing application code.
  • Maintain the available business actions that govern what operations may be performed.
  • Activate or deactivate an entity's class memberships so the correct editors and capabilities follow the current business role.

The distinction is deliberate: administrators and developers define the configurable grammar; end users supply and govern the business vocabulary. In both cases, changing governed data changes behavior consistently across the platform without waiting for a newly compiled application release.

The Architectural Problem: Every Noun Becomes a Screen

Most enterprise applications begin with a reasonable set of maintenance forms: users, providers, customers, facilities, carriers, job titles, address types, and security groups. The trouble appears as the business grows. Each new noun tends to become another form, another set of fields, another permission path, another validation routine, and another save implementation.

The duplication is not always obvious because the screens look different. Yet they repeat the same underlying questions:

  • What kind of thing is this record?
  • Which capabilities apply to it?
  • Which properties and specialized editors should be visible?
  • What may the current user view or change?
  • How are edits validated and persisted?

Entity Management treats those questions as one runtime contract. The stable code knows how to load an entity, resolve its capabilities, compose editors, bind data, enforce access, display validation, and save changes. The database supplies the vocabulary that varies from one application to another.

An entity is not a synonym for a person. It is anything the business needs to identify, classify, describe, relate, secure, or maintain.

The Conceptual Model

The model depends on separating concepts that are often collapsed into one class hierarchy. An entity has one structural type, may participate in several business classes, and receives editors from both. Master lists use the same machinery rather than a parallel catalog subsystem.

ENTITY
  +-- has one ----→ TYPE
  |                  +-- exposes base properties
  |                  +-- contributes type editors
  |
  +-- has many ---→ ACTIVE CLASSES (membership)
                       +-- contribute class editors

AVAILABLE EDITORS
  = type editors
  + editors from every active class
  - editors prohibited by effective access

This separation matters. Type answers what an entity fundamentally is. Class answers which roles or capabilities it currently has. Editor answers how one area of that entity is viewed or changed. Membership is the entity-specific set of active classes.

Entity: The Managed Thing

An entity is the identifiable record being managed. It has an identity such as id and name, an entity type, optional image data, editable properties, and a membership. The same abstraction can represent a person, a facility, an insurance carrier, a security group, a market, an address type, or another business concept.

At runtime, the framework's Entity object wraps a DataSet rather than translating the record into a separate domain-object graph. That package carries three concerns together:

  • The entity record and its editable values.
  • The applicable classes and their active membership state.
  • Validation errors that the interface can associate with properties or editors.

The visible record remains relational throughout the path. EntityV binds to the relevant DataTable and DataRow; edits use DataRowState and DataRowVersion; persistence sends structured changes back through the DAL. The Entity class coordinates the package, but it does not replace the database contract with a second model.

Entity Type: Structural Identity

Every entity belongs to one type. The two fundamental types in the framework are Person and Facility. Type determines the entity's structural baseline: its default image, base properties, and the editors that apply to every entity of that type.

Entity typeStructural meaningPossible examples
PersonA human identity with person-oriented propertiesUser, provider, client, covered member
FacilityAn organization, location, or institutional identityHospital, network, pharmacy, carrier, bank
Master ListA governed catalog maintained through the entity runtimeAddress type, job title, market, status

A type is not the complete business definition. Two people share a structural baseline without sharing the same capabilities. One may be a user and provider; another may be a client and covered member. The framework therefore keeps type stable and expresses changing business roles through classes.

Configuration tables such as ETypeXEdtr and ETypeXPCl connect a type to its editors and property classes. These rows let the database describe what the runtime should materialize without teaching the Entity Management module about each application-specific type in code.

Entity Class: Business Capability, Not Object Inheritance

An entity class is an applicable business role or capability. It is not a .NET base class, and it does not force one entity into one branch of an inheritance tree. A single entity may activate several classes at the same time.

  • A Person with the User class can receive Login and Password, Security Groups, Delegation, Organization, and User Extension editors.
  • A Person with the Provider class can receive a Licenses editor.
  • A Facility with the Insurance Carrier class can receive an Insurance Plans editor.
  • A Facility can also be a Network, Pharmacy, Hospital, or Bank when those capabilities apply.

The active set of classes is the entity's membership. Turning a class on or off is a business operation with visible consequences: after the membership is saved, the editor catalog is resolved again. Newly applicable editors appear; editors that no longer apply disappear.

This gives roles a concrete operational meaning. Checking User does more than attach a label to a person. It grants the entity the configured data surfaces and behaviors that make a user manageable.

Complete ITS Framework Entity Management screen showing a Facility record, its applicable classes, and the resolved editor catalog
Facility entity. The complete application context shows the facility properties and active classes on the left, the resolved editor catalog in the center, and the shared workspace on the right.
Complete Entity Management screen showing a Person entity, editor catalog, and User Security Groups editor with available and assigned groups
Class-driven editor. The complete screen preserves the Person entity and applicable classes on the left, the class-resolved editors in the center, and available versus assigned Security Groups in the workspace.

Editor: Configured Behavior in a Reusable Workspace

An editor is a focused control for viewing or changing one aspect of an entity. Login and Password, Security Groups, Organization, Licenses, Related Entities, and Insurance Plans are editors. Each can own a dataset, commands, validation rules, and persistence behavior appropriate to its job.

The database describes which reusable control should be instantiated, the named dataset that feeds it, the category under which it appears, and the type or class that makes it applicable. The runtime supplies lifecycle and hosting; the editor supplies the specialized interaction.

Editor configuration
  name          = "Security Groups"
  category      = "System Security"
  applies via   = Person + active User class
  control       = reusable security-group editor
  data contract = named DAL dataset
  access        = resolved module/editor/membership level

Runtime result
  Person without User  → editor absent
  Person with User     → editor available
  Unauthorized user    → hidden or read-only

Configuration cannot eliminate code entirely. A genuinely new interaction still needs a well-designed reusable editor implementation. The leverage appears after that mechanism exists: many entity types and classes can select it through data, avoiding another copy of the same screen logic.

Complete Entity Management screen showing a Person entity, editor catalog, and Login and Password editor with password rules, audit information, and Active Directory integration
Specialized editor. The full application view shows how Login and Password combines credential maintenance, validation requirements, audit metadata, and Active Directory integration while remaining one editor in the catalog.

How the Runtime Resolves an Entity

Opening an entity is a staged composition process, not navigation to a hard-coded form and not a request for every property the entity could possibly expose. The initial load brings back the defining entity row, its basic fields, its applicable classes, and the membership state needed to understand what the entity is.

The framework then uses configuration to resolve which editors apply to the entity type and which additional editors are contributed by its active classes. That resolution builds the editor catalog in CntrlVEdtrs; it does not load the datasets and properties behind every editor in the catalog.

INITIAL ENTITY LOAD
SQL Server: defining row + basic fields + applicable classes
                              ↓
Entity: core DataRow + membership state
                              ↓
Configuration resolver:
type editors + active-class editors + security
                              ↓
EntityV + CntrlVEdtrs: core view and editor catalog only

ON EDITOR OPEN
Selected editor
      ↓
Resolve its configured properties and named DataSet
      ↓
DAL loads and prepares that editor's data
      ↓
Instantiate + bind + secure the editor
      ↓
Changed DataRows → validation → structured save → SQL Server

Performance: Resolve First, Load on Demand

An entity may qualify for many editors, but a user normally works with only one or two during a session. Loading every editor dataset with the entity would increase SQL work, memory consumption, binding cost, and initialization time for data the user may never inspect.

Entity Management therefore pays the initial cost only for the entity's core row and membership. Each editor pays its own data cost when it is opened. Its configured named dataset can still return several related tables in one deliberate contract, and configured caching can still serve reusable reference data; on-demand loading does not mean issuing one query per property.

Performance principle: resolve editor applicability up front, but load an editor's properties and working data only when that editor is selected.

The result remains dynamic without making initial entity loading proportional to every capability the entity might have. The same compiled module can present a person as a security identity, provider, or client; present a facility as a carrier or network; and present a master list as a small catalog or a composed maintenance application.

The Three-Panel Workbench

Entity Management makes the conceptual model visible through three cooperating areas inside its MDI child form.

AreaRuntime controlResponsibility
Entity viewEntityVSearches and loads the entity; shows its identity, image, properties, and applicable classes.
Editor catalogCntrlVEdtrsLists the editors resolved from type and membership, grouped and filtered by category.
Editor workspaceSelected editor controlLoads the selected editor's configured dataset on demand, then hosts and binds the specialized control.

The layout is stable while the content changes. On the left, a user can search, inspect core properties, and alter applicable classes. In the center, the runtime displays only the editors relevant to the loaded entity and security context. On the right, the selected editor opens into a shared workspace.

This consistency reduces training cost. Users learn one navigation grammar—find the entity, understand its classes, choose an editor, make changes, save—even when the business subject is different.

Master Lists Use the Same Runtime

Enterprise applications depend on catalogs: address types, alert types, insurance types, job titles, labels, markets, medical conditions, plan groups, and many others. These lists are often scattered across settings screens or embedded as constants. Entity Management treats them as governed data.

A simple master list is a flat catalog with familiar operations such as add, remove, refresh, save, and export. A complex master list can compose several related views: for example, a workflow catalog may manage actions, status flags, action-to-flag mappings, and thread rules in one configured workspace.

Complete Entity Management screen in Master List mode with the list selector, Address Types selection, and its editor open
Simple master list. The complete view preserves the Master List selector and configured catalog on the left while Address Types opens in the shared workspace with refresh, save, add, remove, audit, and export capabilities.

The important point is not that every catalog looks identical. It is that both simple and complex catalogs use the same framework contracts. Once the necessary reusable controls exist, adding a list is primarily a matter of defining its data, views, properties, and relationships. A new property may require an ALTER TABLE and a revised SELECT, but not another maintenance application.

Complete Entity Management screen in Master List mode showing the list selector and a complex Workflows-Actions editor composed from several related views
Complex master list. The full screen keeps the Master List selector visible while Workflows-Actions composes actions, status flags, mappings, and thread configuration inside the same Entity Management runtime.

Access Is a Resolved Constraint

Showing an editor because it applies to an entity is only half of the decision. The runtime must also determine what the current user may do with it. Effective access is the most restrictive applicable level:

effective access = minimum(
    module access,
    editor access,
    membership/class access,
    current read-only state
)

result = hidden | visible read-only | editable

The same entity can therefore produce different screens for different users. One user may edit Security Groups, another may inspect them without changing anything, and another may not see that editor at all. The interface reflects the result through visible editor availability, read-only state, and access indicators.

This model avoids treating authorization as a final button check. Access participates in composition from the beginning: it affects which editors resolve, which properties are editable, and which commands can execute.

Validation and Persistence Stay with the Data Contract

Changes in Entity Management remain attached to the same runtime data package that drives the interface. Direct binding means the current DataRow carries edited values and native row state. Validation can associate errors with the affected property or editor, and the module can prevent persistence until the package is valid.

A typical save path is:

  1. Collect changed entity, membership, and editor rows.
  2. Run database and framework validation against the current package.
  3. Return errors to the validation table and mark the affected UI surfaces.
  4. When valid, send structured changes through stored procedures using UDTT or XML parameters.
  5. Accept the saved state and resolve the editor catalog again when membership changed.

The framework does not need DTOs and mapping layers between the WinForms UI and SQL Server for this internal path. The database remains authoritative; the DataSet is the runtime package; the DataTable carries schema and rows; and the DataRow is the runtime entity.

What Changes When the Business Adds a Capability?

Consider a request to manage professional licenses for providers. In a form-per-noun architecture, the team might add fields to a provider form, write permission checks, create validation, wire persistence, and repeat the same changes anywhere providers appear.

In Entity Management, the work is divided by architectural responsibility:

  1. Reuse or implement one Licenses editor with a clear data contract.
  2. Register the editor and its category.
  3. Map it to the Provider class through membership-to-editor configuration.
  4. Define the dataset, properties, access, and validation in the appropriate metadata and database contracts.

Every person with an active Provider membership then receives the capability through runtime resolution. The Entity Management shell does not change. The person view does not acquire provider-specific conditional code. The mechanism is coded once; placement and applicability are data.

Why This Architecture Fits the ITS Operating Environment

The ITS Framework desktop runtime targets .NET for Windows and operates on controlled application servers close to SQL Server. Users connect through RDP or RDS and receive the rendered desktop experience. The DAL, metadata caches, WinForms controls, editor assemblies, and database remain together inside the trusted enterprise environment; the remote client receives pixels and sends interaction.

That deployment model makes rich DataSet contracts, direct WinForms binding, shared metadata, and structured saves practical. Entity Management can compose a screen from relational data without introducing HTTP/JSON between the application server and SQL Server merely to recreate the same internal contract.

This is a deliberate fit between architecture and environment. It is not an argument that every application should expose its database contract directly.

Boundaries and Tradeoffs

A metadata-driven runtime changes where complexity lives; it does not make complexity disappear.

  • Invalid mappings can move failures from compilation to application initialization or editor-open time.
  • Type, class, editor, property, and access resolution need diagnostics that explain why a capability appeared or did not appear.
  • Changing membership can have significant consequences and therefore requires clear permissions, validation, and audit history.
  • Reusable editors need disciplined contracts; a collection of narrowly customized controls would recreate the duplication the module is meant to remove.
  • Metadata changes require governed promotion across environments because configuration is executable behavior.

The pattern is also bounded by the deployment model. Public browser applications, offline clients, untrusted networks, and partner integrations need explicit transport contracts, independent API versioning, and security boundaries. They may reuse the conceptual distinction among entity, type, class, and capability, but should not inherit an internal WinForms-to-database path without reconsidering those constraints.

One Engine, Many Business Meanings

Entity Management works because it does not confuse the business noun with the screen. The entity supplies identity and data. The type supplies structural meaning. Active classes supply business capabilities. Editors supply focused behavior. Access constrains the result. The runtime composes them into the screen the current entity and user require.

The module's real product is not a separate person editor, facility editor, or master-list editor. It is one configurable editor for describing and maintaining the things an enterprise knows.