Group: StrataFrame MVPs
Posts: 1.9K,
Visits: 21K
|
Olá Márcio.
Primeiro, se você estiver procurando lidar com a mensagem de excessão, como eu te disse, deveria dar uma olhada no UnhandledExceptionFound no seu Program.cs. Neste ponto, você pode capturar a mensagem e lidar com ela como quiser. Eu, por exemplo, monto um form onde coloco a mensagem que foi capturada e um diálogo com o usuário tentando traduzir o que aconteceu. Além disto, mando automaticamente esta mensagem para nosso email de suporte, com identificação do erro e quando e onde ocorreu. Se der uma olhada no Help, vai encontrar explicação sobre isto em Application Framework -> Application -> WinForms -> Appmain.vb (program.cs) File -> UnhandledExceptionFound().
Quanto a lidar com a situação de não permitir uma exclusão caso o registro corrente já tenha sido utilizado como uma ForeignKey em outra tabela, o ideal seria que criasse um BusinessObject Base para sua aplicação e colocasse o código para lidar com isto no BeforeDelete do mesmo. Depois, deveria criar todos os seus BO herdando deste seu BaseBO.
Nos seus forms, caso não queira que a mensagem de Exclusão apareça automaticamente, deveria configurá-los com AutoShowDeleteConfirmation = False. E mais uma vez, se espera ter isto como padrão em todos os seus forms, deveria criar um Form Base, configurar as propriedades que queira neste form e depois fazer com que todos os forms de sua aplicação herdem de seu BaseForm.
No seu BaseBO, no BeforeDelete, a propriedade This.TableName te dirá em qual tabela o usuário está tentando excluir e a partir daí você pode testar nas outras tabelas onde este registro pode ter sido utilizado se existe a ForeignKey da tabela corrente, e em caso positivo, informar ao usuário inclusive onde foi usado.
Então, se não foi usado, você mostra uma mensagem de confirmação de Exclusão, já que a automática foi desligada, e pega a resposta do cliente confirmando a Exclusão.
No fim, se encontrou o registro usado em outra tabela ou se o usuário não confirmou a exclusão, você faz "e.Cancel = True", isto cancelará a exclusão.
O BeforeDelete sempre será executado e é nele que você vai testar se o Delete realmente deve ser obedecido.
|