CodeGen Release Notes

 

V5.2.6 - 29th January 2018

CodeGen Release Notes

We added a new structure expression token <IF STRUCTURE_MAPPED> that allows you to generate conditional code for mapped structures.

We corrected an issue that was causing the field loop expression tokens <IF DATE_YYYYMMDD> and <IF_DATE_YYMMDD> to fail to evaluate as true for nullable date fields.

This version of CodeGen was built with Synergy/DE 10.3.3d and requires a minimum Synergy version of 10.1.1 to operate.

Symphony Framework Components

There were no Symphony Orchestrator changes in this release.

There were no Symphony Framework CodeGen Extensions changes in this release.


V5.2.5 - 16th January 2018

CodeGen Release Notes

We added four new structure expression tokens <IF STRUCTURE_ASCII>, <IF STRUCTURE_ISAM>, <IF STRUCTURE_RELATIVE> and <IF STRUCTURE_USER_DEFINED>. These expression tokens can make it significantly easier to create template files that can create appropriate output based on the type of data file that is associated with the structure being processed.

This version of CodeGen was built with Synergy/DE 10.3.3d and requires a minimum Synergy version of 10.1.1 to operate.

Symphony Framework Components

There were no Symphony Orchestrator changes in this release.

There were no Symphony Framework CodeGen Extensions changes in this release.


V5.2.4 - 12th January 2018

CodeGen Release Notes

We fixed a problem that was occurring when the <FIELD_MAXVALUE> replacement token was used in conjunction with decimal or integer fields that use a UI Toolkit Window-script based selection window, and in conjunction with the -ws command line option. The token would previously insert an incorrect value that was equal to the enumerated base value minus the enumerated step value, but without regard to the number of selections present in the window. This behavior has been corrected.

We Fixed a problem that was preventing UI Toolkit window script files from being parsed correctly.

This version of CodeGen was built with Synergy/DE 10.3.3d and requires a minimum Synergy version of 10.1.1 to operate.

Symphony Framework Components

There were no Symphony Orchestrator changes in this release.

There were no Symphony Framework CodeGen Extensions changes in this release.


V5.2.3 - 1st December 2017

CodeGen Release Notes

We added a new experimental utility to the distribution. The Code Converter utility can be used to automate bulk searches within and edits to an applications code. This utility is in a usable form but is still a work in progress and is likely to undergo substantial changes as it evolves.

We added two new utility routines (IsDate.dbl and IsTime.dbl) that are referenced by some of the supplied sample template files.

We corrected a regression that was introduced in the previous release which caused the field loop expansion token<FIELD_SQL_ALTNAME> not to default to using the actual field name if no alternate name was present.

We performed an extensive code review and cleanup, updating the code in several areas to take advantage of new features available in the Synergy compiler, and also improving efficiency.

We fixed an issue in the CreateFile utility that would result in an unhanded exception in the event that invalid key information was passed to XCALL ISAMC.

We fixed an issue that was causing the CreateFile utility -r (replace file) option to fail, an existing file would not be replaced even if the -r option was specified.

We made some minor code changes to allow CodeGen to be built in a .NET Core environment and we hope to be able to leverage .NET Core to once again support the use of CodeGen on non-Windows systems (starting with Linux) in the near future.

This version of CodeGen was built with Synergy/DE 10.3.3d and requires a minimum Synergy version of 10.1.1 to operate.

Symphony Framework Components

We no longer ship the Symphony Framework sample templates with CodeGen. You can obtain the latest Symphony Framework templates from the Symphony Framework web site.

There were no Symphony Orchestrator changes in this release.

There were no Symphony Framework CodeGen Extensions changes in this release.


V5.2.2 - 25th October 2017

CodeGen Release Notes

We added a new field loop expansion token <FIELD_FORMATSTRING> which can be used to access a fields format string value.

We added a new command-line option -utpp which instructs CodeGen to treat user-defined tokens as preprocessor tokens. This means that user-defined tokens are expanded much earlier during the initial tokenization phase, which in turn means that other expansion tokens may be embedded within the values of user-defined tokens.

We removed the RpsBrowser utility from the distribution; it was an experimental project that didn't really takeoff.

This version of CodeGen was built with Synergy/DE 10.3.3d and requires a minimum Synergy runtime version of 10.1.1.

Symphony Framework Components

There were no Symphony Orchestrator changes in this release.

There were no Symphony Framework template file changes in this release.

There were no Symphony Framework CodeGen Extensions changes in this release.


V5.2.1 - 24th August 2017

CodeGen Release Notes

We added several a new generic expression token <IF COUNTER_n_op_value> that allow you to write conditional template code based on testing the current value of the two internal template counters against a simple numeric expression. For example you can test whether counter 1 has reached a value of 5 with the expression token <IF COUNTER_1_GE_5>.

We added several new loop utility expression tokens that allow you to write conditional template code based on the total number of items that will be processed by a loop, how many items have already been processed, and how many remain, either including or excluding the current item. The new expressions are <IF PROCESSED_EXCLUSIVE_op_n>, <IF PROCESSED_INCLUSIVE_op_n>, <IF REMAINING_EXCLUSIVE_op_n>, <IF REMAINING_INCLUSIVE_op_n> and <IF TOTAL_ITEMS_op_n>. An example of using these new tokens is:

<FIELD_LOOP>
    <IF TOTAL_ITEMS_LE_100>
        Code for small loops
    <ELSE>
        Code for larger loops
    </IF TOTAL_ITEMS_LE_100>
</FIELD_LOOP>

We added several new loop utility expansion tokens that allow you to determine the total number of items that will be processed by a loop, how many items have already been processed, and how many remain, either including or excluding the current item. The new expressions are <PROCESSED_EXCLUSIVE>, <PROCESSED_INCLUSIVE>, <REMAINING_EXCLUSIVE>, <REMAINING_EXCLUSIVE_MAX_n>, <REMAINING_INCLUSIVE>, <REMAINING_INCLUSIVE_MAX_n> and <TOTAL_ITEMS>.

We added a new file header token <REQUIRES_CODEGEN_VERSION> that allows you to specify that a minimum version of CodeGen is required in order to successfully process a template.

We made a minor correction to the documentation of the -f l command line option. The documentation previously stated that this option caused fields marked as "Excluded by Language" to be EXCLUDED from field loop processing, but actually such fields are excluded by default. The -f l command line option actually suppresses this behavior, causing such fields to be INCLUDED in field loop processing.

This version of CodeGen was built with Synergy/DE 10.3.3c and requires a minimum Synergy runtime version of 10.1.1.

Symphony Framework Components

There were no Symphony Orchestrator changes in this release.

There were no Symphony Framework template file changes in this release.

There were no Symphony Framework CodeGen Extensions changes in this release.


V5.2.0 - 30th June 2017

CodeGen Release Notes

We added two file loop expansion tokens <FLOOP_ODBC_NAME> and <FLOOP_RPS_NAME>.

This version of CodeGen was built with Synergy/DE 10.3.3c and requires a minimum Synergy runtime version of 10.1.1.  

Symphony Framework Components

There were no Symphony Orchestrator changes in this release.

There were no Symphony Framework template file changes in this release.

There were no Symphony Framework CodeGen Extensions changes in this release.


V5.1.9 - 12th May 2017

CodeGen Release Notes

We made a slight change to the way that the multiple structures command line option (-ms) is processed, allowing it to be used when only one repository structure is specified. This allows for templates that use the <STRUCTURE_LOOP> construct to be used when only one structure is being processed.

We fixed an issue that was causing the <FIELD_SPEC> token to produce incorrect values for auto-sequence and auto-timestamp fields. Previously the value 8 would be inserted, now the correct value i8 is inserted.

We added two new structure expansion tokens <FILE_ODBC_NAME> and <FILE_RPS_NAME> that expand to the repository ODBC table name and repository file definition name of the first file definition that is assigned to the structure currently being processed.

This version of CodeGen was built with Synergy/DE 10.3.3c and requires a minimum Synergy runtime version of 10.1.1.

Symphony Framework Components

There were no Symphony Orchestrator changes in this release.

There were no Symphony Framework template file changes in this release.

There were no Symphony Framework CodeGen Extensions changes in this release.


V5.1.8 - 23rd March 2017

CodeGen Release Notes

We added a new generic expansion token <DATABASE> that can be used to insert the name of the relational database currently being targeted.

We added three new generic expression tokens <IF DATABASE_MYSQL>, <IF DATABASE_POSTGRESQL> and <IF DATABASE_SQLSERVER> that can be useful when developing database agnostic template files.

We enhanced the <REQUIRES_OPTION> file header token by adding a new option TF which allows a template designer to specify that the template-defined folders feature must be enabled.

This version of CodeGen was built with Synergy/DE 10.3.3b and requires a minimum Synergy runtime version of 10.1.1.

Symphony Framework Components

There were no Symphony Orchestrator changes in this release.

There were no Symphony Framework template file changes in this release.

There were no Symphony Framework CodeGen Extensions changes in this release.


V5.1.7 - 7th February 2017

CodeGen Release Notes

We added experimental support for generating code for MySQL and PostgreSQL databases by adding a new -database command line option. This option allows you to specify a target database type and affects the SQL-compatible data types that are generated by the field loop expansion token <FIELD_SQLTYPE>. If this option is not used then the default database continues to be Microsoft SQL Server, but this default may be changed via the new environment variable CODEGEN_DATABASE_TYPE. Before considering this support final we would appreciate any feedback from developers working with MySQL or PostgreSQL about whether we have chosen appropriate data type mappings. A list of these data type mappings can be found here.

We changed the SQL Server data type mappings for D6 (YYMMDD) dates from DECIMAL(6) to DATE.

We changed the SQL Server data type mappings for D6 (YYYYPP) and D4 (YYPP) period numbers from CHAR(6) and CHAR(4) to DECIMAL(6) and DECIMAL(4) respectively.

We changed the SQL Server data type mappings for nullable time (HHMMSS and HHMM) from DECIMAL(6) and DECIMAL(4) to TIME(0).

This version of CodeGen was built with Synergy/DE 10.3.3b and requires a minimum Synergy runtime version of 10.1.1.

Symphony Framework Components

Symphony Orchestrator was upgraded to use Symphony Framework V3.2.11.

There were no Symphony Framework template file changes in this release.

There were no Symphony Framework CodeGen Extensions changes in this release.


V5.1.6 - 7th November 2016

CodeGen Release Notes

We modified the way that key loops are processed so that if a repository structure has a mixture of access keys and foreign keys defined, the foreign keys are ignored when processing key loops.

We added a new key loop expression <IF FIRST_SEG_NOCASE>.

We added new field loop expressions <IF AUTO_SEQUENCE>, <IF AUTO_TIMESTAMP>, <IF AUTO_TIMESTAMP_CREATED> and <IF AUTO_TIMESTAMP_UPDATED> which can be used to determine if fields are defined as auto sequence or auto time-stamp fields.

We added new key loop expressions <IF AUTO_TIMESTAMP_CREATED> and <IF AUTO_TIMESTAMP_UPDATED>.

We added new key segment loop expressions <IF SEG_AUTO_TIMESTAMP_CREATED> and <IF SEG_AUTO_TIMESTAMP_UPDATED>.

We changed the behavior of the field loop expansion token <FIELD_TYPE_NAME>, which will now report the new values AUTO SEQUENCE or AUTO TIMESTAMP when auto sequence or auto time-stamp fields are encountered. Previously the token would have returned a generic value of INTEGER for both.

This version of CodeGen was built with Synergy/DE 10.3.3a and requires a minimum Synergy runtime version of 10.1.1.

Symphony Framework Components

There were no Symphony Orchestrator changes in this release.

There were no Symphony Framework template file changes in this release.

There were no Symphony Framework CodeGen Extensions changes in this release.


V5.1.5 - 6th September 2016

CodeGen Release Notes

We added a new structure expression <IF STRUCTURE_HAS_UNIQUE_PK>.

We fixed a problem that was preventing loop utility expressions from operating correctly.

We fixed a problem that was causing the <IF LAST> field loop utility expression to operate incorrectly in primary key blocks.

Symphony Framework Components

There were no Symphony Orchestrator changes in this release.

There were no Symphony Framework template file changes in this release.

There were no Symphony Framework CodeGen Extensions changes in this release.


V5.1.4 - 29th July 2016

CodeGen Release Notes

We changed the SQL data mappings for time (HHMMSS and HHMM) fields from DECIMAL(n) to TIME(0). This will result in a change of output from the <FIELD_SQLTYPE> token. If this causes you any issues you can revert to the previously produced values by using custom data type mapping.

The CodeGen installation was altered so that the changes to PATH occur immediately after the installation completes. This means that it is no longer necessary to reboot after installing CodeGen on a system for the first time.

Symphony Framework Components

There were no Symphony Orchestrator changes in this release.

There were no Symphony Framework template file changes in this release.

There were no Symphony Framework CodeGen Extensions changes in this release.


V5.1.3 - 30th June 2016

CodeGen Release Notes

Added a new loop utility expansion tokens <BSLASH> and <FSLASH>.

Added a new field loop expression <IF LENGTH_OVER_8>.

This version of CodeGen is built with Synergy/DE 10.3.3 and targets a minimum Synergy runtime version of 10.1.1.

Symphony Framework Components

There were no Symphony Orchestrator changes in this release.

There were no Symphony Framework template file changes in this release.

There were no Symphony Framework CodeGen Extensions changes in this release.


V5.1.2 - 28th January 2016

CodeGen Release Notes

We fixed a bug that was causing the <SELECTION_VALUE> selection loop expansion token to produce incorrect results for enumerated decimal and integer fields. The values being produced were previously off by 1, with values for fields with positive enumerated step values being one too high, and values for fields with negative enumerated step values being one too low.

We changed the CodeGen installation so that it adds the CodeGen folder to the END of PATH instead of the beginning.

Symphony Framework Components

There were no Symphony Orchestrator changes in this release.

There were no Symphony Framework template file changes in this release.

We fixed a bug that was causing the <SYMPHONY_SELECTION_VALUE> selection loop expansion token to produce incorrect results for enumerated decimal and integer fields. The values being produced were previously off by 1, with values for fields with positive enumerated step values being one too high, and values for fields with negative enumerated step values being one too low.


V5.1.1 - 9th December 2015

CodeGen Release Notes

We have moved the CodeGen source code repository from CodePlex to GitHub; the only functional CodeGen changes in this release are related to that move (check for update mechanism, download URL, etc.).

If you don't already have one we encourage you to Create a GitHub Account and to Watch CodeGen. If you wish to receive notifications about new CodeGen releases you can also subscribe tho the CodeGen Releases Atom feed.

We have not changed the licensing terms, CodeGen is still distributed under the terms of the New BSD license (BSD). For the time being we plan to leave the CodePlex environment intact, but no new changes will be checked in there and no new releases will be published there.

Here are a few useful GitHub URLs related to our new home:

We have made an internal change that has consolidated the functionality of the CodeGenEngineShared and CodeGenParser assemblies into the existing CodeGenEngine assembly and we modified the installation to remove the two redundant assemblies.

We have upgraded the version of the WiX Toolset that we are using to create the CodeGen installation to V3.1.0.2213.

Symphony Framework Components

There were no Symphony Orchestrator changes in this release.

The Symphony_FileIO template was altered to use <TAGLOOP_FIELD_SQLNAME> instead of <TAGLOOP_FIELD_NAME>. This change only affects structures with tags.

There were no Symphony Framework CodeGen Extensions changes in this release.


V5.1.0 - 4th December 2015

CodeGen Release Notes

We added support for the conditional processing of template code based on identifiers defined on the command line.

Symphony Framework Components

There were no Symphony Orchestrator changes in this release.

There were no Symphony Framework template file changes in this release.

There were no Symphony Framework CodeGen Extensions changes in this release.


V5.0.7 - 20th November 2015

CodeGen Release Notes

We added support for the conditional processing of template code based on identifiers defined on the command line.

We added a new structure expression <IF STRUCTURE_HAS_UNIQUE_KEY>.

We added a new key loop variation called <UNIQUE_KEY>.

We fixed a bug that was causing a crash during key segment loop processing if a key segment was defined using an overlay field. An appropriate error is now generated.

We changed the minimum required version of the .NET Framework from 4.5 to 4.5.2.

Symphony Framework Components

There were no Symphony Orchestrator changes in this release.

There were no Symphony Framework template file changes in this release.

There were no Symphony Framework CodeGen Extensions changes in this release.


V5.0.6 - 9th September 2015

CodeGen Release Notes

We fixed an error that was interfering with the processing of case variations of the field loop expansion token <FIELD_ODBCNAME>.

We added two new field loop expansion tokens that insert SQL and .NET compatible variants of a fields alternate name. The tokens are <FIELD_SQL_ALTNAME> and <FIELD_NET_ALTNAME> and both are also available for use in key segment loops.

We added five new field loop expressions <IF ARRAY_FIRST>, <IF ARRAY1_FIRST>, <IF ARRAY2_FIRST>, <IF ARRAY3_FIRST> and <IF ARRAY4_FIRST>. These expressions can be used to determine if a field that was the very first element of an array is being processed.

Symphony Framework Components

There were no Symphony Orchestrator changes in this release.

There were no Symphony Framework template file changes in this release.

There were no Symphony Framework CodeGen Extensions changes in this release.


V5.0.5 - 28th August 2015

CodeGen Release Notes

We upgraded the development environment to use Visual Studio 2015.

We added a new field loop expansion token <FIELD_SELECTION_COUNT>.

We extended the functionality of the recently added -checkversion command line option so that you can now configure CodeGen to periodically check for updates and inform you when an update is available.

We have modified CodeGen so that it sets the Windows exit code to 1 if an error occurs during processing. This means that the standard IF ERRORLEVEL mechanism can be used to detect code generation problems when operating in batch files.

We changed the way that field names are generated for fields from multi-dimensioned arrays. In previous versions the name of a field from a multi-dimensioned array might be presented as FIELD1_1_1, but this could result in a problem when using expansion tokens such as <FieldNetName>, or any other pascal-case or camel-case variant of tokens referring to the name of the field. Such tokens suppress the underscore characters and result in names like Field1111. This meant that duplicate names could be generated for fields within the same array. Consider an array field defines as MY_FIELD, [12,12,1]A1; the <FieldNetName> for MY_FIELD[1,11,2] would be MyField1112; exactly the same as for field MY_FIELD[11,1,2]. To address this we have changed the naming convention for elements in multi-dimensioned arrays such that leading zeros are now included, up to the required length based on the highest element number. For example the names produced for the earlier example will now be MyField01112 and MyField11012. If you use expansion tokens that refer to the non-DBL names of fields in multi-dimensioned arrays in such a way that those names become part of an external API then this change will break your existing code. Note that this change only applies to multi-dimensioned arrays; the behavior of fields in single-dimensioned arrays has not changed.

We fixed a problem with the processing of the tag loop expansion token <TAGLOOP_TAG_VALUE>. Previously for an alpha field with a comparison value the comparison value would have been inserted without trailing space (e.g. "A"), now trailing spaces will be inserted if necessary (e.g. "A     "). Previously for an alpha field with an empty comparison value a null string (e.g. "") would have been inserted, now an empty string with the appropriate number of spaces (e.g. "       ") is inserted. The number of spaces is determined by the length of the alpha field, up to a maximum of 15 characters which is the maximum possible length for a tag comparison value.

We fixed an error that was preventing the tag loop expression tokens <IF SINGLE_TAG> and <IF MULTIPLE_TAGS> from operating correctly. Previously <IF SINGLE_TAG> would only be true if no tags were present and <IF MULTIPLE_TAGS> would be true only if a single tag was present.

We added two new structure expressions <IF STRUCTURE_SINGLE_TAG> and <IF STRUCTURE_MULTIPLE_TAGS>.

Symphony Framework Components

We corrected the column headings in the Orchestrator commands list.

There were no Symphony Framework template file changes in this release.

There were no Symphony Framework CodeGen Extensions changes in this release.


V5.0.4 - 30th June 2015

CodeGen Release Notes

IMPORTANT: We changed some of the implementation details for period date fields (YYPP and YYYYPP). Previously, because there is no direct equivalent for fields of these types in environments like .NET, Java and SQL, these fields were treated as type String by various field loop tokens. We have changed this so that they are now treated as type int. This change affects the following field loop tokens: <FIELD_CSTYPE>, <FIELD_CSDEFAULT>, <FIELD_OCTYPE>, <FIELD_OCDEFAULT>, <FIELD_SNTYPE>, <FIELD_SNDEFAULT>, <FIELD_VBTYPE> and <FIELD_VBDEFAULT>. This could potentially change the behavior of your templates and the resulting code, but we decided to make the change because fields of this type are fairly rare.

We added a new -rps command line option which allows the repository main and text files to be used to be specified on the command line, overriding other mechanisms for repository selection such as RPSDAT, RPSMFIL and RPSTFIL environment variables.

We added a new -attach command line option which is intended for use by CodeGen developers. When specified this option causes CodeGen to wait for a key press at the very beginning of processing, making it possible to attach an external debugger to the process before processing begins.

We added a new -time command line option that causes CodeGen to report the total elapsed time taken to process the command.

We fixed an issue in the repository API which was causing period dates (D4 YYPP and D6 YYYYPP) to be incorrectly reported as type JULIAN instead of DATE. This in turn was causing the field loop expressions <IF DATE_YYPP>, <IF DATE_YYYYPP> and <IF DATE_NOT_PERIOD> to fail.

We removed an artificial limitation that was limiting the number of structures that could be processed concurrently (via the -ms command option) to five.

We corrected a situation where recent versions of CodeGen could potentially exit and report a fail status without having displayed a corresponding error message.

We fixed issues with the <FIELD_PRECISION> and <FIELD_PRECISION2> field loop tokens which were both inserting incorrect values. We also added a new field loop token <FIELD_PRECISION0>.

We fixed an issue that was preventing the field loop expansion token <FIELD_SELECTIONS> from operating correctly.

We fixed an issue that was preventing code generation without a repository structure from working.

Fixed an issue that was preventing the field loop expressions <IF PKSEGMENT> and <IF NOTPKSEGMENT> from operating correctly when used with structures that have no keys defined.
 

We added back several sample subroutines, functions and include files to the distribution. These files were previously distributed  but were accidentally excluded when we moved to the new WiX based installer. Some are still referenced by several old sample templates (mainly the UI Toolkit related templates). The files can be found in the main templates folder and we also once again set the CODEGEN_INC environment variable to point to the location of various include files that are referenced by some of the sample code.

Symphony Framework Components

IMPORTANT: When upgrading to this version of CodeGen it it important that you update your Symphony Framework version (via NuGet) to V3.1.10

In Orchestrator we added the ability to create a new command based on an existing command. The new option is available by right-clicking an existing command in the command grid, and from there you can select the required repository structure and the new commands will be created. The command grid also now allows for the selection of multiple commands.

Orchestrator now supports being launched via a registered file association, and we have updated the installation to create a file association for orchestrator project files (.symproj). This means that you can now launch orchestrator by double-clicking on a project file, or by right-clicking a project file and selecting "Open with Symphony Orchestrator".

Orchestrator also now supports Windows "Jump Lists". This means that if you pin the Orchestrator icon to the Task Bar, you can use right-click to display and select from a list of recently opened projects.

There were no changes to the Symphony Framework template files in this release.

There were no changes to the Symphony Framework CodeGen Extensions in this release.


V5.0.3 - 16th April 2015

CodeGen Release Notes

We added a new command line option -checkversion that allows you to check whether a you are running the latest released version of CodeGen. Your current and the latest versions will be displayed, together with a message confirming the status of your installation. This option requires Internet connectivity.

We updated the installer so that the CodeGen documentation is now an optional component. If the documentation is not installed locally then the codegen -docs command line option will launch the Web-based documentation.

We changed the location where we install the sample templates, which you will now find in a folder below the public documents folder (C:\Users\Public\Documents\CodeGenTemplates).

The installation now records the CodeGen version number in the registry. This makes it easier for third-party tools that may depend on CodeGen to determine the installed version.

Several additional Symphony Framework components are now being distributed as part of the CodeGen installation. See below for more details.

Symphony Framework Components

IMPORTANT: If you use CodeGen in conjunction with Symphony Framework then it is important that you should upgrade to Symphony Framework V3.1.9.0 BEFORE installing this version of CodeGen.

The Symphony Framework CodeGen Extensions are now being distributed as part of the CodeGen installation and have been removed from V3.1.9.0 of the Symphony Framework installation.

The Symphony Framework template files are now being distributed with the CodeGen installation and have been removed from V3.1.9.0 of the Symphony Framework installation.

The folder containing the Symphony template files has changed from C:\Program Files (x86)\Synergex\SymphonyFramework\Template to C:\Users\Public\Documents\SymphonyTemplates, but the environment variable SYMPHONYTPL continues to point to the location of the Symphony templates and should be the primary mechanism used to locate them from the command prompt or batch files.

No Symphony Framework templates were added, deleted or changed in this release.

We added a border to the Symphony Orchestrator main window so that the application can be resized for easier use.

 


V5.0.2 - 16th March 2105

CodeGen Release Notes

We corrected several documentation issues where it was stated that several command line options (-s, -t, -a, -ut and others) were limited to a maximum of ten values following the option. This limitation in previous versions of CodeGen was removed in V5.0.0.

We fixed a bug in the Template Browser utility that was causing it to fail to start if Symphony Framework was not installed.

We added a new file header token called <CODEGEN_FOLDER> which allows template files to specify the name of a sub-folder (below the main output folder) where output files should be created. You must use the -tf command line option to enable this feature. By default, if a template file specifies that the output file be placed in a sub-folder, and a namespace is used within the template, then the folder name is also appended to the namespace being used. The appending of the folder name to the namespace can be overridden by the new -nf command line option.

Symphony Framework Components Release Notes

The Symphony Framework Orchestrator utility in now being distributed as part of the CodeGen installation has been removed from V3.0.5.0 of the Symphony Framework installation.

We changed the Orchestrator version number to match the version of CodeGen that it now ships with.

We mad a change to OrchestratorViewModel to prevent the project folder incorrectly being added to program folders.

We changed the CommandDetails.xam view to correct the display of the token list cells.


V5.0.1 - 31st January 2015

Fixed a bug that was causing incorrect data to be output (compared to previous versions) by the <FIELD_NAME> token when the -prefix option was used in conjunction with a repository structure that contained group fields. The bug was introduced in V5.0.0.

The current CodeGen version number is now recorded in each assembly via the Assembly File Version attribute.


V5.0.0 - 10th January 2015

Introduction

This release represents a total re-write of the CodeGen code base, embracing best practice object-oriented development techniques, and utilizing all of the latest and greatest features of Synergy .NET. Starting with this release CodeGen will only be available for use on the Windows platform. This new release has been extensively tested and, despite extensive internal changes, has demonstrated a very high level of compatibility with previous versions. But if you do discover an issue then please provide feedback via the CodePlex Issue Tracking system.

Installing This Version

If you have an earlier version of CodeGen installed then the installer for this version will perform an upgrade in the usual way.

If you previously installed a V5 beta release then you must manually remove that version before installing this version.

Symphony Framework Users

In order to use this version of CodeGen you must be using Symphony Framework V3.0.2.0 or higher.

Changes That May Break Your Code

If you have implemented custom extensions to CodeGen then please be aware that the mechanism for implementing extensions has changed. You will need to implement a new version of your extensions in order to have them work with CodeGen V5. If you need assistance with migrating your extensions to the new environment please contact the CodeGen development team via the General Discussions page on CodePlex.

When using the in-process CodeGen API and specifying the names of user-defined tokens it was previously necessary to include the < and > characters in the name of the user defined token. V5 does not require the < and > characters to be specified, and in fact will fail to recognize the user defined tokens if you do specify them.

In earlier versions of CodeGen the sample templates were installed to the folder \ProgramData\Synergex\CodeGEn\Templates. Starting from this version the sample templates are now installed to the folder \Program Files (x86)\Synergex\CodeGen\Templates.

We discovered that the <FIELD_ELEMENT> field loop token was not implemented correctly. For non-array fields it was intended to not insert any data into the output stream, but in fact would insert a digit 1. Also, when processing the first element of a single-dimension array field the token would insert 0 instead of 1. Both of these have been corrected, which could change the behavior of your template files.

We discovered that the <FIELD_ELEMENT0> field loop token was not implemented correctly. For non-array fields it was intended insert a digit 0, but in fact would insert a digit 1. Also, when processing the first element of a single-dimension array field the token would insert 0 instead of 1. Both of these have been corrected, which could change the behavior of your template files.

Other Changes and New Features

This release was primarily about re-developing the internals of CodeGen in order to take advantage of latest technologies, but also to make CodeGen more extensible for future releases. But we also managed to squeeze in a few new features along the way:

Added new generic expansion tokens <HOST_DNS_NAME>, <HOST_IP_ADDRESS>, <RANDOM_10>, <RANDOM_100>, <RANDOM_1000> and <RANDOM_INT>.

Added support for generic expression tokens, and added the first generic expressions <IF DEBUG_LOGGING>, <IF FIELD_PREFIX>, <IF FIELD_SUBSET> <IF MULTIPLE_STRUCTURES>, <IF NAMESPACE> and <IF VERBOSE_LOGGING>.

The existing counter tokens and expressions have been re-documented as generic tokens and generic expressions.

Added support for structure expression tokens, and added the first structure expression tokens <IF STRUCTURE_FILES>, <IF STRUCTURE_KEYS>, <IF STRUCTURE_LDESC>, <IF STRUCTURE_RELATIONS>, <IF STRUCTURE_TAGS> and <STRUCTURE_UTEXT>.

Added new mechanisms for supporting relation loop expressions, structure loop expressions, not in loop expansion tokens and not in loop expression tokens, although none exist as yet.

Implemented <IF FIRST>, <IF LAST>, <IF MORE> and <IF NOMORE> as loop utility expressions, and removed them from the specific individual loops that they were previously supported in.

The file spec provided within a <PROVIDE_FILE>file.ext</PROVIDE_FILE> construct can now include a logical name to specify the location of the file.

Completed the set of file header tokens that allow you to specify that a particular custom expansion token is required by adding <REQUIRES_CUSTOM_LOOPUTIL_TOKEN>, <REQUIRES_CUSTOM_NOTINLOOP_TOKEN>, <REQUIRES_CUSTOM_STRUCTLOOP_TOKEN> and <REQUIRES_CUSTOM_TAG_TOKEN>.

Added a new set of file header tokens that can be used to specify that a particular custom expression token is required. For example <REQUIRES_CUSTOM_FIELD_EXPRESSION>.

The <REQUIRES_OPTION>SUBSET</REQUIRES_OPTION> can now be satisfied by either the -subset or -fields command line options.

When processing multiple structures but NOT using a structure loop, we currently support up to five concurrent structures. By default the context is set to the first structure specified, and you can switch context to a different structure using the <STRUCTURE#1> through <STRUCTURE#5> tokens. Currently when using the -ms command line option, you must specify between 2 and 5 structures.

The command line -subset option (process a subset of fields) can now be used in conjunction with the -ms option (multiple structures).

The command line -fields option was changed to support fields from multiple structures, when processing multiple structures (-ms option). When processing multiple structures you can specify -fields STR1.FIELD1 STR1.FIELD2 STR2.FIELD1 etc. If processing multiple structures and you don't specify STR.FIELD in -fields then the first structure is used as a default.

Added a new -mw  command line option. By default, if the same task generates the same output file then it is not written to disk multiple times. This option causes each instance of the file to be written to disk. If you use the in-process interface to CodeGen then the equivalent is to set the new CodeGenTask.MultiWriteFiles property.

Added a new -dt command line option which creates log files which detail the results of the tokenization of template files, and tree output, both before and after pre-expansion. The files are created in the output folder and are named <template>.tokens.log.

Added a new -c command line option which causes processing to continue even after errors have been reported. If multiple templates, files or tasks are being processed then this option allows code generation to continue even though one template/structure combination has generated an error.  If you use the n-process interface to CodeGen then the equivalent is to set the new CodeGenTaskSet.ContinueAfterError property.

We have changed the way that CodeGen installations are created. We no longer use InstallShield Limited Edition, but instead are now using WiX (Windows Installer XML), and we're also using WiX Toolset which provides Visual Studio integration.

The CodeGen installation is now digitally signed by Synergex International Corporation. This means that you should no longer see Windows SmartScreen warnings when executing an installation that has been downloaded from the Internet.


V4.4.4.1 - 11th September 2014

IMPORTANT: This is likely to be the final CodeGen release that supports building with Traditional Synergy; future versions will only be supported under Synergy .NET. This means that future releases will only be available on Windows. The binary releases and source code for this version will continue to be available from CodePlex so it will be possible to continue to use this version on platforms like Linux and OpenVMS, but future enhancements will only be available on Windows. Remember that if you are developing on a platform other than Windows, you can generate code on Windows and then move that code to the other platform.

This release contains bug fixes for a small number of issues that were discovered after the V4.4.4 release. Most of these issues only affected the "in-process" interface to CodeGen that is used by the unreleased "Symphony Orchestrator" utility, but one of the issues also affected the processing of user-defined tokens passed in via the -ut command line option, hence this additional release.


V4.4.4 - 19th August 2014

On OpenVMS we updated the processing of the -i and -o command line options so that a Windows or Unix style period (.) can be used to represent "current directory", in addition to the OpenVMS style [ ] notation.

We changed the implementation of the -u (user-defined token file) command-line option. Previously all user-defined token files were required to be in the same folder as the template being processed, and were required to have a .tkn file extension. Now user-defined token files can be located anywhere and have any file extension. This change means that when using the -u command line option, you must now specify a full or relative path and file name to the token file to use. Synergy logical names can be used to specify the path.

We fixed a bug that was preventing the various loop counter expressions from working correctly. The bug was introduced in the 4.4.3 release.

We added <IF FIRST> as a new expression in key loops, enum loops, enum member loops, file loops and button loops.

We renamed two tag loop expressions for consistency with other loop structures. <IF FIRST_TAG> becomes <IF FIRST> and <IF LAST_TAG> becomes <IF LAST>.

We added the ability to define a subset of fields to be processed by specifying a list of field names on the command line using the new -fields option, or via the SubsetFields property of CodeGenTask. This enables field subset processing without having to modify the underlying repository. As with the -subset option, this feature can only be used when processing a single repository structure, and can't be used at the same time as the -subset option.

We fixed a problem where when using developer debug mode (-debug) CodeGen would fail to create the developer debug mode log log file if the -r (replace output files) option was not being used.


V4.4.3 - 18th August 2014

Significantly enhanced the CreateFile utility by adding support for the following Synergy V10 (ISAM rev 6) features:

Auto-sequence keys.

Auto-time-stamp keys.

Portable integer specifications.

Stored GRFA option.

Track changes option.

CreateFile now ignores any foreign key definitions, and will also now attempt to validate that if key definitions include optional "explicit key of reference" values, those values match the order in which the keys are defined (CreateFile always creates keys based on the order of key definitions in the repository structure, because repository does not have any other reliable mechanism for determining the order of keys in a file).

Significantly enhanced the MapPrep utility. Specifically:

The default name of new mapped structures was changed from <structure>_NEW to <structure>_MAPPED.

The name of a new mapped structure can now be specified, overriding the default name. This can be done either via a command-line option -n, or by responding to prompts by using one of the command line options -ps or -p. Previously you would have to edit the generated schema file in order to rename the structure from its default new name.

You can now tell MapPrep whether you want to be prompted for new structure names (-ps), field names (-pf) or both (-p).

By default MapPrep no longer propagates key definitions into the schema for the new mapped structure because they are generally not required. However there is a new command-line option -k which causes key information to be retained as previously.

If retaining key information while at the same time renaming fields, MapPrep now renames any key segments that relate to fields that have been renamed.

When renaming structures and fields MapPrep now validates that the names that you provide are valid identifiers, and when renaming fields MapPrep now tracks the names that have been used so far and prevents duplicate field names from being entered later.

MapPrep now defaults to adding structure and field mappings in the structure and fields long descriptions instead of in the user defined text field, and we have added a new command-line option -u which causes the user defined text field to be used as previously.

Added the ability to load new mapped structures directly back into the repository; this is achieved by using the new -l command-line option.

Altered the <IF DATE> key segment loop expression to evaluate to true for both nullable and non-nullable dates.

Added two new sample templates that demonstrate how to use SQL Server BULK INSERT to load data into tables very quickly. These new templates are:

DatabaseRoutinesBulkLoad.tpl

DatabaseRoutinesBulkLoadMapped.tpl.

Added Repository API support for the ISAM Rev 6 (Synergy 10.1) stored GRFA and change tracking file options.

Added support for ISAM file page sizes of 16384 and 32768 in the following tokens:

<FILE_PAGESIZE>

<FLOOP_PAGESIZE>

Added the following new structure tokens:

<FILE_CHANGE_TRACKING>

<FILE_STORED_GRFA>

Added the following new file loop tokens:

<FLOOP_CHANGE_TRACKING>

<FLOOP_STORED_GRFA>

Added new file loop expressions

<IF CHANGE_TRACKING>

<IF NOCHANGE_TRACKING>

<IF PAGESIZE16384>

<IF PAGESIZE32768>

<IF STORED_GRFA>

<IF NOSTORED_GRFA>

Added the following new key segment loop expressions to bring key segment expressions back into line with field loop expressions.

<IF DATE_NULLABLE>

<IF DATE_NOT_NULLABLE>

<IF SEG_ALPHA>

<IF SEG_ASCENDING>

<IF SEG_AUTO_SEQUENCE>

<IF SEG_AUTO_TIMESTAMP>

<IF SEG_DECIMAL>

<IF SEG_DESCENDING>

<IF SEG_NOCASE>

<IF SEG_SIGNED>

<IF SEG_TYPE_EXTERNAL>

<IF SEG_TYPE_FIELD>

<IF SEG_TYPE_LITERAL>

<IF SEG_TYPE_RECNUM>

<IF SEG_UNSIGNED>

<IF TIMEOUT>

Changed the <FIELD_VBTYPE> data type mappings for nullable time fields from DateTime, to Nullable(Of DateTime).

Added a new mechanism to allow developers to customize the default data type mappings used with various field loop tokens. This feature is enabled via a new command line option -cdm.

Added a new Template Browser utility that allows you to browse CodeGen template files. The utility displays the sample templates that are shipped with CodeGen, and if Symphony Framework is installed then it will display the Symphony templates also. You can also use the Tools > Options dialog to define the folder where your own user-defined templates are stored and if you do so then the utility will display your own templates too.


V4.4.2 - 27th May 2014

We changed the code that generates SQL compatible names for fields to replace any dollar sign ($) characters with an underscore character (_).

We fixed a data mappings bug which was causing un-coerced TM4 (HHMM) time fields to be incorrectly be typed as nullable.


V4.4.1 - 29th April 2014

IMPORTANT NOTE: We no longer provide binaries for Synergy/DE V9. For the time being we will continue to make best efforts to ensure that the code base remains compatible with Synergy/DE V9 systems so that you can build your own CodeGen distributions, but at some point that will become more challenging because we want to be able to take advantage of the significant new features available in Synergy/DE V10. If you have not already done so we strongly encourage you to update your development environments to use Synergy/DE V10. Of course of that it not possible right now you will be able to continue to use CodeGen 4.3.5.

Added a new API called MethodCatalogAPI which exposes information about the interfaces, methods, parameters and return types defined in a Synergy Method Catalog. In the future this API will be used to allow code to be generated based on the data from a method catalog, in conjunction with repository based information.

Updated the OpenVMS linker options file (CODEGEN.OPT) and removed the SHS$SHARE logical name prefix from the references to DBLTLIB and SYNRTL. This change will ensure that CodeGen is linked against the correct Synergy runtime libraries on OpenVMS systems that have primary and alternate installs of Synergy/DE. If you do have primary and alternate installs then you must define system wide logical names for DBLTLIB (translating to SYS$SHARE:DBLTLIB.OLB) and SYNRTL (translating to SYS$SHARE:SYNRTL.EXE). These logical names should be defined in your system startup command procedure (SYS$MANAGER:SYSTARTUP_VMS.COM) immediately after you call the Synergy/DE startup command procedure (SYS$MANAGER:SYNERGY_STARTUP.COM).

Made some improvements to the build and clean scripts for CodeGen under Traditional Synergy on Windows.

Made some improvements to the BUILD.COM and CREATE_INSTALL.COM command procedures for CodeGen on OpenVMS. Also added a new command procedure named CLEAN.COM to clean files left behind by BUILD.COM and CREATE_INSTALL.COM.

Added new field loop expressions <IF DATE_NULLABLE> and <IF DATE_NOT_NULLABLE> which allows you to detect date fields that are coerced to nullable dates.

Changed the <IF DATE> and <IF DATEORTIME> field loop expressions to evaluate to true for dates and nullable dates.

Changed the <IF DECIMAL> field loop expression to evaluate to false for nullable date fields.

Changed the <IF NOTDATE>, <IF NOTDATEORTIME> and <IF NOTDECIMAL> field loop expressions to evaluate to true for nullable date fields.

Updated field loop tokens <FIELD_CSTYPE>, <FIELD_VBTYPE> and <FIELD_SNTYPE> to return appropriate values for nullable date and time fields.

Added a new key segment loop token <SEGMENT_SNTYPE> to insert the Synergy .NET data type for a key segment.

Fixed a bug in CodeGenLauncher where any command line parameter value over 80 characters was causing an invalid subscript exception.

Updated the and improved the CodeGenLauncher mechanism which can be used to initiate code in-process generation, rather than code generation initiated by command-line instructions.

We have started to create some short training videos for CodeGen, and will be creating more as time permits. Videos are currently available for the following subjects:

Introduction to CodeGen

Using AUTHOR and COMPANY Tokens

Introduction to Field Loops

Using Field Loop Subsets

Using Template Include Files

Configuring Template Dependencies

You can find the CodeGen Training Videos on YouYube.


V4.3.5 - 2nd February 2014

Improved error processing in CodeGenEngine.CheckStructure(). Also in the same routine we worked around a String.Contains() bug in Traditional Synergy 10.1.1b that was preventing CodeGen from working correctly on non .NET platforms.

General improvements the DatabaseTable sample templates, mainly focused around removing the use of optional parameters and using overload methods instead. These changes should allow relational database code generated from these templates to work in Synergy .NET in addition to traditional Synergy. Also made some minor changes to the same templates that  result in code that builds cleaner on OpenVMS systems.

Added some support for auto sequence and auto time stamp key segments (ISAM Rev 6). Updated the possible values returned by the <SEGMENT_TYPE> segment loop token, and added two new key loop expressions <IF AUTO_SEQUENCE> and <IF AUTO_TIMESTAMP>.

Added two new field loop expressions <IF GROUP_EXPAND> and <IF GROUP_NO_EXPAND> which allows you to determine whether or not implicit groups are being expanded to individual fields (i.e. whether or not the -g i command line option is being used).

Added two new field loop tokens that expose the Synergy .NET field data type and default value. The new tokens are <FIELD_SNTYPE> and <FIELD_SNDEFAULT>.

Added a new field loop token <FIELD_NETNAME>. This token behaves identically to the <FIELD_SQLNAME> token, it has been included simply to allow template developers to produce more understandable templates, not having to refer to "SQL" when the template doesn't produce anything that involves the use of SQL.

Resolved an issue with user defined token processing whereby if a user defined token was used multiple times in the same template file source line, only the first instance would be replaced. Now all instances will be replaced.

When using the -e command line option to echo the command line being used (useful when CodeGen is used from a Windows batch file with echo turned off) we will no longer display a blank line before the command line.


V4.3.4 - 19th December 2013

Corrected a problem where overlay field exclusions and certain other command-line driven field filtering mechanisms were not being honored for group fields.

Fixed a bug in the processing of the field tokens <FIELD_MINVALUE> and <FIELD_MAXVALUE> for implied decimal fields with no digits to the left of the decimal place (e.g. D2.2).


V4.3.3 - 13th November 2013 (Synergy .NET only)

Added three new generic tokens that allow you to generate GUIDs and use them in your generated code. The new tokens are <GUID1>, <GUID2> and <GUID3>. Each time you run CodeGen it will generate new values for the three GUID values exposed by these tokens. These GUID values will only be consistent during a single invocation of CodeGen. The next time you invoke CodeGen new values will be generated. If you need to use the same GUID value in multiple templates then you must process those templates all at the same time during a single invocation of CodeGen. These new tokens are only available when using the Synergy .NET version of CodeGen.


V4.3.2 - 30th October 2013

Removed old tag tokens from several example templates.

Fixed a bug which was causing the default author and company names not to be picked up from the registry under .NET.

Added several additional tag loop expressions: <IF FIRST_TAG>, <IF LAST_TAG>, <IF MULTIPLE_TAGS> and <IF SINGLE_TAG>.

Upgraded to Synergy/DE 10.1.1b, Visual Studio 2013 and InstallShield Limited Edition 2013.


V4.3.1 - 7th August 2013

Added support for tag loops. Additional information is available in Tag Loop Tokens and Tag Loop Expressions. As part of this enhancement several structure tokens that previously provided information relating to tags have been removed. The structure tokens that were removed are <TAG_EXPRESSION>, <TAG_EXPRESSION_PATH>, <TAG_FIELD_NAME>, <TAG_FIELD_PATH>, <TAG_FIELD_DEFINE>, <TAG_VALUE>, <TAG_VALUE_DEFINE>, <TAG_END_DEFINE> and <MAPPED_TAG_FIELD>. These tokens were all limited in capabilities because they could only be used with structures that has a single tag expression. You should be able to achieve the same results of all of the removed tokens using the new tag loops feature.

Added a new -lf command line option that causes CodeGen to list the names of the files that were generated. This option is only effective when not using verbose or debug logging (-v or -d) because file names are already listed when using those modes.

Fixed a problem which prevented include file processing <FILE:name.exe> from working in some cases.


V4.2.11 - 18th July 2013

Added several new alternate forms of the <FIELD_SELWND> token to provide template developers better control over the case of field selection window names. Also added a new token <FIELD_SELWND_ORIGINAL> to preserve the case of selection window names in the same way that <FIELD_SELWND> used to.

Enhanced UI Toolkit window script selection window processing (-ws) so that selection window names are no longer case sensitive (they aren't in UI Toolkit). Also the -ws option will now work with selection windows that only have a name but no other attributes specified on the .select line.

Added a new feature which enables some degree of preprocessing of field prompts when a structure is processed by CodeGen. This feature is enabled by setting the CODEGEN_STRIP_FROM_PROMPT environment variable prior to code generation.

Updated the InstallShield LE project to not scan shipped assemblies for dependencies at build time. There appears to be a problem with InstallShield 2012 Spring LE which causes it to incorrectly detect a dependency on Visual C++ V11.0 for ARM processors. This could cause installations for previous versions of CodeGen built for Synergy/DE V10 to incorrectly install the ARM version of the C++ V11 runtime if C++ V11 was not already installed on the system. This could cause a problem if CodeGen for Synergy V10 was incorrectly installed on a Synergy/DE V9 system and then Synergy/DE was upgraded to V10. The Synergy/DE installation would see that a version of C++ V11 was already present (but it was the ARM version), but most Synergy/DE components would fail to execute after installation because of the incorrect C++ runtime. If you encounter this problem then the correct solution is to first delete MSVCP110.DLL and MSVCR110.DLL from your Windows\System32 folder (or your Windows\SysWOW64 folder if you are on a 64-bit system) and then use the Programs and Features utility in Windows Control Panel to perform a “Repair” operation on the 32-bit Synergy/DE installation.


V4.2.10 - 4th June 2013

Added support for user token expressions which allow you to test the presence or absence of a user-defined token. User token expressions are supported in all loop structures.

Added a debug mode logging message to confirm when a different key is being used as a result of using the -opk command line option.

Fixed an issue in <FIELD_PROMPT> which would cause field prompts longer than 30 characters to be truncated to 30 characters.

Updated several sample templates.


V4.2.9 - 7th February 2013

Altered the behavior of the <FILE:name.ext> and <FILEIFEXIST:file.ext> template file include tokens. Previously to include an external file into a template file during code generation the file to be included was required to be in the same directory as the template file being processed. Now the default behavior is that the file must be in the current directory, but the location of the file can be overridden by using a logical name within the token. For example if you use the token <FILE:header.def> then CodeGen will expect to find the file in the current directory, but if you use the token <FILE:INC:header.def> then CodeGen will open the file from whatever directory is specified by the environment variable INC. This change was made as a result of a special request from our friends over in the Symphony Framework development team (symphonyframework.codeplex.com).


V4.2.8 - 6th February 2013

Added support for a "second segment restriction" in key loops which can be used to indicate that only the second segment of a key should be processed within a key loop. This can be particularly useful when processing structures that have a structure tag value as the first key segment and the main useful segment of the key is often then the second segment.

Added a new structure token <TAG_VALUE> which inserts the value associated with a structures tag expression. If the structure does not have a tag expression then the token inserts nothing.

Added a new structure token <MAPPED_TAG_FIELD> which allows you to access the name of the first tag field in a mapped structure.

Added a new mechanism to allow developers to override the key that is used within a primary key block. By default the primary key is used within a primary key block, but the new -opk <keyNum> option allows you to chose to use a different key. This can be useful in rare situations where a master /detail relationship between two structures is based on a relationship from the primary key in the master file to an alternate key in the detail file.


V4.2.7 - 17th December 2012

Added new field loop tokens <FIELD_DIMENSION1_INDEX>, <FIELD_DIMENSION2_INDEX>, <FIELD_DIMENSION3_INDEX> and <FIELD_DIMENSION4_INDEX>. Also added new field loop expressions <IF ARRAY1>, <IF ARRAY2>, <IF ARRAY3> and <IF ARRAY4>. These tokens and expressions are useful when working with multi-dimensioned arrays.

One of the most significant changes in this release is the introduction of automated unit testing within the CodeGen development environment. We are now taking advantage of Visual Studio's built in unit testing framework and and are gradually writing tests for many different areas of CodeGen. At the time of writing we have implemented almost 650 individual tests, and in the process of doing so we have already identified (and fixed) several bugs. Having this automated testing capability in place will help us to perform much more extensive regression testing on a regular basis. And for future new features, developing tests for new features before those new features are developed will help to ensure that we get those new features right first time. Embracing unit testing will help to ensure a consistently high level of quality and reliability for future releases.

Enhanced the CodeGen.RepositoryAPI.Repository class by adding a new property named Enumerations which exposes the enumerations that are declared within a repository database.

Addressed an issue which was causing array and group fields, when expanded by CodeGen, to be listed in the wrong sequence in some cases. Also addressed similar issues with various field loop expressions.

Corrected the output of the <FIELD_MINVALUE> and <FIELD_MAXVALUE> tokens so that the values inserted for integer fields are not preceded with a bunch of leading spaces.

Fixed a problems with the <FIELD_ELEMENT> and <FIELD_ELEMENT0> field loop tokens, which were both inserting incorrect values for non-array fields.

Removed three redundant field loop tokens <FIELD_ARRAYDIMP>, <FIELD_ARRAYDIMP0> and <FIELD_ARRAYDIMR>. Following changes in the way that arrays are processed by CodeGen earlier this year these tokens were no longer useful.

Fixed a bug with the replacement of the generic token <DAY>.

Fixed a bug with the replacement of the field loop token <FIELD_ARRIVEM>.

Fixed bugs with the processing of the <REQUIRES_CUSTOM_RELATION_TOKEN> and <REQUIRES_CUSTOM_SELECTION_TOKEN> token.

Fixed a bug with the <ENUM_NUMBER> token which is documented to return a one-based number but was previously returning a zero-based number.

Fixed a bug in the processing of the <ENUM_MEMBER_COUNT> token.


V4.2.6 - 21st November 2012

IMPORTANT: If you are using CodeGen in conjunction with Symphony Framework then it is important that you do not upgrade to this version of CodeGen until you also upgrade to Symphony Framework V2.1.0.0.

The CodeGen installation on Windows now supports upgrading from a previously installed version. We use Windows Installers "major upgrade" mechanism, which essentially performs an automatic uninstall of a previous version before installing the new version. The earliest version that can be upgraded in this way is V4.1.0 which was released on 6th June 2012. If you are running a version older than 4.1.0 then you will need to manually remove that version one final time before installing this version. You can determine the version of CodeGen that you have installed via the command codegen -version.

Added support for custom expressions in all loop structures where expressions can be used.

Added two sets of counters that developers can use in template files.

Added several counter expressions. Currently, despite the fact that counters can be used anywhere in a template, counter expressions can only be used within one of the existing loop structures. We are investigating the possibility of supporting the use of counter expressions, as well as some other expressions, outside of a loop structure.

Changed the API for adding custom tokens for consistency with the new custom expressions support.

Fixed a problem where unnecessary blank lines were being written to output files. Now if a template line contains a template comment (;//) which does not start in column 1 and is the only thing in the line, or if a template line contains a token but after token replacement the line is blank, blank lines will no longer be output.

Fixed a problem in Repository API which was preventing structures containing nested explicit groups from loading. Also added more developer debug mode logging code in the CodeGenLauncher and CheckStructure routines.

Fixed a problem which occurred if the entire content of a template file was delimited by a level 1 loop (for example a field loop) then the final line of output code could be duplicated in some rare cases. Also fixed an issue where in some cases an output file could include an incorrect additional blank line at the end of the file.

Changed the location where the sample templates are installed on Windows systems. On Windows systems sample templates are now installed in the folder <system_drive>:\ProgramData\Synergex\CodeGen\Templates.

Improved the code in several of the example templates. Various internal enhancements and code cleanup also took place for this release.


V4.2.5 - 10th November 2012

Added the ability to use an alternate form of closing tags for all expressions. For example, if using an <IF ALPHA> expression you can now optionally use the </IF ALPHA> closing tag instead of the generic </IF> closing tag. The behavior is the same in either case, but using the more explicit form can improve readability in complex template files.

Fixed a problem with expressions in nested loops (e.g. key segment loops) where in some cases an expression token from a nested loop would be written to the output file.

Added a custom mechanism to allow BusinessCraft to extend CodeGen by processing their "ProForma" files.


V4.2.4 - 8th November 2012

Added new <FIELD_ROW>, <FIELD_COL>, <PROMPT_ROW> and <PROMPT_COL> field loop tokens.

Added case variations for the <FIELD_ARRIVEM>, <FIELD_CHANGEM>, <FIELD_DRILLM>, <FIELD_HYPERM> and <FIELD_LEAVEM> tokens.


V4.2.3 - 5th November 2012

Added a new generic token <OPTIONAL_USERTOKEN> which can be used to indicate that a template requires a specific user defined token, but which also provides a default value for that user token if a value has not been provided by any of the other mechanisms for providing values for user defined tokens.


V4.2.2 - 3rd November 2012

Added support for optional else clauses in all multi-line expressions. We do not currently support else clauses in in-line expressions, but will investigate the possibility of adding that feature in the future.

Added a new mechanism to support custom field loop expressions based on testing the presence or absence of text in an input fields user text or long description. For example, if you place the text IGNORE_THIS_FIELD in a fields user text or long description, you can test the presence of that string using the field loop tokens <IF CUSTOM_IGNORE_THIS_FIELD> and <IF CUSTOM_NOT_IGNORE_THIS_FIELD>. Custom field loop expressions should always be typed in upper case in template files. The custom expression text placed in a fields user text or long description is not case sensitive.

Added a large number of new key segment loop expressions to make the expressions available in key segment loops consistent with the expressions available in field loops.

Added a new internal mechanism for initiating code generation via the CodeGenerator, CodeGenTask and CodeGenTaskSet classes. In the future these changes will be used to launch code generation from new desktop applications, including code generation wizards within Visual Studio projects.

Added a new desktop application named CodeGen Task Manager. This application allows you to define task sets which contain one or more code generation tasks, and then replay those task sets to regenerate the resulting code. This application is currently experimental, not all planned functionality has been implemented, and it is not yet fully functional.

Enhanced the error reporting to include the exception details for when CodeGen fails to load a custom tokens assembly. Also various improvements to error logging in other areas.

Changed the way that the setup program for Windows binary releases are created. We used to use InstallShield Express 2012, which is a purchased product. We have now switched to using InstallShield Limited Edition For Visual Studio, which is a free option for Visual Studio 2010 and 2012 developers and still provides the basic functionality that we need.

Tested CodeGen with Synergy/DE 10. For the time being we will be distributing two versions of the CodeGen Windows installation, one built with Synergy/DE 9.5.3b and one built with the latest Synergy/DE 10 beta version. We will stop distributing the 9.5.3b installation when Synergy/DE 10 is released, but previous builds will continue to be available for download from the CodePlex site.


V4.1.10 - 20th September 2012

Added a new field loop token <FIELD_SELWND> to insert the name of the selection window that is associated with a field, and two new field loop expressions <IF SELWND> and <IF NOSELWND> to allow you to test whether the field has an associated selection window name.

Added a new field loop token <FIELD_ENUMWIDTH> which defines the pixel width associated with an enumerated fields longest enumerated value.

Added two missing imports that were preventing CodeGenEngine from building on OpenVMS.

Improved the SQL SELECT logic in a couple of the sample templates.


V4.1.9 - 7th September 2012

Added a new field loop token <FIELD_NOECHO_CHAR> which is replaced by the character that should be used to represent each character typed into a field, in place of the actual character (think password fields). If the current field being processed is a "no echo" field then the token will be replaced by the no echo character specified in the repository field definition, or by an asterisk (*) if no character is specified. If the field is not a "no echo" field then the token will be replaced by a null string.

Added a new utility program called RpsBrowser. This utility allows you to quickly browse the information available in your Synergy Repository. The utility only has basic functionality at this point and will be enhanced over time.

Added a new feature called  key loop first segment restrictions which allow you to process only the first segment of a multi-segment key. For more information refer to the documentation for the <FIRST_SEGMENT> token.

Added a new Field Loop Expression <IF NOTDATETODAY> which can be used to detect date fields which do not default to the current date.

Improved the output of <FIELD_MINVALUE> and <FIELD_MAXVALUE> so that a decimal point and trailing digits are not output for non implied decimal fields.


V4.1.8 - 14th August 2012

Added a new field loop token <FIELD_PREFIX> which will be replaced with the field prefix value specified via the -prefix command line option, or with a null string if the -prefix option was not used.

Added a new field loop token <FIELD_BREAK_MODE> and three new field loop expressions <IF BREAK_CHANGE>, <IF BREAK_ALWAYS> and <IF BREAK_RETURN>. Note that the existing <IF BREAK> and <IF NOBREAK> expressions can also be used when processing break fields.


V4.1.7 - 31st July 2012

Added the ability to populate field selection lists based on items defined in UI Toolkit selection windows defined in window script files. For more information refer to Selection Windows.


V4.1.6 - 30th July 2012

Added various new field loop expressions including <IF NOCHECKBOX>, <IF DATE_YMD>, <IF DATE_NOT_YMD>, <IF DATE_YYMMDD>, <IF DATE_YYJJJ>, <IF DATE_YYYYJJJ>, <IF DATE_JULIAN>, <IF DATE_NOT_JULIAN>, <IF DATE_YYPP>, <IF DATE_YYYYPP>, <IF DATE_PERIOD>, <IF DATE_NOT_PERIOD>, <IF TIME_HHMM> and <IF TIME_HHMMSS>.


V4.1.5 - 26th July 2012

Added the ability to load custom token extensions which are located in directories other than the main CodeGen directory. This can be done by setting the environment variable (or logical name) CODEGEN_EXTDIR to the directory containing the custom token assembly, ELB or shared image. If CODEGEN_EXTDIR is not found then CodeGen will continue to search for custom token extensions in the main CodeGen directory.

Added a new generic token <REQUIRES_USERTOKEN> which can be used in the header portion of a template file to indicate to CodeGen that the template relies on a particular user-defined token. If the user-defined token has not been specified when attempting to generate code from the template then an error message will be displayed and the template will not be processed.

Added new tokens <REQUIRES_CUSTOM_TOKEN>, <REQUIRES_CUSTOM_FIELD_TOKEN>, <REQUIRES_CUSTOM_SELECTION_TOKEN>, <REQUIRES_CUSTOM_KEY_TOKEN>, <REQUIRES_CUSTOM_SEGMENT_TOKEN>, <REQUIRES_CUSTOM_RELATION_TOKEN>, <REQUIRES_CUSTOM_ENUM_TOKEN>, <REQUIRES_CUSTOM_ENUM_MEMBER_TOKEN>, <REQUIRES_CUSTOM_FILE_TOKEN> and <REQUIRES_CUSTOM_BUTTON_TOKEN>. These tokens allow you to indicate in the header section of a template file that specific custom tokens are required in order to successfully generate code from the template. If CodeGen determines that a required custom token has not been provided then an error message will be displayed and the template will not be processed.

Added two new options to the existing <REQUIRES_OPTION> token to allow template developers to specify in a template file that the -prefix or -subset option is required in order to process the template. Also enhanced error logging to report the name of the template being processed when a missing required command line option is encountered.


V4.1.4 - 20th July 2012

Fixed a bug in the <SELECTION_VALUE> token that was causing it to produce values one lower than required for numeric selection lists.

Fixed a couple of documentation typos.


V4.1.3 - 18th July 2012

Modified the -w command line option to add the ability, when processing based on UI Toolkit input window definitions in a script file, to select the input window to be processed by name as well as by index number.

Added a new -wn command line option which prevents script file input window field attributes from being used to override repository field attributes. This allows you to generate code based on only the fields listed in an input window, but using only the repository field definitions.


V4.1.2 - 17th July 2012

Fixed a bug in the IsNumeric sample functions where they would previously report valid negative decimal and implied decimal numbers as non-numeric.

Fixed a problem where command parameters were not being correctly passed to shell scripts on Unix.

Fixed a bug in %WinDir and improved the build script on UNIX.

Improved %WinDir on UNIX so that it doesn't display "File not found" messages.

Fixed a UI Toolkit Window Script file parsing bug.

Worked around a Synergy .NET bug with alpha -= "VALUE"


V4.1.1 - 19th June 2012

Fixed a bug in the DataMappings.xml file for SQL data mappings of implied decimal fields. Also renamed the file to DataMappingsExample.xml so that CodeGen doesn't load the file by default but continues to use hard-coded defaults. To customize data type mappings the file should be coped back to DataMappings.xml and then customized.

Enhanced error checking to detect and report missing end of loop tokens for multi-line loops.

Enhanced error checking to better detect if someone mis-types a closing token for an in-line loop.

Added the InstallShield Express 2012 project that is used to build the binary distributions for CodeGen. This content is intended for use by the project coordinator only, but could also serve as a reference for anyone else wishing to build binary distributions of CodeGen using InstallShield Express 2012.

Microsoft has announced that they are removing support for the WIX-based "Installation and Deployment" projects in Visual Studio 2012, so in the future developers will need to select and use a third-party tool (e.g. InstallShield) to build product installations. I don't want CodeGen users to get used to using something that I know is going to be removed in the near future, so I have decided to stop distributing the CodeGenSetup and InstallerCustomActions projects. I will be reverting to using InstallSheild Express 2012 to build the CodeGen binary installations. If developers wish to build binary installations of their own they will need to select a suitable third-party installation product and configure their own installations.

Added a Synergy/DE Workbench workspace and projects to make building for Traditional Synergy on Windows easier for developers who have Workbench installed.

Added a new example template named syn_multi_data_class.tpl which is an example of using structure loops, and also added an example to the documentation.


V4.1.0 - 6th June 2012

We added the ability to process multiple repository structures at the same time in a single template file. This feature is implemented via a new command line option -ms which instructs CodeGen to make all of the structures specified after the -s command line option available to the template(s) being processed. The default context when starting to process each template is the first structure, but context can be switched to a different structure by using a <STRUCTURE#n> token, where n is the 1-based index of the structure to switch to.

We fixed a bug in the processing of the structure token <TAG_EXPRESSION> and added three new tokens named <TAG_EXPRESSION_PATH>, <TAG_FIELD_NAME> and <TAG_FIELD_PATH>.

We added some brief documentation for the CreateFile, MapPrep and RpsInfo utilities.

We added a new -file command line option which allows code generation to be initiated based on a repository file definition as a starting point. When using -file all of the structures that are assigned to that file are available to be used in the template, in the same way that you would when using the new multiple structure (-ms) support.

We added support for a new <STRUCTURE_LOOP> capability which allows iteration through any number of structures without prior knowledge of the number of structures to be processed. Structure loops can be used with both multi-structure (-ms option) and file-based (-file option) operations.


V4.0.9 - 4th June 2012

Added the CreateFile utility which allows you to create an ISAM file based on Repository structure, key and file definition information.

Added a new mechanism which allows developers to extend CodeGen by providing custom token processing without the need to edit the core CodeGen source files. For more information refer to Adding Custom Tokens.

Added a new <FILE_LOOP> construct which allows you to generate code for multiple files that are assigned to a single structure. There are several new file loop tokens and file loop expression tokens, and also support for creating custom file loop tokens.

Added the ability to customize the data type mappings for other languages that are produced by the <FIELD_SQLTYPE>, <FIELD_CSTYPE>, <FIELD_VBTYPE> and <FIELD_OCTYPE> tokens. You can now define custom mappings in an XML file named DataMappings.xml which must be placed in the main CodeGen folder (alongside the executables and libraries). If the XML file is not found then CodeGen will continue to use its default hard-coded data type mappings, but if the file is found then CodeGen will use the mappings defined in the file. For more information refer to Customizing Data Type Mappings.


V4.0.8 - 24th May 2012

Fixed an error with the doc comments for the constructor in the DatabaseTable template.

Added the ability to specify the special @MAP, @MAPF, @UNMAPF, @AUTOINCREMENT, @NOCODEGEN, @CODEGEN_DISPLAY_FIELD, @NOAUDIT and @SUB codes in a fields long description in addition to the fields user text string.


V4.0.7 - 12th May 2012

CodeGen is now published as an open source project on CodePlex. You can download a pre-compiled Synergy .NET binary release of CodeGen, or you can download the source code and build it yourself. The source code download includes scripts that can build CodeGen using Traditional Synergy on Windows, Unix, Linux and OpenVMS systems.

This release includes changes to the SQL Connection API example templates. The old SQL_* templates have been retired, and replaced with two sets of new templates. The templates named DatabaseRoutines*.tpl can be used to generate SQL Connection API code based on subroutines and functions (similar to the old SQL_* templates), and the new DatabaseTable* templates generate database interaction classes, which are easier to use in "consuming" code.


V4.0.6 - 4th May 2012

IMPORTANT: The default version of CodeGen that is executed by the "codegen" command is now built with Synergy .NET. For the time being the DBR version of CodeGen is still being provided, and can be accessed via the command "codegendbr". Please note that if you have batch files which use "call codegen" commands, you will need to either remove the "call" command, or change your commands to continue to use the DBR version for the time being by changing your batch files to "call codegendbr".

Other changes in this version include:

Added a new key segment loop token <SEGMENT_DESC>.

The MapPrep utility has been enhanced so that it now adjusts the names of key segment fields in line with changes to the underlying field names.

This version of CodeGen is now built with Synergy/DE 9.5.3b


V4.0.5 - 12th April 2012

The CodeGen installation now includes a version of CodeGen built with Synergy .NET. In the near future only the Synergy .NET version will be distributed, but for now it is being distributed for testing purposes so that others can help to validate that it is operating correctly. The Synergy .NET version is currently named CodeGenNet.exe and should operate identically to the Traditional Synergy version of CodeGen. To test with the Synergy .NET version simply use the CodeGenNet command instead of the CodeGen command. Command line options are identical, but please not that if you currently use CodeGen from batch files with a "call codegen" syntax, the call statement is not required when using CodeGenNet.

Added support for processing structures which contain multi-dimensional array fields, including multi-dimensional group field arrays.

Added a new field loop token <FIELD_REGEX> which will produce a regular expression that can be used to constrain and validate user input to a field based on the repository definition of the field.

Added support for processing a named subset of fields in a structure via the -subset command line option. Field subsets are defined in the repository by adding syntax like @SUB=name; to one or more fields user text string.

Added a new field loop token <FIELD_INPUT_LENGTH> which can be used to set the maximum number of characters that can be entered into a UI control associated with the field.

Added <IF AUDIT> and <IF NOAUDIT> field loop expressions. [Note the these tokens have since been removed because the same functionality can now be achieved via custom field loop expressions.]


V4.0.4 - 28th February 2012

Added a large number of new field loop expressions.

Added a new field loop tokens <FIELD_ARRAYDIMP0> and <FIELD_ELEMENT0>.

Improved error messages when there is a problem creating an output file.

CodeGen now supports nested groups within a structure, and also single-dimension group arrays.

Added a new -g i command line option which causes implicit groups to be processed as a single field, instead of being expanded out to multiple individual fields. When using this option the field type of the group field becomes a class, and you must independently generate that class.

It is now possible to generate code based on a "pseudo structure" which is made up from the fields in an explicit group (i.e. a group with fields locally defined in a structure). This is only supported for explicit groups which are direct members of the structure, not groups nested within other groups. To generate code based on an explicit group, specify the structure name with -s as <structure>.<groupField>.


V4.0.3 - 19th February 2012

Added a new -cw command line option to override the default pixel width of a character.

Added a new -ch command line option to override the default pixel height of a row.

Updated the help file to reflect these changes, and also added this release notes page.


V4.0.2 - 14th February 2012

Re-worked group field support such that overlays within groups are processed the same way that non-group overlay fields are processed. Note that nested groups are still unsupported.

 

 

 


Copyright © 2012  Synergex International, Inc.