Release 2019-02-26

Posted over 5 years ago by Lars Kjaersgaard

Lars Kjaersgaard
Lars Kjaersgaard Admin

For Contributors

  • A Sandcastle Help File Builder project to document the Interface Libraries has been added to the MigFx Visual Studio Solution (Source\Interfaces\Interfaces.Documentation). Please install Sandcastle Help File Builder from here if you wish to be able to load and build this project.
  • The resulting documentation of the Interface libraries can be seen on the web site here

Studio 1.2.0

  • New options available when creating a Lookup Rule. Read more about this here: Defining a Lookup Rule in Studio. This new functionality requires a refactor of all existing Maps, please see below.
  • When entering a Literal Value, the panel can now be expanded to ease the entry of a multi-line value
  • Enhancements of the Auto assign values feature for Target Fields in the Target Map. Read more about this here: Auto-assign Target Fields
  • Fixed bug that a new Target Object was not automatically assigned Target values to an existing Target Object, if such a Target Object existed for the same target table. 
    • At the same time, this facility has been enhanced to allow the user to disable it or choose which Target Object to use. Read more about this here: Adding a new Target Object
  • New setting: Default value for new, nullable fields. Read more about this here: Settings for Source- and Target Maps. Default for the new setting is None, which corresponds to the current behavior of Studio
  • Source Map: List of Source Views added (double-click the View node in the Studio Project Explorer)
  • Max precision for data type Num is now 38 (was 18)
  • Invalid Metadata Field Name will result in Validation error 0150. Column for validation result added to the Fields list
  • Names can now start with an underscore
  • Reports renamed
  • Fixed bug that manual sequence of Target Map and Source Map Interface fields was not properly taken into account when valdating calculation sequence. The problem made it difficult/impossible to correct validation error 0190
  • Fixed that Manual Rules and Bag Methods sometimes enabled the Scale TextBox for Data Type Char
  • Fixed bug that manual rules where not correctly parsed for Valueset queries. This led to missing indexes on Valueset tables in Staging database
  • Fixed bug that the individual cells on the Relationship datagrid on a Business Object was open for edit (edit is done in the frameless dialog that open on row click)
  • More robust guard against exceptions in the ComboBox.ValueChanged event. Exceptions are written to the Windows Event Log
  • Fixed bug that the list of Interface Fields on an Business Object in the Source Map sometime threw an InvalidOperationException (BindingSource cannot be its own data source)
  • Fixed bug the that validation of an Identity Value failed with a Null Reference exception, if the parent Target Object previously had been closed without saving changes
  • Fixed bug that a corrupted Tool Window Layout xml file made it impossible to start Studio. If the layout xml file is corrupted, it is now deleted and Studio will start with a default Tool Window Layout on next attempt 

Migration databases

  • Fixed recursive Sql to determine import sequence to properly handle self-referencing items (Ticket 135). 
  • Please update all Migration databases using the attached script UpdateMigrationDb.sql 

Director Watcher Service 1.2.0

  • Renamed to MigFx Director Agent
  • Will look for scripts in the installation folder
    • If Startup.cmd is found, it will be executed when the service starts
    • If Shutdown.cmd is found, it will be executed when the service shuts down
  • Look in the Application Event Log to see standard output and standard error from the scripts

Director.Client 1.2.0

  • Track Window no longer maximizes automatically on open

Director Runtime 1.2.0

  • Fixed bug that Fast Track Export found Source Engine RunParameters ok, but did not find any Target Engine RunParameters
  • Extension jobs now have access to new information via the Job Context interface
    • TrackNumber 
    • The path to the Track folder dedicated to Extensions

EngineFramework 1.2.0

  • New facility to lookup a root Business Object from any manual rule in the Target Engine (see below)
  • Support for new options on Lookup Rules in the generated code (Source- and Target Engine)
  • Identity() methods have been made available to ExitRules. The Identities created will be unique for the Business Object
  • Fixed bug that null value was not correctly retrieved from an Interface Field xml node with no value attribute
  • Fixed bug in Target Engine Generator that the Select method of generated TargetEntity wrappers did not correctly query on metadataId (left over from the rename of 'schema' to 'metadata')
  • Fixed bug that incorrectly generated TargetEntity Wrappers in the root Target System of the TargetSystem folder when no Alias supplied for the Metadata in Studio. When no Alias is supplied, the Name of the Metadata must be assumed as Alias and the wrappers places in a corresponding  sub-folder 
  • Changed signature of the Select method on TargetEntity wrappers to take a TargetEntitySearchMode enumeration as parameter instead of boolean includeDescendants. NB: May cause some manual rules to fail in compilation, however the fix is easy, see below

Interfaces 1.2.0

  • New MigExcelWriter class exposed to enable extensions to easily write Excel files
  • Fixed bug that caused Studio and Director to keep an exclusive lock on an Excel Valueset file if load data failed
  • TrackNumber and additional Extension folder introduced in the IJobContext interface for Extension jobs
  • Sandcastle help file project added 
  • Xml comments refined
  • Install on all workstations and migration servers
  • Please adhere closely to this installation recipe
    1. Close all instances of Studio and Director (if migration server, also stop all tracks and stop the Watcher service)
    2. Uninstall Interfaces 1.1.3
    3. Verify that the Interfaces dlls have been deleted from
      If not, delete the dll manually
    4. Install Interfaces 1.1.4
    5. If migration server, start the Watcher service

Tracker 1.2.0

  • Fixed bug that caused the Tracker to be in an unusable state for a user, if settings where changed without selecting a language
  • Minor change derived from the new MigExcelWriter in Interfaces 1.1.4

Utility 1.2.0

  • Now exits with code 0xFF on any error (delivered as hotfix 2019-02-08)

Refactoring of Studio Maps

New, enhanced functionality for Lookup Rules requires a refactor of all Studio maps. The refactoring utility MigFx.Studio.Refactor is delivered with the Studio installer in the Studio installation folder (normally C:\Program Files (x86)\HoppTech\MigFx.Studio\1.0). 

The refactor utility takes these parameters:

  • Operation: To select which refactor to execute, in this case LookupEnhancement
  • FromFolder: The folder from where to read the original Map to be refactored
  • WorkingFolder: The Folder to which to write the refactored Map. If this folder exists, it will be deleted and recreated

In case the Map has been checked in to the Repository, the recommended procedure is:

  1. Ensure nobody has anything checked out
  2. Open the Map in Studio (the new release can open the original Map, but will not save Lookup Rules correctly)
  3. Check everything out and close Studio
  4. Rename the working folder (for instance suffix the folder name with '.old'
  5. Run the refactor utility, specifying the '.old' folder as input and the original folder name as output
  6. Open the refactored Map and check everything in
  7. Delete the '.old' folder

Other users can now simply do a global get latest to recover the refactored Map (no need to cleanup their workspaces).

Command line

C:\Program Files (x86)\HoppTech\MigFx.Studio\1.0>MigFx.Studio.Refactor -Operation=LookupEnhancement -FromFolder=(original) -WorkingFolder=(refactored)

Please enclose folder path names in double quotes if they contain any spaces.

TargetEngine: Root Business Entity Lookup from manual rules

The generated code for the Target Engine now has access to a new facility to lookup a root Business Object from any manual rule in the Target Engine by supplying values for the key Interface Fields. NB: Looking up a Business Object like this does not create a runtime dependency (migFx does not guarantee that the target Business Object is processed first).

A lookup returns an IRelationship instance with properties to retrieve the xml for Interface item received from the Source Engine as well as the Imported produced by the Target Engine.


var account = Lookup.Account(bankId, accountNumber); // Returns an IRelationship instance

if (null != account) // Null if the target Business Object is not found
    var exportedXml = account.ExportedItem; // XmlElement containing the xml produced by the Source Engine
    var importedXml = account.ImportedItem; // XmlElement containing the xml produced by the Target Engine

TargetEngine: Changed signature on TargetEntity wrappers Select method

The generated Select method has been enhanced to allow better control of how the Imported Item is searched for instances of the given TargetEntity. As can be seen below, both the old and the new signature has 2 parameters, the second of which has a default value.

// New signature
public static IEnumerable<T> Select(XmlElement item, TargetEntitySearchMode searchMode = TargetEntitySearchMode.Global)

// Old signature
public static IEnumerable<T> Select(XmlElement item, bool includeDescendants = true)

As long as no value is supplied for the second parameter, the method will behave as before. However, this change will cause existing rule implementations that explicitly supply a boolean value for the second parameter to fail in compilation. In this case, these corrections will cause the rule to compile and behave as before:

includeDescendants: trueRemove the value for the parameter from the call to revert to the default or explicitly supply TargetEntitySearchMode.Global for the searchMode parameter
includeDescendants: falseSupply TargetEntitySearchMode.Item for the searchMode parameter

0 Votes


Login or Sign up to post a comment