FLOW-ECM-001 — Pubblicazione/archiviazione documento su ECM esterno (DocCenter)
Flusso end-to-end di salvataggio/archiviazione di un documento del modulo DocCenter (Documentale / ECM) con integrazione verso un sistema ECM esterno pluggable (Alfresco / OpenText / Docs). Path pilota:
DocumentPublishControl.ascx(pubblicazione interattiva). Alla conferma il documento viene inviato al repository esterno tramite un provider selezionato a runtime via configurazione, l'ID esterno restituito viene persistito nella colonnaUSER_PROTOCOLdel documento su Oracle (INFOCAD_TEST38, stored procedure ODP.NET, nessun ORM) e il workflow DEM viene avanzato allo stato pubblicato.
- Flow ID: FLOW-ECM-001
- Repository: InfocadWeb (ASP.NET Web Forms, VB.NET — DocCenter/CASSANDRA + provider C#) + InfocadServer (DocumentBL/DocumentDAL/ArchiveManager)
- Confidence complessiva: VERIFIED (catena UI → code-behind → BL → DAL → stored procedure → tabelle, con controprova su DB) · SUPPORTED (dettaglio integrazione WCF esterna, non eseguibile)
Obiettivo di business
Consentire a un operatore del Documentale di archiviare/pubblicare un documento (e i
suoi allegati) delegando la persistenza fisica del file (byte) a un sistema ECM esterno
(Alfresco, OpenText o "Docs") anziché conservarlo come BLOB nel database Infocad. Il
provider esterno è selezionabile a runtime senza ricompilazione, tramite due chiavi di
configurazione. L'identificativo del documento restituito dall'ECM esterno viene salvato in
Infocad (DOCS_DOCUMENT.USER_PROTOCOL / DOCS_ATTACHMENT_DOCUMENT.EXTERNAL_ID) come
"aggancio" logico, e il documento viene portato nello stato di workflow "pubblicato".
Attori
- Operatore Documentale (utente autenticato DocCenter) — path interattivo
DocumentPublishControl.ascx. - Sistema ECM esterno — Alfresco / OpenText / Docs, raggiunto via servizio (WCF/SOAP) dal provider pluggable.
- Oracle
INFOCAD_TEST38(schema hub, connection stringMainConnection): tabelleDOCS_DOCUMENT,DOCS_ATTACHMENT,DOCS_ATTACHMENT_DOCUMENT,DOCS_TAG_DOCUMENT. - Motore workflow DEM (avanzamento stato documento, messaggi elemento).
Trigger
Submit del pulsante "Salva" della maschera di pubblicazione: evento
btnSalva_Click (Handles btnSalva.Click) in DocumentPublishControl.ascx.vb:363.
Frontend entry point
- Shell: applicazione web
DocCenterWebsotto la shell CASSANDRA (UserControl caricati dinamicamente). - Control:
InfocadWeb/WebMachine/CASSANDRA/DocCenterWeb/UserControls/Custom/Temp/DocumentPublishControl.ascx(Inheritscode-behindDocumentPublishControl1, base classUserControls.DocumentBase). - Pulsante:
<asp:button id="btnSalva">(.ascx:74). - Contratto provider (in uso a runtime):
Descor.Documents.DocumentInterface.IDocManager(VB —DocumentPublishControl.ascx.vb:3Imports Descor.Documents.DocumentInterface; campoDim docMan As IDocManagera.vb:15).
Sequenza principale (main sequence)
Page_Load/Page_Initpreparano UI di pubblicazione (dettaglio, scadenze, messaggi). Il documento corrente èMe.CurrentDocument.- Operatore conferma →
btnSalva_Click(.ascx.vb:363). - Lettura del flag di modalità di salvataggio esterno:
SaveAttachExtMode(.ascx.vb:365). - Se
SaveAttachExtMode = True(.ascx.vb:368):- Selezione provider pluggable —
LoadExternalDll()(.ascx.vb:286): leggeSaveAttachExtDllName(.ascx.vb:289), esegueAssembly.LoadFrom("~/bin/{name}.dll")(.ascx.vb:292) easb.CreateInstance("{name}.DocManager")con cast aIDocManager(.ascx.vb:294). - Salvataggio allegato principale sull'ECM esterno —
SaveExternalAttach(usrProtocol)(.ascx.vb:232): recupera i byte (docCtrl.GetAttachmentByID,.ascx.vb:239) e chiamadocMan.InsertDocument(fileName, "", fileExtension, bytes)(.ascx.vb:241). RitornaResponse{Code, Id, Message};usrProtocol = ret.Id.ToString()(.ascx.vb:248). - Se
resp.Code = "1"(successo,.ascx.vb:374):doc.UserProtocol = usrProtocol(.ascx.vb:376) →docCtrl.Update(doc)(.ascx.vb:377) persiste l'aggancio su Oracle. - Allegati secondari (se
doc.NumAttach > 0,.ascx.vb:387): per ciascun allegatoSaveExternalSecondaryAttach(.ascx.vb:264) →docMan.InsertDocument(...)(.ascx.vb:268);attachment.ExternalID = externalId(.ascx.vb:392) →docCtrl.UpdateAttachmentDoc(...)(.ascx.vb:395). - Pubblicazione/workflow —
PublishDocument()(.ascx.vb:214→405).
- Selezione provider pluggable —
- Se
SaveAttachExtMode = False: si salta l'ECM esterno e si esegue direttamentePublishDocument()(.ascx.vb:410). PublishDocument(.ascx.vb:214) →RunWorkFlow(...)(DocumentBase.vb:458) →activity.Run(idElement, WorkFlowID, contactId)(avanzamento stato DEM,DocumentBase.vb:473) +DEM.ElementMessage.Create(...)(DocumentBase.vb:484) + refresh cache. Redirect finale (.ascx.vb:229).- Notifica: se
MailingType <> "none"→ProcessAlertSystem()(.ascx.vb:414).
API / service
- Path interattivo: nessun servizio SOAP/WCF verso Infocad — postback ASP.NET Web Forms diretto.
- Integrazione esterna: il provider chiama un servizio remoto dell'ECM. Es. OpenText:
LoadService()(DocManager.cs:170) costruisce l'endpoint daURL(appSettings del.configdel provider) e usaDescor.Cassandra.Services.ServiceFactory<IOpenTextServiceContract>.GetService(serviceUrl, ...)(DocManager.cs:174-175); l'insert avviene consrv.InsertDocument(name, mimeType, document)(DocManager.cs:141). Pattern identico per Alfresco (ServiceFactory<IALFrescoServiceContract>,DocManager.cs:101) e Docs (ServiceFactory<IDocsServiceContract>,DocManager.cs:87).
Backend
- UI/BL lato web:
DocumentPublishControl1(baseDocumentBase),DocumentController(Descor.Documents.DocumentControllers.DocumentController). - BL server:
Document_BL(InfocadServer/DocumentBL/Document_BL.vb,Implements IDocument_BL). - DAL:
Document_DAL(InfocadServer/DocumentDAL/OracleODP/Document_DAL.vb), ottenuto viaDocumentDALFactory.GetDocumentDAL. - DataLayer (wrapper ODP.NET):
Descor...ArchiveManager.DataLayer(InfocadServer/ArchiveManager/DataLayer.cs):ExecuteNonQueryStoredProcedure(query)impostaCommandType.StoredProcedureeCommandText = query(DataLayer.cs:586,589,591). Connessione daMy.Settings.ConnectionName = "MainConnection". - Provider ECM pluggable: assembly
ExternalDocSave.Alfresco/ExternalDocSave.Opentext/ExternalDocSave.Docs, classeDocManager : IDocManager.
Query / stored procedure
| Passo | Stored procedure (Oracle, INFOCAD_TEST38) |
Chiamata da (DAL) |
|---|---|---|
| Update documento (+ aggancio ECM) | DOC_UPDATEDOCUMENT (param IN PUSERPROTOCOL) |
Document_DAL.vb:1500 |
| — sotto-proc: crea allegato | DOC_CREATEATTACHMENT (INSERT DOCS_ATTACHMENT) |
invocata da DOC_UPDATEDOCUMENT |
| — sotto-proc: aggiorna allegato | DOC_UPDATEATTACHMENT (UPDATE DOCS_ATTACHMENT) |
invocata da DOC_UPDATEDOCUMENT |
| — sotto-proc: rimuove tag | DOC_REMOVEALLTAGSFROMDOCUMENT |
invocata da DOC_UPDATEDOCUMENT |
| — sotto-proc: aggiunge tag | DOC_ADDTAGSTODOCUMENT (INSERT DOCS_TAG_DOCUMENT) |
invocata da DOC_UPDATEDOCUMENT |
Update allegato secondario (+ EXTERNAL_ID) |
DOC_UPDATEATTACHMENTDOC (UPDATE DOCS_ATTACHMENT_DOCUMENT) |
Document_DAL/Attachment_DAL |
| Creazione documento (variante create) | DOC_CREATEDOCUMENT (INSERT DOCS_DOCUMENT) |
Document_DAL.vb:456 |
(mappa proc→tabelle VERIFICATA con lookup read-only su USER_SOURCE/ALL_DEPENDENCIES di INFOCAD_TEST38)
Tabelle lette (read)
INFOCAD_TEST38:DOCS_ATTACHMENT_DOCUMENT(inDOC_CREATEATTACHMENTDOC, controllo pre-insert). Le SELECT di caricamento (DOC_GETDOCUMENTBYID,DOC_GETALLDOCUMENTS, ecc.) non fanno parte del ramo di scrittura.
Tabelle modificate (write)
INFOCAD_TEST38:DOCS_DOCUMENT(UPDATE daDOC_UPDATEDOCUMENT:SET ... USER_PROTOCOL = PUSERPROTOCOL, USER_VERSION = PUSERVERSION, ID_ATTACHMENT = ..., IS_LAST_VERSION = ..., ID_DOC_SITE = ..., ID_CATEGORY = ... WHERE ID_DOCUMENT = PIDDOCUMENT) — VERIFIED su sorgente della procedura.DOCS_ATTACHMENT(INSERT viaDOC_CREATEATTACHMENT/ UPDATE viaDOC_UPDATEATTACHMENT) — VERIFIED.DOCS_TAG_DOCUMENT(DELETE viaDOC_REMOVEALLTAGSFROMDOCUMENT+ INSERT viaDOC_ADDTAGSTODOCUMENT) — SUPPORTED (INSERT verificato; la remove opera sulla stessa tabella).DOCS_ATTACHMENT_DOCUMENT(UPDATE viaDOC_UPDATEATTACHMENTDOCper salvareEXTERNAL_ID) — VERIFIED.
- Sistema ECM esterno (Alfresco/OpenText/Docs): scrittura del file fisico (fuori Oracle) via
InsertDocument. - DEM (via
PublishDocument→RunWorkFlow): avanzamento stato elemento + messaggio (side effect, non tracciato a livello di tabella in questo flusso).
Validazione
- Lato UI: presenza allegato in
SaveExternalAttach(Throw New Exception("Allegato mancante!")sedoc.Attachmentnullo/senza nome,.ascx.vb:254). - Esito ECM: la persistenza dell'aggancio (
docCtrl.Update) avviene solo seresp.Code = "1"; altrimentiShowMessage(resp.Message)e nessun update (.ascx.vb:374,406-407). - Gestione errori: blocco
Try/Catchglobale inbtnSalva_Click; su eccezioneShowMessage(ex.Message)+InfocadTraceWrapper.CreateError(...)(.ascx.vb:418-421). - Lato DB: logica/vincoli interni alle procedure
DOC_*(blocco del BLOB su allegato inserito solo sePDOCUMENTFILE IS NOT NULL, gestione categoria/attachment nulli).
Side effects
- Scrittura del documento fisico sul repository ECM esterno (Alfresco/OpenText/Docs).
- Persistenza dell'ID esterno in
DOCS_DOCUMENT.USER_PROTOCOLeDOCS_ATTACHMENT_DOCUMENT.EXTERNAL_ID. - Avanzamento del workflow DEM del documento (stato → "pubblicato") e creazione messaggio elemento (
DocumentBase.vb:473,484). - Invalidazione/aggiornamento cache DocCenter (
DocCenterHelper.EmptyFromCache/UpdateCache,.ascx.vb:224-227). - Notifica mail opzionale (
ProcessAlertSystem,.ascx.vb:414-415). - Nota: nel codice è previsto (attualmente commentato) lo svuotamento fisico del BLOB locale dopo l'invio all'ECM (
.ascx.vb:379-383,393-394).
Percorsi alternativi / di errore
SaveAttachExtMode = False→ nessuna chiamata all'ECM esterno; soloPublishDocument()(BLOB conservato in Infocad) (.ascx.vb:409-411).resp.Code <> "1"→ShowMessage(resp.Message), nessun update dell'aggancio, nessuna pubblicazione (.ascx.vb:406-407).- Eccezione ECM / DAL →
CatchinbtnSalva_Click: messaggio all'utente + trace di errore, il documento resta nello stato precedente (.ascx.vb:418-421). - Selezione provider: cambia solo
SaveAttachExtDllName(Alfresco/Opentext/Docs) → nessuna modifica al codice chiamante (Web.config CASSANDRA default:SaveAttachExtMode=true,SaveAttachExtDllName=ExternalDocSave.Opentext,Web.config:381-382). - Variante create (nuovo documento anziché update): stessa DAL,
DOC_CREATEDOCUMENT(INSERTDOCS_DOCUMENT,Document_DAL.vb:456).
Diagramma di sequenza
sequenceDiagram
actor Op as Operatore Documentale
participant UI as DocumentPublishControl.ascx.vb (btnSalva_Click)
participant PRV as DocManager (provider pluggable)
participant EXT as ECM esterno (OpenText/Alfresco/Docs)
participant CTL as DocumentController / Document_BL
participant DAL as Document_DAL + DataLayer (ODP.NET)
participant DB as Oracle INFOCAD_TEST38
participant DEM as DEM Workflow
Op->>UI: conferma "Salva" (btnSalva.Click)
UI->>UI: leggi SaveAttachExtMode / SaveAttachExtDllName
alt SaveAttachExtMode = True
UI->>UI: LoadExternalDll (Assembly.LoadFrom + CreateInstance -> IDocManager)
UI->>PRV: InsertDocument(fileName, "", ext, bytes)
PRV->>EXT: ServiceFactory.GetService(URL) -> srv.InsertDocument(...)
EXT-->>PRV: {code, id, message}
PRV-->>UI: Response (Id = ID esterno)
alt Response.Code = "1"
UI->>UI: doc.UserProtocol = Response.Id
UI->>CTL: docCtrl.Update(doc)
CTL->>DAL: Document_DAL.Update(..., userProtocol, ...)
DAL->>DB: DOC_UPDATEDOCUMENT (UPDATE DOCS_DOCUMENT.USER_PROTOCOL)
DB-->>DAL: ok
UI->>PRV: InsertDocument(allegati secondari)
UI->>DAL: DOC_UPDATEATTACHMENTDOC (EXTERNAL_ID)
UI->>DEM: PublishDocument -> RunWorkFlow (activity.Run + ElementMessage)
else Code <> "1"
UI-->>Op: ShowMessage(errore), nessuna scrittura
end
else SaveAttachExtMode = False
UI->>DEM: PublishDocument (BLOB in Infocad)
end
UI-->>Op: RedirectAction / notifica mail opzionale
Matrice di tracciabilità
| Layer | Artefatto | Evidenza (file:riga) |
|---|---|---|
| UI (markup) | DocumentPublishControl.ascx (btnSalva) |
.../DocCenterWeb/UserControls/Custom/Temp/DocumentPublishControl.ascx:74 |
| Code-behind | btnSalva_Click (Handles btnSalva.Click) |
DocumentPublishControl.ascx.vb:363 |
| Config gate | SaveAttachExtMode letto |
DocumentPublishControl.ascx.vb:365 |
| Provider select | LoadExternalDll → LoadFrom + CreateInstance cast IDocManager |
DocumentPublishControl.ascx.vb:286,292,294 |
| Contratto provider | Descor.Documents.DocumentInterface.IDocManager (VB) |
InfocadServer/DocumentInterface/DAO/IDocManager.vb:3 |
| DTO risposta | Response (Code/Id As String) |
InfocadServer/DocumentSharedObjects/Objects/Response.vb:5-6 |
| Save esterno | SaveExternalAttach → docMan.InsertDocument |
DocumentPublishControl.ascx.vb:232,241 |
| Aggancio → BL | doc.UserProtocol = ret.Id; docCtrl.Update(doc) |
DocumentPublishControl.ascx.vb:376,377 |
| Provider (OpenText) | DocManager.InsertDocument → srv.InsertDocument |
ExternalDocSave.Opentext/DocManager.cs:133,141 |
| Provider (OpenText) | LoadService (ServiceFactory + URL) |
ExternalDocSave.Opentext/DocManager.cs:170,174 |
| Provider (Alfresco) | DocManager.InsertDocument / LoadService |
ExternalDocSave.Alfresco/DocManager.cs:58,97 |
| Provider (Docs) | DocManager.InsertDocument / LoadService |
ExternalDocSave.Docs/DocManager.cs:31,83 |
| Controller | DocumentController.Update → DAO.Update |
InfocadServer/DocumentControllers/DocumentController.vb:28 |
| BL | Document_BL.Update → GetDocumentDAL.Update(..., doc.UserProtocol, ...) |
InfocadServer/DocumentBL/Document_BL.vb:90,110,132 |
| DAL | Document_DAL.Update (param PUSERPROTOCOL) → DOC_UPDATEDOCUMENT |
InfocadServer/DocumentDAL/OracleODP/Document_DAL.vb:1395,1438,1500 |
| DataLayer | ExecuteNonQueryStoredProcedure (StoredProcedure) |
InfocadServer/ArchiveManager/DataLayer.cs:586,591 |
| Connessione | MainConnection → schema INFOCAD |
InfocadWeb/WebMachine/CASSANDRA/Web.config:201 |
| Config default | SaveAttachExtMode=true, SaveAttachExtDllName=ExternalDocSave.Opentext |
InfocadWeb/WebMachine/CASSANDRA/Web.config:381-382 |
| DB | DOC_UPDATEDOCUMENT UPDATE DOCS_DOCUMENT.USER_PROTOCOL |
USER_SOURCE.DOC_UPDATEDOCUMENT (INFOCAD_TEST38) |
| DB | DOC_CREATEDOCUMENT INSERT DOCS_DOCUMENT |
USER_SOURCE.DOC_CREATEDOCUMENT |
| DB | DOC_UPDATEATTACHMENTDOC UPDATE DOCS_ATTACHMENT_DOCUMENT |
USER_SOURCE.DOC_UPDATEATTACHMENTDOC |
Reverse trace (dalla stored procedure / interfaccia ai chiamanti)
- Da
DOC_UPDATEDOCUMENT←Document_DAL.Update(Document_DAL.vb:1500) ←Document_BL.Update(Document_BL.vb:110) ←DocumentController.Update(DocumentController.vb:28) ←docCtrl.Update(doc)nei control DocCenter. Concorda con il forward trace. - Da
IDocManager/CreateInstance("{name}.DocManager"): lo stesso pattern di selezione provider è ripetuto in tutti i control di save/download del Documentale —DocumentUpdateControlInfo.ascx.vb:406/423,DocumentEditControl.ascx.vb:446/463,DocumentWfChangeStateControl.ascx.vb:282,SecondaryAttachementsControl.ascx.vb,DocumentGridControl.ascx.vb:2352, e nei path di downloadDocAttachmentHandler.ashx.vb:147/AttachementsDownload.aspx.vb:282(+ variante C# ProjectCenter). Forward e reverse concordano → NO CONFLICTING. - I tre provider (
ExternalDocSave.Alfresco/Opentext/Docs) implementano lo stessoIDocManagerVB e usano lo stessoServiceFactory<...>.GetService(URL)per raggiungere l'ECM esterno.
Regole correlate (related rules)
- Attivazione salvataggio esterno:
CommonWeb.DocCenterWeb.Configuration.Settings.SaveAttachExtMode(bool). - Provider ECM:
CommonWeb.DocCenterWeb.Configuration.Settings.SaveAttachExtDllName(nome assembly in~/bin, es.ExternalDocSave.Opentext). - Endpoint ECM: chiave
URLnell'appSettingsdel.configdel provider (DocManager.cs:173). - Notifiche:
Settings.MailingType <> "none"abilitaProcessAlertSystem. - Connessione DB del Documentale: connection string
MainConnection(schema INFOCAD).
Evidenza (file:line) — INLINE
Catena codice (VERIFIED)
DocumentPublishControl.ascx:74—<asp:button id="btnSalva">.DocumentPublishControl.ascx.vb:3—Imports Descor.Documents.DocumentInterface(contratto attivo).DocumentPublishControl.ascx.vb:15—Dim docMan As IDocManager.DocumentPublishControl.ascx.vb:363-425—btnSalva_Click(orchestrazione completa).DocumentPublishControl.ascx.vb:365—SaveAttachExtMode.DocumentPublishControl.ascx.vb:286-294—LoadExternalDll:Assembly.LoadFrom("~/bin/{0}.dll")(:292),asb.CreateInstance("{0}.DocManager")castIDocManager(:294).DocumentPublishControl.ascx.vb:232-262—SaveExternalAttach:docMan.InsertDocument(...)(:241),userProtocol = ret.Id.ToString()(:248).DocumentPublishControl.ascx.vb:374-377—If resp.Code = "1"→doc.UserProtocol = usrProtocol→docCtrl.Update(doc).DocumentPublishControl.ascx.vb:264-284,395-401— allegati secondari:docMan.InsertDocument(:268),docCtrl.UpdateAttachmentDoc(..., attachment.ExternalID)(:395).DocumentPublishControl.ascx.vb:214-230—PublishDocument→RunWorkFlow.DocumentBase.vb:458-493—RunWorkFlow:activity.Run(...)(:473),DEM.ElementMessage.Create(...)(:484).DocumentController.vb:28-30—Update→DirectCast(Me.DAO, IDocument_BL).Update(dto).Document_BL.vb:90-133—Update→DocumentDALFactory.GetDocumentDAL.Update(...);doc.UserProtocolpassato a:132.Document_DAL.vb:1395-1508—Update:PUSERPROTOCOLparam (:1438),dl.ExecuteNonQueryStoredProcedure("DOC_UPDATEDOCUMENT")(:1500).Document_DAL.vb:456—DOC_CREATEDOCUMENT(variante create).DataLayer.cs:586-593—ExecuteNonQueryStoredProcedure:CommandType.StoredProcedure(:591).
Provider ECM esterno (SUPPORTED — integrazione WCF, non eseguita)
ExternalDocSave.Opentext/DocManager.cs:16—public class DocManager : IDocManager.ExternalDocSave.Opentext/DocManager.cs:5,12— usaDescor.Documents.DocumentInterface(using ExternalDocSave.Interfacecommentato).ExternalDocSave.Opentext/DocManager.cs:133-159—InsertDocument:srv.InsertDocument(name, mimeType, document)(:141), mapcode/id/messageinResponse.ExternalDocSave.Opentext/DocManager.cs:170-186—LoadService:serviceUrlda appSettingsURL(:173),ServiceFactory<IOpenTextServiceContract>.GetService(...)(:174-175).ExternalDocSave.Alfresco/DocManager.cs:13,58,97-102;ExternalDocSave.Docs/DocManager.cs:13,31,83-88— pattern equivalente.InfocadServer/DocumentInterface/DAO/IDocManager.vb— contratto:InsertDocument(name, comment, mimeType, byte()) As Response.InfocadServer/DocumentSharedObjects/Objects/Response.vb:5-6—Code As String,Id As String.
Configurazione
InfocadWeb/WebMachine/CASSANDRA/Web.config:201—MainConnection(User Id INFOCAD_*).InfocadWeb/WebMachine/CASSANDRA/Web.config:381-382—SaveAttachExtMode=true,SaveAttachExtDllName=ExternalDocSave.Opentext.CommonWeb/DocCenter/Configuration/Settings.vb:236,242— proprietàSaveAttachExtMode,SaveAttachExtDllName.
Controprova su DB (VERIFIED — lookup read-only su INFOCAD_TEST38)
ALL_DEPENDENCIES:DOC_UPDATEDOCUMENT→DOCS_DOCUMENT(TABLE),DOC_ADDTAGSTODOCUMENT,DOC_CREATEATTACHMENT,DOC_REMOVEALLTAGSFROMDOCUMENT,DOC_UPDATEATTACHMENT(PROCEDURE),HELPERS(PACKAGE).USER_SOURCE.DOC_UPDATEDOCUMENT:UPDATE DOCS_DOCUMENT SET ... USER_PROTOCOL = PUSERPROTOCOL, USER_VERSION = PUSERVERSION ... WHERE ID_DOCUMENT = PIDDOCUMENT.USER_SOURCE.DOC_CREATEDOCUMENT:INSERT INTO DOCS_DOCUMENT ....USER_SOURCE.DOC_UPDATEATTACHMENT:UPDATE DOCS_ATTACHMENT;DOC_CREATEATTACHMENT:INSERT INTO DOCS_ATTACHMENT.USER_SOURCE.DOC_ADDTAGSTODOCUMENT:INSERT INTO DOCS_TAG_DOCUMENT.USER_SOURCE.DOC_UPDATEATTACHMENTDOC:UPDATE DOCS_ATTACHMENT_DOCUMENT;DOC_CREATEATTACHMENTDOC:INSERT INTO DOCS_ATTACHMENT_DOCUMENT.
Confidence
- VERIFIED: catena UI → code-behind → provider select →
docMan.InsertDocument→docCtrl.Update→ BL → DAL →DOC_UPDATEDOCUMENT, e mappa proc→tabella (DOCS_DOCUMENT.USER_PROTOCOL,DOCS_ATTACHMENT,DOCS_TAG_DOCUMENT,DOCS_ATTACHMENT_DOCUMENT) letta direttamente sul sorgente delle procedure (2 tipi di evidenza indipendenti: codice + DB). - SUPPORTED: dettaglio dell'integrazione WCF verso l'ECM esterno (endpoint/servizio non eseguibili in questo ambiente).
- INFERRED: valorizzazione di
EXTERNAL_IDdegli allegati secondari (letta nella firma del proc, non dal corpo con controprova puntuale a livello di colonna).
Open questions
- Doppia definizione del contratto: esiste
ExternalDocSave.Interface.IDocManager(C#,Response.Code/Iddi tipoint,DownloadDocument(Int32)) ma i provider referenziano a runtime la versione VBDescor.Documents.DocumentInterface.IDocManager(Response.Code/Id As String,DownloadDocument(String)). Il progetto C#ExternalDocSave.Interfacesembra legacy/non usato: da confermare quale sia effettivamente compilato in~/bin. - Schema effettivo di
MainConnectionin PROD (nel sample Web.config punta aINFOCAD_BIM; in TEST èINFOCAD_TEST38). - Comportamento della logica (commentata) di svuotamento fisico del BLOB locale dopo l'invio all'ECM: attualmente il file resta anche in
DOCS_ATTACHMENT? - Mapping delle tabelle DEM toccate da
activity.Run/ElementMessage.Createdurante la pubblicazione (non tracciato in questo flusso). DOC_REMOVEALLTAGSFROMDOCUMENT: conferma puntuale delDELETEsuDOCS_TAG_DOCUMENT(dedotto; non isolato nel corpo con controprova).