Dynamic Workflows: Components

Liz Sanderson
Liz Sanderson
  • Updated

Introduction

A dynamic writer can obtain its schema from a number of locations:

  • Any incoming dataset
  • Any external dataset
  • A lookup table
  • Defined within the workspace

So one of the key requirements is for the workspace author to define where that schema is to come from. The default for a dynamic writer is to obtain the schema from the incoming dataset, but that can be changed.

In some workspaces, it's possible to define multiple schemas, so another key requirement is to be able to match each schema to the features it applies to.

Step-by-step Instructions

The aim here is to familiarize ourselves with the key dynamic components by starting with a static translation and turning it into a dynamic one

1. Open Starting Workspace

Open the "Begin" workspace provided 2-WorkflowComponentsExercise-Begin.fmw and run it.

Components1.png

Notice that we're reading from two formats of data - GML and shapefile - and writing out to two tables in a GeoPackage database.

2. Change Writer to Be Dynamic

Let's say that we want to make the workspace dynamic so that we can read more source data with different schemas and still write it to the database.

We need to make the writer dynamic, and the readers as well. Let's start with the writer. Open the parameters dialog for the VancouverLandBoundary writer feature type. It will look like this:

Components2.png

Notice how the table name and geometry are set to fixed values. But the key setting is labeled Dynamic Schema Definition. Click that box to add a check mark. The dialog will now change to this:

Components3.png

Notice how the Table Name has changed (it is now dynamic, set according to the original feature type name), that Geometry is now dynamic, and that there is a Schema Sources parameter.

Click the ellipsis [...] button next to the Schema Sources parameter. This is where we choose which source the schema should come from. In this case, it comes from the two readers. It does not come from Schema Features, so uncheck Schema From Schema Feature, and click OK.

Components4.png

Click OK again to return to the canvas.

3. Remove Static Writers

Now that we have a <Dynamic> feature type, we don't need any remaining static ones. So, delete the Grid writer feature type and connect the Grid reader feature type to the <Dynamic> writer feature type. 

Components5.png

Now, if you run the workspace, the output will be the same as before, except that the schema is being fetched dynamically. If the source schema should change - a process called Schema Drift, which we will cover later - then the output will change to match.

It also means we can read more source datasets, as soon as we make the readers dynamic too.

4. Change Readers to be Dynamic

Open the parameters dialog for the VancouverLandBoundary reader feature type. Check the box labeled Merge Feature Type:

Components6.png

Click OK to close this dialog. Repeat the process on the Grid reader feature type.

The name of the feature types changes to <ALL>, and so the canvas will now look like this:

Components7.png

Question) Why do we need to repeat the process for both feature types? Why can't we delete one of them in the same way that we did for the writer?

5. Test Workspace

Now let's test how dynamic the workspace is. Make sure the Prompt for User Parameters is enabled, and re-run the workspace. This time, you are prompted to pick the source dataset.

This time, pick a different shapefile (say, Orthophotos\OrthophotoCatalog.shp) and a different GML dataset (say, Elections\ElectionVoting.gml). Click OK to run the workspace.

Inspect the output. Notice that the database now contains the OrthophotoCatalog data plus ElectionVoting data, in the correct structure:

Components8.png

In fact, because the VotingDivisions data had two different geometry types, they've been dynamically split into two tables (presumably, GeoPackage does not allow multiple geometry types per table).

The answer is that we need two readers because the source data is in two different formats. You could replace those readers with a single Generic Format reader if you wanted to reduce it all to a single feature type, but this method gives you easier control of the reader parameters.

Also note that if you want to keep adding tables to the database without overwriting everything, the writer parameter Overwrite Existing Database can be set to No.

Data Attribution

The data used here originates from open data made available by the City of Vancouver, British Columbia. It contains information licensed under the Open Government License - Vancouver.

Was this article helpful?

We're sorry to hear that.

Please tell us why.

As of January 14th, 2026, comments on knowledge base articles have been closed. To make sure questions don’t get missed and to enable more community support, we’ve moved discussions to the FME Community. If you have a question or a comment about this article, please create a new post or create a support ticket.