<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>StudioWorks - Version 2009-01-31</title> <meta name="keywords" content="omnis studio, raining data, studioworks documentation" /> <link rel="stylesheet" type="text/css" href="http://www.studiotips.net/css/codedoc.css" /> <link rel="stylesheet" type="text/css" href="http://www.studioworks-dev.net/css/codedoc.css" /> </head> <body> <div id="container"> <p><a href = ../index.html > Sw4 </a> &nbsp &gt; &nbsp <a href = index.html > About </a> &nbsp &gt; &nbsp Version 2009-01-31</p> <a name="version20090131" /> <h2>Version 2009-01-31</h2> <p>These version notes cover the minor releases from 2009-01-01 to 2009-01-31</p> <ol> <li><span class="nav">Lookups</span> - Fixed a problem with the main list query class using column aliases on lookup columns, and another problem with using foreign views for lookups on foreign keys. Enhancement added to allow the developer to add a <span class="code">$:LookupOrderBy</span> property method to the lookup entry field to control the <span class="code">ORDER BY</span> clause used when fetching lookup records. Bug fixed where returning from adding a new lookup record could wipe out another lookup if the first field in the window was also a lookup field.</li> <li><span class="nav">Security Sign-In Performance</span> - The <span class="code">oSecurity</span> object sign-in speed gets rather slow as you increase the number of users and groups. Loading and reloading the full list of users takes quite a bit of time. Since the full list of users is not normally needed by runtime users <span class="code">oSecurity</span> was modified to only load the users list if <span class="code">$:UsersList</span> is called. All other methods work with the current user or just load the specified user. Making this change required adding methods to the <span class="code">oSecurity_DBAccessor_abstract</span> class. To work with this release the <span class="code">oSecurity_DBAccessor</span> object in your <span class="code">SysAdmin</span> module must be subclassed from <span class="code">swBase4</span>. See the update instructions at the end of this section for more details. If you have any custom <span class="code">oSecurity</span> methods that include <span class="code">iUsersList</span>, you will need to modify those methods to first check and if necessary load <span class="code">iUsersList</span>.</li> <li><span class="nav">Security Icons</span> - In the process of testing the <span class="code">$iconlib</span> library property I deleted the <span class="code">#ICONS</span> class from <span class="code">swBase4</span> in the last release. This caused the <span class="nav">Security</span> window to lose all of its multistate icons. The original <span class="code">#ICONS</span> class has been restored to <span class="code">swBase4</span> in this release.</li> <li><span class="nav">PostgreSQL Change Date to Timestamp</span> - If you changed a date field to a timestamp field the DB Admin tool didn't notice the change and wouldn't alter the column. This has been corrected in this release. Other DAMS might experience the same problem.</li> <li><span class="nav">Manual Transactions $begin</span> - Discovered that after setting a session to manual transactions you need to issue a <span class="code">$begin</span> for <span class="code">$rollback</span> to actually work. To simplify things for StudioWorks developers the <span class="code">$begin</span> has been added to the <span class="code">$transactionmode.$assign</span> method of the <span class="code">oDBSession</span> object class. If the parameter you send to <span class="code">$transactionmode.$assign</span> is <span class="code">kSessionTransManual</span> a <span class="code">$begin</span> will automatically be issued for you.</li> <li><span class="nav">Ping Timeout Default</span> - The default <span class="code">pingtimeout</span> session row property has been changed from 5 to 0 (zero). This means that the database will only be pinged if you change the default value. If you don't change anything the ping won't happen. The database ping was causing more an more headaches for developers.</li> <li><span class="nav">$maxcachedclasses</span> - In the last release the <span class="code">$maxcachedclasses</span> was increased from 200 to 2000 in hopes of seeing improved performance. I was experiencing increased crashed and decided to reduce it back to 200. I'm not certain this was the cause but didn't want to risk it for other StudioWorks developers. Feel free to experiement with different <span class="code">$maxcachedclasses</span> settings.</li> <li><span class="nav">Prompt Method and Error Handling</span> - Added documentation on a strategy for returning a <span class="code">PromptFlag</span> from methods which prompt the user for input and give the user an opportunity to cancel the process. The prompt flag has values of <span class="code">0=Error, 1=Continue, 2=Stop</span>.</li> </ol> <p>To update to this new release:</p> <ol> <li>Quit Omnis Studio.</li> <li>Backup your application! </li> <li>Replace the <span class="file">studioworks</span> folder.</li> <li>Open your <em>SysAdmin</em> module.<br /> <br /> a) Rename <span class="code">oSecurity_DBAccessor</span> to <span class="code">X_oSecurity_DBAccessor</span>.<br /> b) Copy <span class="code">oSecurity_DBAccessor</span> from <span class="code">mySysAdmin</span> to your <span class="code">SysAdmin</span> module.<br /> c) Rename <span class="code">oMainCo_DBAccessor</span> to <span class="code">X_oMainCo_DBAccessor</span>.<br /> d) Copy <span class="code">oMainCo_DBAccessor</span> from <span class="code">mySysAdmin</span> to your <span class="code">SysAdmin</span> module.<br /> <br /> If you have any custom or modified methods in the above X_ classes, review those methods and copy them to the new classes.</li> <li>Open your application and test it.</li> <li>If you hit any snags, email me a zip of your application with instructions on when and where you are running into problems.</li> </ol>Each library and the modifications in the release are listed below. The modifications are compiled from the <span class="code">@MOD</span> tag comments found in the methods of the classes in the library. <a name="myappmain" /> <h3>myAppMain</h3> No modifications <a name="mysysadmin" /> <h3>mySysAdmin</h3> <p><span class="code">oMainco_DBAccessor/$#About</span> <span class="moddateby">(2009-01-19 Doug K.)</span><br /> Set the $superclass to the abstract super class in swBase4 and deleted the subclass methods.</p> <span class="code">oSecurity_DBAccessor/$#About</span> <span class="moddateby">(2009-01-19 Doug K.)</span><br /> Set the $superclass to the abstract super class in swBase4 and deleted the subclass methods. <a name="swbase4" /> <h3>swBase4</h3> <p><span class="code">oDBAdminMethods_POSTGRESQL/$_syncTableAndColumns_getAddAlterColsLists</span> <span class="moddateby">(2009-01-19 Doug K.)</span><br /> Added code to check for timestamp subtype. Change from date to timestamp was being missed for alter columns.</p> <p><span class="code">oDBSessionMethods_base/$transactionmode.$assign</span> <span class="moddateby">(2009-01-16 Doug K.)</span><br /> If the session is being set to manual transactions, automatically issue a $begin.</p> <p><span class="code">oEmail/pingSMTPServer</span> <span class="moddateby">(2009-01-12 Doug K per Mike Matthews.)</span><br /> Check for port # appended to IP address and if so, use the specified port.</p> <p><span class="code">oFunctions/$dragdropmoveLinesInList</span> <span class="moddateby">(2009-01-19 Doug K.)</span><br /> Using pDragField when removing old lines doesn't work. Use pfListVar instead.</p> <p><span class="code">oIconsList_Model/$loadData</span> <span class="moddateby">(2009-01-02 Doug K.)</span><br /> Reset the smartlist after remove and merge of icons from a schema class. Otherwise all the items are status deleted and inserted.</p> <p><span class="code">oModuleDataTool/$canModifyData</span> <span class="moddateby">(2009-01-15 Doug K.)</span><br /> Added @DEBUG message to assist with tracking down incorrect oModuleData checks.</p> <p><span class="code">oSecurity/$:UserCustomInfoRow</span> <span class="moddateby">(2009-01-19 Doug K.)</span><br /> Get the custominforow from the current user row rather than the users list.</p> <p><span class="code">oSecurity/$_UPDATEUSERANDREBUILDLIST</span> <span class="moddateby">(2009-01-19 Doug K.)</span><br /> Deprecated this method. We don't want to be rebuilding the users list in the oSecurity object. (slows performance)</p> <p><span class="code">oSecurity/$_retSecurityInfoRow_user</span> <span class="moddateby">(2009-01-07 Doug K.)</span><br /> Always reload the users list from the database in case the sysadmin changed security settings or other info.</p> <p><span class="code">oSecurity/$_retSecurityInfoRow_user</span> <span class="moddateby">(2009-01-19 Doug K.)</span><br /> Just refetch the specified user to improve performance. (Avoid reloading all the users)</p> <p><span class="code">oSecurity/$_retSecurityInfoRow_user</span> <span class="moddateby">(2009-01-19 Doug K.)</span><br /> Just update the current user if it matches. Don't bother with iUsersList.</p> <p><span class="code">oSecurity/$addUserToGroups</span> <span class="moddateby">(2009-01-19 Doug K.)</span><br /> Call $_updateUser rather than $_updateUserAndRebuildLists to improve performance.</p> <p><span class="code">oSecurity/$getUserKey</span> <span class="moddateby">(2009-01-19 Doug K.)</span><br /> Modified the method to not use the iUsersList.</p> <p><span class="code">oSecurity/$retGroupUsersList</span> <span class="moddateby">(2009-01-19 Doug K.)</span><br /> Call $:UsersList to get the list of users.</p> <p><span class="code">oSecurity/$saveCustomInfoRow</span> <span class="moddateby">(2009-01-19 Doug K.)</span><br /> Call $_updateUser rather than $_updateUserAndRebuildLists to improve performance.</p> <p><span class="code">oSecurity/$saveUserPasswordInfoRow</span> <span class="moddateby">(2009-01-19 Doug K.)</span><br /> Call $_updateUser rather than $_updateUserAndRebuildLists to improve performance.</p> <p><span class="code">oSecurity/$saveUserPasswordInfoRow</span> <span class="moddateby">(2009-01-19 Doug K.)</span><br /> Removed the use of iUsersList from the method.</p> <p><span class="code">oSecurity/$saveUserPrefs</span> <span class="moddateby">(2009-01-19 Doug K.)</span><br /> Call $_updateUser rather than $_updateUserAndRebuildLists to improve performance.</p> <p><span class="code">oSecurity/$saveUserSchemaSecurity</span> <span class="moddateby">(2009-01-19 Doug K.)</span><br /> Call $_updateUser rather than $_updateUserAndRebuildLists to improve performance.</p> <p><span class="code">oSecurity/$saveUserWindowSecurity</span> <span class="moddateby">(2009-01-19 Doug K.)</span><br /> Call $_updateUser rather than $_updateUserAndRebuildLists to improve performance.</p> <p><span class="code">oSecurity/$signin</span> <span class="moddateby">(2009-01-19 Doug K.)</span><br /> Created a new $signin method that does NOT load the iUsersList. This was done to speed up the sign-in security check. The users list is only loaded if $:UsersList is called by a public method.</p> <p><span class="code">oSecurity_DBAccessor_abstract/$:GroupsList</span> <span class="moddateby">(2009-01-19 Doug K.)</span><br /> Get the pkey column name from the table class. Use a variable for the PKeyColName.</p> <p><span class="code">oSecurity_DBAccessor_abstract/$:UsersList</span> <span class="moddateby">(2009-01-19 Doug K.)</span><br /> Get the pkey column name from the table class. Use a variable for the PKeyColName.</p> <p><span class="code">oSecurity_DBAccessor_abstract/$_retDBUserRow</span> <span class="moddateby">(2009-01-19 Doug K.)</span><br /> Added method to fetch a single user database row. Method is needed to speed up security signin.</p> <p><span class="code">oSecurity_DBAccessor_abstract/$_retSecurityUserRowFromDBUserRow</span> <span class="moddateby">(2009-01-19 Doug K.)</span><br /> Added method to convert a user database row to an StudioWorks security row. Method is used by various StudioWorks methods.</p> <p><span class="code">oSecurity_DBAccessor_abstract/$retSecurityUserRow_pUserID</span> <span class="moddateby">(2009-01-19 Doug K.)</span><br /> Added method to fetch a single user security row based on UserID. Method is needed to speed up security signin.</p> <p><span class="code">oSecurity_DBAccessor_abstract/$retSecurityUserRow_pUserKey</span> <span class="moddateby">(2009-01-19 Doug K.)</span><br /> Added method to fetch a single user security row based on UserKey. Method is needed to speed up security signin.</p> <p><span class="code">oSessionsManager/$:DefaultSessionRow</span> <span class="moddateby">(2009-01-12 Doug K.)</span><br /> Default 'pingtimeoutseconds' to zero (0).</p> <p><span class="code">oStartupTaskDefaultMethods/$_setDefaultsAndPrefs</span> <span class="moddateby">(2009-01-19 Doug K.)</span><br /> Experiencing Omnis crashes. Wondering if setting $maxcachedclasses to 2000 is causing it. Modify code to use 200.</p> <p><span class="code">oStartupTaskVarsTool/$saveTaskVarPropertiesOnSignOut</span> <span class="moddateby">(2009-01-19 Doug K.)</span><br /> Removed saving last search, last selected, last display, last window properties from local_prefs. Not necessary as they are stored in the user profile in the main database and loaded on sign-in.</p> <p><span class="code">oStartupTaskVarsTool/retStartupSessionRow</span> <span class="moddateby">(2009-01-12 Doug K.)</span><br /> If pingdbserver is zero(0) set pingtimeoutseconds to zero as well.</p> <p><span class="code">oStringTablesSchemasEditor_Model/$:caneditClass</span> <span class="moddateby">(2009-01-02 Doug K.)</span><br /> Added property method to return the value of ibCanEditClass.</p> <p><span class="code">oTableClassMethods_base/$setDefaults</span> <span class="moddateby">(2009-01-06 Doug K.)</span><br /> Only set default values for columns which are part of the base schema.</p> <span class="code">wStringTablesSchemasEditor_View/$refreshView</span> <span class="moddateby">(2009-01-02 Doug K.)</span><br /> Bug fix. Setting bCanEdit was calling the wrong model methods. Supposed to call $:caneditData and $:caneditClass. <a name="swdocs4" /> <h3>swDocs4</h3> <p><span class="code">@00 Error Handler/@41 Error Handler Coding for Prompt Methods</span> <span class="moddateby">(2009-01-22 Doug K.)</span><br /> Added documentation on a technique for error handler coding with prompt methods.</p> <p><span class="code">@50 Lookups/@25 Intercepting Lookups</span> <span class="moddateby">(2009-01-21 Doug K.)</span><br /> Added documentation for $:LookupOrderBy</p> <span class="code">@64 Version 2009-01-31/@00 About</span> <span class="moddateby">(2009-01-19 Doug K.)</span><br /> Started release notes for minor releases from 2009-01-01 to 2009-01-31 <a name="swgui4" /> <h3>swGui4</h3> <p><span class="code">oFieldDecorator_click/$decorateField</span> <span class="moddateby">(2009-01-06 Doug K.)</span><br /> For checkbox field, do nothing when it is set to 'click' decorator type.</p> <p><span class="code">oFieldHandlerController/$event</span> <span class="moddateby">(2009-01-02 Doug K.)</span><br /> The lookup field handler was getting called on 'displayonly' fields. Added check for type &lt;&gt; displayonly.</p> <p><span class="code">oFieldHandlerLookupTypeAhead/event_evAfter</span> <span class="moddateby">(2009-01-07 Doug K.)</span><br /> Clear iLookupList if the lookup field is empty when the user leaves the field.</p> <p><span class="code">oFieldHandlerLookupTypeAhead/event_evAfter</span> <span class="moddateby">(2009-01-15 Doug K per Mike Matthews.)</span><br /> If the lookup list is empty, the $line value can still sometimes be 1, so also check the $linecount.</p> <p><span class="code">oFieldHandlerLookupTypeAhead/updateLookupList</span> <span class="moddateby">(2009-01-08 Doug K.)</span><br /> If no last selected lookup line was found, then preselect the first line in the lookup list.</p> <p><span class="code">oNavigationMenu_Model/removeDuplicateNavMenuLines</span> <span class="moddateby">(2009-01-02 Doug K.)</span><br /> Modify method to remove duplicate nav menu lines from the main library rather then the module.</p> <p><span class="code">oWindowMenus_Model/$:caneditData</span> <span class="moddateby">(2009-01-15 Doug K.)</span><br /> Added parameter bLogErrorIfNot=kFalse, since this is only a check.</p> <p><span class="code">wBase_abstract/$:Modified.$assign</span> <span class="moddateby">(2009-01-16 Josh L.)</span><br /> Changed ibModified to pbModified for the check.</p> <p><span class="code">wComplexGrid_abstract/$eventClose</span> <span class="moddateby">(2009-01-09 Doug K.)</span><br /> Copied $eventClose method from wEdit_abstract to wComplexGrid as the method is needed for complex grids which allow users to 'edit'.</p> <p><span class="code">wComplexGrid_abstract/$eventClose</span> <span class="moddateby">(2009-01-14 Doug K.)</span><br /> Set ibModified to kFalse if the user selects "Don't Save".</p> <span class="code">wEdit_abstract/$eventClose</span> <span class="moddateby">(2009-01-14 Doug K.)</span><br /> Set ibModified to kFalse if the user selects "Don't Save". <a name="swicons4" /> <h3>swIcons4</h3> No modifications <a name="swrefs4" /> <h3>swRefs4</h3> No modifications <a name="swreports4" /> <h3>swReports4</h3> No modifications <a name="swweb4" /> <h3>swWeb4</h3> No modifications <p class="footer">StudioWorks Documentation - Copyright 2005 Vencor Software </p></div> </body> </html>