Sw4   >   About   >   Version 2008-04-30

Version 2008-04-30

This release introduces a few significant structural changes to the framework.

  1. Demos!!! - All of the StartNewApp demo libraries have been combined into a single library named myAppDemos. The classes for each demo has been put in a separate folder within the library. All of the demos show up in the navigation list under a Demos group.

    New demos which have been added: Print PDF Demo, Email Demo, Field Handler Demo,
  2. Field Handling - The field handlings and decorating classes have been completely restructured and rewritten. The new field handlers make it much easier for developers to customized and control field handling and decoration. See Windows > Field Handling for more information.
  3. Database Sessions - The oLogon series classes have been replaced by an oDBSession series of classes. The new oDBSession classes remove dependency on the session name and can work with $sessions or $sessionpools. (There appears to be an Omnis Studio bug that currently messes up how I am using $sessionpools - hopefully that will be cleared up in the future.)

    The oDBSessions structure is designed to make it simple for StudioWorks apps to work with multiple databases simultaneously.

    The sessionname property is as an ID for the session as stored in the oSessionManager saved sessions. The sessionname is not important for the name of the actual session which is opened with the database. The oDBSession object appends a numbered suffix to the sessionname when it opens a session with the database.

    The database sessions change cascades to the Database Admin classes, Table Classes, Error Handler, and oRefs.

    Database session documentation has been added under the StudioWorks > SQL section.
  4. Base Table Class - All of the tBase methods have been moved to oTableClassMethods_DBMSVENDOR classes. tBase is now a bridge object which instantiates the correct oTableClassMethods object for the current session's DAM and then forwards any messages to the instaniated methods object class. This makes it very easy to override and modify a table class method for a specific DBMS.
    tBase first check your main library for an oTableClassMethods_DBMSVENDOR object, making it possible for you subclass any of the oTableClassMethod_DBMSVENOR objects to your main library and override or enhance the StudioWorks object's table class methods.
  5. Primary Keys - All primary keys related code has been moved to a set of oPrimaryKeys series objects. This way the same primary keys code can be shared by oTableClassMethods and oDBAdmin. A subclass of oPrimaryKeys_abstract has been created for each DBMS vendor. The oPrimaryKeys_abstract superclass code defaults to creating and using a pkey table for primary key counters. Subclasses override the superclass oPrimaryKeys_abstract methods if the DBMS is used for providing primary keys.

    Both oTableClassMethods and oDBAdmin first check your main library for an oPrimaryKeys_DBMSVENDOR object, making it possible for you subclass any of the oPrimaryKeys_DBMSVENDOR objects to your main library and override or enhance the StudioWorks object's methods.
  6. Check Data - All check data code has been moved out to an oCheckData class. oCheckData can be subclassed to the same library as your schema class and named oCheckData_tablename. $check_ColName or $check_BusinessRule methods can be added to the subclass. Any $check_ prefixed method will be called by the $checkCurrRow superclass method. By moving all check data related code to a separate set of objects custom check data code can be shared by table classes, window classes, and objects classes.

    A $checkColumn(pColName) method has been added to tBase. This allows you to immediately run a check on a single column on evAfter in a field $event method. See SQL > Check Data for more information.

    The $checkData method in tBase has been renamed to $checkCurrRow for better clarity on what the method does.

    The $checkCurrRow method of a tBase instance bound to a query class will now call custom oCheckData_tablename $check_ prefixed methods of the base table... a problem that we couldn't solve in previous StudioWorks releases.
  7. DB Admin Classes - All of the database users related methods have been moved to a separate set of oDBAdminUsers series of classes. This greatly simplifies the oDBAdmin series classes allowing them to focus on create/alter/sync operations on database tables.
  8. DB Admin Users - This new series of oDBAdminUser series classes contains all of the database users related methods. Database users are different than App users. App users are in the users we add to the usr table. Database users are in the DBMS. (e.g. root, _system, dbadmin) Databases which support users have GRANT/REVOKE privileges on tables. To the best of my knowledge all StudioWorks developers are logging on to their databases as the tables owner user, so the oDBAdminUsers series of object is not pressing. FrontBase is the only database users code that I've written to date. The code needs to be tested.
  9. DB Admin Data Mover - Completely overhauled and tested with OmnisSQL, MySQL, PostgreSQL, FrontBase. You can point to a new database and click Full Sync and Copy Data, or Quick Sync and Copy Data in this window. No need to first sync the database in the Schemas and Tables window. Code has been added to remove the selected Source Database from the list of Target Databases preventing you from accidentally selecting the same session as the source and target.
  10. DB Admin Interactive SQL - SQL history has been added. Each time you successfully execute a SQL statement it is added to the end of the Unique History list. If you click an item in the history list it is loaded into the SQL text field where you can edit it. Double-clicking on an item loads and immediately executes it. The history list is saved to your local_prefs.df1 file.
  11. Refs Primary Keys Counter - All of the primary key related methods have been removed from the oRefs object. All primary key related methods are now part of the oPrimaryKeys series of objects. The refs table is no longer used to store primary key counters.
  12. Refs Session - The oRefs object no longer opens a second session to the main database. When the oRefs object is initialized it stores a object reference to the specified oDBSession object reference instance. (By default db1sess is passed in.) oRefs methods which increment counters check the session $transactionmode and if kSessionTransManual it temporarily opens a manual transactions session with the database, increments the counter, and closes the temporary session. This ensures that counters won't be rolled back - something that would be a real headache in multi-user environments.
  13. Lower Case Table Names, Primary and Foreign Key Names - To make it easier to work with different databases (MySQL in particular) the table names in StartNewApp and in StudioWorks core modules (Errorlog, AppPrefs, LocalPrefs, Webappstat) have been changed to lower case in names. The primary key and foreign key column names have also all been switched to lower case. (Country_pkey becomes country_pkey, Stateprov_fkey becomes stateprov_fkey). This change should not break existing apps. StudioWorks developers are free to continue to use mixed case table names and mixed case pkey and fkey column names.
  14. Path Objects - I got tired of requiring StudioWorks developers to copy the oPaths object class to their main library everytime a new method, enhancement, or fix is made to the oPaths object. Several changes to oPaths were made in this release for the unicode version of Omnis Studio. With this release I've reworked the main library methods to make it possible to subclass oPaths_studioworks from swBase4 to your main library. See the update notes for more information.
  15. String Tables - The string tables structure has been overhauled and improved. The big thing is that the base language is named metadata. As the name indicates is all of the metadata that you have entered in your application, including the _stb schema classes. The metadata in the StudioWorks core libraries in in en-us, but you are free to enter the metadata in your modules in the language of your choice. (fr, it, etc.) Your metadata will then be a mix of en-us and the language you choose to use for the metadata for your modules. You then create stringtables_*.txt files for any languages you want to support (stringtables_fr.txt, stringtables_en-gb.txt). One file for each language. The stringtable_*.txt file only needs to contain the rows where the language text is different than the metadata text. If the metadata in your modules is in French you would only need to provide the French language text for the metadata in the sw core libraries. The stringtables_*.txt files will normally have the metadata langauge columns included in them, but only the language specified in the file name suffix will be loaded if the string tables are reloaded.

    You can allow customers to edit the string tables text for any language by giving them access to the String Tables Editor window. Any changes they make to the string tables text for any language are automatically saved to their database (Special rows in the refs table, one record for each modified language). Only the changed values are saved to the customer's database. When the string tables are rebuilt the changed values for each language stored in the database are loaded last, overwriting any values found loaded from stringtables_*.txt files. The metadata values are never overwritten, they are simply used if the current language value for an stbname.stbid is empty.

Upgrading to this version of StudioWorks will require some changes to existing StudioWorks applications... but the gains should be worth the pains. If you run into difficulties upgrading you app to this version, zip the app and send it to me with an email explaining the problems you are running into.

To update to this new release:

  1. Quit Omnis Studio.
  2. Backup your application!
  3. Follow the Upgrading oPaths Object instructions in the next section.
  4. Follow the Upgrading oLogon to oDBSession instructions in the next section.
  5. If you have stringtables.txt files in your startupitems folder... rename them adding the correct _*.txt language suffix.
  6. Toss your app_prefs.df1 file in your modules folder to force all cached lists to be rebuilt.
  7. Open you application and test it.
  8. If you hit any snags, email me a zip of your application with instructions on when and where you are running into problems.
Each library and the modifications in the release are listed below. The modifications are compiled from the @MOD tag comments found in the methods of the classes in the library.

Upgrading Existing SW Apps

This section covers upgrading your existing StudioWorks app to this new release.

I got tired of requiring StudioWorks developers to copy the oPaths object class to their main library everytime a new method, enhancement, or fix is made to the oPaths object. Several changes to oPaths were made in this release for the unicode version of Omnis Studio. With this release I've reworked the main library methods to make it possible to subclass oPaths_studioworks from swBase4 to your main library.

In previous versions we used oPaths to tell us the path to the studioworks folder, and then we would open the StudioWorks libraries. This meant that oPaths could not be subclassed from swBase4. This release introduces a self contained oOpenLibraries object who's sole purpose is to find and open the App libraries and find and open the studioworks folder libraries. As soon as swBase4 is open the main library oPaths has its superclass and is ready to use. Under the new structure any code fixes or new method I add to oPaths_studioworks in swBase4 are automatically inherited by the oPaths object in your main library. If a code change or fix is made to oOpenLibraries you will only need to replace that object, which I doubt you will ever need to customize.

  1. After you have made a backup of your existing application, replace your old StudioWorks core libraries with the new StudioWorks core libraries.
  2. Open your existing application's main library without opening the startup task. (Hold down the Ctrl/Cmnd key when you open the library.)
  3. Rename the oPaths object in your main library to oPaths_YYYYMMDD
  4. Open the myAppMain library of the new StudioWorks release.
  5. Drag the oPaths object from myAppMain to your main library. The new oPaths object is subclassed from oPaths_studioworks in swBase4.
  6. Copy an custom methods added to your old oPaths object to the new oPaths object. Review any modifications you made to the old oPaths object class and add them to the new oPaths object if necessary. Hopefully you won't need to override and modify any of the superclass methods.
  7. Drag the oOpenLibraries object from myAppMain to your main library. The oOpenLibraries specializes in opening your App's modules and the StudioWorks core libraries.
  8. Drag the oDBSession object from myAppMain to your main library.
  9. Rename the Startup_Task in your main library to Startup_Task_YYYYMMDD
  10. Drag the Startup_Task from myAppMain to your main library.
  11. If you have modified the Startup_Task in your main library, copy and modified methods in your original Startup_Task to the Startup_Task you copied from myAppMain. The key changes made in the new Startup_Task are:
    • Addition of the db1sess tvar.
    • $construct method calls oOpenLibraries object to open the App and StudioWorks libraries.
    • The $openAppLibraries and $openSWLibraries and openLibrariesInFolder methods have been removed from the main library Startup_Task.
    • The _closeLibrariesInFolder method has been renamed to closeLibrariesInFolder.
    • $signInOKContinue method defaults to calling the setErrorHandlerDatabaseSession method.
    • The setErrorHandlerDatabaseSession method has been modified to send a $setDatabaseSession(db1sess) message to the error handler.
  12. Open the swGui4.lbs library of the new release.
  13. Copy the Startup_Task from swGui4 to each of your modules, replacing the existing Startup_Task in each module, so that the db1sess tvar will be visible to the code in all of your modules. (This assumes your modules are not actually using their Startup_Task class.)
  14. Delete the app_prefs.df1 file in your modules folder. This will force the lists to be rebuilt when you open your app.
  15. If you have any stringtables.txt files you will need to add the language ID suffixs to the file name. (e.g. stringtables_fr.txt) If you have more than one language in the same file you will need to copy the file and add the appropriate language ID suffix to each file name.
  16. Close all your libraries.
  17. Cross your fingers and open your updated app. All going well it will open without any problems.
  18. If you have runtimized your windows you might have to re-runtimize.
  19. You may need to resync your database. Be sure to backup your database before doing so.
  20. If you run into snags and can't resolve them, zip your app email it to me.

Upgrading from oLogon to oDBSession

This section assumes you have already completed the previous steps in Upgrading the Main Library.

To upgrade your existing application code from oLogon to oDBSession:

  1. If you have not already done so, open your existing application's main library without opening the startup task. (Hold down the Ctrl/Cmnd key when you open the library.)
  2. Open all of the modules of your main library and open the swBase4 and swGui4 libraries.
  3. Close the swBase4, swGui4, myAppMain libraries.
  4. Open the Omnis Studio Find and Replace window (Ctrl/Cmnd+F) and do the following:
    1. Select all libraries in the Classes tab. This should be a list of just your application's libraries.
    2. Find logn.$:SessionRow - Replace with db1sess.$:SessionRow
    3. Find logn.$:DAMName - Replace with db1sess.$damname
    4. Find logn.$:DBMSVendor - Replace with db1sess.$:DBMSVendor
    5. Find logn.$initialize - Replace with db1sess.$initialize
    6. Find logn.$:SessionInfo - Replace with db1sess.$:SessionInfo
    7. Find logn.$:TablesList - Replace with db1sess.$tables
    8. Find logn.$retDBTablesList - Replace with db1sess.$tables
    9. Find logn.$refreshSession - Replace with db1sess.$reconnectSession
    10. Find logn.$log - Replace with db1sess.$log (This takes care of $logon and $logoff)

      Any db1sess.$logon method calls with parameters no longer need the parameters. The oDBSession object uses the initialize session row information for the username, userpassword, etc. If your logn.$logon call was being used to open a tablesowner session with the database, you will need to replace logn.$logon with db1sess.$logon_tablesowner.
    11. Find logn.$:DBSetPrimaryKey - Each of these calls need to be removed. This new version of StudioWorks does not use this property to decide whether or not the database is used to set the primary key. That decision is made by the oPrimaryKey series of classes based on the DBMS vendor.
    12. Find logn.$:SessionObj - Each of these calls need to be modified.

      If the session object is being fetched in order to then get a $newstatement object from the session object, you should elimate that step completely and get the statement object directly from db1sess using Do db1sess.$getStatementObject(StmntObj) Return FlagOK Returning FlagOK rather than StmntObj make it much easier to immediatetly trap a bad statement object in your code. The $getStatementObject method checks the session state to make sure the client is still connected and the database is still up and running. It will attempt to $reconnectSession if the connection has been lost or logged off for some reason thereby reducing errors caused by lost sessions.

      If the session object is being fetched in order to set the $transactionmode and issue $commit/$rollback you should elimate that step completely and send the $transactionmode, $transactionmode.$assign, $commit, $rollback messages directly to db1sess.

      If you really do need the session object of the db1sess session then you need to Do db1sess.$getSessionObject(SessObj) Return FlagOK. The $getSessionObject method passes the session object to the sender via a field reference parameter, thereby allowing it to return true or false to the sender for easier error checking. The $getSessionObject checks the $state and will attempt to $reconnectSession if the connection has been lost or logged off for some reason thereby reducing errors caused by lost sessions.
    13. Find logn.$ - Each of these calls need to be checked to see what call is being made.
    14. Find $ctask.db1sess - Replace with db1sess

  5. Review any changes you made to your main library Startup_Task_YYYYMMDD startup task and copy them over to the Startup_Task.

  6. All going well you should be able to open the Startup_Task of your main library and sign-in to your StudioWorks app.

myAppMain

Startup_Task/$#About (2008-04-14 Doug K.)
Added 'db1sess' tvar and 'db2sess' tvar to the Startup_Task.

Startup_Task/$closeDemoLibraries (2008-04-18 Doug K.)
Send message to 'pths' rather than ioPaths. Delete ioPaths ivar.

Startup_Task/$construct (2008-03-12 Doug K.)
Call the oOpenLibraries object method rather than the Startup_Task method to open the App and StudioWorks libraries. oOpenLibraries is a self-contained object, allowing oPaths in the main library to subclassed from swBase4 rather than copied, making updates affecting oPaths much easier in the future.

Startup_Task/setErrorHandlerDatabaseSession (2008-04-02 Doug K.)
Use the DB session object reference to set the database session in the error handler, rather than the session row.

oOpenLibraries/$#About (2008-03-12 Doug K.)
Created a standalone 'oOpenLibraries' object class to be copied to the main library and called at the start of the $construct method of the Startup_Task. The object has 2 methods: $openAppLibraries and $openStudioWorks libraries. If an error occurs it is sent to the trace log and the trace log is opened.

oOpenLibraries/$openDB2SessLibrary (2008-04-28 Doug K.)
Added method to open the library located inside the APP/libraries/db2sess/ folder

mySysAdmin

Startup_Task/$#About (2008-04-16 Doug K.)
Removed the 'logn' tvar. Added tvar 'db1sess'.

oSecurity_DBAccessor/$:GroupsList (2008-03-31 Doug K.)
Removed early exit.

oSecurity_DBAccessor/$:GroupsList (2008-04-18 Doug K.)
Changed 'Grp' table name to 'grp'. Changed 'Grp_pkey' column name to 'grp_pkey'.

oSecurity_DBAccessor/$:UsersList (2008-03-31 Doug K.)
Removed early exit.

oSecurity_DBAccessor/$:UsersList (2008-04-18 Doug K.)
Changed 'Usr' table name to 'usr'. Changed 'Usr_pkey' column name to 'usr_pkey'.

oSecurity_DBAccessor/$initialize (2008-03-31 Doug K.)
Do not define the users and groups lists until they are requested.

oSecurity_DBAccessor/$updateGroup (2008-03-31 Doug K.)
Send $retDefinedList message to oSQLLists to define the DBUsersList rather than copying from iDBUsersList as it might not be defined.

oSecurity_DBAccessor/$updateGroup (2008-04-18 Doug K.)
Changed 'Grp_pkey' column name to 'grp_pkey'.

oSecurity_DBAccessor/$updateUser (2008-03-31 Doug K.)
Send $retDefinedList message to oSQLLists to define the DBUsersList rather than copying from iDBUsersList as it might not be defined.

oSecurity_DBAccessor/$updateUser (2008-04-18 Doug K.)
Changed 'Usr_pkey' column name to 'usr_pkey'.

oSpecialMenu/$createAutoSignInFile (2008-04-18 Doug K.)
Changed 'Usr_pkey' column name to 'usr_pkey'.

swBase4

Startup_Task/$#About (2008-04-01 Doug K.)
Added tvar db1sess which points to oDBSession

Startup_Task/$#About (2008-04-01 Doug K.)
Took out the test $construct code which was allowing swBase4's Startup_Task to remain open. Reverted to immediately closing the swBase4 task instance.

Startup_Task/$#About (2008-04-16 Doug K.)
Removed the 'logn' tvar. Added tvar 'db1sess'.

Startup_Task_Module_template/$#About (2008-04-16 Doug K.)
Deleted 'logn' tvar. Added 'db1sess' tvar. Deleted 'timers' tvar.

mContext/$control (2008-04-25 Doug K.)
Copied the $control method from mContext in swGui4.

oAppPrefs/$#About (2008-04-16 Doug K.)
Added sCachedlist_listdef for creating the Cachedlist table using oDBAdmin.

oAppPrefs/$initialize (2008-04-16 Doug K.)
Change 'Do inherited' to 'Do $cinst.$inherited.[$cmethod().$name]' for easier debugging, stepping through code.

oCachedListsUpdater/$#About (2008-04-24 Doug K.)
Added an object class that specialized in getting and setting values in all of the StudioWorks cached lists. This object is used to instantly access and update the cached lists as changes are made in the Programmers Workbench.

oCheckData_base/$#About (2008-04-04 Doug K.)
Added oCheckData_base which can be subclassed to oCheckData_Tablename for custom check data methods.

oCheckData_base/$#About (2008-04-29 Doug K.)
Added missing sDatamssg_stb schema class for the check data messages.

oCreateTablesOwnerLogonFile/$#About (2008-04-19 Doug K.)
Created an object class which specialized in creating the tables owner logon file. The method can now be called from the 'Create Tables Owner Logon File' button in the Sessions Manager edit window.

oDBAdmin/$setUserPassword (2008-04-28 Doug K.)
Added $setUserPassword method for compatability with previous releases. The method simply returns kTrue.

oDBAdminMethods_OMNIS/$renameTable (2008-04-16 Doug K.)
Modified the Omnis data file $renameTable method so that it successfully renames the slot.

oDBAdminMethods_OMNIS/$renameTable (2008-04-16 Doug K.)
The trick was to create file classes for the old and new slot before rename the slot.

oDBAdminMethods_abstract/$#About (2008-04-08 Doug K.)
Massive changes to work with the oDBSession objects. Too many changes to note. This is a complete refactoring. Previous @MOD notes have been removed. This is a fresh start.

oDBAdminMethods_abstract/$#About (2008-04-08 Doug K.)
Moved all 'superuser' and 'users' related methods to the new 'oDBAdminUsers' objects. This simplifies the oDBAdminMethods objects allowing them to specialize on tables, columns, indexes, constraints. FrontBase and SQLServer are the only DBMS vendors we've written 'user' related code for. The Omnis data file doesn't support 'users'. To date 'users' related code has only been written FrontBase and SQLServer. The Omnis data file doesn't support 'users'.

oDBAdminMethods_abstract/$closeSession_TablesOwner (2008-04-28 Doug K.)
Delete the ioTablesOwnerDBSession object ref each time the session is closed.

oDBAdminMethods_abstract/$insertEmptyRecords (2008-04-08 Doug K.)
Pass in the oDBSession object rather than the session row to $retDefinedList

oDBAdminMethods_abstract/$openSession_TablesOwner (2008-04-28 Doug K.)
Set the ioTablesOwnerDBSession object ref $newref each time the session is opened. An object ref is needed so that ioTableOwnerDBSession can be passed to $retDefinedList.

oDBAdminMethods_abstract/$retDAMColsList (2008-04-28 Doug K.)
Using the new oDBSession object to return the table columns list so all the code is in one place

oDBAdminMethods_abstract/$retDAMTablesAndViewsList (2008-04-28 Josh L.)
Using the new oDBSession object to return the tables list so all the code is in one place

oDBAdminSQLText_MYSQL/$retSQL_CreateTable (2008-03-14 Doug K.)
Reversed the @MOD:1 change. Table names are case-sensitive in other SQL statements as well on the Linux platform. Therefore it is up to the developer to use all lower case names in their schema classes to avoid the mysqldump problems. I recommend you include "lower_case_table_names = 1" in the MySQL my.cnf file.

oDBAdminSQLText_abstract/$#About (2008-04-08 Doug K.)
Removed all of the 'user' related SQL text methods. Moved the code to the applicable oDBAdminUsers subclass objects.

oDBAdminSQLText_abstract/$_retDefinedList (2008-04-04 Doug K.)
Added new method which binds the list to the schema class. No need for a table class for this object.

oDBAdminSQLText_abstract/$initialize (2008-04-08 Doug K.)
Discovered that we don't need a 'live' logged on session object for the oDBAdminSQLText methods. Modified the initialize method to set ioSessObj to a static session external object. Parameter changed to pDAMName.

oDBAdminSQLText_abstract/$retSQL_CreateTable (2008-04-08 Doug K.)
Call the new $_retDefinedList method.

oDBAdminSQLText_abstract/$retSQL_SQLDataType (2008-04-08 Doug K.)
Call the new $_retDefinedList method.

oDBAdminUsers/$#About (2008-04-08 Doug K.)
Moved all of the 'database users' related DBAdmin methods to a separater set of oDBAdminUsers set of classes.

oDBAdminUsers_abstract/$#About (2008-04-08 Doug K.)
Moved all 'database users' releated methods from oDBAdminMethods to oDBAdminUsers series objects.

oDBSessionMethods_PGSQLDAM/$tables (2008-04-28 Josh L.)
PGSQLDAM wasn't returning the correct list for kStatementServerAll (0) so to get around that, I accumulated the list of tables and views to make the correct list

oDBSessionMethods_base/$columns (2008-04-28 Doug K.)
Added check to make sure pTableName is not empty.

oEmail/$initialize (2008-03-07 Doug K.)
If a password is provided, automatically set ibUseAuthentication to true.

oEmail/pingSMTPServer (2008-03-07 Doug K.)
Loop the TCPReceive multiple times till we get something into the buffer.

oErrorHandler/$setDatabaseSession (2008-03-14 Doug K.)
Changed the $servertablename in 'sErrorlog' to lowercase 'errorlog'. Lower case table names work best with all databases.

oErrorHandler/$setDatabaseSession (2008-04-02 Doug K.)
Change parameter to pfDBSessionObjectRef from pSessionRow and modify the method to use the new DBSession object.

oErrorHandler/_openDatabaseErrorLogViewer (2008-04-01 Doug K.)
Pass ioDBSessionObjectRef rather than iSessionRow to $retDefinedList

oFunctions/$retListFromTextString (2008-03-10 Doug K per Josh L.)
Added replaceall for kCr+kLF and then kLf for cross-platform compatibility.

oObjectClassErrorHandlerMethods/$#About (2008-03-19 Doug K.)
Added an error handler template methods object class. The methods can be copied to objects which can operate independent of oErrorHandler and 'errhndlr'.

oOpenLibraries/$#About (2008-03-12 Doug K.)
Created a standalone 'oOpenLibraries' object class to be copied to the main library and called at the start of the $construct method of the Startup_Task. The object has 2 methods: $openAppLibraries and $openStudioWorks libraries. If an error occurs it is sent to the trace log and the trace log is opened.

oOpenLibraries/retPathOmnisStartupFolder (2008-03-12 Doug K.)
Call ioPaths_PlatformFolders to get the 'Application' or 'Program Files' folder path.

oPaths_StudioWorks/$:ERRORSTOTRACELOG (2008-03-17 Doug K.)
Deprecated $:ErrorsToTraceLog methods. oPaths_ automatically tests the errhndlr tvar with $cando and sends to trace log if it can't.

oPaths_StudioWorks/$:PathApplicationsFolder (2008-03-12 Doug K.)
Redirect the call to the oPaths_PlatformFolder object class.

oPaths_StudioWorks/$:PathOmnisStartupFolder (2008-03-12 Doug K.)
Call ioPaths_PlatformFolders to get the 'Application' or 'Program Files' folder path.

oPaths_StudioWorks/$:PathOmnisStudioFolder (2008-03-12 Doug K.)
Redirect the call to the oPaths_PlatformFolder object class.

oPaths_StudioWorks/$:PathProgramFilesFolder (2008-03-12 Doug K.)
Redirect the call to the oPaths_PlatformFolder object class.

oPaths_StudioWorks/$:PathTempFilesFolder (2008-03-12 Doug K.)
Redirect the call to the oPaths_PlatformFolder object class.

oPaths_StudioWorks/$:PathUserDesktop (2008-03-12 Doug K.)
Redirect the call to the oPaths_PlatformFolder object class.

oPaths_StudioWorks/$:PathUserDocuments (2008-03-12 Doug K.)
Redirect the call to the oPaths_PlatformFolder object class.

oPaths_StudioWorks/$:PathUserHome (2008-03-12 Doug K.)
Redirect the call to the oPaths_PlatformFolder object class.

oPaths_StudioWorks/$:PathUserPreferencesFolder (2008-03-12 Doug K.)
Redirect the call to the oPaths_PlatformFolder object class.

oPaths_StudioWorks/$_logError (2008-03-17 Doug K.)
Call private method 'logError' which automatically tests errhndler and automatically sends error to trace log if errhndlr is not available.

oPrefs_abstract/$#About (2008-04-16 Doug K.)
Switch from using oLogon to oDBSession. Use oDBAdmin for creating tables so that switch/case is not required for different DBMSs.

oPrefs_abstract/$_init_preparePrefsTable (2008-04-16 Doug K.)
Use 'sPrefstable_listdef' and oDBAdmin to get the CREATE TABLE text instead of Switch/Case in this method.

oPrefs_abstract/$_init_preparePrefsTable (2008-04-16 Doug K.)
Check for exact case match table name for Omnis data file. Rename if the case does not match.

oPrefs_abstract/$_retSQLText_CreateTable (2008-04-16 Doug K.)
Added method which prepares the CREATE TABLE text using sPreftable_listdef and oDBAdmin.

oPrefs_abstract/$initialize (2008-04-16 Doug K.)
Check the session row, if the DAM is OMSQLDAM, then make sure the df1 file has been created.

oPrefs_abstract/$initialize (2008-04-18 Doug K.)
Expand the code which calculates the table name based on the schema class name. Go with a lower case table name.

oPrepareNewDatabase/$#About (2008-04-15 Doug K.)
Rewrote the object after overhauling the oDBSession, oDBAdmin, tBase, oPrimaryKeys, oRefs classes in StudioWorks.

oRebuildCachedLists/rebuildRefs (2008-04-02 Doug K.)
Use db1sess instead of logn task variable.

oSQLChildRecords/$DELETECHILDRECORDS (2008-04-07 Doug K.)
Deprecated the $deleteChildRecords method. Superceded by the $deleteCascadeDeleteChildRecords method.

oSQLChildRecords/$deleteCascadeDeleteChildRecords (2008-04-07 Doug K.)
Added a method which will very quickly delete any cascadedelete child records using a statement object and minimal SQL.

oSQLChildRecords/$doesRestrictedDeleteChildRecordExist (2008-04-07 Doug K.)
Added a method which will very quickly find the first cascadedelete child record using a statement object and minimal SQL.

oSQLLists/$:DEFAULTSESSIONROW.$assign (2008-03-31 Doug K.)
Deprecated the $:DefaultSessionRow.$assign method. Superceded by the $:DefaultDBSessionObjectRef.$assign method.

oSQLLists/$:DefaultDBSessionObjectRef (2008-03-27 Doug K.)
Added method for the new oDBSession classes structure.

oSQLLists/$:DefaultDBSessionObjectRef.$assign (2008-03-27 Doug K.)
Added method for the new oDBSession classes structure.

oSQLLists/$SETTABLESESSIONROW (2008-04-01 Doug K.)
Deprecated the $setTableSessionRow method.

oSQLLists/$initialize (2008-03-27 Doug K.)
Added 'sessionobjectref' column to the SQL lists master list. Set the $coltype to kObjectref. This column is used to store the object reference to the session object of any SQL classes that are to use a different session than the default session.

oSQLLists/$retDefinedList (2008-03-31 Doug K.)
Added code to use the oDBSession object reference. The method still supports previous versions using the session row.

oSQLLists/$setTableDBSessionObjectRef (2008-04-01 Doug K.)
Added a method to set the 'dbsessionobjectref' column to a specified 'oDBSession' object reference for a specified table.

oSQLLists/retDefinedListForCurrLine (2008-04-02 Doug K.)
Moved initialization of the defined list to the $retDefinedList method.

oSQLTextJoinTables/retFromTableJoinText (2008-04-24 Doug K. per Andy H.)
Include the table name prefix for all column names, not just non-unique column names. Left a hook for the option to change back in the future, by setting ibAlwaysIncludeTableNamePrefix.

oSecurity/$addDefaultSysAdminUser (2008-04-18 Doug K.)
Calculate Urs_pkey and usr_pkey to cover both cases.

oSecurity/$addDefaultSysAdminUser (2008-04-23 Doug K.)
Call $setDefault to make sure the 'usr' columns are set properly.

oSessionsManager/$#About (2008-04-10 Doug K.)
Removed the $openSession and $pingDatabase methods from this object. Those are better handled by oDBSession. Removed the $retOpenSessions method. With session pools session we can't 'see' the sessions anymore.

oSessionsManager/$:DefaultSessionRow (2008-04-09 Doug K.)
Added 'pingtimeoutseconds' column and default to 5 seconds. The 'pingdbserver' column is deprecated.

oStartupTaskDefaultMethods/$logoffDatabase (2008-04-14 Doug K.)
Removed code dealing with a separate 'Refs' session.

oStartupTaskDefaultMethods/autoSignIn (2008-04-19 Doug K.)
Switch to setting the oSQLLists $:DefaultDBSessionObjRef rather than the session row.

oStartupTaskVarsTool/$#About (2008-04-14 Doug K.)
Removed initialization of the oLogon object. Now using oDBSession object.

oStartupTaskVarsTool/$INITIALIZEERRORHANDLER (2008-04-14 Doug K.)
Deprecated the $initializeErrorHandler method.

oStartupTaskVarsTool/$INITIALIZE_LOGN (2008-03-25 Doug K.)
Moved all of the code which figured out the starting session row to a separate method, retStartupSessionRow. so that the code can be used by the new tvar 'db1sess'.

oStartupTaskVarsTool/$_initializeAppPrefs_localdatafile (2008-04-16 Doug K.)
Revised the method so that it passes an OMNISQLDAM sessionrow to oAppPrefs, rather than the path name.

oStartupTaskVarsTool/$_pingVar (2008-03-25 Doug K.)
Added $cando test to avoid notation errors. Removed the OK message as this object is non-visual.

oStartupTaskVarsTool/$constructTaskVars (2008-03-25 Doug K.)
Added 'db1sess' and 'db2sess' to the tvars string.

oStartupTaskVarsTool/$initializeBeforeSignIn (2008-03-25 Doug K.)
Added called to $initialize_db1sess, removed the call to $initialize_logn

oStartupTaskVarsTool/$initialize_db1sess (2008-03-25 Doug K.)
Added new method to initialize the new 'db1sess' task variable if it exists.

oStartupTaskVarsTool/$initialize_local_prefs (2008-03-24 Doug K.)
Check for the unicode version of Omnis Studio, if so, set the local prefs data file name to 'local_prefs_unicode.df1' The local prefs data file is in a common location which could be opened by both unicode or non-unicode versions of the app, so it is important to have separate data files for each or the non-unicode version will fail after the unicode version opens the df1 file.

oStartupTaskVarsTool/$initialize_local_prefs (2008-04-16 Doug K.)
Revised the method so that it passes an OMNISQLDAM sessionrow to oAppPrefs, rather than the path name.

oStartupTaskVarsTool/$initialize_lsts (2008-03-31 Doug K.)
Added setting the $:DBSessionObjectRef if the db1sess.$validref.

oStartupTaskVarsTool/$initialize_refs (2008-04-14 Doug K.)
Initialize the Refs object by passing in the 'db1sess' object rather than a session row.

oStartupTaskVarsTool/$saveTaskVarPropertiesOnSignOut (2008-03-31 Doug K.)
Check and use the 'db1sess' tvar rather than 'logn' if it exists.

oStartupTaskVarsTool/$saveTaskVarPropertiesOnSignOut (2008-04-16 Doug K.)
Set the session object ref rather than the session row in the oSQLLists object.

oStartupTaskVarsTool/$setTaskVarPropertiesAfterSignIn (2008-03-31 Doug K.)
Removed 'logn' based code, replaced with 'db1sess' based code. If 'db1sess' is a validref, then check $state with 'db1sess'.

oStartupTaskVarsTool/retStartupSessionRow (2008-03-24 Doug K.)
To avoid initialization error, check the 'damname' in the session row, if not set, default it to OMSQLDAM.

oStringTables/$#About (2008-04-29 Doug K.)
Overhauled oStringTables to use stringtable file name suffixes. e.g. stringtable_it.txt, stringtables_fr.txt Only the language columns specified by the string table file name suffix will be loaded, others will be ignored. Only exceptions for each additional language need to be included in the string table file. Overhauled oStringTables to save and load database string table lists separately for each language. Only exceptions for each additional language need to be included in the string table saved to the database. Added 'source' column to master list for each language. This tells where the language text came from. Examples of text sources: stringtable_de.txt, database, myAppMain.sMn_stb,

oStringTables/$:LanguagesList_Database (2008-04-30 Doug K.)
Added a property method which returns a list of the string tables languages stored in the database.

oStringTables/$:LanguagesList_TextFiles (2008-04-30 Doug K.)
Added a property method which returns a list of the string tables languages in text files in the startupitems folder.

oStringTables/retStringTablesListFromTextFile (2008-04-29 Doug K.)
Modify the method to remove 'other' language columns, and add a 'source_*' column.

oTableClassMethods_MYSQL/$setPrimaryKey (2008-04-14 Doug K.)
Overrode the $setPrimaryKey method. Check for manual transactions, if so temporarily open an automatic transactions session and pass a statement object from that session to the oPrimaryKey.$getNextPrimaryKey method.

oTableClassMethods_base/$_retSelectWhereSQLText (2008-04-25 Doug K.)
Added setting iExtraBindRow reference in the tBase table class if the extra bind row is used.

oTableClassMethods_base/$_retSelectWhereSQLText (2008-04-29 Josh L.)
Changed ExtraQueryText to ExtraSQL so the column numbers will be processed correctly.

oTableClassMethods_base/$dodeletesBatch (2008-04-07 Doug K.)
Reworked the method so that is only looks for one non-cascadedelete record, and if one is found, logs a check data error.

oTableClassMethods_base/$getActiveRecords (2008-04-30 Doug K.)
Added error checking/loging to $fetch.

oTableClassMethods_base/$getAllRecords (2008-04-30 Doug K.)
Added error checking/loging to $fetch.

oTableClassMethods_base/$getOperatorRecords (2008-04-30 Doug K.)
Added error checking/loging to $fetch.

oTableClassMethods_base/$getPrimaryKeyRecord (2008-04-30 Doug K.)
Added error checking/loging to $select and $fetch.

oTableClassMethods_base/$getWhere (2008-04-29 Doug K.)
Log SQL error if fetch error.

oTableClassMethods_base/$initialize (2008-04-23 Doug K.)
Use the cap() of the table name when looking classname suffix on the oCheckData_Tablename object.

oTableClassMethods_base/$insertEmptyRecord (2008-04-28 Doug K.)
Refactored the method in an attempt to make it stronger.

oTableClassMethods_base/$selectCustom (2008-04-29 Josh L.)
Added a parameter pExtraSQLRowOrString so that GROUP BY, HAVING, etc could be used. Modified the code to process and include it in the right place

oTableClassMethods_base/$selectWhere (2008-04-29 Doug K.)
Added log SQL error because the $sqlerror method has been overridden in tBase to allow $fetchBatch to intercept an error and attempt to retry the select fetch.

oTableClassMethods_base/$setDefaults (2008-04-24 Doug K.)
Added error check on the return value from the ref.$retNextCounterNum

oTableClassMethods_base/$updateRow (2008-04-24 Doug K.)
Bug fix. Change $insertnames to $updatenames

owcStringTablesSchemasEditor/$addNewLine (2008-04-29 Doug K.)
Added method to add a new line. Called by the context menu.

owcStringTablesSchemasEditor/saveColsListChanges (2008-04-29 Doug K.)
Set the colident value after adding a new row to the schema class.

tBase/$_setTableClassExtraBindRowRef (2008-04-25 Doug K.)
Added method for setting the iExtraBindRow reference in the tBase table class if the extra bind row is used.

tBase/$selectCustom (2008-04-29 Josh L.)
Extra SQL so GROUP BY, HAVING can be used

wDBAdmin/$#About (2008-04-11 Doug K.)
Reviewed and cleaned up code in all methods, especially error checking. Initialize and use ioDBAdmin rather than irDBAdmin and ioDBSession rather than ioLogon as applicable.

wDBAdminConstraints/$#About (2008-04-11 Doug K.)
Reviewed and cleaned up code in all methods, especially error checking. Initialize and use ioDBAdmin rather than irDBAdmin and ioDBSession rather than ioLogon as applicable.

wDBAdminDataMover/$#About (2008-04-11 Doug K.)
Reviewed and cleaned up code in all methods, especially error checking. Initialize and use ioDBAdmin rather than irDBAdmin.

wDBAdminDataViewer/$#About (2008-04-11 Doug K.)
Reviewed and cleaned up code in all methods, especially error checking. Initialize and use ioDBAdmin rather than irDBAdmin and ioDBSession rather than ioLogon as applicable.

wDBAdminDataViewer/setDisplay (2008-04-23 Doug K.)
Add exception for OMSQLDAM which doesn't return $rowcount from the statement object.

wDBAdminIndexes/$#About (2008-04-11 Doug K.)
Reviewed and cleaned up code in all methods, especially error checking. Initialize and use ioDBAdmin rather than irDBAdmin and ioDBSession rather than ioLogon as applicable.

wDBAdminInteractiveSQL/$#About (2008-04-11 Doug K.)
Reviewed and cleaned up code in all methods, especially error checking. Initialize and use ioDBAdmin rather than irDBAdmin and ioDBSession rather than ioLogon as applicable.

wDBAdminPrimaryKeys/$#About (2008-04-11 Doug K.)
Reviewed and cleaned up code in all methods, especially error checking. Initialize and use ioDBAdmin rather than irDBAdmin and ioDBSession rather than ioLogon as applicable.

wDBAdminSchemas/$#About (2008-04-11 Doug K.)
Reviewed and cleaned up code in all methods, especially error checking. Initialize and use ioDBAdmin rather than irDBAdmin and ioDBSession rather than ioLogon as applicable.

wDBAdminSyncDatabaseToSchemas/$#About (2008-04-11 Doug K.)
Reviewed and cleaned up code in all methods, especially error checking. Initialize and use ioDBAdmin rather than irDBAdmin and ioDBSession rather than ioLogon as applicable.

wDBAdminSyncUsers/$#About (2008-04-11 Doug K.)
Reviewed and cleaned up code in all methods, especially error checking. Initialize and use ioDBAdminUsers rather than irDBAdmin and ioDBSession rather than ioLogon as applicable.

wDBAdminTables/$#About (2008-04-11 Doug K.)
Reviewed and cleaned up code in all methods, especially error checking. Initialize and use ioDBAdmin rather than irDBAdmin and ioDBSession rather than ioLogon as applicable.

wDBAdmin_abstract/$#About (2008-04-11 Doug K.)
Remove $setDBAdminRef methods and irDBAdmin ivar. Subwindow switched to having their own instance of ioDBAdmin.

wSQLMetaDataColsEditor_abstract/$_fixNullValues (2008-04-29 Doug K.)
Added check for $linecount to prevent infinite loop.

wSQLQueryBuilder/$destruct (2008-04-11 Doug K per Matthias H.)
Changed Queries treelist container so that it can be resized. Added code to save the width to the class on $destruct

wSQLQueryBuilder/addSchemaCols (2008-03-18 Doug K.)
Set LineNum var to pLineNum so that drag and drop for schemas list ends up in the dropped location.

wSQLQueryBuilder/addSchemaCols (2008-03-24 Doug K. per Chuck M.)
Loop through the drop list from end to start so that columns are added in the right order.

wSecurityTimeoutSignIn/$construct (2008-03-24 Doug K.)
Use mod() function to test for developer version.

wSessionEdit/$#About (2008-04-10 Doug K.)
Complete overhaul of the session edit subwindow. Made it 'dumb'. Moved the intelligence to the parent window.

wSessionEdit/createTablesOwnerLogonFile (2008-04-19 Doug K.)
Added button and method to wSessionEdit to create a tablesowner logon file.

wSessionList/$#About (2008-04-10 Doug K.)
Overhauled the session lists window. Made it 'dumb'. Move the smarts to the parent.

wSessionPicker_abstract/$#About (2008-04-12 Doug K.)
Created superclass for the session picker series windows.

wSessionsManager/$#About - Sessions Manager (2008-04-10 Doug K.)
Total overhaul of the sessions manager windows. Removed the 'Open Sessions' tab. Session pool sessions are hidden, so there isn't much purpose in having this tab. Removed the 'Open Sessions' tab. Session pool sessions are hidden, so there isn't much purpose in having this tab. Changed the window behavior so that the user is always in edit mode and that changes are automatically saved. Users are no longer required to first press Edit, then Save, before they can Test a session. Changed the parent/subwin structure so that the sessions list is in the parent and the subwindows reference the parent list.

wToolbar/$#About (2008-04-10 Doug K.)
Added error checking and prompt to the $control method.

swDocs4

@00 User Documentation/@00 About (2008-03-18 Doug K.)
Added StudioWorks documentation target to end users of applications written using the StudioWorks framework.

@20 Converting Data/@11 Data Converter Demo (2008-04-28 Doug K.)
Added documentation on the new 'db2sess' myDataConverterDemo library.

@20 Converting Data/@15 Data Converter Instructions (2008-04-29 Doug K.)
Added instructions for setting up the data converter library.

@20 Converting Data/@21 Data Conversion Advice (2008-04-28 Doug K.)
Added data conversion advice documentation.

@20 Quick Start Tutorial/@07 Adding a Table (2008-03-24 Doug K per Matthias H.)
Removed the reference to the 'Collate-case-insensitive' checkbox. This has been removed from the meta-data editor.

@20 Quick Start Tutorial/@12 Adding a Child Table (2008-03-24 Doug K per Matthias H.)
Removed the reference to the 'Collate-case-insensitive' checkbox. This has been removed from the meta-data editor.

@31 Database Sessions/@00 About (2008-03-25 Doug K.)
Added documentation on the new oDBSession series of objects which replace the oLogon series objects.

@50 Field Handling/@00 About (2008-03-11 Doug K.)
Added documentation on the new field handling introduced 2008-03

@50 Lookups/@25 Intercepting Lookups (2008-04-29 Doug K.)
Added documentation for '$promptLookupRecordNotFound' method to intercept lookups.

@50 Lookups/@25 Intercepting Lookups (2008-04-29 Doug K.)
Added documentation for '$setMainListValues' method to intercept the field handler setting the main list values.

@61 Database Administration/@00 About (2008-04-17 Doug K.)
Added documentation on the DB Admin tools.

@61 Database Administration/@61 Interactive SQL (2008-04-16 Doug K.)
Added documentation for Interactive SQL window.

@72 Table Class Structure/@00 About (2008-04-02 Doug K.)
1 Added documentation on the oTableClassMethods_DBMSVENDOR series of object classes.

@85 Manual Transactions/@00 About (2008-03-24 Doug K per Chuck M.)
Modified sample code to set the transactionmode back to its original setting.

@85 Manual Transactions/@00 About (2008-04-02 Doug K.)
Updated the sample code to work directly with 'db1sess' instead of 'logn'.

Startup_Task/$#About (2008-04-16 Doug K.)
Removed the 'logn' tvar.

Startup_Task/$initialize (2008-04-29 Doug K.)
Renamed the swDocs4 startup_task $construct method to $initialize as it was causing startup trouble.

x-@00 DB Admin/@50 Interactive SQL (2008-04-16 Doug K.)
Added documentation for Interactive SQL window.

swGui4

Startup_Task/$#About (2008-04-16 Doug K.)
Added the 'db1sess' tvar and removed the 'logn' tvar.

mCommands/$construct (2008-03-24 Doug K.)
Use mod() function to test for developer version.

mCommands/$construct (2008-04-28 Doug K.)
Default the mCommands menu to disabled shortcut keys for developers.

mMainMenu/$construct (2008-03-24 Doug K.)
Use mod() function to test for developer version.

oConcretizer/$RUNTIMIZE (2008-03-24 Doug K.)
Get the field properties list from the oFieldHandlerPropertiesList object class of the new field handler classes.

oConcretizer/$addFieldsAndLabels (2008-03-24 Doug K.)
Use the new oFieldHandlerPropertiesList object to build the list.

oConcretizer/addWindowClass (2008-04-21 Doug K.)
Added 'Save class' command in an attempt to solve the problem with inconsistent runtimizing.

oConcretizer/createRuntimeWinClass (2008-04-21 Doug K.)
Added 'Save class' command in an attempt to solve the problem with inconsistent runtimizing.

oConcretizer/retDecoratorTypesList (2008-03-24 Doug K.)
Added method to work with the new oFieldHandlerProperitesList object class.

oConcretizer/retFieldHandlersFactoryRef (2008-03-24 Doug K.)
Added method to work with the new oFieldHandlerProperitesList object class.

oConcretizer/retFieldPropertiesList (2008-03-24 Doug K.)
Added method to work with the new oFieldHandlerProperitesList object class.

oConcretizer/setRuntimeFieldsAndFieldPropertiesList (2008-03-24 Doug K.)
Remove early exits. Get the field properties list from the oFieldHandlerPropertiesList object class of the new field handler classes.

oConcretizer/setRuntimeFieldsAndFieldPropertiesList (2008-03-24 Doug K.)
Use mod() function to test for developer version.

oFieldHandlerLookupTypeAhead/$control (2008-03-11 Doug K.)
Changed code from using On ev... to Switch pEventCode/Case ev.../Case ev.../End Switch. For easier formatting.

oFieldHandlerLookupTypeAhead/$control (2008-03-11 Doug K.)
If the user hits the return key in a lookup field with the lookup list open, discard the event and queue a tab + queue OK to cleaning finish the lookup and then do the default kReturn action.

oFieldHandlerLookupTypeAhead/selectfetchMasterListRecords (2008-04-29 Doug K.)
Tighten up error checking in the method. Add a prompt last error so that lookup errors won't go unnoticed.

oMenus/$installMainMenu (2008-03-24 Doug K.)
Use mod() function to test for developer version.

oReportsMenuObserver_abstract/$modifyReportProperties (2008-04-24 Doug K.)
Cleaned up error checking.

oWindows/$retWinTitle (2008-04-21 Doug K.)
Use the cap(BaseTable) for the stbid for the window instance title translation.

oWindows/checkRequiredProperties (2008-03-24 Doug K.)
Use mod() function to test for developer version. Removed early exits.

oWindows/setIconIDinRow (2008-04-24 Doug K.)
Added bLogErrors=kFalse to suppress errors which we don't care about.

wComplexGrid_abstract/$#About (2008-04-24 Doug K. per Josh L.)
Added wComplexGrid_abstract class. Copy the wComplexGrid_template to your application to use.

wComplexGrid_abstract/$_removeEmptyLines (2008-04-24 Josh L.)
Removed the body of this method because it could be dangerous to someone who doesn't know about it.

wComplexGrid_abstract/$_setMode (2008-04-21 Josh L.)
Changed from do inherited to the notation with the parameter

wComplexGrid_abstract/$_setNewLineDefaults (2008-04-24 Josh L.)
Added this method to set default on an Extend Event.

wComplexGrid_abstract/$new (2008-04-24 Josh L.)
Added the SetNewLineDefaults here so the defaults are set when a line is added.

wComplexGrid_template/$#About (2008-04-24 Doug K. per Josh L.)
Added wComplexGrid_template a subclass of wComplexGrid_abstract which you would copy to your application to use.

wComplexGrid_template/$event (2008-04-24 Josh L.)
Added the $_setNewLineDefaults method here to apply defaults when a line is added.

wEditList_abstract/$#About (2008-03-11 Doug K.)
Point the ifld ivar from oFieldHandler to the new oFieldHandlerController.

wEdit_abstract/$#About wEdit_abstract (2008-03-11 Doug K.)
Point the ifld ivar from oFieldHandler to the new oFieldHandlerController.

wHeadedList_autoconfig/$constructListObj (2008-03-15 Doug K. per Matthias H.)
Set ivar iText_yes for the treatasboolean column so that other languages can be used.

wHeadedList_autoconfig/buildListObjFromMetaData (2008-03-15 Doug K. per Matthias H.)
Use ivar iText_yes in the treatasboolean column rather than 'Yes', so that other languages can be used.

wList_abstract/$fetchRecords (2008-04-22 Doug K.)
Clean up FlagOK error handling. Get rid of promptonce last error.

wList_autoconfig/$find (2008-04-22 Doug K.)
Clean up FlagOK error handling.

wMainWindow/$eventClose (2008-03-24 Doug K.)
Use mod() function to test for developer version.

wMainWindow_NoShowHideNavList/$eventClose (2008-03-24 Doug K.)
Use mod() function to test for developer version.

wNavigationListEditor/$addWinInstIDs (2008-03-17 Doug K.)
Modify method to allow the user to add multiple wininstids to be added to the navigation list at once.

wNavigationListEditor/$addWinInstIDs_continue (2008-03-17 Doug K.)
Modify method to allow multiple wininstids to be added.

wPromptFindMultiCriteria_subwin/$#About (2008-03-11 Doug K.)
Deleted ivar ifld since it was not being used by this window.

wPromptModelessSubWin/$#About (2008-03-11 Doug K.)
Point the ifld ivar from oFieldHandler to the new oFieldHandlerController.

wPromptShell/$event (2008-04-10 Doug K.)
Make sure there is an OK button before setting the iButtonPressedNamed ivar.

wShell/$_flipSubWin (2008-03-24 Doug K per Andy H.)
Moved the prToWin.$eventShow to AFTER the prToWin.$visible kTrue to solve a problem with setting the scrollbars to redraw correctly.

wShell_Lookup/$showSubWin (2008-03-05 Doug K.)
Added $cando test before sending $:Mode message to the previous subwindow.

wSignIn/$construct (2008-03-24 Doug K.)
Use mod() function to test for runtime version.

wSignIn/$signIn (2008-03-24 Doug K per Matthias H.)
If the only session in the sessions list is the 'EditSessions' row, open the sessions manager window.

wSignIn/$signIn (2008-03-31 Doug K.)
Check for $validref of the 'db1sess' object. If it exists, nothing to do, otherwise set the $:DefaultSessionRow in oSQLLists.

wSignIn/_retUsersList (2008-04-23 Doug K.)
Changed from setting the default session row to setting the session object ref in 'lsts'.

wSignIn/insertDefaultSysAdminUser (2008-04-18 Doug K.)
Calculate Urs_pkey and usr_pkey to cover both cases.

wSignIn/loadSessionsList (2008-03-24 Doug K per Matthias H.)
Get language translation for 'EditSessions'. Added 'EditSessions' to sMn_stb_SessionsManager

wSignIn_20071124/insertDefaultSysAdminUser (2008-04-18 Doug K.)
Calculate Urs_pkey and usr_pkey to cover both cases.

wWindowInstancesListEditor/$event (2008-04-24 Doug K.)
Add a blank SQL class name line to the top of the list so that the user can clear the sqlclassname property.

wWindowInstancesListEditor/setEditFields (2008-04-24 Doug K.)
Added bLogError=kFalse to suppress annoying error messages.

swIcons4

No modifications

swRefs4

Startup_Task/$#About (2008-04-16 Doug K.)
Removed the 'logn' tvar. Added tvar 'db1sess'.

oMenusList/$addNavigationMenuLines (2008-03-12 Doug K.)
Commented out the code which was adding the RefsList and RefsLookupList navigation menu items. These window instances are to be added by the developer's SysAdmin module.

oRefs/$#About (2008-04-14 Doug K.)
Overhaul the oRefs object so that it uses oDBSession instead of oLogon and only temporarily opens uses and close a second session for inserts/updates if the specified oDBSession is set to manual transactions.

oRefs/$:DBSessionObjectRef (2008-04-02 Doug K.)
Added new method to return the ioRefsDBSessionObjectRef.

oRefs/$:DBSessionObjectRef.$assign (2008-04-14 Doug K.)
Added new method to set the ioRefsDBSessionObjectRef.

oRefs/$destruct (2008-04-02 Doug K.)
Added $destruct method with code to $deleteref ioRefsDBSessionObjectRef

oRefs/$initialize (2008-04-16 Doug K.)
Receive the DBSession object reference rather than the session row as the parameter. Copy to ioRefsDBSessObjRef.

oRefs/$retListOfDatabaseStringTableLanguages (2008-04-29 Doug K.)
Added method which returns a list of the languages of string tables stored in the database (refs table).

oRefs/$retLookupList (2008-04-02 Doug K.)
Speed the method by just fetching the specified 'lookup' records, not all records. (Some of the other records have large blobs)

oRefs/$retNextCounterNum (2008-04-14 Doug K.)
Check the main session object if manual transactions, then open up our own session and assign it to the Refs Row variable.

oRefs/$retStringTablesList (2008-04-02 Doug K.)
Use ioRefsDBSessionObjectRef instead of ioRefsLogonObj.

oRefs/$retStringTablesList (2008-04-29 Doug K.)
Added pLangaugeID parameter. A stringtable refs records is stored for each language with just the exceptions for that language. The 'RefsSubGroup' column is used to store the pLanguageID.

oRefs/$saveRefsRecord (2008-04-14 Doug K.)
Check the main session object if manual transactions, then open up our own session and assign it to the Refs Row variable.

oRefs/$saveRefsRecord (2008-04-24 Doug K.)
Removed the calls to $_setFixNulls. We should not be calling protected methods.

oRefs/$saveStringTablesList (2008-04-29 Doug K.)
Added pLangaugeID parameter. A stringtable refs records is stored for each language with just the exceptions for that language. The 'RefsSubGroup' column is used to store the pLanguageID.

oRefs/$setCounterNum (2008-04-17 Doug K.)
Added method to allow a sender to set the counter number.

oRefs/retMaxColValue (2008-04-02 Doug K.)
Use ioRefsDBSessionObjectRef rather than ioRefsLogonObj

swReports4

Startup_Task/$#About (2008-04-16 Doug K.)
Removed the 'logn' tvar. Added tvar 'db1sess'.

oReports/$editReportProperties (2008-04-24 Doug K.)
Removed early exits and error checking.

swWeb4

Startup_Task/$#About (2008-04-16 Doug K.)
Removed the 'logn' tvar. Added tvar 'db1sess'.

oHTMLTemplates/$:CSSLinks (2008-03-24 Doug K.)
Use mod() function to test for developer version.

oRemoteTaskMethods/$initializeAllTaskVars (2008-04-02 Doug K.)
Added initialize 'db1sess' to the task vars to change/set to object reference type variables

oRemoteTaskMethods/$initializePublicSearchTaskVars (2008-04-02 Doug K.)
Added initialize 'db1sess' to the task vars to change/set to object reference type variables

oWebMonitor/$initialize (2008-04-02 Doug K.)
Modified the code to use 'db1sess' instead of 'logn'.

oWebMonitor/$retWebStatsList (2008-04-02 Doug K.)
Use 'db1sess' instead of 'logn'

rtDispatcher/$#About (2008-04-02 Doug K.)
Added 'db1sess' tvar.

rtPublicSearch/$#About (2008-04-02 Doug K.)
Added 'db1sess' tvar.