//metodo responsavel por eliminar toda a nuvem do CA actual em memoria public static PersistencyHelper.DeleteCAXPreConcArguments DeleteCAX(GISADataset.ControloAutRow caRow) { GISADataset.ControloAutDicionarioRow[] cadRows = caRow.GetControloAutDicionarioRows(); GISADataset.DicionarioRow dRow = null; PersistencyHelper.DeleteCAXPreConcArguments args = new PersistencyHelper.DeleteCAXPreConcArguments(); // eliminar registos de "Dicionario" e de "ControloAutDicionario" cadRows.ToList().ForEach(cadRow => { dRow = cadRow.DicionarioRow; args.termos.Add(dRow); cadRow.Delete(); }); args.caRowID = caRow.ID; args.catCode = getCatCode(caRow.TipoNoticiaAutRow); // eliminar registos de IndexFRDCA caRow.GetIndexFRDCARows().ToList().ForEach(idx => idx.Delete()); // Somente para notícias de autoridade relacionaveis caRow.GetControloAutRelRowsByControloAutControloAutRel().ToList().ForEach(carRow => carRow.Delete()); caRow.GetControloAutRelRowsByControloAutControloAutRelAlias().ToList().ForEach(carRow => carRow.Delete()); caRow.GetControloAutEntidadeProdutoraRows().ToList().ForEach(caepRow => caepRow.Delete()); caRow.GetControloAutDatasExistenciaRows().ToList().ForEach(cadeRow => cadeRow.Delete()); caRow.Delete(); return args; }
internal bool ExistsFormaAutorizada() { GISADataset.DicionarioRow dRow = null; string selectedTermo = string.Empty; if (ListTermos.ValidAuthorizedForm != null) { selectedTermo = ListTermos.ValidAuthorizedForm.Replace("'", "''"); } // é necessário prever a possibilidade de haverem termos que são strings vazias (resultantes de conversões) no dataset if (selectedTermo.Length > 0 && GisaDataSetHelper.GetInstance().Dicionario.Select(string.Format("Termo = '{0}' ", selectedTermo)).Length > 0) { dRow = (GISADataset.DicionarioRow)(GisaDataSetHelper.GetInstance().Dicionario.Select(string.Format("Termo = '{0}'", selectedTermo))[0]); } else if (selectedTermo.Length > 0) { dRow = GisaDataSetHelper.GetInstance().Dicionario.NewDicionarioRow(); dRow.Termo = ListTermos.ValidAuthorizedForm; dRow.CatCode = "CA"; dRow.Versao = new byte[] {}; } if (dRow == null) // dRow é nothing se o valor selecionado já existir/for inválido { return(true); } // As rows detached serão as acabadas de criar e que, por essa mesma razão, não // foram ainda adicionadas ao dataset. Se usarmos um termo já existente é // necessário verificar que não existam outros CAs deste tipo de notícia de autoridade // que façam já uso deste termo como forma autorizada. bool alreadyExistsFormaAutorizada = false; if (dRow != null && dRow.RowState != DataRowState.Detached) { int tcaf = (int)TipoControloAutForma.FormaAutorizada; IDbConnection conn = GisaDataSetHelper.GetConnection(); try { conn.Open(); Trace.WriteLine("<ExistsControloAutDicionario>"); //TODO: apagar? //alreadyExistsFormaAutorizada = CBool(GisaDataSetHelper.GetDBLayer().CallScalarProcedure("sp_ExistsControloAutDicionario", param, types, values)) alreadyExistsFormaAutorizada = ControloAutRule.Current.ExistsControloAutDicionario(dRow.ID, tcaf, ((GISADataset.TipoNoticiaAutRow)cbNoticiaAut.SelectedValue).ID, conn); Trace.WriteLine("</ExistsControloAutDicionario>"); } catch (Exception ex) { Trace.WriteLine(ex); throw; } finally { conn.Close(); } } return(alreadyExistsFormaAutorizada); }
public bool NodeAlreadyExists(GISADataset.DicionarioRow dr) { foreach (TreeNode existingBranch in trVwTermoIndexacao.Nodes) { if (existingBranch.Tag is GISADataset.TipoControloAutFormaRow) { foreach (TreeNode existingNode in existingBranch.Nodes) { if (dr.ID == ((GISADataset.ControloAutDicionarioRow)existingNode.Tag).IDDicionario) { return(true); } } } } return(false); }
// Método que trata da atribuição de uma designação a um Diploma/Modelo durante uma criação ou edição private GISADataset.ControloAutDicionarioRow manageDesignacaoDiplomaModelo(GISADataset.ControloAutDicionarioRow cadRow, string termo, GISADataset.TipoNoticiaAutRow TipoNoticiaAutRow, GISADataset.ControloAutRow carow, GISADataset.TipoControloAutFormaRow tcafRowAutorizado) { // NOTA: é criada na mesma uma linha Dicionario; posteriormente no algoritmo que trata os // conflitos de concorrência vai proceder à reutilização da linha existente na // base de dados if (cadRow != null) { // se por algum motivo a transacção onde este método está inserido voltar a ser executada, // mfaPca.cadRow já não será nothing e por esse motivo deverá ser apagada a existente // em memória seja qual for o seu rowstate GisaDataSetHelper.GetInstance().ControloAutDicionario.RemoveControloAutDicionarioRow(cadRow); GisaDataSetHelper.GetInstance().Dicionario.RemoveDicionarioRow(cadRow.DicionarioRow); } else if (GisaDataSetHelper.GetInstance().Dicionario.Select("Termo='" + termo.Replace("'", "''") + "' AND CatCode='" + getCatCode(carow.TipoNoticiaAutRow) + "'").Length > 0) { GISADataset.DicionarioRow dicionarioRow = (GISADataset.DicionarioRow)(GisaDataSetHelper.GetInstance().Dicionario.Select("Termo='" + termo.Replace("'", "''") + "' AND CatCode='" + getCatCode(carow.TipoNoticiaAutRow) + "'")[0]); GisaDataSetHelper.GetInstance().Dicionario.RemoveDicionarioRow(dicionarioRow); } GISADataset.DicionarioRow dRow = GisaDataSetHelper.GetInstance().Dicionario.AddDicionarioRow(termo, getCatCode(carow.TipoNoticiaAutRow), new byte[]{}, 0); return GisaDataSetHelper.GetInstance().ControloAutDicionario.AddControloAutDicionarioRow(carow, dRow, tcafRowAutorizado, new byte[]{}, 0); }
public static void validateCANewTermo(PersistencyHelper.PreSaveArguments args) { PersistencyHelper.NewControloAutPreSaveArguments ncaPsa = null; ncaPsa = (PersistencyHelper.NewControloAutPreSaveArguments)args; GISADataset.DicionarioRow dicionarioRow = (GISADataset.DicionarioRow)(GisaDataSetHelper.GetInstance().Dicionario.Select(string.Format("ID={0} OR Termo='{1}'", ncaPsa.dID.ToString(), ncaPsa.dTermo))[0]); GISADataset.ControloAutRow caRow = (GISADataset.ControloAutRow)(GisaDataSetHelper.GetInstance().ControloAut.Select("ID=" + ncaPsa.caID.ToString())[0]); //É usado a coluna ID do dicionarioRow uma vez que, se a execução deste método corresponder a uma re-execução da transacção na qual está inserida, o valor do ID passado como argumento pode já ter sido alterado no algoritmo de detecção de conflitos de concorrência (neste caso concreto já existir na base de dados o termo na tabela Dicionario) GISADataset.ControloAutDicionarioRow cadRow = null; if (GisaDataSetHelper.GetInstance().ControloAutDicionario.Select(string.Format("IDControloAut={0} AND IDDicionario={1} AND IDTipoControloAutForma={2}", caRow.ID, dicionarioRow.ID, ncaPsa.cadIDTipoControloAutForma)).Length > 0) { cadRow = (GISADataset.ControloAutDicionarioRow)(GisaDataSetHelper.GetInstance().ControloAutDicionario.Select(string.Format("IDControloAut={0} AND IDDicionario={1} AND IDTipoControloAutForma={2}", caRow.ID, dicionarioRow.ID, ncaPsa.cadIDTipoControloAutForma))[0]); } else if (GisaDataSetHelper.GetInstance().ControloAutDicionario.Select(string.Format("IDControloAut={0} AND IDDicionario={1} AND IDTipoControloAutForma={2}", ncaPsa.cadIDControloAut, ncaPsa.cadIDDicionario, ncaPsa.cadIDTipoControloAutForma)).Length > 0) { cadRow = (GISADataset.ControloAutDicionarioRow)(GisaDataSetHelper.GetInstance().ControloAutDicionario.Select(string.Format("IDControloAut={0} AND IDDicionario={1} AND IDTipoControloAutForma={2}", ncaPsa.cadIDControloAut, ncaPsa.cadIDDicionario, ncaPsa.cadIDTipoControloAutForma))[0]); } else { Debug.Assert(false, "Situação imprevista!!"); } GISADataset.NivelControloAutRow ncaRow = null; GISADataset.NivelRow nRow = null; if (caRow.TipoNoticiaAutRow.ID == Convert.ToInt64(TipoNoticiaAut.EntidadeProdutora)) { ncaRow = (GISADataset.NivelControloAutRow)(GisaDataSetHelper.GetInstance().NivelControloAut.Select("ID=" + ncaPsa.nID.ToString())[0]); nRow = (GISADataset.NivelRow)(GisaDataSetHelper.GetInstance().Nivel.Select("ID=" + ncaPsa.nID.ToString())[0]); } if (!(DBAbstractDataLayer.DataAccessRules.DiplomaModeloRule.Current.isTermoUsedByOthers(caRow.ID, dicionarioRow.CatCode, dicionarioRow.Termo.Trim().Replace("'", "''"), false, caRow.TipoNoticiaAutRow.ID, ncaPsa.tran))) { ncaPsa.successTermo = true; } if (caRow.TipoNoticiaAutRow.ID == Convert.ToInt64(TipoNoticiaAut.EntidadeProdutora) && DBAbstractDataLayer.DataAccessRules.NivelRule.Current.isUniqueCodigo(nRow.Codigo, nRow.ID, ncaPsa.tran)) { ncaPsa.successCodigo = true; } if (!ncaPsa.successTermo || (caRow.TipoNoticiaAutRow.ID == Convert.ToInt64(TipoNoticiaAut.EntidadeProdutora) && !ncaPsa.successCodigo)) { cadRow.RejectChanges(); if (caRow.TipoNoticiaAutRow.ID == Convert.ToInt64(TipoNoticiaAut.EntidadeProdutora)) { ncaRow.RejectChanges(); nRow.GetTrusteeNivelPrivilegeRows().ToList().ForEach(r => r.RejectChanges()); nRow.GetFRDBaseRows().ToList().ForEach(r => r.RejectChanges()); nRow.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquicaUpper().ToList().ForEach(r => r.RejectChanges()); nRow.RejectChanges(); caRow.GetControloAutEntidadeProdutoraRows().ToList().ForEach(r => r.RejectChanges()); caRow.GetControloAutDatasExistenciaRows().ToList().ForEach(r => r.RejectChanges()); } GisaDataSetHelper.GetInstance().ControloAutDataDeDescricao.Cast <GISADataset.ControloAutDataDeDescricaoRow>().Where(r => r.IDControloAut == caRow.ID).ToList().ForEach(r => r.RejectChanges()); caRow.GetInteg_RelacaoExternaControloAutRows().ToList().ForEach(r => r.RejectChanges()); caRow.GetIndexFRDCARows().ToList().ForEach(r => r.RejectChanges()); caRow.RejectChanges(); dicionarioRow.RejectChanges(); } }
private void setNewTermo(PersistencyHelper.PreConcArguments args) { try { PersistencyHelper.ManageFormasAutorizadasPreConcArguments mfaPca = (PersistencyHelper.ManageFormasAutorizadasPreConcArguments)args; string termo = mfaPca.termo; GISADataset.ControloAutRow carow = (GISADataset.ControloAutRow)(GisaDataSetHelper.GetInstance().ControloAut.Select("ID=" + mfaPca.caRowID.ToString())[0]); GISADataset.TipoControloAutFormaRow tcafRowAutorizado = (GISADataset.TipoControloAutFormaRow)(GisaDataSetHelper.GetInstance().TipoControloAutForma.Select("ID=" + System.Enum.Format(typeof(TipoControloAutForma), TipoControloAutForma.FormaAutorizada, "D"))[0]); DataSet gisaBackup = mfaPca.gisaBackup; //Dim dataReader As IDataReader GISADataset.DicionarioRow dRowOrig = null; GISADataset.ControloAutDicionarioRow cadRowOrig = ControloAutHelper.getFormaAutorizada(carow); bool existsOrigCad = false; ArrayList termoUsed = DiplomaModeloRule.Current.GetDicionario(getCatCode(carow.TipoNoticiaAutRow), termo.Trim(), mfaPca.tran); // Distinguir entre criar e editar um Diploma/Modelo if (carow.ID < 0) { // Criar Diploma/Modelo: // - verificar se o termo escolhido existe na base de dados e se nesse caso, verificar se // está a ser utilizado noutro Diploma/Modelo if (((long)(termoUsed[0])) > 0 && (bool)(termoUsed[1])) { // A designação já existe na base de dados mas está marcada como apagada mfaPca.cadRow = manageDesignacaoDiplomaModelo(mfaPca.cadRow, mfaPca.termo, carow.TipoNoticiaAutRow, carow, tcafRowAutorizado); } else if (((long)(termoUsed[0])) > 0 && ! ((bool)(termoUsed[1]))) { // A designação já existe na base de dados mas não está marcada como apagada; no entanto, // é preciso saber se está a ser usada por outro Diploma/Modelo (tipicamente, nesta // situação a designação está a ser utilizada por um Diploma/Modelo mas já aconteceu não // estar a ser utilizada fruto de uma resolução de conflito de concorrência) if (DiplomaModeloRule.Current.ExistsControloAutDicionario((long)(termoUsed[0]), 1, carow.TipoNoticiaAutRow.ID, mfaPca.tran)) { carow.RejectChanges(); mfaPca.message = "A designação especificada já existe, deverá escolhê-la da lista caso a pretenda utilizar."; } else { mfaPca.cadRow = manageDesignacaoDiplomaModelo(mfaPca.cadRow, mfaPca.termo, carow.TipoNoticiaAutRow, carow, tcafRowAutorizado); } } else { // A designação não existe na base de dados mfaPca.cadRow = manageDesignacaoDiplomaModelo(mfaPca.cadRow, mfaPca.termo, carow.TipoNoticiaAutRow, carow, tcafRowAutorizado); } } else { // Editar Diploma/Modelo // - verificar se entretanto outro utilizador já editou o Diploma/Modelo // - verificar se o termo escolhido existe na base de dados e se nesse caso, verificar se // está a ser utilizado noutro Diploma/Modelo existsOrigCad = DiplomaModeloRule.Current.ExistsControloAutDicionario(cadRowOrig.IDDicionario, cadRowOrig.IDTipoControloAutForma, carow.TipoNoticiaAutRow.ID, mfaPca.tran); dRowOrig = cadRowOrig.DicionarioRow; PersistencyHelper.BackupRow(ref gisaBackup, cadRowOrig); PersistencyHelper.BackupRow(ref gisaBackup, dRowOrig); cadRowOrig.Delete(); // é permitido apagar o termo antigo uma vez que é único para diplomas/modelo dRowOrig.Delete(); if (existsOrigCad) { // o Diploma/Modelo não foi editado por nenhum outro utilizador if (((long)(termoUsed[0])) > 0 && (bool)(termoUsed[1])) { // A designação já existe na base de dados mas está marcada como apagada mfaPca.cadRow = manageDesignacaoDiplomaModelo(mfaPca.cadRow, mfaPca.termo, carow.TipoNoticiaAutRow, carow, tcafRowAutorizado); } else if (((long)(termoUsed[0])) > 0 && ! ((bool)(termoUsed[1]))) { // A designação já existe na base de dados mas não está marcada como apagada; no entanto, // é preciso saber se está a ser usada por outro Diploma/Modelo (tipicamente, nesta // situação a designação está a ser utilizada por um Diploma/Modelo mas já aconteceu não // estar a ser utilizada fruto de uma resolução de conflito de concorrência) if (DiplomaModeloRule.Current.ExistsControloAutDicionario((long)(termoUsed[0]), 1, carow.TipoNoticiaAutRow.ID, mfaPca.tran)) { dRowOrig.RejectChanges(); cadRowOrig.RejectChanges(); mfaPca.message = "A designação especificada já existe, deverá escolhê-la da lista caso a pretenda utilizar."; } else { mfaPca.cadRow = manageDesignacaoDiplomaModelo(mfaPca.cadRow, mfaPca.termo, carow.TipoNoticiaAutRow, carow, tcafRowAutorizado); } } else { // A designação não existe na base de dados mfaPca.cadRow = manageDesignacaoDiplomaModelo(mfaPca.cadRow, mfaPca.termo, carow.TipoNoticiaAutRow, carow, tcafRowAutorizado); } } else { // Outro utilizador já editou este Diploma/Modelo pelo que não é possível reeditá-lo dRowOrig.RejectChanges(); cadRowOrig.RejectChanges(); mfaPca.message = "Não foi possível executar a operação pretendida pois o controlo de autoridade foi alterado por outro utilizador."; } } } catch (Exception ex) { Trace.WriteLine(ex); throw; } }
private void ToolBarButtonClickEvent(object sender, ToolBarButtonClickEventArgs e) { // obter o tipo de noticia em causa GISADataset.TipoNoticiaAutRow tnaRow = null; //tnaRow = DirectCast(GisaDataSetHelper.GetInstance().TipoNoticiaAut.Select("ID=" + DomainValuesHelper.stringifyEnumValue(TipoNoticiaAut.Diploma))(0), GISADataset.TipoNoticiaAutRow) tnaRow = (GISADataset.TipoNoticiaAutRow)caList.cbNoticiaAut.SelectedItem; if (tnaRow.ID == -1 && caList.cbNoticiaAut.Items.Count == 2) { tnaRow = (GISADataset.TipoNoticiaAutRow)(caList.cbNoticiaAut.Items[1]); } Trace.Assert(tnaRow != null); Trace.Assert(! (tnaRow.ID == -1)); if (e.Button == ToolBarButtonNew) { FormCreateDiplomaModelo form = new FormCreateDiplomaModelo(); if (tnaRow.ID == Convert.ToInt64(TipoNoticiaAut.Diploma)) { form.Text = "Criar diploma"; } else if (tnaRow.ID == Convert.ToInt64(TipoNoticiaAut.Modelo)) { form.Text = "Criar modelo"; } switch (form.ShowDialog()) { case System.Windows.Forms.DialogResult.OK: //adicionar o novo controlo de autoridade ao modelo de dados e à interface GISADataset.ControloAutRow caRow = null; caRow = GisaDataSetHelper.GetInstance().ControloAut.NewControloAutRow(); caRow.Autorizado = false; caRow.Completo = false; caRow.IDTipoNoticiaAut = tnaRow.ID; caRow.NotaExplicativa = ""; caRow["IDIso639p2"] = DBNull.Value; caRow["IDIso15924"] = DBNull.Value; caRow.ChaveColectividade = ""; caRow.ChaveRegisto = ""; caRow.RegrasConvencoes = ""; caRow.Observacoes = ""; caRow.DescContextoGeral = ""; caRow.DescEnquadramentoLegal = ""; caRow.DescEstatutoLegal = ""; caRow.DescEstruturaInterna = ""; caRow.DescOcupacoesActividades = ""; caRow.DescHistoria = ""; caRow.DescOutraInformacaoRelevante = ""; caRow.DescZonaGeografica = ""; try { GisaDataSetHelper.GetInstance().ControloAut.AddControloAutRow(caRow); PersistencyHelper.ManageFormasAutorizadasPreConcArguments args = new PersistencyHelper.ManageFormasAutorizadasPreConcArguments(); args.termo = form.Designacao.Trim().Replace("'", "''"); args.caRowID = caRow.ID; PersistencyHelper.save(setNewTermo, args); PersistencyHelper.cleanDeletedData(); caList.cbNoticiaAut.SelectedItem = tnaRow; caList.ReloadList(); if (args.message.Length > 0) { MessageBox.Show(args.message, form.Text, MessageBoxButtons.OK, MessageBoxIcon.Warning); } if (args.cadRow != null) caList.SelectItem(args.cadRow); } catch (Exception ex) { Trace.WriteLine(ex); throw; } break; case System.Windows.Forms.DialogResult.Cancel: break; default: break; } } else if (e.Button == ToolBarButtonEdit) { GISADataset.ControloAutDicionarioRow cad = null; GISADataset.DicionarioRow d = null; cad = (GISADataset.ControloAutDicionarioRow)(caList.SelectedItems[0].Tag); Debug.Assert(cad.IDTipoControloAutForma == Convert.ToInt64(TipoControloAutForma.FormaAutorizada)); d = cad.DicionarioRow; FormCreateDiplomaModelo form = new FormCreateDiplomaModelo(); if (tnaRow.ID == Convert.ToInt64(TipoNoticiaAut.Diploma)) { form.Text = "Editar diploma"; } else if (tnaRow.ID == Convert.ToInt64(TipoNoticiaAut.Modelo)) { form.Text = "Editar modelo"; } form.Designacao = d.Termo; switch (form.ShowDialog()) { case System.Windows.Forms.DialogResult.OK: try { PersistencyHelper.ManageFormasAutorizadasPreConcArguments args = new PersistencyHelper.ManageFormasAutorizadasPreConcArguments(); args.termo = form.Designacao.Trim().Replace("'", "''"); args.caRowID = cad.ControloAutRow.ID; PersistencyHelper.save(setNewTermo, args); PersistencyHelper.cleanDeletedData(); caList.ReloadList(); if (args.message.Length > 0) MessageBox.Show(args.message, form.Text, MessageBoxButtons.OK, MessageBoxIcon.Warning); if (args.cadRow != null) caList.SelectItem(args.cadRow); } catch (Exception ex) { Trace.WriteLine(ex); throw; } break; case System.Windows.Forms.DialogResult.Cancel: break; default: break; } } else if (e.Button == ToolBarButtonDelete) DeleteControloAut(caList, "Eliminar diplomas/modelos", "Os items serão removidos apesar das associações existentes. Pretende continuar?", "Deseja apagar os elementos selecionados?"); else if (e.Button == ToolBarButtonFilter) caList.FilterVisible = ToolBarButtonFilter.Pushed; else Debug.Assert(false, "Unexpected button clicked in ToolBar."); }