public async Task <IActionResult> Edit(decimal id, [Bind("Id,TipoElemento,TipoOcorrencia,ElementoPai,ComparacaoBases")] ComparacaoBasesElemento comparacaoBasesElemento) { if (id != comparacaoBasesElemento.Id) { return(NotFound()); } if (ModelState.IsValid) { try { _context.Update(comparacaoBasesElemento); await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!ComparacaoBasesElementoExists(comparacaoBasesElemento.Id)) { return(NotFound()); } else { throw; } } return(RedirectToAction(nameof(Index))); } ViewData["ComparacaoBases"] = new SelectList(_context.ComparacaoBases, "Id", "Id", comparacaoBasesElemento.ComparacaoBases); ViewData["ElementoPai"] = new SelectList(_context.ComparacaoBasesElementos, "Id", "TipoElemento", comparacaoBasesElemento.ElementoPai); return(View(comparacaoBasesElemento)); }
public async Task <IActionResult> Create([Bind("Id,TipoElemento,TipoOcorrencia,ElementoPai,ComparacaoBases")] ComparacaoBasesElemento comparacaoBasesElemento) { if (ModelState.IsValid) { _context.Add(comparacaoBasesElemento); await _context.SaveChangesAsync(); return(RedirectToAction(nameof(Index))); } ViewData["ComparacaoBases"] = new SelectList(_context.ComparacaoBases, "Id", "Id", comparacaoBasesElemento.ComparacaoBases); ViewData["ElementoPai"] = new SelectList(_context.ComparacaoBasesElementos, "Id", "TipoElemento", comparacaoBasesElemento.ElementoPai); return(View(comparacaoBasesElemento)); }
private ComparacaoBases ExtrairInformacoesComparacaoDeXML(string xmlFileOut, ComparacaoBases comparacaoBases) { var settings = new XmlReaderSettings(); settings.IgnoreWhitespace = true; string stringConteudo = File.ReadAllText(xmlFileOut); var xmlDocument = new XmlDocument(); xmlDocument.LoadXml(stringConteudo); XmlNodeList elementsGroup = xmlDocument.SelectNodes("//Result/Group"); var nsmgr = new XmlNamespaceManager(xmlDocument.NameTable); nsmgr.AddNamespace("entry", "urn:newbooks-schema"); string tagNomeElemento; foreach (XmlNode elementGroup in elementsGroup) { TipoOcorrencia tipoOcorrencia = ObterTipoOcorrenciaPorValueGroup(elementGroup.Attributes["Value"].Value); tagNomeElemento = tipoOcorrencia == TipoOcorrencia.Exclusao ? xPathTargetElement : xPathSourceElement; // Entra nas 'tabelas' XmlNodeList elementosTabelas = elementGroup.SelectNodes(".//Entry[@Name='Table'][@Type='TopLevelElement']"); foreach (XmlNode entry in elementosTabelas) { // Salva os dados da tabela var comparacaoBasesElemento = new ComparacaoBasesElemento(); comparacaoBasesElemento.ComparacaoBases = comparacaoBases.Id; comparacaoBasesElemento.TipoElemento = ((char)TipoElemento.Tabela).ToString(); comparacaoBasesElemento.TipoOcorrencia = ((char)tipoOcorrencia).ToString(); comparacaoBasesElemento.XmlOutCompare = entry.OuterXml; comparacaoBasesElemento.Nome = entry.SelectSingleNode(tagNomeElemento).InnerText; // Se existir, recupera as entradas de colunas da tabela XmlNodeList elementosColunas = entry.SelectNodes(".//Entry/Children/Entry[@Name='Column'][@Type='Element']"); foreach (XmlNode childrenEntry in elementosColunas) { var comparacaoBasesElementoFilho = new ComparacaoBasesElemento(); comparacaoBasesElementoFilho.ComparacaoBases = comparacaoBases.Id; comparacaoBasesElementoFilho.TipoElemento = ((char)TipoElemento.Coluna).ToString(); string nomeColuna = childrenEntry.SelectSingleNode(xPathTargetElement).InnerText; bool colunaExisteNoAlvo = true; if (string.IsNullOrWhiteSpace(nomeColuna)) { nomeColuna = childrenEntry.SelectSingleNode(xPathSourceElement).InnerText; colunaExisteNoAlvo = false; } if (tipoOcorrencia != TipoOcorrencia.Alteracao) { // Fora ocorrência de alteração da tabela, a ocorrência da coluna é a mesma da tabela comparacaoBasesElementoFilho.TipoOcorrencia = ((char)tipoOcorrencia).ToString(); } else { // Se ocorrência da tabela é de alteração, tem que verificar de q lado a coluna existe. comparacaoBasesElementoFilho.TipoOcorrencia = ((char)(colunaExisteNoAlvo ? TipoOcorrencia.Exclusao : TipoOcorrencia.Inclusao)).ToString(); } comparacaoBasesElementoFilho.XmlOutCompare = childrenEntry.OuterXml; comparacaoBasesElementoFilho.Nome = nomeColuna; comparacaoBasesElemento.InverseElementoPaiNavigation.Add(comparacaoBasesElementoFilho); } comparacaoBasesElemento.ComparacaoBasesNavigation = comparacaoBases; // Só adiciona elemento de alteração (tabela) se possuir elmentos filhos (colunas modificadas) if (comparacaoBasesElemento.TipoOcorrencia != "A" || comparacaoBasesElemento.InverseElementoPaiNavigation.Count > 0) { comparacaoBases.ComparacaoBasesElementos.Add(comparacaoBasesElemento); } } } comparacaoBases.XmlOutCompare = stringConteudo; return(comparacaoBases); }