Hi

An exception will always throw to the first catch OUTSIDE all current
transactions.

If there is no catch, then it will be caught by the standard Axapta
exception handling - ie it will show the error, roll everything back,
and stop execution.  That's why you don't see anything at all in your
second example.

Nested transactions in Axapta simply don't do what I think you expect.
They have no real purpose in themselves, but they are still
essential, or you could never write reusable code.

Andrew Jones
HGH Business Consultancy
The Netherlands

--- In [EMAIL PROTECTED], "Matt Benic" <[EMAIL PROTECTED]>
wrote:
>
> That is rediculous. What's the point of even having nested transactions
> then!?
>
> Regards,
>
> Matt Benic
> Axapta Developer
> UTi Sun Couriers Division
>
> "The universal aptitude for ineptitude
> makes any human accomplishment an incredible miracle."
> - Col. John P. Stapp
>
>
> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
> Sent: 07 December 2004 04:05 PM
> To: [EMAIL PROTECTED]
> Subject: Re: [development-axapta] Nested transactions and exceptions
>
>
>
>
> Hi Matt,
>
> I've already the same problem as you.
>
> For your second sample(job), you must add a second try .. catch to
be able
> catching exception
>
> int i;
> ;
>     for(i = 0; i < 5; i++)
>     {
>         try
>         {
>             ttsbegin;
>             try
>             {
>                 ttsbegin;
>                 throw exception::Error;
>                 ttscommit;
>             }
>             catch(exception::Error)
>             {
>                 print "Error caught";
>                 pause;
>             }
>             ttscommit;
>         }
>         catch(Exception::Error)
>         {
>             print "Error caught 2";
>         }
>     }
>
>     print "Finishing application";
>     pause;
>
>
> I think that when you throw error and Axapta make a "Rollback", ALL the
> transaction is rollbacked and not only the current transaction as
write in
> the help !
>
> Best Regards,
> Olivier Parent ,
> Competence Center Axapta
> SYLIS Belgium S.A./N.V.
> http://www.sylis.be
> ______________________
> Tel 00 32 4 264.00.00
> Fax 00 32 4 248.05.38
> ______________________
>
>
>
>
>
> "Matt Benic" <[EMAIL PROTECTED]>
> 07/12/2004 14:15
> Please respond to development-axapta
>
>
>         To:     "Axapta Dev" <[EMAIL PROTECTED]>
>         cc:     "Hennie Potgieter" <[EMAIL PROTECTED]>, "Edine le Roux"
> <[EMAIL PROTECTED]>, "Daniel Redelinghuis" <[EMAIL PROTECTED]>
>         Subject:        [development-axapta] Nested transactions and
> exceptions
>
>
>
>
> Hi all,
> I'm at a bit of a loss with the transactions and exceptions in Axapta. I
> have a nested transaction and I would like to be able to roll back the
> inner
> transaction, but not the outer one. I initially tried using
ttsabort, but
> it
> seems that ttsabort rolls back the outer transaction as well (ie instead
> of
> dropping from tts level 2 to 1, it drops to 0). The developer guide
> mentions
> that exceptions may be used to abort transactions, so I thought I
would do
> this. Unfortunately the exceptions exhibit very wierd bahavior.
>
> In my origonal case I have an outer transaction around a while look, and
> within that while loop, I am trying to set up an inner transaction.
Within
> the loop I have a ttsbegin, followed by a try-catch that contains a
number
> of method calls and a ttscommit. Any of the methods may throw an
> error::Exception. The try-catch lists only exception::Error. When I run
> the
> app, the debugger hits the breakpoint on my throw statement, but
skips the
> catch and it seems that the entire application quits!
>
> I tried testing this in a job, and got similar behavior. The
following job
> behaves as expected ('error caught' is printed five times and 'finishing
> application' is printed once):
> int i;
> ;
>     for(i = 0; i < 5; i++)
>     {
>         //ttsbegin;
>         try
>         {
>             ttsbegin;
>             throw exception::Error;
>             ttscommit;
>         }
>         catch(exception::Error)
>         {
>             print "Error caught";
>             pause;
>         }
>         //ttscommit;
>     }
>
>     print "Finishing application";
>     pause;
>
> However the following job does not provide any output at all, if a
> breakpoint is placed on the throw, it is hit, but stepping over that
> causes
> the job to terminate:
> int i;
> ;
>     for(i = 0; i < 5; i++)
>     {
>         ttsbegin;
>         try
>         {
>             ttsbegin;
>             throw exception::Error;
>             ttscommit;
>         }
>         catch(exception::Error)
>         {
>             print "Error caught";
>             pause;
>         }
>         ttscommit;
>     }
>
>     print "Finishing application";
>     pause;
>
> What the heck is going on here? What is the correct way to duck out of a
> nested transaction?
>
> Regards,
>
> Matt Benic
> Axapta Developer
> UTi Sun Couriers Division
>
> "The universal aptitude for ineptitude
> makes any human accomplishment an incredible miracle."
> - Col. John P. Stapp
>
>
>
>
>
>
>
>
> Yahoo! Groups Links
>
>
>
>
>
>
>
>
>
>
>
> [Non-text portions of this message have been removed]
>
>
>
>
>
>
>
>
> Yahoo! Groups Links




Yahoo! Groups Sponsor
ADVERTISEMENT
click here


Yahoo! Groups Links

Reply via email to