Using WCF to publish Pindar CMS content to ASP.NET


Technologies used

Windows Communications Framework (WCF), VB.NET windows forms, SQL server, Oracle, Pindar Catalogue Management System (CMS)


Pindar produce a Catalogue Management System (CMS), that is used by many large catalogue companies to manage, traditionally printed catalogues. Companies such as the large electronic components catalogues and clothes directories.

From a technical perspective, CMS is an Oracle database that holds all the items, prices, page content, layout, pictures, paragraphs, sections, pages, publications and other resources linked to those entities. It handles work flow of the activities that are required to generate catalogue content with authorisation and release concepts, handles multi-lingual translations and the workflow involved in getting that content translated. As you can tell this is an expensive and powerful publication system for the larger catalogue companies.

The Oracle database if fronted by a number of optional components, the most important to us are the CMS manager this is the forms front end to the system and the Quark extensions that allow the pages to be built in Quark and ultimately sent to the printers in postscript files. Essentially the Quark extensions allow the Quark to understand and build the pages from all the elements held in the database, very cool to see. Oh and it works on both Mac and PC, obviously with the publishing heritage.


Many years ago I wrote an application in Delphi in my own time that took content exported from CMS tables into excel and then built HTML pages using this information. It read the page layouts and essentially built the page in HMTL in a similar same way that the Quark extension does it in Quark (all be it the subsection of functions that we utilised). One of the major problems was handling the Quark and Stibo (previous catalogue management system) tags that littered the text returned from CMS.
Things turned direction and I never actually used this application and the folder got stuffed on my shelf for another time.


Getting the text of the catalogue onto our web pages as text rather than PDFs suddenly went to the top of the list when we bought our Google Mini, and the need to feed it with rich content came along. I dusted down the Delphi project stripped out the bits I needed and started on a adventure to build an application that would allow the publication of item groups from CMS to our internet site. This was also was the prefect project to add to my experience of WCF.

The application had to allow the CMS user to see which item group texts had been updated since they were last published to the web and preview those groups then publishing the new version to the internet.

Follow how I used MD5 check sums and last modified dates, and schema validations to ensure the content had changed and was valid by following the project.

Publishing Catalogue Management System to ASPNET

WaitOne while I introduce multithreading

For some time I've been meaning to do some multi threading in the Dynamics SOP Fulfilment software I wrote. I have always thought that I could make things run a little more slickly. At fulfilment the following processes occur;

  • Credit/debit card debited if one is attached to the order
  • Order lines are fulfilled by quantities on the pick list being fulfilled
  • receipt printed (optional depending on carriage option- customer collect etc)
  • despatch note printed (optional)
  • invoice printed (optional)
  • thermal parcel label(s) printed one for each parcel entered
  • consignment details are exported via XML to UPS / Business Post / TNT depending on carriage routing algorithm
  • UI is constantly updated with progress bar and messages about progress

Spinning the fulfilment thread off on to its own thread using a background worker control was straight forward and is something I did when VS2005 was released. However some of the above processes take quite a few seconds to run, the fulfilment computers are quite recent hardware and thus should be able to perform better.
Thanks to good object orientated design, it turned out to be fairly trivial to get each of these processes to run on their own thread and synchronise them using wait handles. I had to use wait handles as some tasks depend on the successful completion of others. More...

Zebra Thermal Label Printing using VB.NET

Many, years ago (2001) I wrote a small application in Delphi that would allow a user to print thermal labels to a Zebra or Eltron EPL or ZPL language printer. It also supported printing to dotmatrix labels. That shows how long ago it must have been.
the labels were based on information drawn out of Dynamics GP. Thus warehouse bin location, item description etc was pulled through from GP allowing the goods in department to quickly print off labels for goods they were bagging or stocking.
As we have recently added another company to our premesis it is now desireable for the application to automatically detect which company the part number entered belongs to and print a label with the correct layout for that company out. The applicaiton originally written in Delphi is overdue for a rewrite into .NET.

Original Delphi Dynamics GP Thermal label software

There was no hours available in work time to write this applicaiton so I took it home to write in the evenings. The following posts show you how I got on. I had, as usual forgotten about some of the nice features I had encorporated into the original application.

Part II to follow....

Developer team sizes

Throwing people at the problem is not always the solution. Something large development teams I expect are fully aware of.
Paul Murphy has some wise words on the subject, pointing out the obvious, a fully descriptive design would actually be the code to do the job...

Development work and team size by ZDNet's Paul Murphy -- the programming language appropriate for a particular application is the highest level language in which the requirements can be fully and completely expressed.