Tridion Developer Summit Presentation: "SDL Web Extension Gotchas"

My colleague Derya Dönmez and I delivered the Tridion Developer Summit 2017 presentation "SDL Web Extension and Integration Gotchas, User Experience, and You."

This was a chance to:

  • Share lessons learned from the field and in my latest role as a Product Owner
  • Introduce Derya to the larger SDL Web community, share some updates she's been making to our UX personas, and solicit feedback from the audience

See the slides: TDS 2017-05-12 Alvin and Derya (community).pdf 

Here are some hopefully meme-worthy points to remember in your future implementations and upgrade scans, where you might have better approaches and tools today to tackle yesterday's challenges. I will highlight three points:

  • SDL Web approaches versioning as "embargo" by default
  • SDL Web 8.5 adds new (optional) system configuration settings to enable workflow as collaboration and translate minor versions 
  • Finally, elevate in event system code rather than impersonate. This lets you keep proper version history while having finer control over what actions you permit in your automation code.

I took inspiration from a Lego Serious Play consultant (thanks, Jerome!). Though I've yet to actually do more with Serious Play; I've been using Lego Designer to illustrate some interesting integration challenges and how the latest SDL Web features might help.

Embargo by Design and by Default

Up until SDL Web 8.5, the Content Manager enforced a strict black box view on the contents within an item, not even allowing system users the ability to see in-progress or "minor" versions.

For example this can been seen with:

  • Translation and publishing, where you might use workflow to let the system users representing each of these get access to the latest versions of items
  • Opening items, where one user cannot see the latest changes of another user
  • Version history, where the latest version cannot be seen as well
  • In-context editing in Experience Manager, where the current user can see only their latest changes along with the last checked in changes from other users

Exceptions include templating which runs in a special "trusted read-only" mode.

See my post "There is Always a User" for additional context.

These behaviors were mostly by design and make sense when supporting an "embargo" setup. This is still the default behavior for SDL Web 8 as it is important for customers that want to limit who has access to sensitive content such as product launches or press releases.

But if you find you want users to actually see and help each other with the latest changes, consider new configuration settings we introduced in SDL Web 8.5.

New (optional) Settings: Collaborative Workflow and Translate Minor Versions

The new configuration settings for allowing "workflow as" collaboration and "translating minor versions" can be seen in the documentation:

  • Collaborative Workflow to allow other users the ability to see:
    • The current workflow activities, their properties, and work items
    • The latest in-progress (dynamic or minor) version of items assuming they have read access to the item
    • Latest titles of items in workflow
  • Translate Minor Versions setting to let you "translate a content item if it is in workflow, if it is checked out, or of it is a non-checked-in item"

The collaborative workflow setting makes the dynamic or minor version transparent to users both in the UI and code (remember that the UI uses the same APIs as you do), which means this applies to opening items, version history, and in-context editing.

Though you might opt to leave these settings off by default, you might choose to turn on:

  • Just collaborative workflow OR
  • Both collaborative workflow with translate minor versions

It wouldn't make sense to translate minor versions but prevent users from seeing the latest changes.

Note that these global system-wide settings contrast with the SDL Web 8 granular controls given to users to include minor and/or in-workflow versions when publishing or to  exclude items that use the queued items.

Sometimes you want granular control in your automation (Event System) code to let the system act on behalf of users. 

Elevate. Don't Impersonate.

I needed a way to illustrate the ElevatePrivileges privileges method introduced in SDL Web 8 and ended up using this.

Maybe I could have added a Goomba to explain RestorePrivileges. Though SDL Web Architect  suggested I could mention that you might want to use ElevatePrivileges with a using statement to "restore" privileges when the code block is done.


Though I've been teased with a name like Alvin, it seems popular enough among other families bearing the name Reyes. My own name is supposedly an acronym for my parents' names (A and L), my grandmother's maiden name (Vi), and the first apartment my parents lived in (N).

For this presentation, since I was on a roll with the A-B-C-Ds of SDL Web implementations, my significant other suggested I dead pan an acronym with my own name. Thus was born:

  • Always
  • Listen to
  • Very
  • Important
  • Notes

To summarize, keep in mind that the embargo features in SDL Web were by design and fit historic content management use cases, which are still supported. You can now use new system settings to make dynamic versions transparent to other users for workflow and/or translation. And elevate, don't impersonate in your contenet management automation (event system) code.

The idea for the presentation topic goes back to 2015, where getting my new apartment in the Netherlands conflicted with the presentation schedule (thanks for having me back, Robert!).

Here are the posts that inspired the topic, but could use a rewrite or addendum to account for new features like the minor version translationn and workflow as collaboration settings.

As a final meta remark, maybe it's not a coincidence that I'm a Product Owner for the SDL Web integrations, given my interest in things like SDL Connected (which is not the more recent SDL Connect) and integrations.