Public
End Function
The 2 Handler functions basically write to the event log and then rethrow a custom exception to the presentation layer.
I was just saying that when you create a new business object from our template, it will inherit from BusinessLayer, so you will need to change it so that it inherits from your class, not BusinessLayer. The base class that you create will be excactly like you mentioned... it's a basic business object (that itself will inherit from BusinessLayer).
If an exception is encountered from within the save, then the exception will just be bubbled up if the ErrorSavingMode is FailOnError and the return value will be CompletedWithExceptions if the ErrorSavingMode is ContinueOnError. If ContinueOnError is used, then yes, the ErrorSaving event will contain the exceptions thrown.
So, the FailedWithExceptions is used for the SaveByForm() method, not the Save() method. So, if you're going to be saving all of the business objects at once through the form's Save() method, then I you would want to override the SaveByForm() method and do the same thing (but I don't think that one is overridable, so if you're saving through the form's Save() method, then we might need to work out something different).
I'm not tracking on this part...
I generally create my own base classes using your templates then inherit from those.
Is the ErrorSaving event the only place I can examine the exceptions that cause FailedWithExceptions?
This is what I've come up with...what do you think?
Public Overrides Function Save(ByVal b As Boolean) As MicroFour.StrataFrame.Data.SaveUndoResult
Dim r As MicroFour.StrataFrame.Data.SaveUndoResultr = MyBase.Save(b)If Not (r = MicroFour.StrataFrame.Data.SaveUndoResult.Success OrElse _r = MicroFour.StrataFrame.Data.SaveUndoResult.Cancelled OrElse _r = MicroFour.StrataFrame.Data.SaveUndoResult.CompletedWithExceptions) ThenSelect Case rCase MicroFour.StrataFrame.Data.SaveUndoResult.AbortedWithBrokenRulesDim strJson As String = LitJson.JsonHelper.WriteJsonString(Me.BrokenRules)Utility.SystemUtilities.ErrHandler.WriteEventLog(strJson, "", Diagnostics.EventLogEntryType.Error)Throw New Exceptions.BrokenRulesException(strJson)
Dim r As MicroFour.StrataFrame.Data.SaveUndoResult
r = MyBase.Save(b)
If Not (r = MicroFour.StrataFrame.Data.SaveUndoResult.Success OrElse _
r = MicroFour.StrataFrame.Data.SaveUndoResult.Cancelled OrElse _r = MicroFour.StrataFrame.Data.SaveUndoResult.CompletedWithExceptions) Then
r = MicroFour.StrataFrame.Data.SaveUndoResult.Cancelled OrElse _
r = MicroFour.StrataFrame.Data.SaveUndoResult.CompletedWithExceptions) Then
Utility.SystemUtilities.ErrHandler.WriteEventLog(strJson,
Case MicroFour.StrataFrame.Data.SaveUndoResult.FailedWithExceptions
Throw New ApplicationException()
End Select
Another option would be to create the BoBase class and override Save(). Call MyBase.Save() and check the return value within your own Save() and check the select case there. You could even show your form with the broken rules there if you don't mind taking that portion of the UI out of the UI...