Example: Using XSLT instead of Tcl
The code for your application can be generated using XSLT instead of Tcl.
This example demonstrates how to generate a file with AG using XSL Translator.
Generating a form
Instead of generating 4gl as the template does, we'll generate a per file (Genero form definition file). This example uses a 4rd (report data) file and generate a per form file with formfields corresponding to the 4rd record. We'll add an additional property frmLabel on each record field, which will be displayed to the left of each per file formfield.
- The new property is added to the 4rd definition
in settings.agconf (changes are in
bold):
<File extension="4rd"> <DynamicProperties> <DynamicProperty name="foreignFields" type="FIELDS" label="foreignFields" initialValue="" dynamicContent="srcFieldsContent" editorInfo="isDynamic:true" /> <DynamicProperty name="primaryFields" type="FIELDS" label="primaryFields" initialValue="" dynamicContent="dstFieldsContent" editorInfo="isDynamic:true" /> <DynamicProperty name="frmlabel" type="TEXT" label="Label FRM" initialValue="" /> </DynamicProperties> <Items> <Item nodeName="Relation" srcProperty="foreignFields" dstProperty="primaryFields" dynamicProperties="primaryFields;foreignFields"/> <Item nodeName="RecordField" dynamicProperties="frmlabel" /> </Items> </File>
- The file managedtextform.xsl is created,
to describe what is to be generated. This file should be
saved to the template directory. The GASDIR environment
variable should be defined in the GAS configuration and added to PATH.
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text" /> <xsl:template match="/"> --This is generated by the XSL DATABASE <xsl:for-each select="//Module"><xsl:value-of select="@databaseName"/> </xsl:for-each> LAYOUT GRID { <xsl:for-each select="//Fields/Field"> <xsl:value-of select="DynamicProperties/DynamicProperty[@name='frmlabel'] /@value"/>: [<xsl:value-of select="@column"/>] </xsl:for-each> } END -- LAYOUT TABLES <xsl:for-each select="//Record"><xsl:value-of select="@table"/> </xsl:for-each> ATTRIBUTES <xsl:for-each select="//Fields/Field"> <xsl:value-of select="@column"/> = <xsl:value-of select="@table"/>. <xsl:value-of select="@column"/>; </xsl:for-each> END -- ATTRIBUTES </xsl:template> </xsl:stylesheet>
- A new project is created and a new A Business Application diagram (4ba) is created and saved to the project.
- A new 4rd file is added to the project and a record created. The properties for frmlabel are added to the record fields.
- The 4rd Build Rule is updated to generate a per using
xslt.
<BuildRule additionalDependencies="" commands="$(generate) -depth 0 -ba "$(BAFilePath)" "$(InputPath)";fglxslp -o $(InputDir)/$(InputBaseName)per $(GSTSETUPDIR)/managedTextForm.xsl $(InputDir)/$(InputBaseName).xml;" description="4RD Report Data compiler" enabled="true" fileType="application/generostudio-4rd" id="1319189142826" intermediateFiles="" outputFiles="$(InputDir)/$(InputBaseName)per "/>
The same Build Rule displayed in a Genero Studio dialog:
- The 4rd is compiled and a per is generated.
The generated form
When the per file
is opened and previewed, it looks like this.