Modulo: RequestCenter (verticale Service Desk)
Landing del verticale RequestCenter / Service Desk lato
InfocadWeb. Raccoglie i progetti, namespace e tipi che realizzano apertura, protocollazione e gestione delle richieste/ticket, dalla UI Web Forms fino ai package Oracle. Confidenza complessiva SUPPORTED (sintesi da codice sorgente + metadati di progetto + catalogo DB read-only; il significato di business dei singoli oggetti restaUNKNOWNdove non confermato). Legenda: Legenda di classificazione.
Scopo del modulo
Il verticale implementa il ciclo di vita di una richiesta di servizio (Request): creazione e
protocollazione, associazione a inquilino (Tenant), informazioni spaziali, oggetto/attività di
manutenzione, gestione, contratto, azienda e costo, fino a chiusura e cancellazione. La classe
aggregata Descor.RequestCenter.Ticket.Request orchestra la logica di business e delega ogni
accesso dati all'interfaccia IRequestDAL, la cui implementazione Oracle (RequestDAL) invoca i
package PL/SQL GESTREQUEST / GESTREQUEST_T2. Classificazione: SUPPORTED
(Classes/Request.vb, RequestDAL.vb).
Dominio funzionale
Service Desk — vedi il dominio servicedesk. Attori, gating di autenticazione e componenti sono descritti lì; questa pagina è la vista code-reference.
Layer architetturale
Il verticale copre più layer della vertical-slice RequestCenter:
| Layer | Progetto | Ruolo |
|---|---|---|
| Web (Web Forms) | RequestCenterWeb |
shell Default.aspx, control makeTicket.ascx (vedi frontend) |
| Business Logic | RequestCenter (Descor.RequestCenter) |
aggregato Ticket.Request, contratti Interfaces, Transaction |
| Data Access | RequestCenter.DAL.OracleODP |
RequestDAL (proc-wrappers Oracle), driver Oracle.DataAccess |
| Motore connessioni | DataManager (Descor.DataManager) |
GlobalDataManager (cm.Execute*) |
| Database | REQUESTCENTER_TEST38 (+ cross-schema DEM_TEST38, INFOCAD_TEST38) |
package GESTREQUEST*, tabelle |
Le varianti net8 RequestCenterXNET e RequestCenter.DAL.OracleODPXNET ricollegano lo stesso
sorgente (side-by-side per la migrazione .NET 8) e non sono compilabili headless su questo host.
Classificazione VERIFIED (metadati .vbproj + <Compile Include=... Link=...>).
Tipi principali
| Tipo | Kind | Progetto | Pagina | Sorgente |
|---|---|---|---|---|
Descor.RequestCenter.Ticket.Request |
Class (aggregato) | RequestCenter |
class-Request | Classes/Request.vb:25 |
Descor.RequestCenter.Interfaces.Ticket.IRequestDAL |
Interface | RequestCenter |
interface-IRequestDAL | Interfaces/TicketInterfaces.vb:39 |
Descor.RequestCenter.DAL.OracleODP.RequestDAL |
Class (DAL) | RequestCenter.DAL.OracleODP |
class-RequestDAL | RequestDAL.vb:12 |
Descor.RequestCenter.Transaction |
Class | RequestCenter |
class-Transaction | Transaction/Transaction.vb:3 |
Descor.RequestCenter.Ticket.RequestCollection |
Class (collection) | RequestCenter |
— | Classes/Collections/RequestCollection.vb |
Descor.DataManager.GlobalDataManager |
Class (motore cm) |
DataManager |
DataManager | GlobalDataManager.vb |
Classi annidate pubbliche di Request (dettaglio in class-Request): TenantInfo
(:2822), SpatialInfo (:2946), MaintenanceInfo (:3752), ManagementInfo (:3782),
CenterOfResponsabilityInfo (:3905), ContractInfo (:4144), MaintenanceObjectInfo (:4327),
CompanyInfo (:4463), CostInfo (:4600). SUPPORTED.
Pagine di progetto: project-RequestCenter · project-RequestCenter.DAL.OracleODP · project-RequestCenter.DAL.OracleODPXNET · project-RequestCenterXNET.
Entry point
- UI:
makeTicket.ascx→ handlerbtnPost_Click(makeTicket.ascx.vb:82) — vedi frontend-makeTicket e il flusso FLOW-REQ-001. - BL:
Request.Create(...)(Classes/Request.vb:2222e overload:2227),GetInstance(:4987),Close(:2758),Delete(Shared,:2813). Tutti risolvono la DAL viaDALFactory.GetRequestDAL. - WCF (accesso esterno):
RequestsReaderWCF.svc,RequestsCacheService.svc,ExtraFlowActionsProxy.svc— vedi API. SUPPORTED.
Contratti pubblici
Il contratto centrale è IRequestDAL (eredita IBaseDAL), con ~246 Function implementate da
RequestDAL. Comprende scritture (addRequest, setProtocol, setDescription, setManagement,
setContract, setCompany, setType, setCallType, setWorkflowInterface, closeRequest,
deleteRequest, …) e letture con tipico gemello DataSet + DReader (Load/LoadDReader,
getIdRequestListByFilter, getByProtocol, getRequestList, …). L'aggregato Request espone i
metodi pubblici Set* / Write* / Create / Close / Delete come façade di dominio.
Dettaglio in interface-IRequestDAL e class-Request.
SUPPORTED.
Collaborazione interna
makeTicket.ascx.vb → Request (BL) → DALFactory.GetRequestDAL : IRequestDAL → RequestDAL (Oracle)
│ cm = GlobalDataManager
▼
GESTREQUEST / GESTREQUEST_T2 (PL/SQL)
Request non apre connessioni: ottiene un IRequestDAL da DALFactory e delega. RequestDAL
ottiene il motore cm via Configuration.Settings.GetConnectionManager(True) (tipo
GlobalDataManager) e chiama cm.ExecuteReader / cm.ExecuteNonQuery / cm.Fill passando
"PACKAGE.PROC" + OracleParameter. Classificazione VERIFIED (Request.vb:2223-2224,
RequestDAL.vb:5055,5077-5078).
Dipendenze in ingresso
RequestCenterWeb(controlmakeTicket.ascx) e le facciate WCF consumanoRequestCenter(BL).- Progetti net8
RequestCenterXNETricollegano ~115 file BL diRequestCenter. VERIFIED (metadati).
Dipendenze in uscita
RequestCenter→DataManager(ProjectReference) e assembly condivisiDescor.*(Descor.Property,Descor.Global.*,Descor.Common,Descor.Stock.*).RequestCenter.DAL.OracleODP→Oracle.DataAccess(unmanaged, net48) eGlobalDataManager.- La chiusura delle dipendenze net8 termina in assembly 4.8 solo-Windows (
Descor.Stock.*,*.Controllers): perciòRequestCenterXNET/…OracleODPXNETnon compilano headless. VERIFIED.
Oggetti di database
Hub del dominio: schema REQUESTCENTER_TEST38.
| Package | Rif. in RequestDAL.vb |
Note |
|---|---|---|
GESTREQUEST |
41 | es. ADDREQUESTWITHOUTPROTOCOL, ADDDESCRIPTIONTOREQUEST, ADDWORKFLOWINTERFACE |
GESTREQUEST_T2 |
9 | es. ADDREQUEST (OUT NEWREQUESTINDEX) |
Procedure e tabelle: procedures ·
tables. Matrice CRUD codice→DB:
crud-matrix. Accessi cross-schema in lettura verso
DEM_TEST38 (workflow) e INFOCAD_TEST38 (anagrafiche/stock). Il significato di business degli
oggetti è UNKNOWN (non dedurre dai nomi). VERIFIED (conteggi rif. package) / SUPPORTED
(mapping proc→tabelle).
API
Superficie SOAP/WCF del verticale (dettaglio in 04-api): ASMX
AsyncLoader.asmx, WFActionsWS.asmx; WCF RequestsReaderWCF.svc, RequestsCacheService.svc,
ExtraFlowActionsProxy.svc. SUPPORTED.
Configurazione
Il motore cm è risolto tramite Configuration.Settings.GetConnectionManager(True); la connessione
Oracle in uso è MainConnection (riscritta al deploy da ConnectionsService, vedi CLAUDE.md /
developer-guides). SUPPORTED (RequestDAL.vb:5055).
Regole di business
Regole del dominio richieste: BR-REQ.
Punti di estensione comuni
- DAL sostituibile:
Requestdipende daIRequestDALrisolto viaDALFactory.GetRequestDAL; un provider dati alternativo si aggancia implementando l'interfaccia. SUPPORTED (Request.vb:2223). - Migrazione net8: aggiungere/estendere i re-link
*XNET(<Compile Include=... Link=...>), guardati da#If NET5_0_OR_GREATERper selezionare il driver Oracle managed. VERIFIED. - Personalizzazione per cliente: pattern
EntityLayer<Customer>/ServiceJob.<Customer>/TicketLoader<Customer>a livello di prodotto (vedi CLAUDE.md); non tramite fork del codice condiviso.
Ciclo di vita
Request.Create(...)→IRequestDAL.addRequest→GESTREQUEST_T2.ADDREQUEST(oGESTREQUEST.ADDREQUESTWITHOUTPROTOCOL), restituisce il nuovoidrequest(OUTNEWREQUESTINDEX).- Arricchimento tramite i
Set*(protocollo, tenant, spaziale, gestione, contratto, azienda, costo, tipo, callType, workflow, categoria, tipologia) → rispettiveset*DAL / procGESTREQUEST.*. Request.Close(...)→IRequestDAL.closeRequest;Request.Delete(idrequest)(Shared) →IRequestDAL.deleteRequest.
Per la transazionalità end-to-end vedi RequestCenter.Transaction e il flusso
FLOW-REQ-001: New RequestCenter.Transaction →
OpenConnection() → Begin() / Commit() / Rollback() → CloseConnection() (delega a
ITransactionDAL via DALFactory). SUPPORTED (Transaction/Transaction.vb:3-30).
Thread-safety / concorrenza
UNKNOWN. Il motore cm è ottenuto per-chiamata (GetConnectionManager(True)) e la connessione è
aperta/chiusa nel perimetro del metodo DAL; non è documentata condivisione di stato mutabile tra
thread. Non osservato direttamente — da confermare.
Comportamento in caso di errore
Nei metodi DAL il pattern ricorrente è:
Try
openResult = cm.Open
cm.ExecuteNonQuery("GESTREQUEST_T2.ADDREQUEST", ...)
Return DirectCast(newIndexParam.Value, Types.OracleDecimal).ToInt32
#If DEBUG Then
Catch ex As Exception
Throw
#End If
Finally
cm.CloseIfNeeded(openResult)
End Try
Il Catch è compilato solo in DEBUG (#If DEBUG Then): in Release le eccezioni Oracle
propagano al chiamante senza intercettazione locale; il Finally chiude comunque la connessione
(cm.CloseIfNeeded). Classificazione VERIFIED (RequestDAL.vb:5076-5086, :5103-5113).
Strategia di test
Nel repository non esistono test automatici (0 xUnit/NUnit/MSTest) e non è misurata alcuna
copertura per questo verticale. La verifica avviene tramite harness manuale (InfocadServer/InfocadTester)
e connettività DB read-only (python-oracledb). I comandi msbuild sono NON verificati su questo
host (macOS, senza Oracle Client). VERIFIED (assenza test) / comandi Windows NON-verificati.
Esempi
Creazione minima di una richiesta dal layer BL (delega alla DAL, poi arricchimento):
Dim idrequest As Integer = Request.Create(iduser, idtenant, requestdate:=Nothing) ' -> GESTREQUEST.ADDREQUESTWITHOUTPROTOCOL
Dim req As Request = New Request().GetInstance(usereader:=False, idrequest:=idrequest, externaldata:=False)
req.SetDescription(...) ' -> GESTREQUEST.ADDDESCRIPTIONTOREQUEST
req.Close() ' -> IRequestDAL.closeRequest
Snippet illustrativo dagli anchor verificati (Request.vb:2227, :4987, :2758); i parametri
esatti dei Set* sono in class-Request.
Diagramma del modulo
flowchart TD
UI["RequestCenterWeb<br/>makeTicket.ascx.vb : btnPost_Click"]
WCF["WCF/ASMX<br/>RequestsReaderWCF.svc · RequestsCacheService.svc"]
BL["RequestCenter (BL)<br/>Ticket.Request · Transaction"]
IF["IRequestDAL : IBaseDAL<br/>(via DALFactory.GetRequestDAL)"]
DAL["RequestCenter.DAL.OracleODP<br/>RequestDAL"]
CM["DataManager.GlobalDataManager<br/>cm.ExecuteReader/NonQuery/Fill"]
DB[("REQUESTCENTER_TEST38<br/>GESTREQUEST · GESTREQUEST_T2")]
XDB[("DEM_TEST38 · INFOCAD_TEST38<br/>(lettura cross-schema)")]
UI -->|statically verified| BL
WCF -->|inferred| BL
BL -->|statically verified| IF
IF -.->|implements / DALFactory| DAL
DAL -->|statically verified| CM
CM -->|statically verified| DB
DAL -.->|configuration-dependent| XDB
Legenda archi: statically verified = riscontrato nel sorgente; inferred = dedotto; implements = risoluzione via factory/interfaccia; configuration-dependent = dipende da grant/sinonimi cross-schema.
Evidenze
- BL aggregato:
InfocadWeb/WebMachine/RequestCenter/Classes/Request.vb:25(classeRequest);Create:2222/ overload:2227;Close:2758;Delete(Shared):2813;GetInstance:4987;GetAllChildRequests:4999; classi annidateTenantInfo:2822,SpatialInfo:2946,MaintenanceInfo:3752,ManagementInfo:3782,CenterOfResponsabilityInfo:3905,ContractInfo:4144,MaintenanceObjectInfo:4327,CompanyInfo:4463,CostInfo:4600. Imports/guardia net8:1-19. - Contratto:
InfocadWeb/WebMachine/RequestCenter/Interfaces/TicketInterfaces.vb:39(Public Interface IRequestDAL Inherits IBaseDAL;Load:42,LoadDReader:43). - Transaction:
InfocadWeb/WebMachine/RequestCenter/Transaction/Transaction.vb:3-30(Begin/Commit/Rollback/OpenConnection/CloseConnectionviaDALFactory.GetTransactionDAL). - DAL:
InfocadWeb/WebMachine/RequestCenter.DAL.OracleODP/RequestDAL.vb:12(Public Class RequestDAL),:14(Implements IRequestDAL);addRequest:5054→GESTREQUEST_T2.ADDREQUEST(OUTNEWREQUESTINDEX):5078; overload:5089→GESTREQUEST.ADDREQUESTWITHOUTPROTOCOL:5105;cm = Configuration.Settings.GetConnectionManager(True):5055; pattern errore#If DEBUG:5080-5086. - Conteggi package (grep su
RequestDAL.vb):GESTREQUEST.= 41,GESTREQUEST_T2.= 9. - Collections:
InfocadWeb/WebMachine/RequestCenter/Classes/Collections/RequestCollection.vb(dir con ~36 collection). - Oggetti DB: schema
REQUESTCENTER_TEST38(60 tabelle, 5 package, 345 procedure — snapshot catalogo 2026-07-21,docs/05-databases/REQUESTCENTER_TEST38/index.md). - Assenza di test automatici e vincoli headless: CLAUDE.md (progetto) +
docs/16-code-reference/index.md.