Tridion Business Connector client
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";
}
}