private void NavigateXmlForUpdate(XmlNode rootNode) { XmlNodeList nodiFunzione = rootNode.SelectNodes("TIPO"); // Estrazione dati e nodi sottostanti foreach (XmlNode node in nodiFunzione) { string mode = ""; XmlAttribute attribute = node.Attributes["MODE"]; if (attribute != null) { mode = attribute.InnerText.ToUpper(); } // Leggi dati XmlNode dati = node.SelectSingleNode("DATI"); if (dati == null) { logger.Debug("Errore corpo DATI tipo funzione"); //logger.DebugAdm(true,"Errore corpo DATI tipo funzione",null); throw new Exception(); } string codice = this.GetXmlField("CODICE", dati, false); string descrizione = this.GetXmlField("DESCRIZIONE", dati, false); descrizione = DocsPaUtils.Functions.Functions.ReplaceApexes(descrizione); codice = codice.ToUpper(); DocsPaDB.Query_DocsPAWS.AmministrazioneXml amministrazioneXml = new DocsPaDB.Query_DocsPAWS.AmministrazioneXml(); if (mode == "MODIFIED" || mode == "CREATED") { string idTipoFunzione = null; if (mode == "MODIFIED") { // Modifica il tipo funzione idTipoFunzione = amministrazioneXml.UpdateTipoFunzione(codice, descrizione); if (idTipoFunzione == null) { logger.Debug("Errore aggiornamento tipo funzione"); throw new Exception(); } //cancellazione delle funzioni associate al tipo if (!amministrazioneXml.DeleteFunzioni(idTipoFunzione)) { logger.Debug("Errore cancellazioni funzioni associate al tipo funzione"); throw new Exception(); } } if (mode == "CREATED") { // Inserisce il tipo funzione idTipoFunzione = amministrazioneXml.NewTipoFunzione(codice, descrizione); if (idTipoFunzione == null) { logger.Debug("Errore creazione tipo funzione"); throw new Exception(); } } // ricarica le funzioni XmlNode bloccoFunzioni = node.SelectSingleNode("FUNZIONI"); if (bloccoFunzioni == null) { logger.Debug("Errore tag FUNZIONI tipo funzione"); //logger.DebugAdm(true,"Errore tag FUNZIONI tipo funzione",null); throw new Exception(); } XmlNodeList funzioni = bloccoFunzioni.SelectNodes("FUNZIONE"); foreach (XmlNode functionNode in funzioni) { descrizione = this.GetXmlField("DESCRIZIONE", functionNode, false); codice = this.GetXmlField("CODICE", functionNode, false); string accesso = this.GetXmlField("ACCESSO", functionNode, true); codice = codice.ToUpper(); if (accesso == null) { accesso = "Full"; } // Inserisci la funzione string idFunzione = amministrazioneXml.NewFunzione(codice, codice, accesso, idTipoFunzione); if (idFunzione == null) { logger.Debug("Errore creazione funzione"); throw new Exception(); } } } if (mode == "DELETED") { //recupera l'id del tipo funzione string idTipoFunzione = amministrazioneXml.GetTipoFunzione(codice); if (idTipoFunzione == null) { logger.Debug("Codice tipo funzione sconosciuto: " + codice); //logger.DebugAdm(true,"Codice tipo funzione sconosciuto: " + codice,null); throw new Exception(); } //cancella il tipo funzione if (!amministrazioneXml.DeleteTipoFunzione(codice)) { logger.Debug("Errore cancellazione tipo funzione"); throw new Exception(); } //cancellazione delle funzioni associate al tipo funzione if (!amministrazioneXml.DeleteFunzioni(idTipoFunzione)) { logger.Debug("Errore cancellazioni funzioni"); throw new Exception(); } } } }