Perhaps two of the most important additions to the authoring interface were junctions and hidden connections (aka tunnels).
We’ve talked a lot about these during the world tour and in social media – and designed them to be so easy that even our youngest FME user could use them – but I’m going to cover them once more.
That’s because not only might these functions be hard to find, there are some specific use cases that you might not have considered. Also, there’s a little explanation required because “hidden connections” and “tunnels” are not exactly the same thing…
OK. Junctions are simple. A junction is just a mini-transformer that does nothing except bring together a group of unorganized connections.
Say, for example, I have this workspace (click to enlarge):
Notice the ugly overlapping connections into the AffineWarper:Observed port. I could move the AffineWarper transformer further down the canvas, but then the connections into the Control port would be equally messy. But I can easily clear this up with a Junction:
Like I said, it’s a way to pull together unorganized connections. “But how do I add this miracle junction,” you ask. Well, that’s simple too. Because a Junction is just a transformer – albeit one with a very small representation – you can add it with Quick Add or the Transformer Gallery just as you would with any other transformer.
Additionally, you can right-click an existing connection and there is an option to Insert Junction:
…plus there’s a handy shortcut key (Ctrl+Shift+J). So now there’s no excuse for overlapping connections. And as we’ll see, even if overlapping connections were unavoidable, with hidden connections you’ll be “in the clear”!
We’ve all had one of these workspaces; the one where there is one (or more) long connection cutting through the core of the canvas. Often it’s where a section of workspace early in the translation provides the input for multiple other sections, like this example:
With that structure it’s impossible to reorganize the transformers in such as way as to avoid overlaps completely. In 2016.1 – while I can’t avoid overlaps – I can tidy the workspace by hiding them:
Much better. All I needed to do was right-click the connection(s) and choose the option to “Hide”. That makes the connections invisible. “But” you ask (and don’t you have a lot of questions today?!) “how do I know there’s a connection there and how do I get it back?”
Well, you know there’s a connection, because each end is now represented by a small icon:
And clicking on the transformer (or feature type) itself reveals the hidden connections that are there:
You can make connections fully visible again by right-clicking the transformer (or feature type) and choosing an option to Show Connections.
So now you can use junctions to fix overlapping connections and hide those that just can’t be avoided. But we also need to cover “tunnels” which are a mix of these two features.
If there is a problem with hiding connections, it’s probably that they are not always easy to see, even with the little icon. You also can’t manipulate or edit them without making them visible first. So what we did was combine hidden connections with junctions to come up with a tool called tunnels.
As you can see, not only do connections have an option to hide them, they also have an option to create a tunnel:
What is a tunnel? Well, this (click to enlarge):
Yes! A tunnel is a combination of Junction/Hidden-Connection/Junction!
Notice that I have a hidden connection, but there is a junction (with annotation) at each end. Now I can move the junctions to manipulate the hidden connection and both the junction and annotation are a much better visual clue as to what is happening.
So you can choose to either just hide connections or hide them as tunnels with extra junctiony goodness! But there are specific cases when you might want to use each.
Specific Use Cases
Firstly let’s look at a straightforward use case: pointing all errors in a workspace to a single output. Take a look at this workspace:
Let’s say there are various locations in there in which errors might arise. If I want to direct those errors to a single Logger transformer, say in the bottom right of the workspace, then I’ll have connections all over the screen. But instead I can just hide all those connections and put the Logger wherever I like:
In that example it didn’t matter much whether I used tunnels or plain hidden connections. But in another scenario it is more important: when there are multiple connections emerging from a port. See this example:
There I have a hidden connection, but it’s really unclear what that connection is. The situation becomes much more clear when I use a tunnel instead:
So – in my opinion – you should treat hidden connections and tunnels as different methods, and think about which is better for your scenario.
So that was junctions and tunnels. Incidentally, we did consider calling these “wormholes” at one point (or “Einstein-Rosen bridges” as one user suggested) but we figured not every FME user is a general relativity fanboy (or fangirl).
Anyway, if you’ve read this far, thank you, and also thank you for reading my articles. This is my 150th post to this blog and I hope that each of them have been helpful to someone, somewhere. I’m taking the time to celebrate by listening to some music – in particular this awesome song that folk of my age might remember, and which was the first thing to come to mind when I heard we were adding junctions to FME!