Example #1
0
		// 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);
		}
Example #2
0
		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;
			}
		}