Enhancements in MasterStudio 1.0.2

This release is supported on Omnis Studio 3.2.1 through 4.0. In addition to new improvements, this release implements items 8i, 8g, and 8o of the original MasterStudio Function Points list.
  1. Searching a pick list on primary key is much faster now; if a user enters a primary key in search mode, then other search fields are ignored.
  2. When you search a "local" pick list (which always contains all record because it does not contain a <BATCH/> tag), the percent-wildcard ("%") is now filtered out. MasterStudio will automatically try to find a matching record that starts with the characters typed into the search field. If no match is found, then MasterStudio will search any record containing the string.
  3. Performance of opening windows containing complex nested entities is improved.
  4. Opening new contexts (especially MD contexts) is less sensitive to the method stack limit in Omnis 3.x.
  5. If a user holds Shift and Control (Shift and Command on the Mac) while clicking on the "Cancel" button, then MasterStudio will no longer display a warning message before reverting all modifications.
  6. Complex grids with adjustable row height now remember the previously used row height and store/retrieve it in the local user preferences.
  7. The OmnisSQL login panel now re-tries to validate the data file path name after you click in it. This allows you to log onto a file server and click in the login panel to activate the "Logon" button that was first disabled.
  8. The standard database menu no longer requires a parameter pointing to the session it should use. It will automatically use MoContext.$application().$session if you omit the session reference.
  9. After entering new records and saving a sorted entity list, the list is now re-sorted automatically by the list manager.
  10. The library checksum used by the class broker is smarter: It now automatically rescans all base classes when you use them with a different application than the last time. You no longer need to manually change the superclass reference to the root context (which was still pointing to the previous main library) or remove the <MO_CHECK> tag.
  11. The class broker now automatically opens any tasks that have a <STARTUP/> tag in their description. If you have the MoDevelopmentClasses library installed, then the MasterStudio Component Store is automatically installed as an add-on tool as soon as you open the root context.
  12. The grid in the MS Component Store now contains a regular entry field next to the multi-line entry field.
  13. The multi-line entry field in the MS Component Store now has $effect kBorderCtrlEdit, just like the normal entry fields.
  14. The radio buttons in the MS Component Store now have the $nogray attribute set. This avoids a problem when redrawing disabled radio buttons.
  15. If you set the $tooltip attribute for a sort button managed by the fields manager, then this $tooltip will be used as the button text instead of the label from the schema <PROMPT> tag. This allows a foreign key sort button (which often points to a field that has "Name" or "Description" in its <PROMPT> tag) to have a label that is more specific than the prompt defined in the schema.
  16. New field styles MoMdEditText and MoMdEditTextDisabled were added to the #STYLES table. These field styles can be used to assign the appropriate font to a field whose other attributes (background color and pattern) are controlled by the developer or by notation.
  17. If you have a window field that uses a table method as its dataname (i.e., iMdListRef.$fieldName), Omnis Studio 4.0 will re-execute the $fieldName.$assign method if you open another window from the setter method. This will cause an infinite loop. This was fixed in the demo application by setting a global variable before opening the window, and checking that it is not set before opening it from the $assign method.
  18. This version of MasterStudio was tested with Omnis Studio 4.0 on Windows 2000 and Mac OS X 10.3. Some redraw issues were detected. See the known issues list for the latest information.

New Methods in MasterStudio 1.0.2

(See the Book Addenda for a listing of these new features per chapter of the Developer Manual)
  1. Entity Delegate/$currentRecordEdited: This template method is called right after the user starts editing a record, i.e. as soon as the first modification is made to a record. Parameter pkIsNewRecord contains kTrue if the record is a new record; kFalse if it is an existing record. Parameter pColumnName_opt contains the name of the column the user started editing (if the column is managed by the fields manager). You may use this parameter to avoid overwriting a column the user started typing into.
  2. Entity Delegate/$defaultRecord: This template method is called right after a new empty line is added to the entity list. While this method is being executed, the current line of iMdListRef is set to the new line. Do not count on this being the last line; this may not necessarily be the case in the future! Note that the list manager will call $mdDefaultRecord in the list (table class) before calling $defaultRecord for the entity delegate.
  3. Entity Delegate/$filterRecords: This template method is called right after records are fetched from the database. iMdListRef contains all newly fetched records. You may filter the list by removing unwanted records, update calculated values, etc. To accept the (remaining) records, return kTrue. Return kFalse (or remove all lines) to reject the new records.
  4. Entity Table/$mdDefaultRecord: This template method is called right after a new line is added to the entity list. While this method is called, the current line is set to the new line. Do not count on this being the last line; this may not necessarily be the case in the future!
  5. Entity Table/$mdCurrentRecordChanged: Override this new template method to adjust variables whenever the current record changes. This method is called BEFORE $currentRecordChanged in the entity delegate or any of the entity panes.
  6. Entity Table/$mdMayModifyColumn: Override this template method to influence whether a column may be modified. Single parameter: pColumnName. Return kFalse if the column may not be modified: The user will not be able to modify the column and it is reverted to its previous value. Note that this method is only called for single columns that are handled by the fields manager. If you modify a column yourself (i.e. hard-coded), it is your own responsibility to call this list method. You usually would do this by calling $setModified('COLUMN_NAME') of the record manager (see below).
  7. Entity Table/$mdDidModify: Override this template method to take action after a column value is modified. If parameter pColumnName_opt is empty, then an unspecified column has changed.
  8. List Manager/$previousRecord: This new attribute returns the previously current record, or an empty record if none exists. You could use this to copy values from the previous line as default values into a new line.
  9. List Manager/$managerParentList: This new attribute returns a reference to the list manager of the parent entity. (Use ...$managerParentList().$list to get a reference to the parent list itself).
  10. List Manager/$managerParentRecord: This new attribute returns a reference to the record manager of the parent entity.
  11. List Manager/$managerParentFields: This new attribute returns a reference to the fields manager of the parent entity.
  12. List Manager/$managerDetail: This new attribute returns a reference to the list manager of a named detail entity. Parameter pEntityId must be the entity id of the detail entity, as it was specified as the paneId in $initFrameset.
  13. List Manager/$managerReturnedList points to the object that requested data from the pick list. Usually, this is the list manager that requested the data.
  14. Record Manager/$setModified: This method now optionally accepts the name of the column that is to be modified. If the column or record may not be modified, this method returns kFalse. Otherwise, the record is marked "modified".
  15. Fields Manager/$redrawColumn: This new method allows you to automatically redraw all field instances for a column name. Obviously, this only works for fields that previously registered themselves with the fields manager.
  16. Fields Manager/$addModelDefinition can be used to add column definitions for custom columns that were added to a list.
  17. Fields Manager/$register...: These methods now accept a second parameter pkIsPreparedNY_opt. If you pass kTrue, then the field's visual styles will NOT be controlled by the fields manager. You can now give the field any visual style and still have its events handled by the fields manager. (Previously, you had to implement your own $event handler for fields that were not managed by the fields manager).
  18. Functions Manager/$conciseText: This function returns a concise version of a text variable you pass into it, suitable for display in a tooltip. Carriage returns are replaced by bullets; if the text is too long, it is automatically postfixed by an ellipsis.
  19. Component controller/$componentDidConstruct: This template method is called right before a component becomes visible after it is opened or after the component is reloaded. Note that the component's $construct method may already have finished if the subcomponent is instantiated simultaneously to its parent component. In this case, $componentDidConstruct is called right before the outer parent component's $construct method finishes executing. $componentDidConstruct is especially useful in cases where complex code in $componentWillConstruct exceeds the Omnis method stack. Just like $componentWillConstruct, $componentDidConstruct receives a reference to the newly constructed component.
  20. Pane Selector Controller/$initializePane: This new method allows a pane controller that is nested under a pane selector to be initialized BEFORE it is activated. Normally, a pane selector will call $finishInitialization only for the subcontroller that matches the currently visible pane (tab or icon). This speeds up initialization of a complex window: Subcontrollers for invisible tabs do not need to finish initializing. Method $initializePane accepts the same parameters as $activatePane: pPaneIndex_opt and pPaneId_opt. See chapter 4.7.4 of the Developer Manual.
  21. Pane Selector Controller/$redrawSelectors can be used to force redraw of the individual tabs or icons in a pane selector. You should call this method after the text or tooltip of one of the sub-panes changes.

Bugfixes in MasterStudio 1.0.2
  1. A bug was fixed in $openSubfolder of the class broker, where it would not work if the MasterObjects folder (or any other subfolder) was only present in the folder of the Omnis executable and not in the local library folder.
  2. A bug was fixed, where no snapshot (backup in memory) was made for a detail record before it was edited.
  3. A bug was fixed in situations where the same schema class was referenced in a double join.
  4. The page counter under default grid reports now correctly prints the current page followed by a slash and the number of pages.
  5. A bug was fixed where a pick list didn't automatically return a value if only one record was found.


Back to General Release Notes


Copyright © 2011 Master Object Consultancy Terms of Use