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 ....
]
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. |
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" }*