﻿<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>StrataFrame Forum » StrataFrame Application Framework - V1 » Business Objects and Data Access (How do I?)  » Transaction Problem</title><generator>InstantForum 2017-1 Final</generator><description>StrataFrame Forum</description><link>http://forum.strataframe.net/</link><webMaster>StrataFrame Forum</webMaster><lastBuildDate>Tue, 07 Apr 2026 15:02:29 GMT</lastBuildDate><ttl>20</ttl><item><title>Transaction Problem</title><link>http://forum.strataframe.net/FindPost23269.aspx</link><description>Hi,&lt;br&gt;
I have a problem with transaction. I want to save data in 4 diffrent BO as "All or Nothing"&lt;br&gt;
My code is&lt;br&gt;
&lt;br&gt;
[code]&lt;br&gt;
&lt;br&gt;
       Try&lt;br&gt;
            BusinessLayer.TransactionBegin("PENSOLUTIONOFFICE", Data.IsolationLevel.ReadCommitted)&lt;br&gt;
            mmks_UpdateSFSUsers(loSFSUserBO)&lt;br&gt;
&lt;br&gt;
            lSaveResult = loSFSUserBO.Save()&lt;br&gt;
            If lSaveResult = MicroFour.StrataFrame.Data.SaveUndoResult.Success Then&lt;br&gt;
                pmks_SFSUserId = loSFSUserBO.us_pk&lt;br&gt;
                Dim loPSOClients As PSOClientsBO = New PSOClientsBO()&lt;br&gt;
                Dim lcKey As String = loSFSUserBO.DataSourceKey&lt;br&gt;
                loPSOClients.mmks_FillDataTableBySFSUserId(pmks_SFSUserId)&lt;br&gt;
                mmks_UpdatePSOClients(loPSOClients, pmks_SFSUserId)&lt;br&gt;
                Dim loSFSUsersXRoles As MicroFour.StrataFrame.Security.BusinessObjects.SFSUsersXRolesBO = New MicroFour.StrataFrame.Security.BusinessObjects.SFSUsersXRolesBO()&lt;br&gt;
                loSFSUsersXRoles.FillAllByUser(pmks_SFSUserId)&lt;br&gt;
                mmks_UpdateSFSUsersXRoles(loSFSUsersXRoles, pmks_SFSUserId)&lt;br&gt;
                Dim loSFSUsersXPermissions As MicroFour.StrataFrame.Security.BusinessObjects.SFSUsersXPermissionsBO = New MicroFour.StrataFrame.Security.BusinessObjects.SFSUsersXPermissionsBO()&lt;br&gt;
                loSFSUsersXPermissions.FillAllByUser(pmks_SFSUserId)&lt;br&gt;
                mmks_UpdateSFSUsersXPermissions(loSFSUsersXPermissions, pmks_SFSUserId)&lt;br&gt;
                Throw New Exception("Custom Error")&lt;br&gt;
                If loPSOClients.Save(True) = MicroFour.StrataFrame.Data.SaveUndoResult.Success Then&lt;br&gt;
                    If loSFSUsersXRoles.Save(True) = MicroFour.StrataFrame.Data.SaveUndoResult.Success Then&lt;br&gt;
                        If loSFSUsersXPermissions.Count &gt; 0 Then&lt;br&gt;
                            If Not loSFSUsersXPermissions.Save(True) = MicroFour.StrataFrame.Data.SaveUndoResult.Success Then&lt;br&gt;
                                Throw New Exception("An error happen during save SFSUsersXPermissions")&lt;br&gt;
                            End If&lt;br&gt;
                        End If&lt;br&gt;
                    Else&lt;br&gt;
                        Throw New Exception("An error happen during save SFSUsersXRoles")&lt;br&gt;
                    End If&lt;br&gt;
                Else&lt;br&gt;
                    Throw New Exception("An error happen during save PSOClients")&lt;br&gt;
                End If&lt;br&gt;
            Else&lt;br&gt;
                Throw New Exception("An error happen during save SFSUsers")&lt;br&gt;
            End If&lt;br&gt;
&lt;br&gt;
            BusinessLayer.TransactionCommit("PENSOLUTIONOFFICE")&lt;br&gt;
&lt;br&gt;
        Catch ex As Exception&lt;br&gt;
            lcErrorMessage = ex.Message&lt;br&gt;
            BusinessLayer.TransactionRollback("PENSOLUTIONOFFICE")&lt;br&gt;
        End Try&lt;br&gt;
&lt;br&gt;
[/code]&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
At the middle of code I made Throw New Exception("Custom Error") - so code goes to Catch block and must Rollback transaction.&lt;br&gt;
but - in my data table I can see written new values!&lt;br&gt;
Why data changes was not revert?&lt;br&gt;
&lt;br&gt;
Thanks&lt;br&gt;
Denis</description><pubDate>Mon, 01 Jun 2009 07:25:34 GMT</pubDate><dc:creator>dgsoft</dc:creator></item><item><title>RE: Transaction Problem</title><link>http://forum.strataframe.net/FindPost23290.aspx</link><description>Glad to heard that.  Good luck!</description><pubDate>Mon, 01 Jun 2009 07:25:34 GMT</pubDate><dc:creator>Edhy Rijo</dc:creator></item><item><title>RE: Transaction Problem</title><link>http://forum.strataframe.net/FindPost23288.aspx</link><description>Great. :)</description><pubDate>Mon, 01 Jun 2009 07:22:47 GMT</pubDate><dc:creator>Trent L. Taylor</dc:creator></item><item><title>RE: Transaction Problem</title><link>http://forum.strataframe.net/FindPost23286.aspx</link><description>Yes.. the problem was - I use only 2 parameters in the TransactionBegin  DataSourceKey and IsolationLevel.. now when I use another method overload - it works perfect!&lt;br&gt;
Problem is solved!&lt;br&gt;
Thank you!</description><pubDate>Mon, 01 Jun 2009 07:20:31 GMT</pubDate><dc:creator>dgsoft</dc:creator></item><item><title>RE: Transaction Problem</title><link>http://forum.strataframe.net/FindPost23284.aspx</link><description>You are right!&lt;br&gt;
The problem was in TransactionBegin() method. When I send 3 parameters DataSourceKey, TransactionKey and IsolationLevel - now all works perfect!&lt;br&gt;
Thank you for Help!&lt;br&gt;
&lt;br&gt;
Denis</description><pubDate>Mon, 01 Jun 2009 07:19:15 GMT</pubDate><dc:creator>dgsoft</dc:creator></item><item><title>RE: Transaction Problem</title><link>http://forum.strataframe.net/FindPost23283.aspx</link><description>Try Edhy's sample...that should work.</description><pubDate>Mon, 01 Jun 2009 07:17:35 GMT</pubDate><dc:creator>Trent L. Taylor</dc:creator></item><item><title>RE: Transaction Problem</title><link>http://forum.strataframe.net/FindPost23281.aspx</link><description>[quote][b]dgsoft (06/01/2009)[/b][hr]Hi, in my case its DataSourceKey.. I will try to check it with another constructur..[/quote]&lt;br&gt;
&lt;br&gt;
Try this:&lt;br&gt;
[codesnippet]&lt;br&gt;
Try&lt;br&gt;
BusinessLayer.TransactionBegin("PENSOLUTIONOFFICE","MyTransationKey", Data.IsolationLevel.ReadCommitted)&lt;br&gt;
mmks_UpdateSFSUsers(loSFSUserBO)&lt;br&gt;
&lt;br&gt;
lSaveResult = loSFSUserBO.Save(True, MyTransationKey")&lt;br&gt;
[/codesnippet]</description><pubDate>Mon, 01 Jun 2009 07:15:49 GMT</pubDate><dc:creator>Edhy Rijo</dc:creator></item><item><title>RE: Transaction Problem</title><link>http://forum.strataframe.net/FindPost23276.aspx</link><description>Hi, in my case its DataSourceKey.. I will try to check it with another constructur..</description><pubDate>Mon, 01 Jun 2009 07:06:07 GMT</pubDate><dc:creator>dgsoft</dc:creator></item><item><title>RE: Transaction Problem</title><link>http://forum.strataframe.net/FindPost23275.aspx</link><description>Hmm. but when I add second parameter.. I not able to save the data because an error happen&lt;br&gt;
&lt;br&gt;
"An error occurred while saving the data to the server."&lt;br&gt;
&lt;br&gt;
[code]&lt;br&gt;
&lt;br&gt;
        Dim loSFSUserBO As MicroFour.StrataFrame.Security.BusinessObjects.SFSUsersBO = New MicroFour.StrataFrame.Security.BusinessObjects.SFSUsersBO()&lt;br&gt;
        If llNewUser Then&lt;br&gt;
            loSFSUserBO.Add()&lt;br&gt;
        Else&lt;br&gt;
            loSFSUserBO.FillByPrimaryKey(pmks_SFSUserId)&lt;br&gt;
        End If&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
        Try&lt;br&gt;
            BusinessLayer.TransactionBegin("PENSOLUTIONOFFICE", Data.IsolationLevel.ReadCommitted)&lt;br&gt;
            mmks_UpdateSFSUsers(loSFSUserBO)&lt;br&gt;
&lt;br&gt;
            lSaveResult = loSFSUserBO.Save(True, "PENSOLUTIONOFFICE")&lt;br&gt;
&lt;br&gt;
[code]&lt;br&gt;
&lt;br&gt;
IsDirty = true here..  and on Save line I have an exception..</description><pubDate>Mon, 01 Jun 2009 07:04:48 GMT</pubDate><dc:creator>dgsoft</dc:creator></item><item><title>RE: Transaction Problem</title><link>http://forum.strataframe.net/FindPost23272.aspx</link><description>Hi Denis,&lt;br&gt;
&lt;br&gt;
The BO.TransactionBegin() has 2 constructors, I use the 2nd one with 3 parameters, DataSourKey, TransactionKey and IsoLevel, the main one for me is the TransactionKey which I also used as the 2nd parameter of my Save(True, TransactionKey).  In your case I don't know if "PENSOLUTIONOFFICE" is the DataSourceKey or the TransactionKey, so pass the TransactionKey to the Save() and you should be fine.&lt;br&gt;
&lt;br&gt;</description><pubDate>Mon, 01 Jun 2009 07:00:16 GMT</pubDate><dc:creator>Edhy Rijo</dc:creator></item><item><title>RE: Transaction Problem</title><link>http://forum.strataframe.net/FindPost23270.aspx</link><description>You did not tell the BO to save on the transaction that you created.  You can start more than one transaction session and save each BO in a different transaction if you had that need.  But in your case, you created the transaction then did not tell the BO to save on that transaction.&lt;br&gt;
&lt;br&gt;
[codesnippet]loPSOClients.Save(True, "PENSOLUTIONOFFICE")[/codesnippet]&lt;br&gt;
&lt;br&gt;</description><pubDate>Mon, 01 Jun 2009 06:53:53 GMT</pubDate><dc:creator>Trent L. Taylor</dc:creator></item></channel></rss>