Table of Contents

FLOW-WK-001 — Creazione di una linea telefonica (Line) — WorkerKit / WorkerKitCenter

Flusso end-to-end di creazione di una linea telefonica nel modulo WorkerKit (WorkerKitCenter). Il dominio WorkerKit gestisce le dotazioni telefoniche aziendali: linee/SIM (Line: prefisso, numero, PIN, PUK, stato, tipo, addebito), cellulari (Mobile: IMEI), assegnazione a contatti/dipendenti, eventi/lettere di assegnazione (WorkerKitEvent), centri di costo e sedi. Path pilota: scheda LineDetail.ascx (WorkerKitWeb, famiglia CASSANDRA) → LineController.NET Remoting (Line_BL.rem) → Line_BLLine_DAL → stored procedure WKT_CREATELINE → tabella WKRKIT_LINES (Oracle INFOCAD_TEST38). Nessun ORM.

  • Flow ID: FLOW-WK-001
  • Repository: InfocadWeb (WebMachine/CASSANDRA/WorkerKitWeb, ASP.NET Web Forms VB.NET) + InfocadServer (WorkerKit{Controllers,Interface,BL,DAL,SharedObjects}, VB.NET)
  • Confidence complessiva: VERIFIED (catena UI → code-behind → controller → remoting → BL → DAL → SP → tabella, confermata su codice E su dizionario Oracle) · SUPPORTED (risoluzione runtime dell'endpoint remoting; significato di business del dominio dedotto dai campi)

Cosa fa il dominio WorkerKit (identificato dal codice)

Il nome è registrato in licenza/ULM come applicazione "WorkerKit" / "WorkerKitCenter" con home ~/WorkerKitweb/default.aspx (InfocadServer/ULM/ApplicationFactory.vb:54, GUID 005C62DD-1406-485E-9AEA-D40EC9C7161B). Le entità (Line con PIN/PUK/prefisso/numero/velocità/costo, Mobile con IMEI, WKRKIT_CONTACTS_LINE/WKRKIT_CONTACTS_MOBILE, WKRKIT_MOBILE_LINES, LetterType, ContractType, ChargeType, CostCentre, Site) indicano che si tratta della gestione del "kit" telefonico assegnato ai lavoratori (linee fisse/mobili, apparati, storico assegnazioni e lettere/eventi di consegna) — non di un toolkit mobile per operatori. (SUPPORTED)

Obiettivo di business

Consentire a un operatore del WorkerKitCenter di censire una nuova linea telefonica (prefisso + numero, stato, tipo linea, tipo addebito, PIN/PUK, velocità, costo, sedi di partenza/arrivo, date di attivazione/disattivazione, centro di costo, note) ed eventualmente assegnarla subito a un contatto (dipendente). Al termine la linea esiste in WKRKIT_LINES con id generato da sequence e, se è stato scelto un contatto, il legame storico è in WKRKIT_CONTACTS_LINE.

Attori

  • Operatore WorkerKitCenter — utente autenticato con grant 10020 oppure SuperAdmin (LineDetail.ascx.vb:490); senza grant la scheda degrada a sola visualizzazione (:491-493).
  • Windows Service InfocadServer — host .NET Remoting del BL WorkerKit; i servizi *_BL.rem sono registrati solo se la licenza abilita il GUID applicativo WorkerKit (Business/Start.vb:841-873).
  • Oracle INFOCAD_TEST38 — schema hub; stored procedure WKT_*, tabelle WKRKIT_*.

Trigger

Dalla griglia linee (LinesManager.ascx:241) il pulsante "nuova linea" apre OpenItemDetail('LineDetailPage.aspx','0','1', ...)LineDetailPage.aspx?id_dto=0&op=1 (op=1 = OperationTypeEnum.Insert, LineDetail.ascx.vb:18-22). Nella scheda, il click su btnAction scatena btnAction_Click (LineDetail.ascx.vb:533) che con _operationType=Insert invoca InsertAction() (:537-540).

Frontend entry point

  • Pagina: InfocadWeb/WebMachine/CASSANDRA/WorkerKitWeb/LineDetailPage.aspx (Inherits Descor.WorkerKitWeb.LineDetailPage, base Cassandra.InfocadSecurity.CassandraPage).
  • Code-behind: LineDetailPage.aspx.vbPage_Load legge id_dto/op dalla querystring e LoadDetailUserControl() carica dinamicamente UserControls/LineViewControl.ascx impostando ID_DTO e OperationType.
  • Composizione: LineViewControl.ascx:3-4 registra e ospita <WorkerKit:LineDetail ID="mDetail"> (:52); LineViewControl.ascx.vb:110-111 aggancia gli eventi LineCreated/LineUpdated.
  • Gate di accesso: HasUserGrant("10020") Or WS.SessionProfile.SuperAdmin in LineDetail.ascx.vb:490 (BindPage).

Sequenza principale (main sequence)

  1. Operatore apre LineDetailPage.aspx?op=1, compila la scheda e preme btnAction.
  2. LineDetail.btnAction_Click (LineDetail.ascx.vb:533) → caso InsertInsertAction() (:456).
  3. InsertActionCreateNew() (:207): costruisce il DTO Line (Descor.WorkerKit.WorkerKitSharedObjects.Objects.Line) dai controlli della scheda (:213-252: prefisso, numero, stato, tipo, addebito, PIN, PUK, velocità, costo, sedi, date, centro di costo, note, PNP, rubrica) e chiama LineController.Insert(line) (:260).
  4. LineController (InfocadServer/WorkerKitControllers/LineController.vb:7-9) in costruzione fa DaoActivate(enControllers.Ctrl_Line); Insert (:15-17) inoltra a Me.DAO castato a ILine_BL.
  5. DAOFactory.CreateDAO (WorkerKitControllers/serv/DAOFactory.vb:11-12) risolve il DAO come proxy .NET Remoting: Activator.GetObject(GetType(ILine_BL), CHANNEL://SERVERADDRESS/Line_BL.rem) — l'URI Line_BL.rem viene da ServicesDictionary.resx:138-140 (Service_Line).
  6. Lato server, il Windows Service ha registrato il wellknown SingleCall Descor.WorkerKit.WorkerKitBL.Line_BL su Line_BL.rem (Business/Start.vb:848), dentro il blocco condizionato dalla licenza WorkerKit (:841).
  7. Line_BL.Insert (InfocadServer/WorkerKitBL/Line_BL.vb:23-47, classe MarshalByRefObject, :9-10): spacchetta il DTO e chiama WorkerKitDALFactory.GetLineDAL.Insert(prefix, lineNumber, stateLine.Code, ..., phoneBook) (:27).
  8. Line_DAL.Insert (InfocadServer/WorkerKitDAL/OracleODP/Line_DAL.vb:149-229): New DataLayer(My.Settings.ConnectionName) (:169; default "MainConnection", WorkerKitDAL/My Project/Settings.Designer.vb:59-60), 20 OracleParameter IN (PPREFIX, PNUMBER, PSTATE_LINE, PLINE_TYPE, PCHARGE_TYPE, PPIN, PPUK, PSPEED, PCOST, PUSE_NOTES, PDEPARTURE_SITE, PARRIVAL_SITE, PDATE_ON, PDATE_OFF, PLAST_TWO_MONTHS, PARCHIVE, PCOST_CENTRE, PNOTES, PPNP, PPHONE_BOOK) + OUT PNEWINDEX (:172-193), poi dl.ExecuteNonQueryStoredProcedure("WKT_CREATELINE") (:219) e ritorno di PNEWINDEX (:221).
  9. Oracle WKT_CREATELINE (INFOCAD_TEST38, PROCEDURE standalone, VALID — USER_SOURCE):
    • inizializza PNEWINDEX := -1;
    • check duplicato: SELECT COUNT(1) FROM WKRKIT_LINES WHERE PREFIX=... AND LINE_NUMBER=... AND ISCANCELLED=0;
    • se non esiste: INSERT INTO WKRKIT_LINES (PREFIX, LINE_NUMBER, STATE_LINE, LINE_TYPE, CHARGE_TYPE, PIN, PUK, SPEED, LINE_COST, USE_NOTES, DEPARTURE_SITE, ARRIVAL_SITE, DATE_ON, DATE_OFF, LAST_TWO_MONTHS, LINE_ARCHIVE, COST_CENTRE, NOTES, PNP, PHONE_BOOK) VALUES (...) RETURNING ID_LINES INTO PNEWINDEX;
    • il trigger BEFORE INSERT su WKRKIT_LINES assegna ID_LINES da SEQ_WKRKIT_LINES.NEXTVAL (da USER_TRIGGERS).
  10. Il ritorno risale la catena: se -1 la UI mostra "Esiste già una linea con questo numero!" (LineDetail.ascx.vb:261-262); se >0 viene impostato ID_DTO e alzato LineCreated(newID) (:264-266).
  11. Assegnazione al contatto (write secondaria, stesso postback): LineViewControl.LineDetail_Created (LineViewControl.ascx.vb:131-144) — se nella scheda era selezionato un contatto, chiama ctrlLine.AddLinesToContact({lineID}, contactID) (:138) → Line_DAL.AddLinesToContactWKT_ADDLINESTOCONTACT (Line_DAL.vb:326-337), che su WKRKIT_CONTACTS_LINE chiude i legami precedenti (UPDATE ... SET ISCANCELLED=1, DATE_OFF=SYSDATE) e inserisce il nuovo legame (INSERT ... (0, SYSDATE, NULL, PIDCONTACT, ID_LINE)) — da USER_SOURCE.
  12. Page_PreRender trasforma il pulsante in "chiudi finestra" a salvataggio avvenuto (LineDetail.ascx.vb:154-161).

API / service

  • Nessun servizio SOAP/WCF: postback ASP.NET Web Forms diretto sulla scheda.
  • Il confine web→server è .NET Remoting (canale/indirizzo da Descor.Common.Configuration.SettingsManager.CHANNEL/SERVERADDRESS, DAOFactory.vb:11-12); i BL WorkerKit sono wellknown SingleCall nel servizio Windows InfocadServer (Business/Start.vb:845-872: Mobile_BL.rem, Line_BL.rem, WorkerKitEvent_BL.rem, ContractType_BL.rem, LineState_BL.rem, LineType_BL.rem, LetterType_BL.rem, ChargeType_BL.rem, CostCentre_BL.rem, Site_BL.rem).

Backend

  • UI/Code-behind: WorkerKitWeb/LineDetailPage.aspx(.vb), UserControls/LineViewControl.ascx(.vb), UserControls/LineDetail.ascx.vb (import diretto Descor.WorkerKit.WorkerKitControllers, :1).
  • Controller (proxy client): WorkerKitControllers/LineController.vb + serv/Ctrl_Base.vb:6-7 (DaoActivateDAOFactory.CreateDAO) + serv/DAOFactory.vb (Activator.GetObject → remoting).
  • BL (server-side, MarshalByRefObject): WorkerKitBL/Line_BL.vb.
  • DAL: WorkerKitDAL/WorkerKitDALFactory.vb:24-26 (GetLineDAL via reflection sul namespace Descor.WorkerKit.WorkerKitDAL.OracleODP) → WorkerKitDAL/OracleODP/Line_DAL.vb.
  • Pattern DAL: Dim dl As New DataLayer(My.Settings.ConnectionName)dl.Parameters.Add(...)dl.ExecuteNonQueryStoredProcedure("WKT_...") → OUT PNEWINDEX; dl.Kill() in Finally (Line_DAL.vb:169,219,221,227).

Query / stored procedure

Passo Stored procedure (Oracle, INFOCAD_TEST38) Chiamata da (DAL)
INSERT linea (con check duplicato, RETURNING ID_LINES) WKT_CREATELINE (OUT PNEWINDEX) Line_DAL.vb:219
Assegnazione linea→contatto (write secondaria) WKT_ADDLINESTOCONTACT (usa HELPERS.NUMBERLIST2TBL + tipo MYINTTABLE) Line_DAL.vb:337
Aggiornamento linea (path Edit, stessa scheda) WKT_UPDATELINE Line_DAL.vb:301
Cancellazione logica / ripristino (path alternativi) WKT_LOGICALDELETELINE / WKT_RESTORELINE Line_DAL.vb:41,59
Load combo scheda (READ-ONLY) WKT_GETALLLINESTATE, WKT_GETALLLINETYPES, WKT_GETALLCHARGETYPES, WKT_GETALLCOSTCENTRE, WKT_GETALLSITES LineState_DAL/LineType_DAL/ChargeType_DAL/CostCentre_DAL/Site_DAL (fill combo LineDetail.ascx.vb:386-454)
Load scheda in Edit (READ-ONLY) WKT_GETLINEBYID Line_DAL.vb:105

Tabelle lette (read)

  • INFOCAD_TEST38.WKRKIT_LINES — check anti-duplicato (COUNT(1) su PREFIX+LINE_NUMBER, ISCANCELLED=0) dentro WKT_CREATELINE (VERIFIED, USER_SOURCE).
  • INFOCAD_TEST38.WKRKIT_LINE_STATE, WKRKIT_LINE_TYPE, WKRKIT_CHARGE_TYPE, WKRKIT_COST_CENTRE, WKRKIT_SITES — popolamento combo della scheda via WKT_GETALL* (SUPPORTED: catena DAL verificata, sorgente delle singole GETALL non ispezionato riga per riga).
  • Dizionario USER_SEQUENCES letto dal trigger di WKRKIT_LINES (ramo id preassegnato).

Tabelle modificate (write)

  • INFOCAD_TEST38.WKRKIT_LINES — INSERT con RETURNING ID_LINES INTO PNEWINDEX; id da SEQ_WKRKIT_LINES via trigger BEFORE INSERT (VERIFIED: USER_SOURCE + USER_TRIGGERS + USER_TAB_COLUMNS, 22 colonne, PK ID_LINES NUMBER NOT NULL).
  • INFOCAD_TEST38.WKRKIT_CONTACTS_LINE — solo se un contatto è selezionato nella scheda: UPDATE (chiusura storica legami precedenti: ISCANCELLED=1, DATE_OFF=SYSDATE) + INSERT nuovo legame (VERIFIED su USER_SOURCE di WKT_ADDLINESTOCONTACT; l'attivazione del ramo dipende dall'input operatore).

Validazione

  • Grant UI: HasUserGrant("10020") Or SuperAdmin, altrimenti OperationType=View e nessun salvataggio possibile (LineDetail.ascx.vb:490-493).
  • Idempotenza/duplicati: interamente lato DBWKT_CREATELINE non inserisce se esiste già una linea attiva con stesso PREFIX+LINE_NUMBER e ritorna -1; la UI lo traduce in messaggio "Esiste già una linea con questo numero!" (LineDetail.ascx.vb:261-262).
  • Nessuna validazione nel BL: Line_BL.Insert è pass-through con solo logging eccezioni (Line_BL.vb:48-51); InitValidators() nella scheda è vuoto (LineDetail.ascx.vb:482-484).
  • Doppio submit prevenuto dai flag Created/Updated in ControlState (LineDetail.ascx.vb:83-116,538,542).

Side effects

  • Generazione id via SEQ_WKRKIT_LINES (trigger BEFORE INSERT su WKRKIT_LINES).
  • Storicizzazione automatica dei legami linea-contatto in WKRKIT_CONTACTS_LINE (chiusura dei record precedenti con DATE_OFF=SYSDATE) quando si assegna la linea.
  • Logging eccezioni centralizzato Descor.Infrastructure.LogManager.ExceptionLogger (Line_DAL.vb:224, Line_BL.vb:49).
  • Eventi observable UI LineCreated/LineUpdated per refresh tab/griglia chiamante (LineViewControl.ascx.vb:131-159, LinesManager via GetRadGridToUpdate()).
  • Nessuna scrittura su tabelle GLOBAL_* (a differenza dei flussi Property: niente GLOBAL_TENANCY_BINDINGS, niente COD_GENERATECODE) — deps di WKT_CREATELINE = solo WKRKIT_LINES (VERIFIED, USER_DEPENDENCIES).

Percorsi alternativi / di errore

  • Edit linea (op=2, LinesManager.ascx:158): stesso control → UpdateAction()Update() (LineDetail.ascx.vb:277-322) → LineController.UpdateLine_BL.UpdateLine_DAL.Update (:232-301) → WKT_UPDATELINE (UPDATE WKRKIT_LINES WHERE ID_LINES=PIDLINE).
  • DuplicatoPNEWINDEX=-1 → alert, nessuna riga scritta.
  • Eccezione DAL/Remoting → catch in CreateNew (:268-271), retValue=False, messaggio lineInsertMessageFalse da resource (:460).
  • Rimozione contatto: btnRimuoviContatto_Click (LineDetail.ascx.vb:143-152) → RemoveLinesFromContactWKT_REMOVELINESFROMCONTACT.
  • Delete logico/definitivo dalla griglia: WKT_LOGICALDELETELINE / WKT_FINALDELETELINE (Line_DAL.vb:23,41).
  • Licenza assente: se il GUID WorkerKit non è abilitato, i *_BL.rem non vengono registrati (Start.vb:841) e ogni chiamata remoting fallisce.

Diagramma di sequenza

sequenceDiagram
    actor Op as Operatore WorkerKitCenter
    participant UI as LineDetailPage.aspx (op=1)
    participant LD as LineDetail.ascx.vb
    participant LC as LineController (proxy)
    participant RS as InfocadServer (Remoting, Line_BL.rem)
    participant BL as Line_BL.Insert
    participant DAL as Line_DAL.Insert
    participant DB as Oracle INFOCAD_TEST38

    Op->>UI: compila scheda + click btnAction
    UI->>LD: btnAction_Click -> InsertAction -> CreateNew
    LD->>LD: costruisce DTO Line dai controlli
    LD->>LC: LineController.Insert(line)
    LC->>RS: Activator.GetObject(ILine_BL, .../Line_BL.rem)
    RS->>BL: Insert(dto) [SingleCall]
    BL->>DAL: GetLineDAL.Insert(prefix, number, ..., phoneBook)
    DAL->>DB: WKT_CREATELINE (20 IN + OUT PNEWINDEX)
    alt linea gia esistente (PREFIX+LINE_NUMBER attiva)
        DB-->>DAL: PNEWINDEX = -1
        LD-->>Op: "Esiste gia una linea con questo numero!"
    else nuova linea
        DB->>DB: INSERT INTO WKRKIT_LINES RETURNING ID_LINES (trigger: SEQ_WKRKIT_LINES)
        DB-->>DAL: PNEWINDEX = nuovo ID_LINES
        DAL-->>LD: newID
        LD->>LD: RaiseEvent LineCreated(newID)
        opt contatto selezionato
            LD->>DB: WKT_ADDLINESTOCONTACT (via LineViewControl -> AddLinesToContact)
            DB->>DB: UPDATE+INSERT WKRKIT_CONTACTS_LINE
        end
        LD-->>Op: messaggio esito + pulsante "chiudi"
    end

Matrice di tracciabilità

Layer Artefatto Evidenza (file:riga)
Launcher "nuova linea" op=1 / edit op=2 WorkerKitWeb/UserControls/LinesManager.ascx:241,158
Pagina LineDetailPage → carica LineViewControl con ID_DTO/op WorkerKitWeb/LineDetailPage.aspx.vb:22-58
Composizione LineViewControl ospita LineDetail + handler eventi LineViewControl.ascx:3-4,52; LineViewControl.ascx.vb:110-111
Code-behind btnAction_ClickInsertActionCreateNewLineController.Insert LineDetail.ascx.vb:533-547,456-467,207-275,260
Grant HasUserGrant("10020") Or SuperAdmin LineDetail.ascx.vb:490-493
Controller LineController.InsertDAO (ILine_BL) WorkerKitControllers/LineController.vb:7-9,15-17
Remoting client DAOFactory.CreateDAO(Ctrl_Line)Activator.GetObject(... /Line_BL.rem) serv/Ctrl_Base.vb:6-7; serv/DAOFactory.vb:11-12; serv/ServicesDictionary.resx:138-140
Remoting host RegisterWellKnownServiceType(Line_BL, "Line_BL.rem", SingleCall) (gated licenza WorkerKit) InfocadServer/Business/Start.vb:841,848
Licenza/ULM app WorkerKit/WorkerKitCenter, GUID 005C62DD-... InfocadServer/ULM/ApplicationFactory.vb:54
BL Line_BL.Insert (MarshalByRefObject) → GetLineDAL.Insert(...) WorkerKitBL/Line_BL.vb:9-10,23-47
DAL factory GetLineDAL (reflection su OracleODP) WorkerKitDAL/WorkerKitDALFactory.vb:24-26
DAL 20 param IN + OUT PNEWINDEXExecuteNonQueryStoredProcedure("WKT_CREATELINE") WorkerKitDAL/OracleODP/Line_DAL.vb:149-229 (169,172-193,219,221)
Connessione My.Settings.ConnectionName default MainConnection WorkerKitDAL/My Project/Settings.Designer.vb:57-63
DB (SP) WKT_CREATELINE: dup-check + INSERT INTO WKRKIT_LINES ... RETURNING ID_LINES USER_SOURCE WKT_CREATELINE (PROCEDURE VALID)
DB (deps) WKT_CREATELINEWKRKIT_LINES (unica dipendenza applicativa) USER_DEPENDENCIES
DB (id) trigger BEFORE INSERT su WKRKIT_LINESSEQ_WKRKIT_LINES.NEXTVAL USER_TRIGGERS
DB (schema) WKRKIT_LINES: ID_LINES NUMBER NOT NULL + 21 colonne dati (PREFIX, LINE_NUMBER, PIN, PUK, ISCANCELLED, ...) USER_TAB_COLUMNS
DB (write 2) WKT_ADDLINESTOCONTACT: UPDATE+INSERT WKRKIT_CONTACTS_LINE (deps: HELPERS, MYINTTABLE) USER_SOURCE/USER_DEPENDENCIES; Line_DAL.vb:326-337; LineViewControl.ascx.vb:131-144

Reverse trace (dal DB ai chiamanti)

  • WKRKIT_LINES è referenziata (da ALL_DEPENDENCIES, owner INFOCAD_TEST38) solo dal proprio trigger e da 12 procedure WKT_* (WKT_CREATELINE, WKT_UPDATELINE, WKT_LOGICALDELETELINE, WKT_FINALDELETELINE, WKT_GETALLLINES, WKT_GETLINEBYID, WKT_GETLINESBYIDLIST, WKT_GETALLLINESFORBIND, WKT_GETCONTACTBOUNDEDLINES, WKT_GETCONTACTHISTORY, WKT_GETMOBILEBOUNDEDLINES, WKT_GETMOBILEHISTORY).
  • WKT_CREATELINE nel codice compare in un solo punto: Line_DAL.vb:219 (grep sui due repo, esclusi bin/obj) — chiamato solo da Line_BL.Insert:27, esposto solo via Line_BL.rem (Start.vb:848), consumato solo da LineController.Insert:15, usato nella web app solo da LineDetail.ascx.vb:260 (CreateNew).
  • Forward e reverse concordano su un'unica catena senza rami nascosti → NO CONFLICTING.
  • Nota: i progetti Reporting*/WorkerKitCenter/* in Customizations sono soli report/lettere (EventSheet) sul dominio, non percorsi di scrittura.
  • Unicità applicativa della linea: PREFIX+LINE_NUMBER con ISCANCELLED=0 (enforced solo nella SP, non da constraint dichiarativo — dedotto dal sorgente di WKT_CREATELINE).
  • Cancellazione a due livelli: logica (ISCANCELLED=1, ripristinabile con WKT_RESTORELINE) vs definitiva (WKT_FINALDELETELINE).
  • Storicità delle assegnazioni: WKRKIT_CONTACTS_LINE/WKRKIT_CONTACTS_MOBILE mantengono DATE_ON/DATE_OFF/ISCANCELLED; una nuova assegnazione chiude automaticamente le precedenti.
  • Convenzione naming DB del dominio: SP WKT_*, tabelle WKRKIT_*, sequence SEQ_WKRKIT_*.
  • Il modulo è attivabile a licenza (GUID ULM); i BL sono SingleCall (stateless) via remoting.

Evidenza (file:line)

Punti chiave (codice — path relativi ai repo): InfocadWeb/WebMachine/CASSANDRA/WorkerKitWeb/UserControls/LinesManager.ascx:158,241; .../WorkerKitWeb/LineDetailPage.aspx.vb:22-58; .../UserControls/LineViewControl.ascx:3-4,52; .../UserControls/LineViewControl.ascx.vb:110-111,131-144; .../UserControls/LineDetail.ascx.vb:1,18-22,61-67,207-275 (260,261-262,264-266),277-322 (315),456-467,490-493,533-547; InfocadServer/WorkerKitControllers/LineController.vb:7-9,15-17; InfocadServer/WorkerKitControllers/serv/Ctrl_Base.vb:6-7; serv/DAOFactory.vb:11-12; serv/ServicesDictionary.resx:138-140; InfocadServer/Business/Start.vb:841-873 (848); InfocadServer/ULM/ApplicationFactory.vb:54; InfocadServer/WorkerKitBL/Line_BL.vb:9-10,23-47; InfocadServer/WorkerKitDAL/WorkerKitDALFactory.vb:24-26; InfocadServer/WorkerKitDAL/OracleODP/Line_DAL.vb:149-229 (169,219,221),301,326-337; InfocadServer/WorkerKitDAL/My Project/Settings.Designer.vb:57-63.

Punti chiave (DB INFOCAD_TEST38, sola lettura dizionario: USER_OBJECTS, USER_SOURCE, USER_DEPENDENCIES, USER_TRIGGERS, USER_TAB_COLUMNS, ALL_DEPENDENCIES): WKT_CREATELINE PROCEDURE VALID — firma 20 IN + PNEWINDEX OUT; dup-check su WKRKIT_LINES; INSERT ... RETURNING ID_LINES INTO PNEWINDEX; deps applicative = solo WKRKIT_LINES. WKT_UPDATELINEUPDATE WKRKIT_LINES ... WHERE ID_LINES = PIDLINE. WKT_ADDLINESTOCONTACT — UPDATE (chiusura) + INSERT su WKRKIT_CONTACTS_LINE; deps HELPERS (package), MYINTTABLE (type). Trigger BEFORE INSERT WKRKIT_LINESSEQ_WKRKIT_LINES.NEXTVAL. Schema: 13 tabelle WKRKIT_*; WKRKIT_LINES = 22 colonne, ID_LINES NUMBER NOT NULL.

Confidence

  • VERIFIED: intera catena Insert (UI → code-behind → controller → remoting → BL → DAL → WKT_CREATELINEWKRKIT_LINES), inclusi trigger/sequence e regola anti-duplicato — confermata sia sul codice (file:line) sia sul dizionario Oracle (2ª tipologia di evidenza).
  • SUPPORTED: risoluzione runtime CHANNEL/SERVERADDRESS del remoting (config-dipendente); scrittura su WKRKIT_CONTACTS_LINE (ramo condizionato dalla selezione contatto); lettura combo via WKT_GETALL*; interpretazione di business del dominio ("kit telefonico del lavoratore").
  • INFERRED: significato del grant 10020 (etichetta funzionale non trovata nel codice web).

Open questions

  • A cosa corrisponde esattamente il grant 10020 nel catalogo permessi (etichetta/funzione).
  • CostCentre_BL/Site_BL del WorkerKit vs DAO_CostCentre globale (Start.vb:326): due anagrafiche centri di costo coesistono — quale è master per i clienti che usano entrambe?
  • La colonna COST_CENTRE su WKRKIT_LINES è NVARCHAR2 (codice), non FK numerica: integrità referenziale solo applicativa?
  • Non esiste una pagina di creazione Mobile+Line combinata? (WKT_ADDLINESTOMOBILE / WKRKIT_MOBILE_LINES risultano usate solo dai selector, non tracciate qui).
  • Comportamento in configurazioni PROD (osservato solo ambiente TEST38).