Skip to content

Transformer GUI Specification

The following describes the json specification for a transformer. A transformer json file (.fmxj) will be of the following form:

[{ Header Specification },
 { Version 2 Specification },
 { Version 1 Specification },
... section per version ....
]

Header Specification

These are the top elements in a fmxj file:

key type required default value description
name string yes n/a The name of the transformer.
categories array\<enum> no n/a A list of strings indicating the categories that apply to this transformer.
aliases array\ no n/a A list of alternate names for this transformer. This is useful if a transformer is renamed so users can find the transformer using the old name.
keywords array\ no n/a A list of related keywords for this transformer. This is useful for finding a transformer based on terms not explicitly linked to the name or aliases.
deprecated boolean no false If set to true, you will not be able to create new instances of the transformer. Existing instances will continue to work.

Per Version Section

For each version of the transformer, the following should be specified:

key type required default value description
version integer yes n/a Unique number per transformer. Only the highest numbered version is made available for adding into a workspace. Old versions should be left for backwards-compatibility. The initial version of a transformer should be 1.
arcgisCompatability enum: auto, arcmap, arcpro no auto Allows specifying compatibility with different ArcGIS environments.
pythonCompatability string no n/a A string indicating the minimum python version supported by this transformer. It is usually of the form majorminor. So "36" for python 3.6.
changeLog array\ yes n/a A list of strings describing the changes made to this version relative to the prior one. Only the first version of the transformer should just say 'Initial Version'. The string can include url which will be converted to clickable hyperlink when displayed in help browser.
form object yes n/a A form describing the parameters for this transformer.
inputPorts dictionary no n/a A listing of key-value pairs describing the input ports. If not present the transformer will have no input ports.
outputPorts dictionary no n/a A listing of key-value pairs describing the output ports. If not present the transformer will have no output ports.
executionTemplate array\ yes n/a A list of strings describing the factories/function to run. See execution instructions for more detail.
featureHolding enum: none, grouped, all no none none indicates features will be fully processed when they enter.
upgradeProperties dictionary no n/a A listing of key-values pairs describing upgrade properties.
internalOnly dictionary no n/a Properties that are for use by transformers shipped with FME only.
decorationName string no n/a The icon to show on the transformer banner specifying the base name of the decoration image (.svg) found in the active Workbench theme.
decorationLocation enum: left, right no left Location of icon to show on the transformer banner.
(future) namedConditions dictionary{string: object} yes n/a A set of conditions that can be used everywhere where a condition is possible. This allows you to specify the condition once and reuse it multiple times. Any parameter which supports conditions allows to specify a condition name rather than a condition.
description string no n/a A description to show in the tooltip when the mouse hovers over the transformer.

inputPorts

key type required description
name string yes The string for this port when writing the execution file.
templateName string no The identifier token for this port in the executionTemplate template.
displayName string no The name to show the user. If not present, the name will be the camel case version of the templateName (if present) or the name.
description string no A description to show in the tooltip when the mouse hovers over the port.
(future) visible object no A condition to indicate when the port is visible based on parameter values. If condition returns true the port will be shown.

outputPorts

key type required description
name string yes The name of the port. If set to empty string, the port will be collapsed into the banner. <REJECTED> is a special port name and will be treated as a rejected port in the GUI.
displayName string no The name to show the user or a condition specifying the name. If not present, the name will be the camel case version of the port name. If a condition is specified, then the name will be determined by the condition.
description string no A description to show in the tooltip when the mouse hovers over the port.
(future) visible object no A condition to indicate when the port is visible based on parameters. If condition returns true the port will be shown.
preservesAttributes dictionary no A listing of key-value pairs describes how incoming attributes flow from specific input ports. If preservesAttribute key is not present, all attributes for all input ports will be preserved on this output port. If preservesAttributes is present and a given input port doesn't appear in the listing, then its attributes will not be preserved.
attributesAdded dictionary no A listing of key-value pairs describing the attributes to add for output ports. If not present the transformer will not add any attributes to any output ports.
preservesGeometry dictionary no A listing of key-value pairs describes how incoming geometry flow from specific input ports. If preservesGeometry key is not present, all geometry for all input ports will be preserved on this output port. If preservesGeometry is present and a given input port doesn't appear in the listing, then its geometry will not be preserved.
geometryAdded dictionary no A listing of key-value pairs describing the geometry to add for output ports. If not present the transformer will not add any geometry to any output ports.

preservesAttributes

key type required default value description
inputPorts array\ no [] A list of input ports which this outputPort preserves. If the list is empty, the preservation specified will apply to all input ports for this particular output port.
preserve boolean no true If set to true, this set indicates a port mapping for which to preserve attributes. If set to false, this set indicates a mapping to not preserve attributes across.
(future) condition object no n/a The condition for which the preservation (or not preservation depending on value of preserves) will occur for each attribute. If not specified, then all attributes will always be preserved.
prefix string no n/a Prefix to prepend to the attribute name that is being preserved. The prefix can either be a constant (e.g. prefix_) or an expression which references other parameters (e.g. pre_$(PREFIX)_fix).

attributesAdded

key type required description
name string ({parameter} ok) yes The name of the attribute added.
width integer conditional The width restriction for enums in type. Optional if type does not require it.
type enum yes The type of the attribute added.
(future) condition object no The condition when the attribute will be added.

deprecated

key type required description
decimal float conditional The decimal width restriction of the number enum in type. Optional if type does not require it.

attributesAdded Type

  • char(width)
  • varchar(width)
  • buffer
  • xml
  • json
  • binary(width)
  • varbinary(width)
  • binarybuffer
  • datetime
  • time
  • date
  • real64
  • real32
  • int32
  • uint32
  • int64
  • uint64
  • logical
  • int16
  • uint16
  • int8
  • uint8
  • number(width,decimal) (avoid using)

preservesGeometry

key type required default value description
inputPorts array\ no [] A list of input ports which this outputPort preserves. If the list is empty, the preservation specified will apply to all input ports for this particular output port.
preserve boolean no true If set to true, this set indicates a port mapping for which to preserve geometry. If set to false, this set indicates a mapping to not preserve geometry across.
condition object no n/a The condition for geometry is preserved (or not preserved, depending on value of preserve) for this port mapping. If not specified, then geometry preservation will always follow the value of preserve.

geometryAdded

key type required default value description
name string ({parameter} ok) no n/a The name of the geometry to be added.
condition object no n/a The condition for when the geometry will be added. If not present, the geometry will always be added.

upgradeProperties

key type required description
replacedBy dictionary no Used to indicate when this transformer is deprecated and replaced by another Transformer.
portMapping dictionary no A listing of key-value pairs describing how to map ports in this version to ports in the next version.
parameterMapping dictionary no A listing describing how to set the parameters in the new version. This optional directive can be used when parameter is renamed or value changes. This mapping would be specified in the version previous to where the changes are made. E.g. If parameter is renamed in version 3 and a new version 4 of transformer is created. Then the parameter mapping will go in version 3 of the transformer indicating how to upgrade from version 3 to 4.

replacedBy

key type required description
transformerName string yes The name of the transformer replacing this one.
version integer no The version of the transformer replacing this one. It is advised to specify the version explicitly. If not specified, the latest version is used which can change over time.

portMapping

key type required description
portName string yes The port in this transformer version to be mapped.
newName string yes The name of the port to map to.
direction enum: in, out no This is only required if there are name collisions between input and output ports. Otherwise, the system determines the direction from port associated with portName.

parameterMapping

key type required description
newName string yes The parameter in the newest version which needs to be mapped.
newValue string ({parameter} ok) yes The value to set the newName parameter to. If a parameter is specified, the value will be set to the value of that parameter using the valueMappings (if any are specified).
valueMappings dictionary no A dictionary where the key is the old value and value is the new value. For new value, ({parameter} ok) is possible.

valueMappings

key type required description
unusedValue string no The value to set the parameter specified by newName parameter if the parameter specified by the new value is unused.
nonEmptyValue string no The value to set the parameter specified by newName parameter if the parameter specified by the new value is non empty.
emptyValue string no The value to set the parameter specified by newName parameter if the parameter specified by the new value does not have a value (value is empty string).

{parameter} ok

If a property is labelled with ({parameter} ok), the value can be either a constant (string) or a reference to another parameter, in the form of a dictionary mapping the key "parameter" to the name of the referenced parameter, e.g. { "parameter" : "MY_PARAM" }*