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 2.0.0.5.


Symphony Framework now targets Synergy/DE version 10! Due to a number of compiler and runtime fixes the Symphony Framework now performs much better under Synergy/DE version 10. You will notice a considerable improvement in compiler performance and Visual Studio intellisense availability. You can download the latest beta version of Synergy/DE version 10 from www.synergyde.com. When installing the Symphony Framework under Synergy/DE version 10 use the SymphonyFramework_v2_0_0_5(v10.0.0.3e) installer.

Symphony Framework is fully supported under Synergy/DE version 9.5.3b. Please ensure that you contact your support representative at Synergex to confirm you have the latest hotfix files. You must install the latest hotfix files for Synergy/DE and Synergy DBL Integration for Visual Studio. If you are on an x64 machine you must install Synergy/DE 32 and 64 bit hotfix files as well as the Synergy DBL Integration for Visual Studio. You must manually un-install the Synergy Language Visual Studio Integration product before installing the latest hotfix release.

New tokens and capabilities within the Symphony Framework require that you update to version 4.2.1 of the CodeGen Code Generations utility. Code generation will fail with prior versions of CodeGen.

General note: If you install Symphony Framework 2.0.0.5 you *must* re-generate all your code-generated source files, resource files, controls and windows. If you are using the CRUD templates they now require a new folder called AppLogic. Ensure that you create this folder through Visual Studio.

The Symphony.Adapter assembly is now written in Synergy.NET. It was originally written in C# because of a limitation with our compiler. The current release of Synergy.NET now allows us to write the entire Symphony Framework in synergy.NET!

There is now a new script, called GenerateCRUD.bat, that is now distributed with the Symphony Framework installer. This script accepts the repository structure name, the project namespace and the assembly name. If you add the “%SYMPHONYROOT%script” to your PATH setting you can execute the GenerateCRUD script file. For example:

GenerateCRUD myStructure ProjectName.BaseNameSpace ProjectName

The script creates all the required code for the CRUD application and requires that you create the following directories through Visual Studio:

AppLogic Contains the application logic classes.
Content Defines the collection classes for data-binding to combo/selection compatible controls.
DataIO Hold the base file IO class files.
Model Defines the Synergy Respoistory based Data Object classes
Resources Contains the Synergy Repository based user interface control styles
View Holds the code generated user interface view class files
ViewModel Defines the application View Model classes


The FileIO class has been enhanced to allow you to define a protected virtual method called checkInRange(). This is called after a successful file access call to allow the extending class to provide further validation of the record. This is useful in the Symphony_FileIO.tpl template that now validates tag fields. All access methods have been defined as virtual.

A new BasicFileAccess class has been added to the Symphony.Conductor.DataIO namespace. This class provide the basic requirements for the CRUD programs to utilise the FileIO object to access data within a file.

The Symphony.Conductor.Model.DataObjectBase class now exposes a delegate/evet to signal that the SynergyRecord has been modified.

The Symphony CRUD templates and base classes have been significantly enhanced. The base CRUD View Model now exposes the following properties:

IsRemoveCommandAvailable. The default is “true”. Setting this to “false” will disable the ability to remove entities from the data source.
IsAddCommandAvailable. The default is “true”. Setting this to “false” will disable the ability to add entities to the data source.
IsModifyCommandAvailable. The default is “true”. Setting this to “false” will disable the ability to modify entities within the data source.
CurrentProgramMode. Exposes the current ProgramMode enumeration detailing what “state” the program is currently in.


These new properties are now used in the view to correctly configure the buttons available to the users. The save/create buttons will not be visible if modify/add modes are not available.

The CRUD template has also been enhanced such that you can now register event handlers to the following events:

IOLocateFirstItem. Which should return the first item of your collection/database/file.
IOLocateNextItem. Which should return the next available item.
IOLocatePreviousItem. Should return the previous available item.
IOLocateLastItem. Should return the last item in your collection/database/file.
IOLocateItem. Should use the value in the passed-in data object to locate the requested item.
IOSaveItem. Should update your data source.
IOCreateItem. Should add the item to your data source.
IODeleteItem. Should remove the item from your data source.


The Symphony framework provides a new base class called BasicFileAccess. This base class provides all the event handler for the above events and will utilise a Symphony Framework FileIO object to access the physical data file. There is a template called Symphony_CRUDAppLogic.tpl that will provide the basic data access logic for a structure. In the next release of the Symphony Framework there will be a new Symphony_CRUDAppLogicRemote.tpl template that will utilise the SymphonyBridge library to provide remote data access through a Windows Communication Foundation service.

The Symphony_CRUDViewMode.tpl now utilises the BasicFileAccess class to access the data.

The Symphony_Style.tpl template now includes “read-only” fields for field styling. If you define a field as Read-Only in the repository, the Symphony_DataViewWithGrid template will now use the read-only style for these fields.

The Symphony_Collection.tpl template now enables you to specify alternate values against selection list items. If the description of the selection list item contains < xxx > then the xxx is used as the selection item value and xxx is stripped from the description.

The Symphony_CollectionFromFile.tpl template creates a collection that is built from the contents of a data file. The template requires the Visual Studio project contains structure related < Structure >FileIO and < Structure >Data classes. The template accepts the SELECTIONDESCRIPTION and SELECTIONFIELD values as user-defined parameters. These fields define the visual display field and the backing value field stored in the selection collection.

The following templates have been changed to require the user-defined token ASSEMPLYNAME. This change was required to allow more flexibility when creating source code. This change may break your existing code generation scripts. The Symphony Development team apologise for the inconvenience.

Symphony_Content.tpl
Symphony_DataView.tpl
Symphony_KeyView.tpl
Symphony_ListView.tpl


The Symphony_CriteriaView.tpl template now excludes fields that are defines as “exclude from language” in the repository. The template now includes a field that allows the user to limit the number of results displayed in the list.

The Symphony_CriteriaView_WithGrid.tpl template now excludes fields that are defines as “exclude from language” in the repository. The template now includes a field that allows the user to limit the number of results displayed in the list.

The Symphony_CRUDMainWindow.tpl template file has been modified to use a new user-token on the command line called VIEWNAMESPACE that allows you to fully define the namespace containing your view classes. The XAML has been modified such that the menu and toolbar are now disabled (and greyed) when a modal window is displayed. The style of the data complete button has been enhanced. If will be hidden if the user cannot modify (save) the selected record. It will also change its appearance depending on the current program mode to make the text more meaningful. The code behind file Symphony_CRUDMainWindow_code.tpl has been modified to include exception handling which reports any errors to the Symphony log viewer.

The Symphony_CRUDViewModel.tpl template has been enhanced and now uses the Application Logic class. It registers event handlers for the base class events that fire when record processing occurs. It also sets the new CurrentProgramMode property as the user navigates the various program options.

The Symphony_DataDefineRPS.tpl and Symphony_Data.tpl template files have been enhanced. The base DataObjectBase class now exposes a SynergyRecordChanged event and the template now utilises this. The template also honours the repository field "exclude by language" and excludes fields flagged as such. The template also now allows the exclusion of fields being exposed as properties. Defining the string < SYMPHONY_ARRAY_FIELD > in the long description for a field will prevent the field from being exposed as a property. The synergy backing field will still be accessible and part of the SynergyRecord string. The < SYMPHONY_ARRAY_FIELD > setting is designed to allow the exclusion of large arrays as these significantly increase the size of the class. In the next release of the Symphony Framework we will be providing an Array Manager class that will help with the processing of large arrays defined within a repository structure.

The Symphony_FileIO.tpl template has been enhanced to handle repository structures that contain tag fields. The tag field is now checked so the right/specific records are allowed.

The Symphony_Select.tpl template has been enhanced to handle repository structures that contain tag fields. The tag field is now checked so the right/specific records are allowed.

The Symphony_Style.tpl template has been modified to only include fields that have not been defined as < SYMPHONY_ARRAY_FIELD >. This setting can be defined in the long description for a field. To correctly define the length of a selection/combo field you can now set the < SYMPHONY_SELWND_LENGTH > token in the field long description. Additional read-only characteristics have been added for a number of field/control types.