A bit of a niche entry this one. Will only be of interest to those who use Tridion, one of the more ‘heavyweight’ CMS solutions.
I generally have a number of repetitive tasks that are extremely tedious to accomplish using the browser based GUI. So I constructed a simple command line tool that allows me to script tasks using a SOAP interface known as the Tridion Business Connector.
The client takes the following arguments:
bcclient.exe /h [hostname] /u [user] /p [password] /d [domain] /x "[request XML]"
Why did I build this? Very useful when called via scripting tools. In my case, Perl.
A simple Perl script that will return the XML for a Tridion Component would look something like this:
use strict; my $requestXML = q{ <?xml version="1.0" encoding="utf-16"?> <tcmapi:Message version="5.0" from="AndyRowlandSoapClient" failOnError="true" xmlns:tcmapi="http://www.tridion.com/ContentManager/5.0/TCMAPI"> <tcmapi:Request ID="GetItemRequest" preserve="true"> <tcmapi:GetItem itemURI="tcm:12-345" /> </tcmapi:Request> </tcmapi:Message> }; $requestXML =~ s/"/\\"/g; my $responseXML = `bcclient.exe /h MyTCMHost /u andyrowland /p mypassword /d MYDOMAIN /x "$requestXML"`; print $responseXML;
We could add a layer of abstraction, and wrap up the SOAP call within a subroutine, something like:
sub make_request { my $messageXML = shift; my $requestXML = '<?xml version="1.0" encoding="utf-16"?><tcmapi:Message version="5.0" from="AndyRowlandsSoapClient" failOnError="true" xmlns:tcmapi="http://www.tridion.com/ContentManager/5.0/TCMAPI">' . $messageXML . '</tcmapi:Message>'; $requestXML =~ s/"/\\"/g; my $responseXML = `bcclient.exe /h MyTCMHost /u andyrowland /p mypassword /d MYDOMAIN /x "$requestXML"`; return XML::Simple::XMLin($responseXML); }
Note the use the module XML::Simple to convert the response XML into a Perl data structure.
We can then create a succession of subroutines to perform a variery of routine tasks. To get a Tridion item:
sub get_item { my $URI = shift; my $messageXML = qq{ <tcmapi:Request ID="GetItemRequest" preserve="true"> <tcmapi:GetItem itemURI="$URI" /> </tcmapi:Request> }; my $ref = make_request($messageXML); if ($ref->{'tcmapi:Response'}{'success'} eq 'true'){ return $ref; } else { die "ERROR: Could not get item $URI"; } }