Enhancements in MasterStudio 1.1.0

MasterStudio 1.1.0 is the last planned major release of MasterStudio that supports Omnis Studio 4.1 through Omnis Studio 4.3.1. Future 1.1.x versions will contain bugfixes only. From now on, new features will only be added to MasterStudio 2.x, which will support Omnis Studio 4.3.1 and 5.0.

MasterStudio 1.1.x running on Omnis Studio versions below 4.3.1 will be supported until July 1, 2010 and will remain supported on Omnis Studio 4.3.1 until July 1, 2011.

Licensed MasterStudio developers can download the stable release here.

New since alpha release 20:

MasterStudio 1.1.0 incorporates all enhancements from MasterStudio 2.0.0 alpha release 20, plus:

  • Fully updated 299-page Developer Manual, covers MasterStudio 1.1 and the upcoming 2.0 release.
  • New context variable MoF serves as convenience shortcut for MoManagerFunctions.
  • New context variable MoNC serves as convenience shortcut for the current context's notification center.

New in MasterStudio 1.1.0 (incorporated from alpha release 20):

  1. When entering a Master-Detail window for the first time, or when entering Find mode, the cursor is now placed into the first enterable field of the entity, even if the first enterable field is in a second or third pane in the entity frameset.
  2. In Find mode, users can now search for "Larger than" and "Smaller than" values by typing > or <, or by selecting the appropriate option from the context menu (right mouse click).
  3. It is now possible to make the "Append" search command into the default command in Find mode. Entity delegate attribute $showAppend now accepts three values:
    • MdConstants.kMdAppendOff: No Append command is available in Find mode.
    • MdConstants.kMdAppendAvailable: The Append command is available in Find mode (requires Shift-Return to activate).
    • MdConstants.kMdAppendDefault: Append is the default command in Find mode.
  4. The new <COPY> element of a schema column indicates that corresponding fields in Master-Detail windows can be copied to other records by dragging their contents onto selected records in an entity grid. After adding <COPY> for a column, users can copy it between records.
  5. Frameset controllers are no longer initialized using a notification, speeding up opening complex windows.
  6. Conditional notifications are now always executed last, unless their condition is raised. So their behavior is now defined as "wait as long as possible, unless this condition occurs".
  7. Passing a fourth optional parameter pkCoalesceNY_opt into list manager method $changeCurrentRecord significantly speeds up loops in which detail records do not need to be fetched at each iteration.
  8. Pane delegates can now stop panes from closing by implementing delegate method $mayClosePane.
  9. Framesets now support setting their desired height and desired with through delegate attributes $desiredHeight and $desiredWidth.
  10. Framesets now allow setting their expanded state using method $setExpanded. The expanded state can be read using getter $isExpanded.
  11. Single-pane framesets no longer have a border when opened inside of a panel.
  12. The dialog box controller will now properly call the $close() method for nested subcontrollers after a dialog (opened using $message(...)) is dismissed by the user.
  13. Improved $classRef in the root context to work around a problem where the class name parameter was not passed to the class broker in the Omnis Studio 4 debugger.
  14. In Omnis Studio developer versions, it is now possible to bypass the automatic updating of cross-library class references by the class broker (which can take a long time on the Mac since Omnis Studio version 4.2). To skip the updating process, hold the mouse over the working message that appears during the update function.

    Note that this process is only necessary if there are cross-library class references that changed since the last launch. If you did not add classes to a new library and if you did not move classes across libraries, you can safely skip the updating process.
  15. In Omnis Studio 4.2 and higher, there was is an issue checking for the developer version of Omnis using the bitand(sys(2),1) check. Therefore, a workaround function was added to the class broker. To check for any runtime version (i.e., versions of Omnis where the developer bit is off), use MoContext.$classBroker().$isRuntime
  16. MasterStudio libraries now use Omnis 4 class folders to logically group classes in each library.
  17. The radio buttons in the MS Component Store now have the $nogray attribute set to kFalse. It was set to kTrue in version 1.0.2 to avoid a problem when redrawing disabled radio buttons, but this problem no longer seems to exist in Omnis Studio 4.1 and higher.
  18. When printing a standard grid report, the user is now asked whether he or she wants to print the entire list, or only the selected records.
  19. In Find mode, when searching for joined values, the joined table is no longer included in the where clause if the foreign key was selected by the user by making a selection from the pick list. This significantly speeds up such queries.
  20. When sorting records on the Oracle database, the list manager now forces Oracle to use the same ordering as Omnis by adding NULLS FIRST to the ORDER BY clause.
  21. When selecting items from a pick list containing joined columns, these joined columns are now properly copied/returned into the entity list, if they use the same alias in $addJoinColumns. It is no longer necessary to manually copy these "sub joins" using $shouldAcceptListForCurrentRecord. Note that MasterStudio only supports automatic copying of two levels of joins from pick lists: A pick list may contain joined columns from another table, and both the values from the pick list and any joined columns from that subjoin will be copied into the master.
  22. In Find mode, joined fields now allow entry of any search value without opening the corresponding pick list if no exact match is found.
  23. The list manager provides a new getter method $searchConditionsCount which returns the number of search criteria applied to the current select.
  24. The entity table superclass provides a new delegate method $mdDidModifyFind that is called whenever a column is modified in Find mode.
  25. If no records are found in Find mode, search values are no longer cleared as long as the user stays in Find mode.
  26. By adding a <REFETCH/> element to the primary key of a Master-Detail schema, you can tell MasterStudio to automatically re-fetch a record from the database immediately after it was inserted or updated.
  27. The MODE= attribute in the <BATCH> element of the primary key now supports second and third search modes (values 2 or MdConstants.kMdSearchModeNew and 3 or MdConstants.kMdSearchModeView + MdConstants.kMdSearchModeNew). When activated, this causes a pick list to only build its list if any search criteria were present. Otherwise, the window opens as an empty list, rather than a static list containing all values.
  28. The new optional FIXED="1" attribute in the <BATCH> element of the primary key is used to indicate that a list is fixed, i.e. that the user cannot activate Find mode. You can also force this behavior in the entity delegate, by returning kTrue from its $searchIsFixed attribute.
  29. If a dynamic pick list doesn't find any values, then it is opened in Find mode with cleared search values.
  30. The Master-Detail class factory now has a dedicated accessor for $nameOfMdWindowContext allowing global replacement of the Master-Detail window context.
  31. When switching between Find mode and View/Edit mode, inactive (currently invisible) subwindows are no longer reloaded. This significantly changes the speed of switching between the modes in complex windows.
  32. Entity tables can now use $mdShouldCommit to implement their own database commit method. If the table already performed the session commit, set parameter pfdDidCommit to kTrue. The MasterStudio list manager will not perform the commit again, but will properly handle the list changes as if the commit was handled by MasterStudio.
  33. In dialog panels with nested panes, the focus is now placed into the first field of the pane, rather than on the OK button at the bottom of the dialog.
  34. When clearing one or more records from the list using the "Clear/Erase" button, the user is now prompted to save any changes in those records, before clearing is allowed.
  35. Improved performance of database actions in applications where users have many MasterStudio windows open at the same time.
  36. Platform Manager Enhancements
    • New method MoManagerPlatform.$platformName will return the name of the current platform (e.g. "Mac OS X Leopard" or "Windows Vista").
    • New method MoManagerPlatform.$isVista will return kTrue in Windows Vista. Note: This function can safely be called from Omnis Studio 4.1 or 4.2, unlike the Omnis built-in isvista() function.
    • New method MoManagerPlatform.$isLeopard will return kTrue on Mac OS 10.5 or higher. Note: This function can safely be called from Omnis Studio 4.1 or 4.2, unlike the Omnis built-in isleopard() function.
    • MasterStudio will check for Omnis Studio version 4.1 or higher. If an older version is used, a No/Yes message will appear.
    • On Windows Vista and Mac OS Leopard, MasterStudio will test for minimum version 4.3. If an older version is used, a No/Yes message will appear.
  37. Omnis 4.3 Enhancements
    • In Omnis Studio 4.3 and higher, MasterStudio windows and subwindows redraw significantly faster (by taking advantage of the new $nofresh option in various locations -- no further application code changes are required).

Bugfixes in MasterStudio 1.1.0
  1. When clicking on a Hyperlink button for a foreign field, the pick list now only shows records that match the value in the foreign field.
  2. When auto-tabbing into the next (or previous) entity record after tabbing out of a foreign field, the foreign field is now properly copied into the current record, rather than first selecting the next or previous record.
  3. If a column value is #NULL and the user tabs over the corresponding field, this is no longer seen as a record modification.
  4. When tabbing between fields that implemented $mdDidModify in the table class, sometimes the cursor remained in the current field.
  5. Tabbed pane selectors (MoWindowPaneSelectorTabs) now uses a proper height on Mac OS X Leopard.
  6. When mixing PL/SQL and other prepared statements using the same MasterStudio database statement object, the statement object will no longer incorrectly re-execute the previous SQL statement.
  7. When re-fetching more than one record using "Refetch" in the context menu, MasterStudio would sometimes skip selected records.
  8. When searching by subdetail records in a master-detail-detail window, the list manager now produces correct SQL. (fixed improper use of iSchemaForeignKeyName instead of iSchemaServerTableName)
  9. When searching by detail values, the list manager sometimes failed to add a closing bracket.
  10. The list manager no longer deselect all records when Control-clicking or Shift-clicking on the currently selected record in a grid.
  11. The grid manager no longer changes the current grid line when scrolling through a list in which some columns are fetched when they come into view.
  12. The cursor is now put into the first field of a grid after entering "Enterable" mode.
  13. Worked around an Omnis Studio bug, where a window containing a button with mode kBMOk would no longer react to Enter/Return keypresses if it contained a tabbed pane. If other events trigger the same Omnis Studio problem, you can send the following notification to trigger the work-around:

    MoContext.$postNotification( MoConstants.kMoNotificationRevealTaskObjects, MoContext.$objectPath, , ckPostWhenIdle, ckCoalescingOnName)
  14. On Windows Vista, the demo application reveals the main menu bar by calling:
    Calculate $root.$prefs.$alwaysshowmainmenu as kTrue
  15. Fixed an issue in dialogs and messages that would open them with a height that is bigger than the screen. This occurred for messages that appeared while Omnis was minimized.
  16. Fixed two issues in $textForError in the application context and in the table superclass.
  17. Fixed $xmlFromTag and $xmlTagPosition in the functions manager to properly handle XML elements that start with the same name (e.g. TAG and TAGS).
  18. After removing a master record from the list (by clicking the Erase button), the framework sometimes did not display the detail lines corresponding to the newly selected master record, but instead still displayed the "old" details.
MasterStudio 1.1.0 Update Instructions

This version requires the following steps:

  1. MasterStudio 1.1.0 requires Omnis Studio 4.1-4.3.1 (non-Unicode). The FrontBase DAM is no longer supported by Master Object AB.
  2. Install main library classes:
    Copy the latest versions of MoContextRoot and MoClassBroker into your main library.
  3. Replace framework libraries:
    Replace the libraries in your old MasterObjects folder by the new ones.
  4. Copy the new version of the #STYLES system table from library MoBaseClasses into your own libraries.
  5. Method $addSubcontroller no longer works with prototype objects. You must therefore search your own libraries for occurrances of $addSubcontroller and ensure that you pass in the name of the controller class, not an object instance. Note that previous versions of MasterStudio used prototypes for command controllers and dialog box controllers. These no longer exist. Accessors MoClassFactory. $prototypeCommandController and MoClassFactory. $prototypeControllerPanelDialogBox were thus removed.
  6. Entity delegate method $sqlAndConditionFromRow can now receive a new search criterion, MdConstants.kMdFindEmptyString. This search criterion indicates that the user wants to search for empty or null values (or zero numbers). You may want to verify that your $sqlAndConditionFromRow implementations handle this properly.
  7. Note that method $build of the list manager was modified: it is now responsible for adding the empty line at the end of the list, rather than relying on other methods to add the empty line. This will likely affect your own methods that call $build. Although it is unlikely that you call $build directly, we recommend that you search for .$build in your own libraries. This also applies if you use a subclass of the list manager.
  8. Note that, in Omnis Studio 4.3 and higher, many events will temporarily disable screen redraws until the entire event is finished. For that reason, you may want to re-enable redraws in any event handlers that must redraw the screen while the user holds the mouse, or while executing a loop. The easiest way to do this, is by inserting the following line before starting the loop or event handler:

    Do MoManagerWindows.$refreshAll

    For the current window, you can use MoContext.$refreshWindow.
  9. Because Spotlight in Mac OS X "Leopard" used the Command-Shift-F keyboard shortcut, the development menu shortcut for "Find Mode" was changed into Command-Option-Shift-F (does not apply to Windows).
  10. New in alpha release 16:
    Please note the following behavioral improvement that could affect existing code: Auto-tabbing between entity records now uses evTab, evShiftTab rather than trapping the tab keypress. This means that key events are always handled for the current record, before MasterStudio auto-tabs to the next or previous record. Note that auto-tabbing between panes in a pane selector (between "tabbed panes") is still done by checking the tab keypress.
  11. New in MasterStudio 1.1.0:
    New context variable MoF serves as convenience shortcut for MoManagerFunctions. After upgrading to MasterStudio 1.1.0, you can replace MoManagerFunctions. by MoF. throughout your own libraries. (be sure to include the trailing period when performing the replace operation)
  12. New in MasterStudio 1.1.0:
    New context variable MoNC serves as convenience shortcut for the current context's notification center. After upgrading to MasterStudio 1.1.0, you can replace MoContext.$notificationCenter(). by MoNC. throughout your own libraries. (be sure to include the trailing period when performing the replace operation)
Back to General Release Notes

Copyright © 2014 Master Object AB Terms of Use