public static void AtualizaBd() { controleUdo = false; B1AppDomain.Application.SetStatusBarMessage("Iniciando verificação de estrutura de dados...", BoMessageTime.bmt_Short, false); int intRetCode = -1; var listaTabelas = OUTB.RetornaValores(); int qtdeCampos = 0; B1AppDomain.Application.SetStatusBarMessage("Verificando Estrutura de Dados...", BoMessageTime.bmt_Short, false); #region Cria Tabelas var pbTabelas = B1AppDomain.Application.StatusBar.CreateProgressBar("Aguarde... Atualizando Tabelas", B1AppDomain.DicionarioTabelasCampos.Count, false); foreach (KeyValuePair <object, Tabelas> tabela in B1AppDomain.DicionarioTabelasCampos.Where(p => p.Value.Ttabela == Tipos.TipoTabela.Usuario)) { pbTabelas.Value++; pbTabelas.Text = tabela.Value.NomeTabela; qtdeCampos = qtdeCampos + tabela.Value.Campos.Count; //Caso nao exista registro da tabela na base sap if (listaTabelas.All(p => p.TableName != tabela.Value.NomeTabela)) { AddTabela(tabela.Value.NomeTabela, tabela.Value.DescricaoTabela, tabela.Value.TipoTabelaSap); } } pbTabelas.Stop(); Objects.LimpaMemoria(pbTabelas); #endregion #region Cria Campos listaTabelas = new List <OUTB>(); listaTabelas = OUTB.RetornaValores(); var listaCampos = new List <CUFD>(); var pbCampos = B1AppDomain.Application.StatusBar.CreateProgressBar("Aguarde... Atualizando Campos", qtdeCampos, false); foreach (KeyValuePair <object, Tabelas> tabela in B1AppDomain.DicionarioTabelasCampos) { int existeTabela = 0; existeTabela = tabela.Value.Ttabela == Tipos.TipoTabela.Sap ? 1 : listaTabelas.Where(p => p.TableName.ToUpper() == tabela.Value.NomeTabela.ToUpper()).Count(); if (existeTabela > 0) { listaCampos = tabela.Value.Ttabela == Tipos.TipoTabela.Sap ? CUFD.RetornaValores(tabela.Value.NomeTabela) : CUFD.RetornaValores("@" + tabela.Value.NomeTabela); //Varre campos da tabela para criacao foreach (Campos campo in tabela.Value.Campos) { pbCampos.Value++; pbCampos.Text = campo.NomeTabela + " - " + campo.NomeCampo; if (listaCampos.Count(p => p.AliasID.ToUpper() == campo.NomeCampo.ToUpper() && p.TableID.ToUpper() == (tabela.Value.Ttabela == Tipos.TipoTabela.Sap ? campo.NomeTabela.ToUpper() : "@" + campo.NomeTabela.ToUpper())) <= 0) { AddCampo(campo.NomeCampo, campo.NomeTabela, campo.TipoCampo, campo.SubTipos, campo.Tamanho, campo.Mandatory, campo.DescricaoCampo, campo.ValorPadrao, campo.ValoresValidos, tabela.Value.Ttabela, campo.UdoReferencia, campo.TabelaReferencia); } else { if (VerificaCampo(campo, listaCampos.Where(p => p.AliasID.ToUpper() == campo.NomeCampo.ToUpper() && p.TableID.ToUpper() == (tabela.Value.Ttabela == Tipos.TipoTabela.Sap ? campo.NomeTabela.ToUpper() : "@" + campo.NomeTabela.ToUpper())).SingleOrDefault())) { intRetCode = tabela.Value.Ttabela == Tipos.TipoTabela.Usuario ? DeleteCampo("@" + campo.NomeTabela, campo.NomeCampo) : DeleteCampo(campo.NomeTabela, campo.NomeCampo); if (intRetCode == 0) { AddCampo(campo.NomeCampo, campo.NomeTabela, campo.TipoCampo, campo.SubTipos, campo.Tamanho, campo.Mandatory, campo.DescricaoCampo, campo.ValorPadrao, campo.ValoresValidos, tabela.Value.Ttabela, campo.UdoReferencia, campo.TabelaReferencia); } } } } } } pbCampos.Stop(); Objects.LimpaMemoria(pbCampos); #endregion #region Cria Udo var pbUdos = B1AppDomain.Application.StatusBar.CreateProgressBar("Aguarde... Registrando Udos", B1AppDomain.DicionarioUdos.Count, false); foreach (KeyValuePair <object, Udo> udo in B1AppDomain.DicionarioUdos) { pbUdos.Value++; var tabela = B1AppDomain.DicionarioTabelasCampos.Where(p => p.Value.NomeTabela == udo.Value.TableName) .Select(p => p.Value) .SingleOrDefault(); tabela.Udos = udo.Value; foreach (KeyValuePair <object, UdoFilhos> filho in B1AppDomain.DicionarioUdosFilhos.Where(p => p.Value.TabelaPai == udo.Value.TableName)) { if (tabela.Udos.Filhos == null) { tabela.Udos.Filhos = new List <UdoFilhos>(); } tabela.Udos.Filhos.Add(filho.Value); } AddUdo(tabela); } pbUdos.Stop(); Objects.LimpaMemoria(pbUdos); #endregion B1AppDomain.Application.SetStatusBarMessage("Verificação de estrutura de dados concluida!", BoMessageTime.bmt_Short, false); if (controleUdo) { B1AppDomain.Application.MessageBox("Dados foram alterados o sistema será reiniciado"); B1AppDomain.Company.Disconnect(); B1AppDomain.Application.Menus.Item("3329").Activate(); B1AppDomain.Application.Forms.ActiveForm.Items.Item("3").Click(); } }
internal static bool VerificaCampo(Campos campo, CUFD registro) { bool mand = registro.NotNull == "Y"; if (mand != (campo.Mandatory == BoYesNoEnum.tYES) && campo.TipoCampo != BoFieldTypes.db_Date && campo.TipoCampo != BoFieldTypes.db_Memo) { return(true); } if (campo.DescricaoCampo != registro.Descr) { return(true); } if (campo.NomeCampo != registro.AliasID) { return(true); } if (campo.SubTipos != RelationalReader.RetornaSubTipo(registro.EditType)) { return(true); } if (campo.TabelaReferencia != null) { if (campo.TabelaReferencia != registro.RTable) { return(true); } } if (campo.Tamanho != registro.EditSize && campo.TipoCampo == BoFieldTypes.db_Alpha && campo.TipoCampo == BoFieldTypes.db_Numeric) { return(true); } if (campo.ValorPadrao != null) { if (campo.ValorPadrao != registro.Dflt) { return(true); } } if (campo.TipoCampo != RelationalReader.RetornaTipoCampo(registro.TypeID)) { return(true); } if (campo.UdoReferencia != null) { if (campo.UdoReferencia != registro.RelUDO) { return(true); } } if (campo.ValoresValidos != null) { foreach (UFD1 valor in UFD1.RetornaValores(campo.NomeTabela, campo.NomeCampo)) { if (campo.ValoresValidos.Where(p => p.Valor == valor.FldValue && p.Descricao == valor.Descr).Count() <= 0) { return(true); } } //foreach (ValoresValidos vlr in campo.ValoresValidos) //{ // if (UFD1.RetornaValores(campo.NomeTabela, campo.NomeCampo).Where(p => p.FldValue == vlr.Valor && p.Descr == vlr.Descricao).Count() <= 0) // { // return true; // } //} } return(false); }