Keep up to date with the Symphony Framework by subscribing to the mailing list.

Check out the new Symphony Framework Academy! It’s the home for information and tutorials to help you get the most from the Symphony Framework! Click on the Academy option below.

Symphony Framework Release Notes

Symphony Framework Version

General note: If you install Symphony Framework you must re-generate all your code-generated source files, resource files, controls and windows.

The Symphony CRUD templates and base classes have been significantly enhanced. There is now the facility to browse the data in the file, using the tool bar and menu entries. If the current record has been modified then these changes will be saved to the file before the navigation occurs.

If you select a record from the lookup list, and then subsequently modify or delete the record, the selection list will be re-loaded so that its contents match those of the physical data file.

The DataObjectBase class has been given a new GlobalRFA property that is automatically set in the FileIO class. It stores the Global RFA of the Data Object and is utilised by the FileIO class to re-read and lock a record prior to updates and deletions. This allows your applications to implement optimistic locking of records. The class also implements a new RaiseNonRPSPropertyChanged that does not set the IsDataModified flag.

The base FileIO class has been enhanced to provide methods UpdateRecordUsingGRFA and DeleteRecordUsingGRFA. These two methods utilise the new GlobalRFA property in the DataObjectBase class. You must re-generate your data object for this capability to be implemented.

Added a new class called FileIOErrorToString which converts the current FileIO exception to the correct error description.

The BaseViewModel class now correctly raises the before and after state navigation event when you execute the RestoreBaseState() method.

The CRUDViewModel base class has a new property DataFileUpdated that is set if the user modifies, deletes or creates a record within the data source. Processing of the standard dialog has been corrected for the delete processing, if you subsequently get an error trying to delete the record. A new NavigateDataCommand has been added to data-bind to the navigate buttons. This command allows you to navigate forward and backwards through the data source. If changes are made to the current record, the navigation buttons are still available and the data will be saved if a navigate event occurs. The buttons are disabled if the data object is invalid. The code to provide data access has been updated to use the new features in the FileIO class, which means that the optimistic record locking is now used. Please note: The next version of the CRUDViewModel will have all this logic removed and will, instead, raise events when data source access is required. It is not the correct place to have the “data logic” in the ViewModel.

The MaintenaceViewModel has been modified to not set the PriamryData.SetInvalidState() method. This may break code using this view model.

Template updates:

• The Symphony_CRUDMainWindow.tpl now has menu entries and toolbar buttons for the four data navigation options, First, Previous, Next and Last.
• Symphony_CRUDViewModel.tpl was changed to prevent the data being initialised incorrectly. The logic was added to ensure that the lookup list is refreshed if changes to the data source were made.
• Symphony_Data.tpl now does not use the standard RaisePropertyChanged method for non-repository fields. The base DataObjectBase class implements a new RaiseNonRPSPropertyChanged method that does not set the data object IsModified property to true.
• Symphony_Style.tpl now explicitly sets every data binding property UpdateSourceTrigger to PropertyChanged. This may have an impact on performance but is required because of a “feature” in WPF data binding. Alpha fields that have drill methods assigned now include an additional style called {field_name}_noDrill_style which provides the same data-bound control but with a standard TextBox and not s SearchTectBox.