RequestCenter (Business Logic)
Progetto di Business Logic del verticale RequestCenter / Service Desk: modella ticket (
Request), interventi, allegati, approvazioni, tipologie e la logica di dominio invocata dal front-endRequestCenterWebe dai servizi WCF. Class library VB.NET su .NET Framework 4.8, con sibling net8 di re-linkRequestCenterXNET. Classificazione complessiva: VERIFIED per struttura, dipendenze e pattern (evidenza diretta da.vbproj+ sorgenti); alcune affermazioni di runtime marcate INFERRED.
Scopo
Contiene le entità di dominio e le regole del modulo Service Desk: la classe Request (ticket) con le sue classi annidate (TenantInfo, SpatialInfo, ContractInfo, CompanyInfo, CostInfo, …), gli oggetti collegati (Intervent, Approval, Complaint, File, RequestType, RequestCategory, CallType, …), le loro collezioni tipizzate e gli helper di configurazione/transazione. Non apre connessioni né esegue SQL in proprio: delega ogni accesso ai dati alla DAL selezionata a runtime tramite DALFactory (vedi Accesso ai dati).
Posizione nel repository
- Repo:
InfocadWeb - Percorso progetto:
WebMachine/RequestCenter/RequestCenter.vbproj AssemblyName=RequestCenter;RootNamespace=Descor.RequestCenter.
Tipo di progetto
Libreria di classi (OutputType=Library), MSBuild legacy (non-SDK, ToolsVersion="12.0"), linguaggio VB.NET, OptionStrict On. Il sibling RequestCenterXNET è una libreria SDK-style net8 che re-linka i medesimi sorgenti (vedi sezione dedicata).
Framework e runtime
TargetFrameworkVersion=v4.8(net48). VERIFIED (RequestCenter.vbproj:23).- Piattaforme di build definite:
AnyCPU,x64,x86, più una configTestParam— tutte Debug/Release. VERIFIED (RequestCenter.vbproj:41-156). - Codice condizionale per il porting net8 tramite guardia
#If NET5_0_OR_GREATERpresente in vari file (es.Classes/Request.vb:15,DALFactory.vb:1). VERIFIED.
Responsabilità
- Modellazione del ticket e del suo ciclo di vita: creazione, descrizione, classificazione (tipo/categoria/tipologia/call type), associazione a tenant, spazio, contratto, azienda, costo, chiusura, cancellazione logica.
- Orchestrazione della persistenza attraverso le interfacce DAL (
IRequestDALe famiglia) senza conoscere il provider concreto. - Gestione della transazione applicativa (
Transaction/MobileTransaction). - Localizzazione dei messaggi (risorse
dictionary.*).
Dettaglio della classe centrale nella pagina class-Ticket-Request.md.
Entry point
Il progetto è una libreria: non ha un Main. È invocato da due famiglie di consumatori (INFERRED dai riferimenti e dal contesto di batch, coerente con FLOW-REQ-001):
- Front-end Web Forms
RequestCenterWeb— es. il controlUserControls/FlowActions/makeTicket.ascx(code-behindmakeTicket.ascx.vb, triggerbtnPost_Clicka:82) istanziaNew RequestCenter.Transaction, apre la connessione/transazione e costruisce/salva unRequest. SUPPORTED (FLOW-REQ-001). - Servizi WCF del verticale (
RequestsReaderWCF.svc,RequestsCacheService.svc,ExtraFlowActionsProxy.svc) che espongono operazioni di lettura/azione sui ticket appoggiandosi alla stessa BL. INFERRED.
Punto di ingresso interno chiave: DALFactory (DALFactory.vb:19), factory Shared che risolve per riflessione l'assembly DAL e le sue implementazioni (GetRequestDAL(), GetTransactionDAL(), ecc.).
Struttura interna
Cartelle principali (da RequestCenter.vbproj):
Classes/— entità di dominio (es.Request.vb,Intervent.vb,Approval.vb,Complaint.vb,File.vb,RequestType.vb,CallType.vb,SystemSettings.vb, …).Classes/Bases/— basi comuni (LogicalDeleteBase.vb).Classes/Collections/— collezioni tipizzate (RequestCollection.vb,InterventCollection.vb, …).Collections/— primitive di collezione generiche (KeyedCollection.vb,IndexedKeyedCollection.vb, varianti concurrent/read-only).Interfaces/— contratti (TicketInterfaces.vbconIRequestDALa:39,BaseInterfaces.vb,TransactionInterfaces.vb,TenantInterfaces.vb,DataAnalysisInterfaces.vb,ExtensionInterfaces.vb,SystemSettingsInterfaces.vb,UserInterfaces.vb).Transaction/—Transaction.vb(TransactioneMobileTransaction).Configuration/—Settings.vb,SettingsSection.vb,Elements/*(elementi di configurazione tipizzati).Constants/—Constants.vb.Exceptions/—ControlNotFoundException,ExternalDataNotFoundException,NotLoadedException.Helpers/—Utility.vb.Resources/— dizionari di localizzazione (dictionary.resx,.it,.it-IT,.de,.de-DE) con Designer generati.My Project/— file generati (AssemblyInfo.vb,*.Designer.vb). NON documentati come simboli.DALFactory.vb(radice del progetto).
Namespace principali
Descor.RequestCenter(radice).Descor.RequestCenter.Ticket(contieneRequeste le sue classi annidate —Classes/Request.vb:22,25).Descor.RequestCenter.Interfacescon sotto-namespaceTicket,Transaction,DataAnalysis,System,UserPolicy(usati inDALFactory.vb:10-14).Descor.RequestCenter.Configuration,Descor.RequestCenter.Constants,Descor.RequestCenter.Exceptions.
Dipendenze in ingresso
RequestCenterWeb(front-end Web Forms del verticale) — consuma la BL per creare/leggere/gestire ticket. INFERRED (nessunProjectReferencediretto verificabile qui; consumo tipico via reference d'assembly / codice web).- Servizi WCF del verticale (
.svcsopra elencati). INFERRED. - Sibling di porting
RequestCenterXNETre-linka i sorgenti (vedi sotto). VERIFIED (RequestCenterXNET.vbproj:18-131).
Dipendenze in uscita
ProjectReference (unico):
..\DataManager\DataManager.vbproj(RequestCenter.vbproj:411) — motorecm(GlobalDataManager) usato dalla DAL. VERIFIED.
Reference con HintPath verso ..\..\..\Assembly\ (assembly 4.8, VERIFIED RequestCenter.vbproj:157-193):
Descor.CommonDescor.Global.GlobalControllers,Descor.Global.GlobalInterface,Descor.Global.GlobalSharedObjectsDescor.Property.PropertyControllers,Descor.Property.PropertyInterface,Descor.Property.PropertySharedObjectsDescor.Stock.StockControllers,Descor.Stock.StockInterface,Descor.Stock.StockSharedObjects
Reference framework: System, System.configuration, System.Data, System.Data.OracleClient, System.Runtime.Serialization, System.ServiceModel, System.Web, System.Web.ApplicationServices, System.Xml (:194-202).
Nota:
System.Data.OracleClientè referenziato dal progetto BL, ma l'accesso Oracle effettivo avviene nella DAL (RequestCenter.DAL.OracleODP); la BL delega e non apre connessioni inline. SUPPORTED.
Configurazione
Configurazione tipizzata via Configuration/Settings.vb + SettingsSection.vb + Configuration/Elements/*. Chiavi rilevanti esposte come proprietà Shared ReadOnly:
DALTypeName→ leggeDALType(Settings.vb:131-135) — nome dell'assembly/namespace DAL da caricare per riflessione. VERIFIED.DataProviderName→DataProviderName(Settings.vb:125-128).DALUseReaders→DALUseReaders(Settings.vb:137-141) — commuta letture DataSet vs DataReader.- Altri:
MailingMode,ExpireTarget,ExpireStart, ecc.
Il file app.config è incluso come None (RequestCenter.vbproj:396).
API esposte
Nessuna API diretta (no .asmx/.svc/ApiController in questo progetto). L'esposizione remota avviene nel front-end/WCF del verticale, che consuma questa BL. Vedi ../../../04-api/index.md.
Accesso ai dati
Pattern Factory + interfacce + riflessione:
DALFactory(DALFactory.vb:19) carica l'assembly DAL conReflection.Assembly.Load(:24-34): in net48 usaConfiguration.Settings.DALTypeName; sotto#If NET5_0_OR_GREATERappende il suffisso"XNET"(:27), selezionandoRequestCenter.DAL.OracleODPXNET.- Ogni
Get<Entità>DAL()risolve un tipoDescor.<DALType>.<Entità>DALe ne cachea l'istanza (_instances,:22,36-41), restituendola come interfaccia (IRequestDAL,ITransactionDAL, …). - La classe
Transaction(Transaction/Transaction.vb:3) esponeOpenConnection(),Begin(),Commit(),Rollback(),CloseConnection()delegando aDALFactory.GetTransactionDAL(:5-28);MobileTransactionfa lo stesso suGetMobileTransactionDAL(:32-58).
La DAL concreta invoca i package Oracle GESTREQUEST / GESTREQUEST_T2 via l'helper cm di GlobalDataManager. Dettaglio nella pagina project-RequestCenter-DAL.md. Schema e oggetti DB: ../../../05-databases/REQUESTCENTER_TEST38/index.md, tables.md, procedures.md; mappa CRUD ../../../05-databases/crud-matrix.md.
Il caricamento DAL per riflessione implica che la ricerca statica dei chiamanti non è affidabile per stabilire l'uso delle implementazioni DAL: i tipi
<Entità>DALsono risolti per nome a runtime. VERIFIED (DALFactory.vb:24-41,199-217).
Job e processi in background
Nessun servizio Windows o job schedulato definito in questo progetto (libreria pura). Job del verticale risiedono altrove (ServiceJob.RequestCenter). INFERRED.
Integrazioni
- Localizzazione:
Microsoft.Extensions.Localizationsotto net8 (DALFactory.vb:203-206),HttpContext.GetGlobalResourceObjectsotto net48 (:208). VERIFIED. - Dipendenza dai domini
Global,Property,Stock(assembly Descor, vedi Dipendenze in uscita).
Gestione degli errori
Eccezioni di dominio dedicate in Exceptions/: ControlNotFoundException, ExternalDataNotFoundException, NotLoadedException. DALFactory lancia una Exception localizzata (notAllowedAction) quando il nome classe DAL è vuoto (DALFactory.vb:200-209). VERIFIED. La gestione transazionale (commit/rollback) è orchestrata dal chiamante web (FLOW-REQ-001, passi commit :216 / rollback nel Catch).
Logging
Nessun framework di logging dedicato individuato in questo progetto oltre a NullLoggerFactory usato per costruire il localizer net8 (DALFactory.vb:15,203). UNKNOWN per un canale di logging applicativo proprio del BL.
Test
Nessun test automatico nel repository (0 progetti xUnit/NUnit/MSTest). Copertura non misurata — non dichiarata.
Procedure di build
- .NET Framework 4.8 (Windows, NON-verificato su questo host macOS/no Oracle Client):
Richiede la presenza degli assembly Descor.* sottomsbuild InfocadWeb/WebMachine/RequestCenter/RequestCenter.vbproj -p:Configuration=Debug..\..\..\Assembly\e la build diDataManager. - Il progetto fa parte delle solution web (
WebMachine.slne affini) — build completa viaWebMachine.sln.
Procedure di debug
Debug tramite il processo host web (IIS/ASP.NET Web Forms di RequestCenterWeb) o i servizi WCF che caricano l'assembly. Il selettore DAL dipende dalla chiave di config DALType: verificare tale valore quando si diagnostica quale provider è in uso. NON-verificato su questo host.
Come estendere il progetto
- Nuova entità DAL: definire l'interfaccia in
Interfaces/, aggiungere unGet<Entità>DAL()inDALFactory.vbseguendo il patternGetInstanceOfType(Of I…)(GetAssemblyNamespace("Descor", Settings.DALTypeName, "…DAL")), e implementarla nel progetto DAL. - Nuova entità di dominio: aggiungere la classe in
Classes/(ed eventuale collezione inClasses/Collections/), registrandola sia inRequestCenter.vbprojsia nel re-linkRequestCenterXNET.vbproj. - Mantenere
OptionStrict On; rispettare le guardie#If NET5_0_OR_GREATERper il porting net8. - Per un nuovo cliente, seguire il pattern di customizzazione del prodotto (progetti dedicati) anziché ramificare la BL condivisa.
Aree rischiose
Classes/Request.vbmonolite (~5790 righe): singola classe con numerose classi annidate e responsabilità multiple; alto rischio di regressione su modifiche. SUPPORTED (dimensione file). Dettaglio in class-Ticket-Request.md.- Autorizzazione bypassabile oltre il confine WCF/.NET Remoting (TD-008): i grant verificati solo nella UI Web Forms possono non essere ri-verificati quando la stessa BL è invocata da chiamanti server-side/integrazione. Vedi ../../../14-technical-debt/reperti-prioritari.md (TD-008, sistemico su 9 domini).
- Caricamento DAL per riflessione: errori di configurazione (
DALTypeerrato) si manifestano solo a runtime come tipo non trovato. INFERRED.
Debito tecnico
- TD-008 — grant UI non ri-verificati oltre il confine .NET Remoting/WCF (registro ../../../14-technical-debt/reperti-prioritari.md).
- Monolite
Request.vb(candidato a scomposizione; non ancora tracciato come TD dedicato — UNKNOWN).
Sibling net8: RequestCenterXNET
Progetto SDK-style net8 (RequestCenterXNET.vbproj:1) che non duplica i sorgenti ma li re-linka dal progetto 4.8 tramite <Compile Include="..\RequestCenter\...vb" Link="..." />.
TargetFramework=net8.0;RootNamespace=Descor.RequestCenter;AssemblyName=RequestCenterXNET;FileVersion=2.0.0.0. VERIFIED (:2-7).OutputPath=..\..\..\Assembly\(Debug e Release,:9-15).- Re-link di ~115 file BL (
Classes/*,Classes/Collections/*,Collections/*,Configuration/*,Constants/*,Exceptions/*,Helpers/*,Interfaces/*,Transaction/*, Designer dizionari) conLink=(:18-131). VERIFIED. EmbeddedResourcere-linkati:dictionary.it-IT.resx,dictionary.it.resx,dictionary.resx(:135-137).PackageReference(:141-143):Microsoft.AspNetCore.SystemWebAdapters1.3.2,Microsoft.Extensions.Localization8.0.4,System.Configuration.ConfigurationManager8.0.0. VERIFIED.- Reference con HintPath (11) (
:147-179):DataManagerXNET(da..\..\..\Assembly\net8.0\DataManagerXNET.dll) più 10 assembly Descor.* 4.8 —Descor.Common,Descor.Global.GlobalControllers,Descor.Global.GlobalInterface,Descor.Global.GlobalSharedObjects,Descor.Property.PropertyControllers,Descor.Property.PropertyInterface,Descor.Property.PropertySharedObjects,Descor.Stock.StockControllers,Descor.Stock.StockInterface,Descor.Stock.StockSharedObjects. VERIFIED.
Scostamento rispetto alla scheda incarico: le HintPath verso assembly
Descor.*sono 10 (Descor.Common+ 3Global.*+ 3Property.*+ 3Stock.*); complessivamente leReferencecon HintPath sono 11 includendoDataManagerXNET. Segnalato in issues.
NON compilabile headless (macOS): la chiusura delle dipendenze termina in assembly 4.8 solo-Windows — Descor.Stock.* e i vari *.Controllers (Global.GlobalControllers, Property.PropertyControllers, Stock.StockControllers) referenziati come DLL binarie. Sebbene il target sia net8, quelle DLL restano compilate per il Framework 4.8 e legano ODP.NET unmanaged/WCF/Web tipici del solo Windows. INFERRED (coerente con la scheda incarico e con la natura degli assembly).
Selezione del driver/DAL sotto net8: la guardia #If NET5_0_OR_GREATER in DALFactory.vb:27 fa sì che a runtime venga caricato RequestCenter.DAL.OracleODPXNET (suffisso XNET), che a sua volta usa Oracle.ManagedDataAccess. VERIFIED.
Ricetta build (Windows, NON-verificata su questo host):
dotnet build InfocadWeb/WebMachine/RequestCenterXNET/RequestCenterXNET.vbproj
Prerequisiti: gli assembly 4.8 Descor.* e DataManagerXNET.dll devono essere già presenti in ..\..\..\Assembly\ (e net8.0\); l'ambiente deve poter caricare le DLL 4.8 solo-Windows.
Flussi correlati
- FLOW-REQ-001 — creazione ticket via
makeTicket.ascxconRequestCenter.Transaction(Open/Begin/Commit/Rollback).
Regole di business correlate
- BR-REQ — regole del dominio Request/Service Desk.
- Dominio funzionale: servicedesk.md.
Pagine collegate
- Classe centrale: class-Ticket-Request.md.
- Progetto DAL: project-RequestCenter-DAL.md.
Evidenze
InfocadWeb/WebMachine/RequestCenter/RequestCenter.vbproj:9-11—OutputType=Library,RootNamespace=Descor.RequestCenter,AssemblyName=RequestCenter. VERIFIEDRequestCenter.vbproj:13—OptionStrict On. VERIFIEDRequestCenter.vbproj:23—TargetFrameworkVersion=v4.8. VERIFIEDRequestCenter.vbproj:157-202—Reference/HintPath (Descor.Common, Global., Property., Stock.*) + framework refs (incl.System.Data.OracleClient,System.ServiceModel,System.Web). VERIFIEDRequestCenter.vbproj:411-414— unicoProjectReference=..\DataManager\DataManager.vbproj. VERIFIEDRequestCenter.vbproj:218-365— inventarioCompile(cartelle Classes, Collections, Configuration, Constants, Exceptions, Helpers, Interfaces, Transaction, Resources). VERIFIEDRequestCenter/DALFactory.vb:19,22,24-41,199-217— factoryShared, cache istanze,Reflection.Assembly.Load, suffissoXNETsotto#If NET5_0_OR_GREATER, risoluzione tipiDescor.<DALType>.<Entità>DAL. VERIFIEDRequestCenter/DALFactory.vb:55-56—GetRequestDAL()→IRequestDAL. VERIFIEDRequestCenter/DALFactory.vb:159-165—GetTransactionDAL()/GetMobileTransactionDAL(). VERIFIEDRequestCenter/Transaction/Transaction.vb:3-58—Transaction/MobileTransaction(Begin/Commit/Rollback/OpenConnection/CloseConnection) delegano a DALFactory. VERIFIEDRequestCenter/Configuration/Settings.vb:131-141—DALTypeName(→DALType),DALUseReaders. VERIFIEDRequestCenter/Classes/Request.vb:1-25— Imports (Descor.Property,Descor.Global.*), guardia#If NET5_0_OR_GREATER(:15),Namespace Ticket+Public Class Request(:22,25). VERIFIEDRequestCenterXNET.vbproj:2-7— net8.0, RootNamespaceDescor.RequestCenter, AssemblyNameRequestCenterXNET. VERIFIEDRequestCenterXNET.vbproj:18-131— re-link<Compile Include=..\RequestCenter\...vb Link=...>(~115 file). VERIFIEDRequestCenterXNET.vbproj:141-143— PackageReference (SystemWebAdapters 1.3.2, Extensions.Localization 8.0.4, Configuration.ConfigurationManager 8.0.0). VERIFIEDRequestCenterXNET.vbproj:147-179— 11 Reference/HintPath:DataManagerXNET(net8.0) + 10 assembly Descor.* 4.8. VERIFIEDdocs/14-technical-debt/reperti-prioritari.md(riga TD-008) — grant UI non ri-verificati oltre WCF/.NET Remoting, sistemico su 9 domini. VERIFIEDdocs/07-business-flows/FLOW-REQ-001.md:39-65,131— uso dimakeTicket.ascx+RequestCenter.Transaction(Open/Begin/Commit/Rollback). SUPPORTED- Assenza di test automatici nel repo (istruzioni di progetto CLAUDE.md). VERIFIED
- Comandi
msbuild/dotnet buildWindows: NON-verificati su questo host (macOS, no Oracle Client).