Table of Contents

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 colonna USER_PROTOCOL del 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 string MainConnection): tabelle DOCS_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 DocCenterWeb sotto la shell CASSANDRA (UserControl caricati dinamicamente).
  • Control: InfocadWeb/WebMachine/CASSANDRA/DocCenterWeb/UserControls/Custom/Temp/DocumentPublishControl.ascx (Inherits code-behind DocumentPublishControl1, base class UserControls.DocumentBase).
  • Pulsante: <asp:button id="btnSalva"> (.ascx:74).
  • Contratto provider (in uso a runtime): Descor.Documents.DocumentInterface.IDocManager (VB — DocumentPublishControl.ascx.vb:3 Imports Descor.Documents.DocumentInterface; campo Dim docMan As IDocManager a .vb:15).

Sequenza principale (main sequence)

  1. Page_Load / Page_Init preparano UI di pubblicazione (dettaglio, scadenze, messaggi). Il documento corrente è Me.CurrentDocument.
  2. Operatore conferma → btnSalva_Click (.ascx.vb:363).
  3. Lettura del flag di modalità di salvataggio esterno: SaveAttachExtMode (.ascx.vb:365).
  4. Se SaveAttachExtMode = True (.ascx.vb:368):
    1. Selezione provider pluggableLoadExternalDll() (.ascx.vb:286): legge SaveAttachExtDllName (.ascx.vb:289), esegue Assembly.LoadFrom("~/bin/{name}.dll") (.ascx.vb:292) e asb.CreateInstance("{name}.DocManager") con cast a IDocManager (.ascx.vb:294).
    2. Salvataggio allegato principale sull'ECM esternoSaveExternalAttach(usrProtocol) (.ascx.vb:232): recupera i byte (docCtrl.GetAttachmentByID, .ascx.vb:239) e chiama docMan.InsertDocument(fileName, "", fileExtension, bytes) (.ascx.vb:241). Ritorna Response{Code, Id, Message}; usrProtocol = ret.Id.ToString() (.ascx.vb:248).
    3. 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.
    4. Allegati secondari (se doc.NumAttach > 0, .ascx.vb:387): per ciascun allegato SaveExternalSecondaryAttach (.ascx.vb:264) → docMan.InsertDocument(...) (.ascx.vb:268); attachment.ExternalID = externalId (.ascx.vb:392) → docCtrl.UpdateAttachmentDoc(...) (.ascx.vb:395).
    5. Pubblicazione/workflowPublishDocument() (.ascx.vb:214→405).
  5. Se SaveAttachExtMode = False: si salta l'ECM esterno e si esegue direttamente PublishDocument() (.ascx.vb:410).
  6. 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).
  7. 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 da URL (appSettings del .config del provider) e usa Descor.Cassandra.Services.ServiceFactory<IOpenTextServiceContract>.GetService(serviceUrl, ...) (DocManager.cs:174-175); l'insert avviene con srv.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 (base DocumentBase), 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 via DocumentDALFactory.GetDocumentDAL.
  • DataLayer (wrapper ODP.NET): Descor...ArchiveManager.DataLayer (InfocadServer/ArchiveManager/DataLayer.cs): ExecuteNonQueryStoredProcedure(query) imposta CommandType.StoredProcedure e CommandText = query (DataLayer.cs:586,589,591). Connessione da My.Settings.ConnectionName = "MainConnection".
  • Provider ECM pluggable: assembly ExternalDocSave.Alfresco / ExternalDocSave.Opentext / ExternalDocSave.Docs, classe DocManager : 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 (in DOC_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 da DOC_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 via DOC_CREATEATTACHMENT / UPDATE via DOC_UPDATEATTACHMENT) — VERIFIED.
    • DOCS_TAG_DOCUMENT (DELETE via DOC_REMOVEALLTAGSFROMDOCUMENT + INSERT via DOC_ADDTAGSTODOCUMENT) — SUPPORTED (INSERT verificato; la remove opera sulla stessa tabella).
    • DOCS_ATTACHMENT_DOCUMENT (UPDATE via DOC_UPDATEATTACHMENTDOC per salvare EXTERNAL_ID) — VERIFIED.
  • Sistema ECM esterno (Alfresco/OpenText/Docs): scrittura del file fisico (fuori Oracle) via InsertDocument.
  • DEM (via PublishDocumentRunWorkFlow): 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!") se doc.Attachment nullo/senza nome, .ascx.vb:254).
  • Esito ECM: la persistenza dell'aggancio (docCtrl.Update) avviene solo se resp.Code = "1"; altrimenti ShowMessage(resp.Message) e nessun update (.ascx.vb:374,406-407).
  • Gestione errori: blocco Try/Catch globale in btnSalva_Click; su eccezione ShowMessage(ex.Message) + InfocadTraceWrapper.CreateError(...) (.ascx.vb:418-421).
  • Lato DB: logica/vincoli interni alle procedure DOC_* (blocco del BLOB su allegato inserito solo se PDOCUMENTFILE 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_PROTOCOL e DOCS_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; solo PublishDocument() (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 / DALCatch in btnSalva_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 (INSERT DOCS_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 LoadExternalDllLoadFrom + 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 SaveExternalAttachdocMan.InsertDocument DocumentPublishControl.ascx.vb:232,241
Aggancio → BL doc.UserProtocol = ret.Id; docCtrl.Update(doc) DocumentPublishControl.ascx.vb:376,377
Provider (OpenText) DocManager.InsertDocumentsrv.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.UpdateDAO.Update InfocadServer/DocumentControllers/DocumentController.vb:28
BL Document_BL.UpdateGetDocumentDAL.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_UPDATEDOCUMENTDocument_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 download DocAttachmentHandler.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 stesso IDocManager VB e usano lo stesso ServiceFactory<...>.GetService(URL) per raggiungere l'ECM esterno.
  • 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 URL nell'appSettings del .config del provider (DocManager.cs:173).
  • Notifiche: Settings.MailingType <> "none" abilita ProcessAlertSystem.
  • 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:3Imports Descor.Documents.DocumentInterface (contratto attivo).
  • DocumentPublishControl.ascx.vb:15Dim docMan As IDocManager.
  • DocumentPublishControl.ascx.vb:363-425btnSalva_Click (orchestrazione completa).
  • DocumentPublishControl.ascx.vb:365SaveAttachExtMode.
  • DocumentPublishControl.ascx.vb:286-294LoadExternalDll: Assembly.LoadFrom("~/bin/{0}.dll") (:292), asb.CreateInstance("{0}.DocManager") cast IDocManager (:294).
  • DocumentPublishControl.ascx.vb:232-262SaveExternalAttach: docMan.InsertDocument(...) (:241), userProtocol = ret.Id.ToString() (:248).
  • DocumentPublishControl.ascx.vb:374-377If resp.Code = "1"doc.UserProtocol = usrProtocoldocCtrl.Update(doc).
  • DocumentPublishControl.ascx.vb:264-284,395-401 — allegati secondari: docMan.InsertDocument (:268), docCtrl.UpdateAttachmentDoc(..., attachment.ExternalID) (:395).
  • DocumentPublishControl.ascx.vb:214-230PublishDocumentRunWorkFlow.
  • DocumentBase.vb:458-493RunWorkFlow: activity.Run(...) (:473), DEM.ElementMessage.Create(...) (:484).
  • DocumentController.vb:28-30UpdateDirectCast(Me.DAO, IDocument_BL).Update(dto).
  • Document_BL.vb:90-133UpdateDocumentDALFactory.GetDocumentDAL.Update(...); doc.UserProtocol passato a :132.
  • Document_DAL.vb:1395-1508Update: PUSERPROTOCOL param (:1438), dl.ExecuteNonQueryStoredProcedure("DOC_UPDATEDOCUMENT") (:1500).
  • Document_DAL.vb:456DOC_CREATEDOCUMENT (variante create).
  • DataLayer.cs:586-593ExecuteNonQueryStoredProcedure: CommandType.StoredProcedure (:591).

Provider ECM esterno (SUPPORTED — integrazione WCF, non eseguita)

  • ExternalDocSave.Opentext/DocManager.cs:16public class DocManager : IDocManager.
  • ExternalDocSave.Opentext/DocManager.cs:5,12 — usa Descor.Documents.DocumentInterface (using ExternalDocSave.Interface commentato).
  • ExternalDocSave.Opentext/DocManager.cs:133-159InsertDocument: srv.InsertDocument(name, mimeType, document) (:141), map code/id/message in Response.
  • ExternalDocSave.Opentext/DocManager.cs:170-186LoadService: serviceUrl da appSettings URL (: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-6Code As String, Id As String.

Configurazione

  • InfocadWeb/WebMachine/CASSANDRA/Web.config:201MainConnection (User Id INFOCAD_*).
  • InfocadWeb/WebMachine/CASSANDRA/Web.config:381-382SaveAttachExtMode=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_UPDATEDOCUMENTDOCS_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.InsertDocumentdocCtrl.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_ID degli 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/Id di tipo int, DownloadDocument(Int32)) ma i provider referenziano a runtime la versione VB Descor.Documents.DocumentInterface.IDocManager (Response.Code/Id As String, DownloadDocument(String)). Il progetto C# ExternalDocSave.Interface sembra legacy/non usato: da confermare quale sia effettivamente compilato in ~/bin.
  • Schema effettivo di MainConnection in PROD (nel sample Web.config punta a INFOCAD_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.Create durante la pubblicazione (non tracciato in questo flusso).
  • DOC_REMOVEALLTAGSFROMDOCUMENT: conferma puntuale del DELETE su DOCS_TAG_DOCUMENT (dedotto; non isolato nel corpo con controprova).