protected override void AddTrustee()
		{
            GISADataset.TrusteeRow truRow = null;
			GISADataset.TrusteeUserRow usrRow = null;

			FormCreateTrustee form = new FormCreateTrustee();
			form.Text = "Novo utilizador";
			switch (form.ShowDialog())
			{
				case DialogResult.OK:
                    ((frmMain)TopLevelControl).EnterWaitMode();
					truRow = GisaDataSetHelper.GetInstance().Trustee.NewTrusteeRow();
					truRow.Name = form.txtTrusteeName.Text;
					truRow.Description = string.Empty;
					truRow.CatCode = "USR";
					truRow.BuiltInTrustee = false;
					truRow.IsActive = true;
					truRow.Versao = new byte[]{};
					truRow.isDeleted = 0;
					usrRow = GisaDataSetHelper.GetInstance().TrusteeUser.NewTrusteeUserRow();
					usrRow.Password = "";
					usrRow.FullName = "";
					usrRow.IsAuthority = false;
					usrRow["IDTrusteeUserDefaultAuthority"] = DBNull.Value;
					usrRow.Versao = new byte[]{};
					usrRow.isDeleted = 0;
					usrRow.TrusteeRow = truRow;

                    // selecionar o grupo "TODOS"
                    GISADataset.TrusteeGroupRow tgRow = (GISADataset.TrusteeGroupRow)(((GISADataset.TrusteeRow)(GisaDataSetHelper.GetInstance().Trustee.Select("Name='ACESSO_COMPLETO'")[0])).GetTrusteeGroupRows()[0]);

                    // incluir o novo utilizador no grupo "TODOS" por omissão
					GisaDataSetHelper.GetInstance().Trustee.AddTrusteeRow(truRow);
					GisaDataSetHelper.GetInstance().TrusteeUser.AddTrusteeUserRow(usrRow);
					GisaDataSetHelper.GetInstance().UserGroups.AddUserGroupsRow(usrRow, tgRow, new byte[]{}, 0);

					PersistencyHelper.CreateTrusteePreConcArguments ctpca = new PersistencyHelper.CreateTrusteePreConcArguments();
					ctpca.truRowID = truRow.ID;
					ctpca.usrRowID = usrRow.ID;

					Trace.WriteLine("A criar utilizador...");

                    PersistencyHelper.save(AddTrusteeIfUsernameDoesntExist, ctpca);
					PersistencyHelper.cleanDeletedData();

					if (! ctpca.successful)
					{
						MessageBox.Show("Este nome já existe atribuído a um utilizador ou grupo, " + Environment.NewLine + "por favor escolha outro nome.", form.Text, MessageBoxButtons.OK, MessageBoxIcon.Warning);
						UpdateTrustees(null);
					}
					else
					{
                        // actualizar interface
						UpdateTrustees(truRow);
					}

                    ((frmMain)TopLevelControl).LeaveWaitMode();
                    break;
				case DialogResult.Cancel:
				break;
			}
		}
		protected override void AddTrustee()
		{
			GISADataset.TrusteeRow truRow = null;
			GISADataset.TrusteeGroupRow grpRow = null;

			FormCreateTrustee form = new FormCreateTrustee();
			form.Text = "Novo grupo de utilizadores";
			switch (form.ShowDialog())
			{
				case DialogResult.OK:
					truRow = GisaDataSetHelper.GetInstance().Trustee.NewTrusteeRow();
					truRow.Name = form.txtTrusteeName.Text;
					truRow.Description = string.Empty;
					truRow.CatCode = "GRP";
					truRow.BuiltInTrustee = false;
					truRow.IsActive = true;
					truRow.Versao = new byte[]{};
					truRow.isDeleted = 0;
					grpRow = GisaDataSetHelper.GetInstance().TrusteeGroup.NewTrusteeGroupRow();
					grpRow.Versao = new byte[]{};
					grpRow.isDeleted = 0;
					grpRow.TrusteeRow = truRow;

					GisaDataSetHelper.GetInstance().Trustee.AddTrusteeRow(truRow);
					GisaDataSetHelper.GetInstance().TrusteeGroup.AddTrusteeGroupRow(grpRow);

					PersistencyHelper.CreateTrusteePreConcArguments ctpca = new PersistencyHelper.CreateTrusteePreConcArguments();
					ctpca.truRowID = truRow.ID;
					ctpca.grpRowID = grpRow.ID;

					Trace.WriteLine("A criar o grupo de utilizador...");

                    PersistencyHelper.SaveResult successfulSave = PersistencyHelper.save(addTrusteeIfUsernameDoesntExist, ctpca);
					PersistencyHelper.cleanDeletedData();

					if (! ctpca.successful)
					{
						MessageBox.Show("Este nome já existe atribuído a um utilizador ou grupo, " + Environment.NewLine + "por favor escolha outro nome.", form.Text, MessageBoxButtons.OK, MessageBoxIcon.Warning);
						UpdateTrustees(null);
					}
					else
						UpdateTrustees(truRow);

					break;
				case DialogResult.Cancel:
				break;
			}
		}