<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet type="text/xsl" href="RSS_xslt_style.asp" version="1.0" ?>
<rss version="2.0" xmlns:WebWizForums="http://syndication.webwiz.co.uk/rss_namespace/">
 <channel>
  <title>DevForce Community Forum : Audit log implementation</title>
  <link>http://www.ideablade.com/forum/</link>
  <description>This is an XML content feed of; DevForce Community Forum : DevForce Classic : Audit log implementation</description>
  <pubDate>Fri, 12 Jun 2026 00:05:16 -700</pubDate>
  <lastBuildDate>Tue, 31 Jul 2007 10:59:34 -700</lastBuildDate>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Web Wiz Forums 9.69</generator>
  <ttl>360</ttl>
  <WebWizForums:feedURL>www.ideablade.com/forum/RSS_post_feed.asp?TID=246</WebWizForums:feedURL>
  <image>
   <title>DevForce Community Forum</title>
   <url>http://www.ideablade.com/forum/forum_images/IdeaBlade_logo_tm.png</url>
   <link>http://www.ideablade.com/forum/</link>
  </image>
  <item>
   <title>Audit log implementation : Michael,  One of the critical...</title>
   <link>http://www.ideablade.com/forum/forum_posts.asp?TID=246&amp;PID=813#813</link>
   <description>
    <![CDATA[<strong>Author:</strong> <a href="http://www.ideablade.com/forum/member_profile.asp?PF=23" rel="nofollow">davidklitzke</a><br /><strong>Subject:</strong> 246<br /><strong>Posted:</strong> 31-Jul-2007 at 10:59am<br /><br />Michael,<DIV>&nbsp;</DIV><DIV>One of the critical considerations when considering an audit strategy is deciding whether you want to primarily audit changes that are occurring close to the database or changes that are happening at the client.&nbsp; One reason that you might want to audit changes at the client is because you might want to know about changes that were made while the user was disconnected.&nbsp; On the other hand, you might want to audit changes on the server if you were concerned about changes caused by database triggers.</DIV><DIV>&nbsp;</DIV><DIV>DevForce is agnostic with respect to the best place to do the auditing.&nbsp; We have some recommendations with respect to client-side auditing, but we are not experts on Database auditing packages as our software is as much as possible database vendor independent.&nbsp; We do know however that there are some excellent packages that you can purchase.</DIV><DIV>&nbsp;</DIV><DIV>If you want to get more auditing information about events on the server side,&nbsp;but you still want to primarily use client-side auditing, you could use RPC to call a static method on the Server.</DIV>]]>
   </description>
   <pubDate>Tue, 31 Jul 2007 10:59:34 -700</pubDate>
   <guid isPermaLink="true">http://www.ideablade.com/forum/forum_posts.asp?TID=246&amp;PID=813#813</guid>
  </item> 
  <item>
   <title>Audit log implementation :  David, thank you for your response.I...</title>
   <link>http://www.ideablade.com/forum/forum_posts.asp?TID=246&amp;PID=800#800</link>
   <description>
    <![CDATA[<strong>Author:</strong> <a href="http://www.ideablade.com/forum/member_profile.asp?PF=79" rel="nofollow">MichaelNiemann</a><br /><strong>Subject:</strong> 246<br /><strong>Posted:</strong> 30-Jul-2007 at 7:58am<br /><br />David, thank you for your response.<br><br>I was checking out this area because &#091;as a newbie&#093; auditing is an area that is important to our applications. I see that what we need is probably available (with a little work... which is OK, BTW).<br><br>Ultimately, the auditing functionality needs to be very close to the DBMS, because triggers can do things which are not visible to the front-end (unless you go thru the retrieve-after-update process). When I saw that was part of your framework, I thought DevForce may already have a pre-built solution to my problem.<br><br>Regards, <br>Mike<br><span style="font-size:10px"><br /><br />Edited by MichaelNiemann - 30-Jul-2007 at 7:59am</span>]]>
   </description>
   <pubDate>Mon, 30 Jul 2007 07:58:44 -700</pubDate>
   <guid isPermaLink="true">http://www.ideablade.com/forum/forum_posts.asp?TID=246&amp;PID=800#800</guid>
  </item> 
  <item>
   <title>Audit log implementation : Michael,  After thinking about...</title>
   <link>http://www.ideablade.com/forum/forum_posts.asp?TID=246&amp;PID=719#719</link>
   <description>
    <![CDATA[<strong>Author:</strong> <a href="http://www.ideablade.com/forum/member_profile.asp?PF=23" rel="nofollow">davidklitzke</a><br /><strong>Subject:</strong> 246<br /><strong>Posted:</strong> 18-Jul-2007 at 10:04am<br /><br />Michael,<DIV>&nbsp;</DIV><DIV>After thinking about this some more, it occurs to me that there is a way that you could get a list of the changes that occurred as a result of the requery.</DIV><DIV>&nbsp;</DIV><DIV>(1) Turn off the requery using the ExcludeFromPostSaveRefetch property of the SaveOptions class.</DIV><DIV>&nbsp;</DIV><DIV>(2)&nbsp; Do a RefechEntities() and tie into the Fetching and Fetched events.</DIV><DIV>&nbsp;</DIV><DIV>(3)&nbsp; By comparing the Entities in the two Event Handlers, you should be able to discover what has changed.</DIV><DIV>&nbsp;</DIV><DIV>I could also make a Feature Enhancment request, but I have no idea when or even if this Feature Request would be implemented.</DIV>]]>
   </description>
   <pubDate>Wed, 18 Jul 2007 10:04:12 -700</pubDate>
   <guid isPermaLink="true">http://www.ideablade.com/forum/forum_posts.asp?TID=246&amp;PID=719#719</guid>
  </item> 
  <item>
   <title>Audit log implementation : Actually, it would be sufficient...</title>
   <link>http://www.ideablade.com/forum/forum_posts.asp?TID=246&amp;PID=715#715</link>
   <description>
    <![CDATA[<strong>Author:</strong> <a href="http://www.ideablade.com/forum/member_profile.asp?PF=79" rel="nofollow">MichaelNiemann</a><br /><strong>Subject:</strong> 246<br /><strong>Posted:</strong> 18-Jul-2007 at 5:11am<br /><br />Actually, it would be sufficient if there is an event hooked to ReQuery that would let me see the new state of the BO... since I could have captured "before changes" and "after changes but before committed to db". So just having the "after changes committed to db (requery)" would seem to be enough.<br><br>Mike<br>]]>
   </description>
   <pubDate>Wed, 18 Jul 2007 05:11:37 -700</pubDate>
   <guid isPermaLink="true">http://www.ideablade.com/forum/forum_posts.asp?TID=246&amp;PID=715#715</guid>
  </item> 
  <item>
   <title>Audit log implementation : Michael,  It is easy enough...</title>
   <link>http://www.ideablade.com/forum/forum_posts.asp?TID=246&amp;PID=706#706</link>
   <description>
    <![CDATA[<strong>Author:</strong> <a href="http://www.ideablade.com/forum/member_profile.asp?PF=23" rel="nofollow">davidklitzke</a><br /><strong>Subject:</strong> 246<br /><strong>Posted:</strong> 16-Jul-2007 at 5:27pm<br /><br />Michael,<DIV>&nbsp;</DIV><DIV>It is easy enough to get the "after image".&nbsp; You can see that in the "Saved Event Handler".</DIV><DIV>&nbsp;</DIV><DIV>However, if you want to capture in an Audit record the "changes made by the database during the re-query", that is a lot more difficult.&nbsp;&nbsp; This information is available to the Persistence Manager when it does a Merge of the returned data&nbsp;into the PersistenceManager cache.&nbsp; Unfortunately,&nbsp; there is currently no mechanism that will let a client auditing application access this information.</DIV><DIV>&nbsp;</DIV>]]>
   </description>
   <pubDate>Mon, 16 Jul 2007 17:27:52 -700</pubDate>
   <guid isPermaLink="true">http://www.ideablade.com/forum/forum_posts.asp?TID=246&amp;PID=706#706</guid>
  </item> 
  <item>
   <title>Audit log implementation : DavidK,  Are you following me...</title>
   <link>http://www.ideablade.com/forum/forum_posts.asp?TID=246&amp;PID=551#551</link>
   <description>
    <![CDATA[<strong>Author:</strong> <a href="http://www.ideablade.com/forum/member_profile.asp?PF=79" rel="nofollow">MichaelNiemann</a><br /><strong>Subject:</strong> 246<br /><strong>Posted:</strong> 16-Jul-2007 at 6:52am<br /><br />DavidK,<DIV>&nbsp;</DIV><DIV>Are you following me around? &lt;g&gt;</DIV><DIV>&nbsp;</DIV><DIV>I mentioned to "after image" because&nbsp;triggers are used to finalize&nbsp;records being committed to the database.</DIV><DIV>&nbsp;</DIV><DIV>And from your Concepts guide:&nbsp; </DIV><H3 style="MARGIN: 12pt 0in 3pt -0.25in"><A name=_Toc150072282><strong><FONT size=5>Re-query After Save</FONT></strong></A></H3><P =Ms&#111;normal style="MARGIN: 8pt 0in 0pt"><FONT face="Times New Roman" size=2>DevForce immediately re-queries the entity after inserting or updating it successfully. Re-query is essential because the insert or update may provoke a data source trigger that modifies the data source object. We often use a trigger to update an optimistic concurrency<SPAN style="mso-spacerun: yes">&nbsp;</SPAN>column. A database-maintained timestamp is another common example. In such cases, the row in the database is no longer exactly the same as the row we wrote.</FONT></P><P =Ms&#111;normal style="MARGIN: 8pt 0in 0pt"><FONT face="Times New Roman" size=2>The </FONT><SPAN =ce><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 'Lucida C&#111;nsole'; mso-bidi-font-size: 12.0pt"><FONT color=#000080>PersistenceServer</FONT></SPAN></SPAN><FONT size=2><FONT face="Times New Roman"><SPAN style="mso-spacerun: yes">&nbsp;</SPAN>must update the entity and then send it back to the client’s </FONT></FONT><SPAN =ce><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 'Lucida C&#111;nsole'; mso-bidi-font-size: 12.0pt"><FONT color=#000080>PersistenceManagerr</FONT></SPAN></SPAN><FONT face="Times New Roman" size=2>. The revised entity re-enters the cache, replacing its original; its </FONT><SPAN =ce><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 'Lucida C&#111;nsole'; mso-bidi-font-size: 12.0pt"><FONT color=#000080>RowState</FONT></SPAN></SPAN><FONT size=2><FONT face="Times New Roman"><SPAN style="mso-spacerun: yes">&nbsp;</SPAN>becomes </FONT></FONT><SPAN =ce><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 'Lucida C&#111;nsole'; mso-bidi-font-size: 12.0pt"><FONT color=#000080>Unchanged</FONT></SPAN></SPAN><FONT face="Times New Roman" size=2>.</P><DIV></DIV><P><FONT face="Arial, Helvetica, sans-serif">So I figured there would probably be support for both the "Being Saved" image, and the "After Save (re-queried after save) image.&nbsp;But as I said, the tutorial didn't go anywhere near this deep.</P><DIV></DIV><DIV></DIV>Mike</FONT></FONT>]]>
   </description>
   <pubDate>Mon, 16 Jul 2007 06:52:11 -700</pubDate>
   <guid isPermaLink="true">http://www.ideablade.com/forum/forum_posts.asp?TID=246&amp;PID=551#551</guid>
  </item> 
  <item>
   <title>Audit log implementation : Michael,  You should be able...</title>
   <link>http://www.ideablade.com/forum/forum_posts.asp?TID=246&amp;PID=547#547</link>
   <description>
    <![CDATA[<strong>Author:</strong> <a href="http://www.ideablade.com/forum/member_profile.asp?PF=23" rel="nofollow">davidklitzke</a><br /><strong>Subject:</strong> 246<br /><strong>Posted:</strong> 13-Jul-2007 at 5:01pm<br /><br />Michael,<DIV>&nbsp;</DIV><DIV>You should be able to see the "before image" in an a "Saving" Event Handler.&nbsp; For an example of this, see the advanced tutorial on Abstract Classes".</DIV><DIV>&nbsp;</DIV><DIV>You should be able to see the "after image" in a "Saved" Event Handler.&nbsp; We have no code sample for this.&nbsp; This may be more difficult because unlike the entities in the "Saving" Event Handler, the "Current Version" and "Original Version" of each entity are probably identical.</DIV>]]>
   </description>
   <pubDate>Fri, 13 Jul 2007 17:01:54 -700</pubDate>
   <guid isPermaLink="true">http://www.ideablade.com/forum/forum_posts.asp?TID=246&amp;PID=547#547</guid>
  </item> 
  <item>
   <title>Audit log implementation :  I have reviewed the &amp;#034;Keeping...</title>
   <link>http://www.ideablade.com/forum/forum_posts.asp?TID=246&amp;PID=541#541</link>
   <description>
    <![CDATA[<strong>Author:</strong> <a href="http://www.ideablade.com/forum/member_profile.asp?PF=79" rel="nofollow">MichaelNiemann</a><br /><strong>Subject:</strong> 246<br /><strong>Posted:</strong> 13-Jul-2007 at 9:42am<br /><br />I have reviewed the "Keeping an Audit Trail" example, and it is pretty primitive.<br><br>What I would like to do is obtain the "before image" from the before image (naturally), and the "after image" from the re-query after save.<br><br>Is this straightforward in the framework?<br><br>Regards, Mike<br><br><span style="font-size:10px"><br /><br />Edited by MichaelNiemann - 13-Jul-2007 at 9:42am</span>]]>
   </description>
   <pubDate>Fri, 13 Jul 2007 09:42:06 -700</pubDate>
   <guid isPermaLink="true">http://www.ideablade.com/forum/forum_posts.asp?TID=246&amp;PID=541#541</guid>
  </item> 
 </channel>
</rss>