﻿<?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?)  » Big bug is BusinessObject!!</title><generator>InstantForum 2017-1 Final</generator><description>StrataFrame Forum</description><link>http://forum.strataframe.net/</link><webMaster>StrataFrame Forum</webMaster><lastBuildDate>Sat, 30 May 2026 12:26:58 GMT</lastBuildDate><ttl>20</ttl><item><title>Big bug is BusinessObject!!</title><link>http://forum.strataframe.net/FindPost29628.aspx</link><description>Hi,&lt;br/&gt;&lt;br/&gt;For me it seems there is a big bug for businessobject code.&lt;br/&gt;&lt;br/&gt;Look there:&lt;br/&gt;&lt;br/&gt;Businesslayer.vb IsDirty property&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;        &lt;span&gt;&amp;lt;Browsable(False), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)&amp;gt; _        &lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;span&gt;Public ReadOnly Property IsDirty() As Boolean            &lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;span&gt;Get                &lt;br/&gt;&lt;/span&gt;&lt;font color="#ff0000"&gt;&lt;span&gt;If Me._IsSavedOnTransaction &lt;br/&gt;Then                    Return False                &lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;br/&gt;Else                    &lt;br/&gt;Return ChangesExistOnCurrentDataTable()                &lt;br/&gt;End If            &lt;br/&gt;End Get        &lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;span&gt;End Property&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;So, getter return me always FALSE when Me._IsSavedOnTransaction!&lt;br/&gt;&lt;br/&gt;Ok... &amp;nbsp;look next the Me._IsSavedOnTransaction set to False only in the ResetIsSavedOnTransactionFlagOnBusinessObjects Otherwise - Me._IsSavedOnTransaction is TRUE&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Now look the SAVE&lt;br/&gt;&lt;br/&gt;Public Overridable Function &lt;font color="#ff0000"&gt;Save&lt;/font&gt;(ByVal Transactional As Boolean, ByVal TransactionKey As String) As SaveUndoResult&lt;br/&gt;&lt;br/&gt;.....&lt;br/&gt;&lt;br/&gt;          If Transactional Then&lt;br/&gt;                '-- Set the flag on this business object&lt;br/&gt;                &lt;font color="#ff0000"&gt;Me._IsSavedOnTransaction = True&lt;/font&gt;&lt;br/&gt;&lt;br/&gt;                Dim list As List(Of BusinessLayer) = Nothing&lt;br/&gt;                SyncLock _BosOnTransaction&lt;br/&gt;                    If _BosOnTransaction.TryGetValue(Me._DataSourceKey &amp;amp; "|" &amp;amp; TransactionKey, list) AndAlso _&lt;br/&gt;                        Not list.Contains(Me) Then&lt;br/&gt;                        list.Add(Me)&lt;br/&gt;                    End If&lt;br/&gt;                End SyncLock&lt;br/&gt;            End If&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Here - we set the &lt;font color="#ff0000"&gt;ME._IsSavedOnTransaction = TRUE&lt;/font&gt;.. and nowhere its reset.... No.. its resets.. but just &amp;nbsp;in one place&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;       Public Shared Sub &lt;font color="#000088"&gt;TransactionCommit&lt;/font&gt;(ByVal DataSourceKey As String, ByVal TransactionKey As String)&lt;br/&gt;            &lt;font color="#000000"&gt;ResetIsSavedOnTransactionFlagOnBusinessObjects(DataSourceKey, TransactionKey)&lt;/font&gt;&lt;br/&gt;&lt;br/&gt;            '-- Commit the transaction on the data source&lt;br/&gt;            DataLayer.TransactionCommit(DataSourceKey, TransactionKey)&lt;br/&gt;        End Sub&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;        Public Shared Sub &lt;font color="#ff0000"&gt;TransactionRollback&lt;/font&gt;(ByVal DataSourceKey As String, ByVal TransactionKey As String)&lt;br/&gt;&lt;br/&gt;&lt;font color="#008800"&gt;&amp;lt;--- ON MY PRIVATE LOOK - HERE MUST BE A CALL TO RESET&amp;nbsp;IsSavedOnTransaction &amp;nbsp;flag..&lt;/font&gt;&lt;br/&gt;            DataLayer.TransactionRollback(DataSourceKey, TransactionKey)&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;        End Sub&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;And Finaly look my code&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;        Dim lcTransactionId As String = Guid.NewGuid.ToString&lt;br/&gt;        Try&lt;br/&gt;            '-- Start the transaction&lt;br/&gt;&amp;nbsp;          &amp;nbsp;BusinessLayer.TransactionBegin("ERPDATA", lcTransactionId, System.Data.IsolationLevel.ReadCommitted)&lt;br/&gt;&lt;br/&gt;            '-- Save the business objects on the transaction&lt;br/&gt;            If Bestell_kopfBO1.Save(True, lcTransactionId) = MicroFour.StrataFrame.Data.SaveUndoResult.Success Then&lt;br/&gt;&amp;nbsp;              &amp;nbsp;...............................................&lt;br/&gt;            Else&lt;br/&gt;&lt;br/&gt;                If Bestell_kopfBO1.BrokenRules.Count &amp;gt; 0 Then&lt;br/&gt;                    Throw New Exception(String.Format("A business rule broken : {0} ", Me.Bestell_kopfBO1.BrokenRules.ToArray(0).Description))&lt;br/&gt;                Else&lt;br/&gt;                    Throw New Exception()&lt;br/&gt;                End If&lt;br/&gt;&lt;br/&gt;            End If&lt;br/&gt;&lt;br/&gt;            BusinessLayer.TransactionCommit("ERPDATA", lcTransactionId)&lt;br/&gt;            DevExpress.XtraEditors.XtraMessageBox.Show("The data completed saved!")&lt;br/&gt;&lt;br/&gt;        Catch ex As Exception&lt;br/&gt;            '-- If an exception occurs during the saving of the records, then &lt;br/&gt;            '   abort the transaction.&lt;br/&gt;            &lt;font color="#ff0000"&gt;BusinessLayer.TransactionRollback("ERPDATA", lcTransactionId)&lt;br/&gt;&lt;/font&gt;'TODO: Translate messagebox&lt;br/&gt;            DevExpress.XtraEditors.XtraMessageBox.Show(String.Format("The data can't be saved. Reason: {0}", ex.Message))&lt;br/&gt;        End Try&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;First time broken rules exist (&amp;gt;0), so - SAVE is fail.. and EditState still "Adding"&lt;font color="#ff0000"&gt; but IsDirty = FALSE!!!!!!!!!!!!!!&lt;/font&gt;&lt;br/&gt;&lt;br/&gt;&lt;font color="#ff0000"&gt;BECAUSE &amp;nbsp;&lt;/font&gt;&lt;font color="#ff0000"&gt;Me._IsSavedOnTransaction Still TRUE after&amp;nbsp;&lt;/font&gt;&lt;font color="#ff0000"&gt;TransactionRollback.&lt;/font&gt;&lt;br/&gt;&lt;br/&gt;Then I change some data and click SAVE again.. and after &amp;nbsp;this - my SAVE don't check any BUsinessRules and Saves the data, because isDirty = FALSE, and business object&lt;br/&gt;&lt;br/&gt;does not check changes!&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Please let us know ASAP about this problem.&lt;br/&gt;&lt;br/&gt;Can't belive nobody has such problem!&lt;br/&gt;&lt;br/&gt;Thanks&lt;br/&gt;&lt;br/&gt;Denis&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;P.S.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Sorry for mistake in topic subject.. "I mean "Big bug in BusinessObject" :)) not "is"</description><pubDate>Tue, 01 Mar 2011 04:10:24 GMT</pubDate><dc:creator>dgsoft</dc:creator></item></channel></rss>