Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Version published after converting to the new editor

...

A complex upgrade project will may have many upgrade tasks (VBPs) and many rulesupgrade features.  The ScriptRules feature provides a means for organizing the translation script rules into files based on upgrade features and then applying the content of those files to the upgrade tasks conditionally. 

Script rules are placed in a ScriptRule.xml file one or more ScriptRule files which defines collections of script commands that may be conditionally merged with the translation script template to create different actual translation scripts. The ScriptRule syntax supports script parameters and conditional commands. This makes it possible, in one template, to describe a variety of common and task-specific upgrade commands.   

ScriptRule files are also helpful for API-based upgrades tasks. These tasks use an EXE an custom migration executable implemented using gmslAPI rather than a XML script templategmBasic. The gmslAPI includes the ScriptRule class to assist with preparing a ScriptRule file content for use by the gmslAPI services.

Info

You may add a sample ScriptRules file from the Settings form Configuration/Template Files. 

Image Added


Sample ScriptRules File

Most of the documentation for using ScriptRules is maintained in the sample ScriptRules file distributed with the product and listed below.  To you this file, add it to your user folder, modify it with the rules you need, and reference it from your main script template.

Code Block
languagexml
<!--
ScriptRule File SyntaxOverview

   AThe ScriptRule.xml file is an XML documentdefines named collections of script commands that
may  contain onemay orbe moreconditionally ScriptRulemerged with the template translation elements.script creating These
elements and their attributesdifferent areactual describedtranslation belowscripts. This makes <ScriptRule id="name" Condition="condition" > elementsit possible, with one 
   template, ScriptRuleto elementsautomate containa namedvariety scriptof commandcommon collectionsand task-specific upgrade options.

   TheScriptRule idfiles attributeare isalso theneeded namefor ofAPI-based theupgrade ScriptRuletasks. and isThese 
also used  tasks use an in your translation script to activate the ruleEXE implemented using gmAPI rather than a XML script template.  
   The ConditiongmAPI attributeframework isincludes useda toScriptRule controlclass whichproviding rulesservices areto merged
into   integrate ScriptRule tofile thecontent actualwith translationother scriptgmAPI services.

<Command Condition="condition"> elementsScriptRule File Syntax

   CommandA elementsScriptRule arefile childrenis ofan aXML ScriptRuledocument that specifymay thecontain contentone or more ScriptRule that
should be merged intoelements. the translationThese scriptelements template.and their Theattributes followingare described below.

<ScriptRule types of Commandid="name" Condition="condition" > elements
are
currently supported:  ScriptRule elements contain Optionnamed script command collections
   Inserts
commands that replace theThe <ScriptRule>id tagattribute inis the name of the ScriptRule and is also used 
   in your translation script to mergedactivate transcript,the typicallyrule.
Select,
Reference, and Registry commands.The Condition attribute is used to control which rules are merged into 
   to the Compileactual translation script.

<Command  Inserts commands as children of the Compile block. Typically
      Condition="condition"> elements

   Command elements are children of a ScriptRule that specify the content
   that should be merged into the Select,translation Reference, Fix, and Refactor commands.script template.  The following 
   types of Command elements are currently supported:

    Option Analyse      Inserts commands asthat childrenreplace of the Analyse<ScriptRule> blocktag in the 
PreAnalyse   Inserts commands before the Analyse block, typically refactor commands     merged transcript, PostAnalysetypically  Inserts commands after the Analyse block, typically refactor commandsSelect, Reference, and Registry commands.
             
   Load  Author       InsertsInsert commands as children of the AuthorLoad block,. typicallyTypically FixFixcommands.
commands   
 PostAuthor  Compile Inserts commands after the Author block,Inserts typicallycommands topas levelchildren gmPLof commandsthe Compile block. Typically
 The Condition attribute is used to control which commands are merged into    Select, toReference, theFix, actualand translationRefactor scriptcommands.
         Condition attributes   
 A Condition attributeAnalyse may be applied to any otherInserts element.commands Itas specifieschildren of the Analyse block
  condition underPreAnalyse which the elementInserts andcommands itsbefore childrenthe willAnalyse beblock, mergedtypically withrefactor thecommands
   PostAnalyse template scriptInserts tocommands createafter the actualAnalyse script.block, typically refactor commands
 Syntax  
   Author       Inserts commands as %variable_expression%children op 'value_expression'
   
of the Author block, typically Fix commands

 where  PostAuthor   Inserts commands after the variable_expressionAuthor block, typically alltop scriptlevel variablesgmPL andcommands
other
characters   The Condition attribute opis used to control which commands are merged into 
   to the actual translation script.

Condition ==attributes
true
if %variable_expression% == value_expressionA Condition attribute may be applied to any other element. It specifies the 
   condition under which the element and its children will !=be truemerged ifwith %variable_expression%the !=
value_expression   template script to create the actual script.

   Syntax            =~ true  if %variable_expression% matchesop regex 'value_expression'
   
   where 
   
   variable_expression   all script variables and other characters !~
true if %variable_expression% doesop not match regex value_expression                == true if %variable_expression% == value_expression
        value_expression      a constant string or regex pattern      != true Comparisonsif are case insensitive using trimmed strings.%variable_expression% != value_expression
                         =~ true if %variable_expression% matches regex value_expression
Relational operators are not supported, but you can use       Condition="var1.var2=='val1.val2'" to simulate locical AND       Condition="var=~'val1|val2'"       to simulate logical OR!~ true if %variable_expression% does not match regex value_expression
      For example  Condition="%SrcName%=='ScanToolUI'" indicates that the associated            
   value_expression  element will only be mergeda forconstant upgradestring tasksor havingregex SrcNamepattern
equal   
   Comparisons are case insensitive using trimmed strings.
   to the string "ScanToolUI".                 <ForEach>, <Iterator>, and
<Each> elements  Relational   ForEach elementsoperators are childrennot ofsupported, thebut ScriptRule.you Theycan allow repeatinguse
    Command elements for each file in the source project folder that meet 
   certain criteria.  This element may also be used to copy files
   from the source project folder to the .NET project folder. Condition="var1.var2=='val1.val2'" to simulate locical AND
      Condition="var=~'val1|val2'"       to simulate logical OR

   For example  Condition="%SrcName%=='ScanToolUI'" indicates that the associated 
          The set of files to iterate overelement iswill definedonly bybe amerged <Iterator/FileInfo>for elementupgrade tasks having SrcName equal
according to its attributes:          The FileInfo Criteria attributeto isthe a search pattern (e.g. *.wav) used tostring "ScanToolUI".
         get files from the source folder. 
<ForEach>, <Iterator>, and <Each> elements

  The FileInfoForEach Fileselements attributeare maychildren beof "All" or "Top"the ScriptRule. They Theallow defaultrepeating is
"All".   Command elements for If Files="All", the root of the source folder and all of its sub-folders are 
   searched; if Files="Top", only the root of the source folder is searchedeach file in a specified folder that meets 
   certain criteria.  This element may also be used to copy files
   from the specified folder to the .NET project folder.
   
   The CopyFilesset attributeof mayfiles beto "On"iterate or "Off".  The default is "On". Ifover is defined by a <Iterator/FileInfo> element 
    CopyFiles="on", the files found in the source project folder will be copied
   to the corresponding .NET project folder with directory structure preserved.
   The folders and files are copied prior to the translation process.
   
   Within the <Each> block, the notation %FileInfo.member% may be used to refer 
   to information about the files found in the source folder:

   %FileInfo.RelativeName%: path relative to the source project root
   %FileInfo.Name%: file name
   %FileInfo.FullName%: full path
   %FileInfo.DirectoryName%: parent folder name

Activating a ScriptRule

   Adding a <ScriptRule> tag to the script requests the merging of the named
   script collection.

   <ScriptRule id="name" attributeList /> 

   The id attribute specifies the command collection to add.

   The attributeList specifies variables that may be referenced elsewhere 
   in the ScriptRule. Variable references are case insensitive. 

   For example the following ScriptRule tag: 

   <ScriptRule id="IncludeResources" Criteria="*.wav" /> 

   requests loading the command collection named IncludeResouces and 
   creates a ScriptRule variable named %Criteria% with value = "*.wav"
   
Specifying the ScriptRule file

   By default, the ScriptRule XML is located in a file called ScriptRule.xml 
   and is typically kept in the workspace\usr folder.
   
   If desired, you may specify an alternate location using a FileName attributeaccording to its attributes:  
   
   The FileInfo@Criteria attribute is a search pattern (e.g. *.wav) used to 
   get files from the source folder.  
   
   The FileInfo@Folder attribute specifies the folder to search for files.
   The default is the source folder associated with the upgrade task.
   %SrcFolder%, %UserFolder%, and %ProjFolder% script variables may also be used.

   The FileInfo@Recurse attribute may be "All" or "Top".  The default is "All".  
   If Files="All", the root of the source folder and all of its sub-folders are 
   searched; if Files="Top", only the root of the source folder is searched.
   
   The FileInfo@CopyFiles attribute may be "On" or "Off".  The default is "On". If 
   CopyFiles="on", the files found in the source project folder will be copied
   to the corresponding .NET project folder with directory structure preserved.
   The folders and files are copied prior to the translation process.
   
   Within the <Each> block, the notation %FileInfo.member% may be used to refer 
   to information about the files found in the source folder:

   %FileInfo.RelativeName%: path relative to the source project root
   %FileInfo.Name%: file name
   %FileInfo.FullName%: full path
   %FileInfo.DirectoryName%: parent folder name

Activating a ScriptRule

   Adding a <ScriptRule> tag to the script requests the merging of the named
   script collection.

   <ScriptRule id="name" attributeList /> 

   The id attribute specifies the command collection to add.

   The attributeList specifies variables that may be referenced elsewhere 
   in the ScriptRule. Variable references are case insensitive. 

   For example the following ScriptRule tag: 

   <ScriptRule id="IncludeResources" Criteria="*.wav" /> 

   requests loading the command collection named IncludeResouces and 
   creates a ScriptRule variable named %Criteria% with value = "*.wav"
   
Specifying the ScriptRule file

   By default, the ScriptRule XML is located in a file called ScriptRule.xml 
   and is typically kept in the workspace\usr folder.
   
   If desired, you may specify an alternate location using a FileName attribute
   for example:
   
   <ScriptRule id="ADODBUpgrade" FileName="..\usr\ADODB.Rules.xml" /> 
   
   The above loads the ScriptRule file named ..\usr\ADODB.Rules.xml 
   (relative to the workspace log folder).  And then merges in the 
   ScriptRule element having id="ADODBUpgrade":
   
   <ScriptRule id="ADODBUpgrade" Condition="%TaskTag%=='upg'" >
   ... rules to perform ADODBUpgrade for tasks having TaskTag=='upg' ...
   </ScriptRule>

Line Pragma

   The token %LN% placed in a ScriptRule file will expand to the form
   
   @ScriptRulePath@LineNumber@ in actual script.  The expanded form may then
   be parsed by gmStudio to direct the text editor to that line of code.
   
   For example:
   
   <Replace status="active" name="%LN% Add Reference to dlls: gmRTL.Core and gmRTL.WPF" lang="vbp">
   becomes
   <Replace status="active" name="=@C:\gmTestBed\WPFScanTool\proj_csh\usr\ScriptRules_csh.xml@105@ Add Reference to dlls: gmRTL.Core and gmRTL.WPF" lang="vbp">
   
   This data will be placed into the Translation Log.  If the log is viewed as a Grid in gmStudio, double clicking the grid line
   will take you to the original line in the Script Rule file.
   
   
See Also:

   For more information, see the "Eval" VB6 Upgrade sample here 
   https://portal.greatmigrations.com/display/GMG/Samples
-->
<ScriptRules>
<!-- Here is a sample of the ScriptRule syntax -->
<ScriptRule id="BasicRulesStandardUpgrade">
   <Option>
      <!-- directories for configuration files -->

      <select Target="%UserFolder%" />
      <Select Local="%IdfFromCodeFolder%" />
      <Select System="%IdfFromIdlFolder%" />

      <!-- translation options -->

      <Select Progress="1" />
      <Select DevEnv="%DevEnv%" />
      <Select Dialect="%Dialect%" />
      <Select BuildFile="local" />

      <!-- directories for deployment and external assemblies -->

      <select VirtualRoot="%VirtualRoot%" />
      <Select DeployLocation="%NetProjFolder%" />
      <Select Library="%RuntimeFolder%" />

      <!-- custom processing commands -->

   </Option>
   <Compile Condition="%SrcName%=~'Project1|Project2'" >
      <!-- pre-edits -->
      <!-- compile refactors commands-->
   </Compile>
   <PreAnalyse>
      <!-- pre-analyse refactor commands -->
   </PreAnalyse>
   <PostAnalyse>
      <!-- post-analyse refactors commands-->
   </PostAnalyse>
   <Author Condition="%SrcName%=~'Project1|Project2'" >
      <!-- post-edits -->          
   </Author>
   <PostAuthor>
      <!-- post-author refactors commands-->
   </PostAuthor>
</ScriptRule>
</ScriptRules>
</ScriptRules>