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: schedaLineDetail.ascx(WorkerKitWeb, famiglia CASSANDRA) →LineController→ .NET Remoting (Line_BL.rem) →Line_BL→Line_DAL→ stored procedureWKT_CREATELINE→ tabellaWKRKIT_LINES(OracleINFOCAD_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
10020oppure 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.remsono registrati solo se la licenza abilita il GUID applicativo WorkerKit (Business/Start.vb:841-873). - Oracle
INFOCAD_TEST38— schema hub; stored procedureWKT_*, tabelleWKRKIT_*.
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, baseCassandra.InfocadSecurity.CassandraPage). - Code-behind:
LineDetailPage.aspx.vb—Page_Loadleggeid_dto/opdalla querystring eLoadDetailUserControl()carica dinamicamenteUserControls/LineViewControl.ascximpostandoID_DTOeOperationType. - Composizione:
LineViewControl.ascx:3-4registra e ospita<WorkerKit:LineDetail ID="mDetail">(:52);LineViewControl.ascx.vb:110-111aggancia gli eventiLineCreated/LineUpdated. - Gate di accesso:
HasUserGrant("10020") Or WS.SessionProfile.SuperAdmininLineDetail.ascx.vb:490(BindPage).
Sequenza principale (main sequence)
- Operatore apre
LineDetailPage.aspx?op=1, compila la scheda e preme btnAction. LineDetail.btnAction_Click(LineDetail.ascx.vb:533) → casoInsert→InsertAction()(:456).InsertAction→CreateNew()(:207): costruisce il DTOLine(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 chiamaLineController.Insert(line)(:260).LineController(InfocadServer/WorkerKitControllers/LineController.vb:7-9) in costruzione faDaoActivate(enControllers.Ctrl_Line);Insert(:15-17) inoltra aMe.DAOcastato aILine_BL.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'URILine_BL.remviene daServicesDictionary.resx:138-140(Service_Line).- Lato server, il Windows Service ha registrato il wellknown SingleCall
Descor.WorkerKit.WorkerKitBL.Line_BLsuLine_BL.rem(Business/Start.vb:848), dentro il blocco condizionato dalla licenza WorkerKit (:841). Line_BL.Insert(InfocadServer/WorkerKitBL/Line_BL.vb:23-47, classeMarshalByRefObject,:9-10): spacchetta il DTO e chiamaWorkerKitDALFactory.GetLineDAL.Insert(prefix, lineNumber, stateLine.Code, ..., phoneBook)(:27).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), 20OracleParameterIN (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) + OUTPNEWINDEX(:172-193), poidl.ExecuteNonQueryStoredProcedure("WKT_CREATELINE")(:219) e ritorno diPNEWINDEX(:221).- 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 INSERTsuWKRKIT_LINESassegnaID_LINESdaSEQ_WKRKIT_LINES.NEXTVAL(daUSER_TRIGGERS).
- inizializza
- Il ritorno risale la catena: se
-1la UI mostra "Esiste già una linea con questo numero!" (LineDetail.ascx.vb:261-262); se>0viene impostatoID_DTOe alzatoLineCreated(newID)(:264-266). - Assegnazione al contatto (write secondaria, stesso postback):
LineViewControl.LineDetail_Created(LineViewControl.ascx.vb:131-144) — se nella scheda era selezionato un contatto, chiamactrlLine.AddLinesToContact({lineID}, contactID)(:138) →Line_DAL.AddLinesToContact→WKT_ADDLINESTOCONTACT(Line_DAL.vb:326-337), che suWKRKIT_CONTACTS_LINEchiude i legami precedenti (UPDATE ... SET ISCANCELLED=1, DATE_OFF=SYSDATE) e inserisce il nuovo legame (INSERT ... (0, SYSDATE, NULL, PIDCONTACT, ID_LINE)) — daUSER_SOURCE. Page_PreRendertrasforma 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 WindowsInfocadServer(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 direttoDescor.WorkerKit.WorkerKitControllers,:1). - Controller (proxy client):
WorkerKitControllers/LineController.vb+serv/Ctrl_Base.vb:6-7(DaoActivate→DAOFactory.CreateDAO) +serv/DAOFactory.vb(Activator.GetObject → remoting). - BL (server-side, MarshalByRefObject):
WorkerKitBL/Line_BL.vb. - DAL:
WorkerKitDAL/WorkerKitDALFactory.vb:24-26(GetLineDALvia reflection sul namespaceDescor.WorkerKit.WorkerKitDAL.OracleODP) →WorkerKitDAL/OracleODP/Line_DAL.vb. - Pattern DAL:
Dim dl As New DataLayer(My.Settings.ConnectionName)→dl.Parameters.Add(...)→dl.ExecuteNonQueryStoredProcedure("WKT_...")→ OUTPNEWINDEX;dl.Kill()inFinally(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)suPREFIX+LINE_NUMBER,ISCANCELLED=0) dentroWKT_CREATELINE(VERIFIED,USER_SOURCE).INFOCAD_TEST38.WKRKIT_LINE_STATE,WKRKIT_LINE_TYPE,WKRKIT_CHARGE_TYPE,WKRKIT_COST_CENTRE,WKRKIT_SITES— popolamento combo della scheda viaWKT_GETALL*(SUPPORTED: catena DAL verificata, sorgente delle singole GETALL non ispezionato riga per riga).- Dizionario
USER_SEQUENCESletto dal trigger diWKRKIT_LINES(ramo id preassegnato).
Tabelle modificate (write)
INFOCAD_TEST38.WKRKIT_LINES— INSERT conRETURNING ID_LINES INTO PNEWINDEX; id daSEQ_WKRKIT_LINESvia trigger BEFORE INSERT (VERIFIED:USER_SOURCE+USER_TRIGGERS+USER_TAB_COLUMNS, 22 colonne, PKID_LINESNUMBER 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 suUSER_SOURCEdiWKT_ADDLINESTOCONTACT; l'attivazione del ramo dipende dall'input operatore).
Validazione
- Grant UI:
HasUserGrant("10020") Or SuperAdmin, altrimentiOperationType=Viewe nessun salvataggio possibile (LineDetail.ascx.vb:490-493). - Idempotenza/duplicati: interamente lato DB —
WKT_CREATELINEnon inserisce se esiste già una linea attiva con stessoPREFIX+LINE_NUMBERe 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/Updatedin ControlState (LineDetail.ascx.vb:83-116,538,542).
Side effects
- Generazione id via
SEQ_WKRKIT_LINES(trigger BEFORE INSERT suWKRKIT_LINES). - Storicizzazione automatica dei legami linea-contatto in
WKRKIT_CONTACTS_LINE(chiusura dei record precedenti conDATE_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/LineUpdatedper refresh tab/griglia chiamante (LineViewControl.ascx.vb:131-159,LinesManagerviaGetRadGridToUpdate()). - Nessuna scrittura su tabelle GLOBAL_* (a differenza dei flussi Property: niente
GLOBAL_TENANCY_BINDINGS, nienteCOD_GENERATECODE) — deps diWKT_CREATELINE= soloWKRKIT_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.Update→Line_BL.Update→Line_DAL.Update(:232-301) →WKT_UPDATELINE(UPDATEWKRKIT_LINES WHERE ID_LINES=PIDLINE). - Duplicato →
PNEWINDEX=-1→ alert, nessuna riga scritta. - Eccezione DAL/Remoting → catch in
CreateNew(:268-271),retValue=False, messaggiolineInsertMessageFalseda resource (:460). - Rimozione contatto:
btnRimuoviContatto_Click(LineDetail.ascx.vb:143-152) →RemoveLinesFromContact→WKT_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.remnon 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_Click → InsertAction → CreateNew → LineController.Insert |
LineDetail.ascx.vb:533-547,456-467,207-275,260 |
| Grant | HasUserGrant("10020") Or SuperAdmin |
LineDetail.ascx.vb:490-493 |
| Controller | LineController.Insert → DAO (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 PNEWINDEX → ExecuteNonQueryStoredProcedure("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_CREATELINE → WKRKIT_LINES (unica dipendenza applicativa) |
USER_DEPENDENCIES |
| DB (id) | trigger BEFORE INSERT su WKRKIT_LINES → SEQ_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 (daALL_DEPENDENCIES, ownerINFOCAD_TEST38) solo dal proprio trigger e da 12 procedureWKT_*(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_CREATELINEnel codice compare in un solo punto:Line_DAL.vb:219(grep sui due repo, esclusi bin/obj) — chiamato solo daLine_BL.Insert:27, esposto solo viaLine_BL.rem(Start.vb:848), consumato solo daLineController.Insert:15, usato nella web app solo daLineDetail.ascx.vb:260(CreateNew).- Forward e reverse concordano su un'unica catena senza rami nascosti → NO CONFLICTING.
- Nota: i progetti
Reporting*/WorkerKitCenter/*inCustomizationssono soli report/lettere (EventSheet) sul dominio, non percorsi di scrittura.
Regole correlate (related rules)
- Unicità applicativa della linea:
PREFIX+LINE_NUMBERconISCANCELLED=0(enforced solo nella SP, non da constraint dichiarativo — dedotto dal sorgente diWKT_CREATELINE). - Cancellazione a due livelli: logica (
ISCANCELLED=1, ripristinabile conWKT_RESTORELINE) vs definitiva (WKT_FINALDELETELINE). - Storicità delle assegnazioni:
WKRKIT_CONTACTS_LINE/WKRKIT_CONTACTS_MOBILEmantengonoDATE_ON/DATE_OFF/ISCANCELLED; una nuova assegnazione chiude automaticamente le precedenti. - Convenzione naming DB del dominio: SP
WKT_*, tabelleWKRKIT_*, sequenceSEQ_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_UPDATELINE — UPDATE WKRKIT_LINES ... WHERE ID_LINES = PIDLINE.
WKT_ADDLINESTOCONTACT — UPDATE (chiusura) + INSERT su WKRKIT_CONTACTS_LINE; deps HELPERS
(package), MYINTTABLE (type). Trigger BEFORE INSERT WKRKIT_LINES → SEQ_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_CREATELINE→WKRKIT_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/SERVERADDRESSdel remoting (config-dipendente); scrittura suWKRKIT_CONTACTS_LINE(ramo condizionato dalla selezione contatto); lettura combo viaWKT_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
10020nel catalogo permessi (etichetta/funzione). CostCentre_BL/Site_BLdel WorkerKit vsDAO_CostCentreglobale (Start.vb:326): due anagrafiche centri di costo coesistono — quale è master per i clienti che usano entrambe?- La colonna
COST_CENTREsuWKRKIT_LINESèNVARCHAR2(codice), non FK numerica: integrità referenziale solo applicativa? - Non esiste una pagina di creazione
Mobile+Linecombinata? (WKT_ADDLINESTOMOBILE/WKRKIT_MOBILE_LINESrisultano usate solo dai selector, non tracciate qui). - Comportamento in configurazioni PROD (osservato solo ambiente TEST38).