About Dylan (the Reverend)

Mark Saunders is the EMEA Technical Director for SDL Tridion Consultancy company Content Bloom. Mark has led a number of successful SDL implementations for brands such as Alliance Data, Lexus, TD Bank, Dunlop and CIPD; working across multiple channels in across most domains, from requirements analysis/definition to build implementation. If you're interested in discussing your CMS definition/implementation/integration requirements don't hesitate to get in contact.

TDS 2017 : Was it different than last year?


Why was it different this year (TDS2017)? And why should I go next year?

This year, as ever, was a festival of information packed presentations with lots of opportunities to network with developers and some customers too. Not only that – Content Bloom were the Diamond Sponsors so it was great to have a strong contingent from our various offices across the globe (including Nova Scotia, New Orleans, Belgium, UK, India, Czech Republic, Ukraine).

So what’s new.

Well, SDL Web 8.5 is new, Translation monitoring for in-workflow items is new, and a whole heap of other stuff was new – see the Agenda for a full list of the presentations (with more videos to follow shortly).

The thing I found quite notable was, what seems to me, a shift in approach. There seemed less of the pure technical presentations showing how to implement something specific and flashing beautiful code on the screen to wow the technical audience.

There seemed to be more discussion on challenges encountered and novel ways of overcoming them – and more importantly – the opportunity to then discuss with peers and the like “was there a better way” and to discuss with representatives from SDL “should we make a better way for the future”.

Technical, of course.

Of course, deep technical dives are still a very important part of the TDS – it’s specifically aimed at technical folks and we’re told they love to see the nuts and bolts of the solutions. Stanislav Kroshchenko from SDL presented a great introduction to a new DXA Forms Module (read more on Mukesh’s blog).

See here for the TDS video; here are time breaks for the different lightning talks:

  • 00:00:00 – 00:12:40 – Siawash Shibani delivered a lightning talk about G4TM (GUI for Topology Manager), “the first alternative UI for SDL Web’s Topology Manager”.
  • 00:14:30 – 00:34:30 – Guus Beltman continued the acronym generation with a very interesting presentation on CG4T (Code Generation 4 Tridion) and also provided a tool for Visual Studio)
  • 00:35:45 – 01:04:00 – Atila Sos, Exlrt, helps those with the situation that they have content mismatches between CM and CD status in “Orphan Delete
  • 01:05:00 – 01:31:00 – Ivan Milosevic, Exlrt, Load Balancing SDL Microservices in Azure

For the second set of lightning talks – here are more time breaks:


00:00:00 – 00:11:30 –  Robert Stevenson Legget presented some insightful experiences from “Using Docker with SDL Tridion/Web

00:12:50 – 00:31:00 – Michael Mannhardt from Acrolinx, TDS Drink Sponsors present how their software can be used to automate the creation of content – something they are likely to be looking into more in the future with SDL Languages

For the more design oriented.

Nicholas Whetmore’s presentation and walk-through on “Theming using the theme zip file functionality” went down well. For something that was designed to be quick and easy but hasn’t been received so intuitively once you really want to delve deep into design changes – in addition to being informative, it brought challenges from the crowd with other approaches/issues that they’ve seen.

For the editors.

Damian Jewett provided a great presentation aimed and showing how the technical folks could – with great ease – make the editorial teams’ day to day working with the CMS more pleasurable through the addition of new tools (quickly and easily installed through the Alchemy Framework).

Also, in “An author-centric approach to SDL Web 8“, Chris Summers and Justin Fansler presented some custom interfaces they had worked on and explained how this approach is now much better facilitated with a task-oriented Web API layer exposing the core SDL functionalities.

For those working with clients.

Paul Russell provided a great opportunity for participants to understand what it really takes to work with a client with “Large Scale Releases in Enterprise Environments“. In addition to the expected blood, sweat and tears, he highlighted improving and refining communications; thinking out of the box for some tools, and automating many steps being key.

For those looking to architect new solutions.

The presentation “Where did the servers go?” from Nuno Linhares and Julian Wraith will prove interesting, giving a highlight of the move from physical servers to the cloud environment now to what arising in terms of serverless computing. With this was the obligatory “Web 8.5 – What’s New” which is well documented out there but a great addition here was the lightning talks that showed on extensions for the likes of easier Taxonomy setup or management.

Something coming up is the SDL Unified Delivery Platform (UDP). Discussed in the presentation below, by Ben Middleton, it’s something Content Bloom, with our interest and collaboration in Knowledge Center, have been evaluating with our knowledge center clients! Watch this space!

Translation and workflow both made their way in with a presentation from Jan Horsman and a lightning talk from Mario van der Hoeven-Riesebos. Interestingly, the ensuing discussion from Jan resulted in the agreed creation of the SDL Idea to improve error logging!

Next year – why go again?

Well, it’s the same question anyone’s boss will ask “what’s the benefit for the Company”?

Directly – you’ll be happier, more informed. It’s possible you could even bring back new connections to help your ongoing development or sales and help you stay on top of your game.

Indirectly – you’ll be happier and more informed. The connections you make can be great introductions to start new ideas, seek or offer help for you or your colleagues; the discussions around new and forming technologies can also help ensure your Company as a whole stays aware and relevant.

Perhaps ask your boss why you shouldn’t go, I mean, what’s more important than knowing who’s who, what they’ve done and what they are doing – in your domain?!

What the RTF!


I know time’s precious so let me give you the summary – read on for the rationalisation!

An RTF field is exactly that – a Rich Text Field – it was never intended to facilitate how the combination of text and images are presented across multiple views in different devices; that is what we use CSS, HTML, JS and-the-like for.

Control’s important and should be in the hands of the people with the tool for the job. Tridion is an excellent content management system and affords editors with a multitude of tools to manage content across hundreds (if not thousands) of publications.

Continue reading

Improve the Publishing “Experience”

booksSo, you’ve got a release going on and some 20 people are publishing. A few of the editors only have a page or two to publish but some of them then select to publish the whole site and a few have published only whole Structure Groups!

How many of these publish by Structure Group! And, I ask, Why?

Why do it in the first place?

The first answer I hear a lot is

I don’t know exactly what to publish


Continue reading

Translation Manager – would it ever unlocalize something in my translation publication?

Oddly enough, yes it can – in a very specific scenario – of course, this can be avoided with clear processes (or even better automation) with the right hotfix (TT88491: Translation Manager revert retrieved translation for target item in “Reserved state”) but it’s good to know as tracking this down was a real bugger!

Continue reading

Who’s got that bugger checked out?

So that latest update of Chrome has broken some of the Tridion GUI :( … one consequence of this has been that a number of users have been checking out Components and not quite realizing.

Whilst checking who had a some of the items check-out I realised that one of my colleagues was giving out the wrong person – in disbelief, astonishment and sheer anger I had them show me just how they were retrieving the information… and it turned out to be a perfectly easy mistak.

So, this colleague… he was using a method that I suspect a lot of people do and thus thought I’d write this wee observation. On checking the History of the Component you’re presented with a list of … well a list of stuff.

list of stuff about Component history

As you can see Item [2] would appear to be showing me just who has this bugger checked out… but does it?

On closer observation I see that the last two versions [1] are the same – meaning a minor version hasn’t been added (i.e. the person with this checked out has just checked it out … that’s it… checked out and gone home / on holiday / another place of employment – how rude).

Now note item [3] … this shows me the person that really has this checked-out. And you can see that the user ID x43 is not the same as Damian’s x77 as [2] lead us to rashly believe! It seems that the ‘user’ is actually ‘last user to save this item’ whilst the comment is the important one!

Is there an easier way…

You betchya… open the offending Component and look at the ‘Info’ tab. Here we can see the item is locked as it’s checked out and Tridion is telling us which user this is [1].

Straight-up Component info

There’s no confusion here and I was probably in the Component anyway – additionally I can copy the username form here to enter directly into the email system…

Regards the user IDs … Tridion isn’t obfuscating the user for some crazy-ass security reason but this is the info it gets from the client systems – I can live with this and more importantly I can easily hunt down and get the person to check the item back in (or undo-checkout).


Oh no, my Flickr ECL just stopped working!

Just a quick blog note on the ‘recent’ update by Flickr. Essentially they’ve removed support for http:// and only support https:// requests to the Flickr API – see the note from Flickr Code.

We utilised the excellent ECL Flickr Provider posted by Bart Koopman on SDL Tridion World and after making a tiny tweak all was at peace in the ECL Flickr world!

Simply update the http:// reference to https:// in the api\flickr.cs class, rebuild, deploy and view until your heart is content!

Special thanks to Harald Hoffelinck for working through this!

Issues with the TridionRsaContainer registration!


We’d copied a CM instance (VirtualMachine) from the PRD environment and placed this into the UAT environment, all configurations done as we’d tested and expected.

To avoid getting the error stating that the [clientUATdomain]\MTSUser does not have access to the tridion.security configuration setting we executed the TridionRsaContainer command

aspnet_regiis -pa "TridionRsaKeyContainer" "[clientUATdomain]\MTSUser"

This failed with the MTSUser. On confirming we had the correct [domain]/username/password and further investigation we found that no-one knew the actual account that had been used to install SDL Tridion 2011 CM. We needed this account so we could log into the UAT CM machine in order to give the MTSUser access to the tridion.security configuration setting. This is because this config setting is protected using this windows functionality : http://msdn.microsoft.com/en-us/library/yxw286t2(v=vs.100).aspx

We could see that file in question is actually a file in c:\programdata\microsoft\crypto\rsa

This file is accessible only to a small number of users (the production domain mtsuser had access to it). So we tried this:

  • log in on the PRD machine as the production domain mtsuser
  • export the rsa key via this command
aspnet_regiis -px "TridionRsaKeyContainer" keys.xml -pri

We then placed this keys.xml file onto the UAT CM box and then executed the import command

aspnet_regiis -pi "TridionRsaKeyContainer" c:\temp\keys.xml

and finally, the following command

aspnet_regiis -pa "TridionRsaKeyContainer" "[clientUATdomain]\MTSUser"

So, on booting up the CM Browser… boom… We got an error in the GUI after a quick dig into the respective ‘Tridion Configuration’ error in the Event system … we then executed

aspnet_regiis -pa "TridionRsaKeyContainer" "nt authority\network service"

Quick restart of the services and all is well again.

The motto of the story – DO NOT ‘LET SLIP‘ WHICH USER INSTALLED THE CM – especially if you want to clone the machine during a setup!

If you’ve had a similar experience we’d be very interested to hear if there are other ways around this – other than simply re-installing the CM with a noted user :)

Special thanks to Harald Hoffelinck on this solution!

DWT strings, integers and repeatable fields

I was reviewing a solution I’ve been working on and noticed that at one point I was pushing out a ‘QuantityOfListItems’ from C# into the package – and couldn’t recall why.

On further investigation I saw that I was using this in the DWT to detect when I was on the last list item so I could compare this with the TemplateRepeatIndex value. Although it all worked fine it felt like overkill to rely on C# for something so trivial and didn’t add any value so I had a scoot around.

I found a CollectionLength built-in function that looked like it might be just what the Dr. ordered…

So… the reason for the post… It took quite some phaffing to tweak the syntax for this – just due to the fact I’ve had my head in C# code more than I have DWT lately so I thought I’d share it!

All I need to do is check

  • if the current index of the item in the repeatable field is the first then print the opening tags
  • write out the repeated syntax/value for each instance of the repeatable field
  • if the current index of the item in the repeatable field is the last then print the closing tags
First attempt:
<!-- TemplateBeginRepeat name="Component.Fields.repeatField" -->
 <!-- TemplateBeginIf cond = "TemplateRepeatIndex == 0 " -->
 <!-- TemplateEndIf -->
 <!-- TemplateBeginIf cond = "TemplateRepeatIndex == @@CollectionLength("repeatField")@@" -->
 <!-- TemplateEndIf -->
<!-- TemplateEndRepeat -->

OK, so the obvious error – TemplateRepeatIndex is 0 based whilst the CollectionLength returns a 1 based  result! The other syntax is pretty standard so we’ll concentrate on the test for the last index item.

<!-- TemplateBeginIf cond = "TemplateRepeatIndex == @@CollectionLength("repeatField")-1@@" -->

No Joy. So I have another scoot around and find an interesting StackOverflow post reminding me the value returned is a string. As we need to perform an integer calculation and comparison we need to parse the value to an integer.

<!-- TemplateBeginIf cond = "TemplateRepeatIndex == @@parseInt(${CollectionLength("repeatField")})@@-1" -->

Now I’m using the debug method Frank van Puffelen describes in his StackOverflow posting and all appears well – I can see the CollectionLength and the TemplateRepeatIndex are both 1 and the end tag still isn’t written out.

See the deliberate error (well it wasn’t deliberate and it was one of those annoyingly simple things that I’m sure others will trip up on!).  Although our first comparison with TemplateRepeatIndex and == 0 above is with an integer and it works as we want (even if the comparison is against a non-zero integer) I figured I’d try to parseInt the TemplateRepeatIndex…

<!-- TemplateBeginRepeat name="Component.Fields.repeatField" -->
 <!-- TemplateBeginIf cond = "TemplateRepeatIndex == 0 " -->
 <!-- TemplateEndIf -->
 <!-- TemplateBeginIf cond = "@@parseInt(TemplateRepeatIndex)@@ == @@parseInt(${CollectionLength("repeatField")})@@-1" -->
 <!-- TemplateEndIf -->
<!-- TemplateEndRepeat -->


Hopefully this simple pattern can assist you in not having to resort to C# as I’d figured I had to originally.

“The” Navigation Debate

Please see below slides for the discussion we hope to have initiated in the Community Webinar held on the 14th March 2012.

Essentially, as a wise man once noted, there are as many ways of rendering navigation as there are Tridion Consultants… The purpose of this discussion is for us, as a community, to share and discuss our experiences.

Please feel free to post links to blogs with specific examples but ideally here we would have more of a discussion of why we would choose one method over another (implementation timescales, environment, editor requirements etc.) and whether, on reflection, previous decisions would be the same…

Let’s talk….