Sometimes when setting up Topology Manager you might want to rewind, undo everything, and start fresh.  After all, in version the install is a combination of PowerShell scripts with various configuration options, authentication mechanisms, etc and it is likely to get something wrong, and you want to start all over.  If this is the case, I hope this article will help.  Below I have the output of my PowerShell console where I remove all the relevant Topology Manager pieces.  I also removed the Deployer and Discovery service, and at the end of the article I have those PowerShell scripts too, but from a separate window due to security rights.

The security rights for running and executing the Topology Manager powershell scripts can be confusing.  To run the below scripts, please go to the Windows Start screen in Windows Server 2012, search for PowerShell ISE, right click and select ‘Pin to Start’.  Then, right-click on it and select ‘Run as User’ and type in your own user params (assuming you are an Admin).  Also, your user account needs to be in the Windows Groups for Topology Manager (yes, these are new and yes it is important to be in these groups).  Now, you can run the scripts below.  To uninstall the Deployer and Discovery services, you need to run a new PowerShell window as Administrator.  Hope this helps!

PS C:\Users\rcurlette> Get-TtmMapping
CmEnvironmentId : Tridioncmsnd_landbdev2
PublicationId : tcm:0-11-1
EnvironmentPurpose : Dev
WebApplicationId : FooBuWebSite_RootWebApp
RelativeUrl : /
PrimaryMappedUrl : http://localhost:8020/
IsOffline : False
CdEnvironment : 
Id : Mapping1
ExtensionProperties : {}
PS C:\Users\rcurlette> Remove-TtmMapping
cmdlet Remove-TtmMapping at command pipeline position 1
Supply values for the following parameters:
(Type !? for Help.)
Id: Mapping1
PS C:\Users\rcurlette> Get-TtmWebApplication
ContextUrl : /
WebsiteId : FooBuWebSite
EnvironmentPurpose : Dev
CdEnvironment : 
ScopedRepositoryKeys : {}
Id : FooBuWebSite_RootWebApp
ExtensionProperties : {}
PS C:\Users\rcurlette> Remove-TtmWebApplication FooBuWebSite_RootWebApp
PS C:\Users\rcurlette> Get-TtmWebsite
BaseUrls : {http://localhost:8020}
CdEnvironmentId : WEBCMSND_ENV
EnvironmentPurpose : Dev
CdEnvironment : 
ScopedRepositoryKeys : {}
Id : FooBuWebSite
ExtensionProperties : {}
PS C:\Users\rcurlette> Remove-TtmWebsite FooBuWebSite
PS C:\Users\rcurlette> Get-TtmCdTopologyType
Name EnvironmentPurposes Id ExtensionProperties 
---- ------------------- -- ------------------- {Dev} FooBu_org {} {Preview, Live, Test, Dev} Foo_org {}
PS C:\Users\rcurlette> Get-TtmCdTopology
CdTopologyTypeId : FooBu_org
Name : Local
Description : 
CdEnvironmentIds : {WEBCMSND_ENV}
CdEnvironments : {}
ScopedRepositoryKeys : {}
Id : Local
ExtensionProperties : {}
PS C:\Users\rcurlette> Remove-TtmCdTopology Local
PS C:\Users\rcurlette> Remove-TtmCdTopologyType FooBu_org
Remove-TtmCdTopologyType : Item of type 'CdTopologyTypeData' can not be deleted. It is used by Business Process Type with id 'tcm:11-23307-4096' in 
the Content Management environment with id 'Tridioncmsnd_landbdev2'.
At line:1 char:1
+ Remove-TtmCdTopologyType FooBu_org
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 + CategoryInfo : NotSpecified: (Tridion.Topolog...logyTypeCommand:RemoveCdTopologyTypeCommand) [Remove-TtmCdTopologyType], DataServiceE 
 + FullyQualifiedErrorId : Tridion.TopologyManager.Automation.RemoveCdTopologyTypeCommand
PS C:\Users\rcurlette> Remove-TtmCdTopologyType FooBu_org
PS C:\Users\rcurlette> Get-TtmCmEnvironment
CoreServiceRootUrl : net.tcp://localhost:2660
WebsiteRootUrl :
CoreServiceCredentials : "AuthenticationType":"Windows", "UserName":"Foo\mts_svc", "Password":"b1o$50Ming"
Id : Tridioncmsnd_landbdev2
ExtensionProperties : {}
PS C:\Users\rcurlette> Get-TtmCdEnvironment
EnvironmentPurpose : Dev
DiscoveryEndpointUrl : http://localhost:8082/discovery.svc
Credentials : "AuthenticationType":"Anonymous"
IsOffline : False
ScopedRepositoryKeys : {}
ExtensionProperties : {}
PS C:\Users\rcurlette> Remove-TtmCdEnvironment WEBCMSND_ENV

Removing the Deployer and Discovery Services

Run PowerShell as Administrator user

PS C:\SDL\Web\discovery\bin> .\uninstallService.ps1
 Stopping service 'SDLWebDiscoveryService'...
SERVICE_NAME: SDLWebDiscoveryService
 WIN32_EXIT_CODE : 0 (0x0)
 WAIT_HINT : 0xbb8
 Service 'SDLWebDiscoveryService' is stopped.
 Removing service 'SDLWebDiscoveryService'...
 [SC] DeleteService SUCCESS
 Service 'SDLWebDiscoveryService' successfully removed.
PS C:\SDL\Web\discovery\bin> cd ..
PS C:\SDL\Web\discovery> cd ..
PS C:\SDL\Web> cd .\deployer
PS C:\SDL\Web\deployer> cd bin
PS C:\SDL\Web\deployer\bin> .\uninstallService.ps1
 Stopping service 'SDLWebDeployerService'...
 [SC] ControlService FAILED 1062:
The service has not been started.
Service 'SDLWebDeployerService' is stopped.
 Removing service 'SDLWebDeployerService'...
 [SC] DeleteService SUCCESS
 Service 'SDLWebDeployerService' successfully removed.
PS C:\SDL\Web\deployer\bin>

SDL Web to be Renamed?

April 1st, 2016 | Posted by Robert Curlette in AprilFools - (0 Comments)

According to community insiders, SDL will rename its latest product, Web 8.  The flagship product includes Tridion, the CMS platform that is the choice of multi national companies across the globe.   In the beginning the product was known as Tridion DialogServer but eventually the company shortened the product name to Tridion, the same as the company name.  However, recently the name got even shorter, to just ‘Web’, or ‘SDL Web 8′ for the longer version.

Many people found the name ‘Web’ too ambiguous and confusing.  This Wikipedia article suggests that ‘Web’ could refer to “Arachnology, Anatomy/Biology, Computing, Mathematics, Publications, Television, or Radio and film.”.  

Rumors in the Tridion community are that it will be renamed to SDL ‘World Wide Web 8′, and shortened to WWW8, or W38 for short.  The other name being considered was ‘Internet 8′, but they decided that was too broad.

The decision is still open for the next name of the flagship CMS product from SDL, formerly known as Tridion.  What do you think the new name should be?  Leave your feedback in the comments below.

powershell plus     Screen Shot 2016-03-21 at 16.58.40

Developing Alchemy extensions has the goal of improving the Tridion User Experience for Developers, Authors and Editors.  But, what about making it easier for us to develop Alchemy Plugins?  Peter Kjaer had us in mind when he developed the excellent Alchemy Powershell Plugins.  You only need 5 minutes to get started with these scripts and they will save you lots of time and no more dragging and dropping the Plugin after you build every time.

The plugin watched the /bin/debug folder of your Alchemy Visual Studio project and automagically sends the .a4t file to Tridion and updates the GUI.

Follow these easy steps to get it running:

If your server is connected to the Internet then you can get started with 1 easy command at the PowerShell Command Line from

wget “″ | iex

Otherwise, if your server is behind a firewall and unable to executre the wget command, have no fear, the quick manual install process is here!

1.  Download the Powershell scripts from (Download .zip button) or in a terminal type ‘git clone’

2.  Open the PowerShell Command Prompt or the PowerShell ISE and go to ‘Alchemy/Installation’.    Install the scripts with ‘.\Install-Local.ps1′.  If you use only the ‘Install.ps1′ script then it will require an Internet connection.

3.  Start the Alchemy Plugin Monitor script by typing  ‘Start-AlchemyPluginMonitor’

4.  Enter the folder of your plugin’s bin/debug folder

5.  Go into Visual Studio and build the project.  If you have the PowerShell ISE open, you will see the PowerShell script copying the .A4T file to Tridion.



Using the Alchemy Framework has many benefits when building Tridion GUI Extensions.  One of the strongest features in my opinion is the packaging of  files in an .A4T package, and the ease of deployment of the .A4T files with the Alchemy Webstore, Drag-n-Drop or PowerShell.  These PowerShell scripts from Peter Kjaer support and strengthen the Alchemy Development Tooling Pipeline, making our lives easier as Developers and help us bring the magic of Alchemy plugins to users faster than ever before.

This year the SDL Web Dev Summit India was hosted in Delhi and I had the opportunity to present about the Tridion Alchemy Framework.  For the presentation I ported to Alchemy an older custom ASP script to delete (and unlocalize) All Blueprint Children.  In this article I will highlight the process I used and include a link to the sourcecode.  I stil need to polish a few things before I add it to the Alchemy store, but please have a look at my code and hopefully it will help you in building your Alchemy plugins.

Screen Shot 2016-02-08 at 18.45.53

Here I will outline the steps I followed to write the plugin.  I won’t dive into too much detail, but I hope this will help you get started.

Prep work

Writing a plugin involves looking at some good code samples.  So, my first step was to download and install every Alchemy plugin and also every sourcecode repository that was available.

The latest version of the Alchemy VSIX Visual Studio Plugin has a nice Project Type called ‘Starter Plugin Project’. This creates a nice example with a button in the ribbon and also context menu. In my presentation I was able to go from File, New Project to having an Alchemy Plugin in my Tridion system in under 3 minutes.  The reason I like the starter project so much (aside form the fact it’s very easy and fast to use) is it has a great clean structure of the files and folders, and provides an excellent reference.

Writing the GUI

The GUI is now much easier to write and install than ever before (especially if you’ve done GUI Extensions!).  However, there is some rhyme and reason for a lot of the things in the Alchemy framework and I will try to highlight a few here.

1.  Create the Static folder.  This holds your Commands .js file (which is executed when you fire the GUI event, and the same one we used in older GUI Extensions).  Also in static you’ll have any .aspx popup files and css/js files your popup uses.   In Static I create a Commands folder.

2. Next create a new Alchemy GUI item, Alchemy Javascript Command
Screen Shot 2016-02-22 at 17.36.19


3.  In the .js file, I define a command name, ‘UnLocalizeAllCommand’ that is very important and will be used later.  I also borrowed some code from Mark Richardson’s ‘Real Time Publishing Stats’ plugin to open the popup .aspx file.  *Note – in this version your popup must be an .aspx file and not .html.  Otherwise, it will not be deployed to the views folder when you deploy the .a4t file.

4.  Under static, create a Views folder and in there the .aspx page for the popup.  The Javascript code to call the WebApi Controller (with CoreSevrice) was quite tricky to get correct.  You can see it here on Github

5.  Next is to Add the button to the GUI.  The context menu is added with ContextMenuUnlocalizeAll.cs and Ribbon is from RibbonToolbar.cs.

6.  Next we tell Alchemy what files to include for us with the ResourceGroupFiles.cs and PopupResourceGroup.cs files.

7.  With the PluginCommandSet.cs we specify the same command name we used in step 3.

8.  Now we could build and deploy the Alchemy Plugin and we should be able to see the items in the context menu and ribbon bar.  The last step is to add the functionality to do something.

9.  Create the controller, UnLocalizeController.cs,  in a new Controllers folder and make sure to reference the Core Service Client.  Here is where the main functionality is impemented.  Carefully look at the AlchemyRootPrefix attribute and also the Route attribute on the class.  These 2 parameters define how we access the service.

10.  Finally, build the project to create the .A4T file.  If you get annoyed with the alchemy popup window, disable it by opening your .csproj file (in Notepad++ you’ll need to run it with the Admin user) and follow my tip here to disable it for Dev.

11.  Drag and drop your .A4T file into the Tridion Alchemy GUI Admin and then refresh the GUI.  With a bit of luck and the right star alignment your new Alchemy Plugin should be working.  If not, use the browser’s JavaScript console to help debug any .js errors coming from the plugin.

Full Source Code is available here:


I hope this article helped you understand the flow of building an Alchemy plugin and assists you in your plugin dev.  Please share your plugins on the Alchemy WebStore so we can all benefit from the community.  Special thanks to Pankaj Guar for inviting me to speak at the SDL Web Developer Summit India!  Big thanks to Content Bloom and Alex Klock for creating the Alchemy Framework and sharing with the world!

1SDL Web India Dev Summit - Group

1SDL Web India Dev Summit – Group


Starting an Alchemy plugin project is super easy. In this post I just want to mention a quick tip that will help you use the latest version of the framework for your Alchemy potions.

1. Download the Alchemy4Tridion Developer Pack (VSIX Visual Studio Project template). This gives us some really cool filetypes in the File, New dialog:

Screen Shot 2015-09-29 at 17.36.35


2. After creating a new project, go to the Nuget Package manager and search for ‘A4T’ and install the framework. This makes sure your Alchemy DLL is the latest, and also gives you the goodness of the Visual Studio templates.
Screen Shot 2015-09-29 at 17.37.30


3. Get a good clean example to follow. As of September, 2015 this is the CopyInfo example from Alex Klock for me. The Big Box of Samples is intended to be the ‘Unit Testing’ plugin for the Alchemy devs, so lots of goodies to be found there too!


Have you built an Alchemy plugin that is a good starting point? Leave a comment below with a link to the source code. Thanks!

Getting started with the Alchemy Framework for Tridion GUI Extensions is made easy with the great documentation provided on the online A4T API documentation site.

When first getting started you might use the HelloWorld sample project or the Big Box of Samples project.  Both are great places to start exploring the structure of an Alchemy plugin.

After the exploration you’ll want to make a small change, possibly some new text in the popup in the BBS project.  The popup text is in the View files at /Static/Views.

Then you’ll build the project and get an upload to alchemy webstore popup.   While this is great and we want to use this when our plugin is ready, we probably don’t intend to put our personal Hello World project in the Alchemy webstore.

Disable the Upload the Alchemy Webstore Popup

The Alchemy authors have thought of it all – including an easy way to configure this popup.
1.  Open the .csproj file for your project
2.  Update the following line.  I prefer to leave it to Release.  The HelloWorld plugin has it set to ‘true’.  I’m guessing that was the original implementation, but I very much like the Release|Debug mode switch.


Change to:


My Current Flow for Developing Plugins

(September, 2015)
1. Make a change in the VS project
2. Build
3. Open the Alchemy GUI
4. Uninstall existing plugin
5. Open windows explorer – drag and drop the .a4t file
6. Open gui and see change

Improved Flow

To help us all and also “celebrate the Anti-RSI gods”, Mark Williams has written a great blog post of how to automate the above steps, leaning on the PowerShell script from Jan Horsman. Get it setup to speed up your Alchemy Plugin hacking.


Writing Alchemy Plugins is fun and easy thanks to all the hard work Alex Klock and the team at Content Bloom have put into the Framework.  It’s quite addictive and has been described as a ‘lifestyle’ by Tanner Brine at this year’s Tridion Developer Summit Alchemy Presentation.  Good luck with your own alchemy concoctions!

1. Pair-programming is as much about learning new keyboard shortcuts as it is supporting the one doing the typing. We avoided many environment and coding issues by being able to swap people or computers when the going got rough.

2. Code > Powerpoint
3. Drinks > Sleep

4. Alchemy is not only a framework, it’s a way of life. Think of a WordPress plugins-type system all baked into Tridion, and with Dev tools that integrate directly into Visual Studio. Yes. Yes! This is the coolest thing since sliced Razor Mediator code!

5.  Using the Tridion Content Porter for moving Pages and all dependencies is like asking a car salesman for a car that flies.  Also, Content Porter is not called Magic Porter or Page Porter.

6. After 2 days of hard work our there was more talk about work on our off day than work on our work day

7. There’s a common feeling within the group of a ‘wish list’ of requested features.

8. Where there’s a song there’s a way.

9. Bottle-fed sheep eat during the middle of the night. Peacocks are louder than roosters.

10. Never look at John Winter’s phone when he says he wants to show you a photo. Ever.

11. Shellfish and Seafood are the same word in Portugese, and in English Shellfish and Sea Insects is also the same word (well, kind of)

12. Gin and tonic drinks never go out of style and they do a great job of making them in Portugal. (Ice in the glass first!)

13. When the bell rings, run for the bus.

Tridion VBScript Mediator*

April 1st, 2015 | Posted by Robert Curlette in Tridion - (2 Comments)

One of the many things I miss in Tridion 2013 SP1 is the ability to write VBScript code combined with Compound Templates.  Tridion was kind enough to provide the legacy pack for us ‘hardcore hackers’ who have our 10,000 line VBScript functions library perfected over the years in VBScript.  However, when we want to move to Compound Template programming, we’re left out in the cold with our VBScript skills and have to suffer with DWT, Razor, XSLT or C# coding.  Who wants to do that?  If we want to use the OOTB TBBs provided by Tridion to enable XPM or publish to FredHopper (for SmartTarget) the best way is to do this with a Compound Template.  But, Compound Templating and VBScript templates are not compatible – until now.

Using the VBScript Mediator we’ll have the best of both worlds – the fluency of the VBScript language and TOM API with the power of Compound Template modules.

First, if you don’t have it already, you’ll want to download the great VbsEdit program.  They have a really nice walkthrough on their homepage of all the features.

Next, you might want to download the VBScript Reference guide in case you’ve forgotten some of the commands in VBScript, such as setting an array to nothing.

Finally, go grab the code for the VBScript Mediator and start to have fun again with programming templates!

* This is an April Fools Joke!  VBScript in 2015….really?!

File, New Template

February 27th, 2015 | Posted by Robert Curlette in Tridion - (0 Comments)

Going back in time, year 2000, Active Server Pages was all the rage, performing server-side magic and integrating with databases with ADO. Tridion had just released version 4.0 and adopted the MS Scripting Host, supporting VBScript and JScript as the de-facto standard scripting languages. We had DTD Schemas, XML, Blueprinting, and re-usable content. Content Delivery was 1 ISAPI filter to render the dynamic links. Life was good.

Today the landscape is very different and complex, with lots of the magic happening on the front-end Content Delivery tier, Context aware web applications serving mobile and desktop devices, running the latest SDL Content Delivery stack.

Today the standard supported template languages from the CMS is almost the same as it was in 2000 – we publish content – .aspx or .jsp files, from the CMS to the Content Delivery tier. We can still use the good old deprectated VBScript language, or the SDL-created DWT scripting tags, or the recent XSLT mediator, if XSLT is your thing. So, you want to stay within the ‘supported SDL technologies and products’ arena – this is it. Not cool.

But, look around and see what the SDL community has been up to, and hang on to your hat! It’s been a very busy last few years in the SDL community and today this is where all the cool kids hang out. .NET MVC – got it, with DD4T, created by Quirijn Slings – with great Forum support (185 questions answered) on StackExchange, classroom training from Trivident, and even a ‘Reference Implementation‘ built BY SDL on top of DD4T, called DXA (as of Feb 2015). Yes, the Reference Implementation is built on top of open-source SDL community software, by SDL, and yet DD4T is community software and not officially licensed or supported by SDL.

Maybe DD4T and a dynamic MVC runtime is not your thing. Your content or design is not changing too often, and your development team is happy with the static publishing model from years past.

If this is the case then the best option today is the Razor Mediator, created by Alexander Klock – again an open-source project, and again the most cool and often used technology on new SDL Tridion projects requiring static template programming, and again not officially supported by SDL. It also has good forum support (50 answers), great documentation with plenty of examples, and is widely used. With this mediator you might publish to a .NET Web Forms site or JSP files to a Web Application.

The good news is both of these solutions play well with the _really_ cool technology SDL has been creating and supporting in the Content Delivery tier. Yes, I’m referring to the pieces that make up SDL Mobile, including the Ambient Data Framework, Context Engine and Contextual Image Delivery. In addition, all of these open source frameworks also play well with other SDL supported software including SmartTarget, FredHopper, and Media Manager.

The community has grown by leaps and bounds in the past 15 years, and today this is where all the cool stuff is happening. It’s great to see so many active members in the community. If you have written your own framework, or built on top of the existing great frameworks out there, please share your solutions so we can together build the great frameworks of tomorrow.  If you’re thinking about using one of the frameworks above, go ahead and embrace these open source frameworks and be part of the community that created them.

These frameworks and solutions would not be where they are today without the time and support of developers at these organizations:  Trivident, Indivirtual, HintTech, Building Blocks, Cap Gemini, SDL and Yabolka.  Also, a big thanks to Nuno Linhares for his continued support of the SDL Community and organizing of the SDL Tridion MVP program.

Using the Core Service we can easily get a list of all the Publish Targets in the system. We might want to do this if we are creating an app to publish items to a target (like the publish window) or if we want to Decommission a Publication Target in an environment, such as when we restore a database from one environment to the next.

The following code will get a list of all PublishTargets available within the context of a Publication. If you want to get all targets in the system then using the Admin user is the best. However, if you want to use the logged on user, then see my previous article to use the Core Service as the authenticated user (for a web app).

The data returned from the GetSystemWideList call changed between 2011 and 2013, and with the code below you will get all the info from the 2013 method. Special thanks to Likhan for the tip on the Tridion StackExchange.