StrataFrame Forum

Problems with BeforeDelete and AfterDelete events

http://forum.strataframe.net/Topic13610.aspx

By choyt - 1/21/2008

Hi All

I am having problems with the BeforeDelete and AfterDelete events not firing. I have tried setting it up both of the ways shown below.

Private Sub MemberFamily_AfterDelete(ByVal e As MicroFour.StrataFrame.Business.AfterDeleteEventArgs) Handles Me.AfterDelete

       Call Me.SetIncomplete()

End Sub

and as

AddHandler Me.CheckRulesOnCurrentRow, AddressOf MemberFamily_AfterDelete (in the constructor)

Private Sub MemberFamily_AfterDelete(ByVal e As MicroFour.StrataFrame.Business.AfterDeleteEventArgs)

       Call Me.SetIncomplete()

End Sub

When I put a breakbpoint on Call Me.SetIncomplete() it is never reached.

I have quite a bit of code in other events (specifically CheckRulesOnCurrentRow, SetDefaultValues and the AfterSave which is setup with an inline Handles Me.AfterSave) which works just fine. I am deleting the records using DeleteByPrimaryKey(FamilyMemberID) and the records are deleting successfully.

By Greg McGuffey - 1/22/2008

Are you handling this at the BO level or at the form level?



If you are handling it at the form level, and you have multiple BOs on the form and this BO isn't the primary bo, it could be a configuration issue. You'd need to configure the BO to be included in Form deletes.



If this is at the BO level....no idea Blush
By choyt - 1/22/2008

Hi Greg

This is all at the BO level...I'm stumped...have you used the BeforeDelete/AfterDelete events before?

By Greg McGuffey - 1/22/2008

I've handled them in forms for BOs (the code was in the form)...I.e. I have a form that has a BO (MyBO) and I have handlers for that handle MyBO_BeforeDelete and MyBO_AfterDelete. I've also created inherited business layers that handled the base business layers before and after delete events.



I have not handled the events right in a BO though. I can't think of any reason why it would be different.
By StrataFrame Team - 1/23/2008

Actually, it is different... the DeleteByPrimaryKey does not raise the Before- or AfterDelete events... because there is no guarantee that the record is in the business object when you call DeleteByPrimaryKey().  So, if you want those events, you need to have the record selected in the BO and call DeleteCurrentRow() and pass False to the OnlyMarkAsDeleted parameter, which will delete it from the server immediately and not require a save.
By choyt - 1/23/2008

Thanks much Ben!
By choyt - 1/23/2008

Are there thoughts to add transactions to the delete routines in a future version? This is something I run up against a lot. I try to still use transactions and just put the delete last so if it fails all else dies...but this model doesn't work if multiple deletes are needed.
By Greg McGuffey - 1/23/2008

the DeleteByPrimaryKey does not raise the Before- or AfterDelete events...


Ah, I missed that. Now it makes sense!
By Trent L. Taylor - 1/23/2008

Yeah,  the DeleteByPrimaryKey goes straight to "smoking" the records. Smile  You probably want to use the DeleteCurrentRow method if you do not want the records to be immediately deleted from the database.  The DeletePrimaryKey method does not require that the PK in which you are trying to delete is within the BO itself, whereas the DeleteCurrentRow method is going to delete a record with the BO.
By StrataFrame Team - 1/24/2008

As for the transactions, if you retrieve the record into the business object and then use the DeleteCurrentRow(True) and Save() combination, then the deletes will happen on whatever transaction the Save() uses.