Migrating your data to your new atg powered site

I was recently given the responsibility to migrate exisiting data from a legacy site developed with .NET to a site powered by ATG. While this kind of job is always quite challenging, I started looking at migrating the user data first. Both the old and the new databases were in MS-SQL server and hence decided that simple SQL select from remote and then insert to local was the best strategy. The requirement was to just migrate the basic user information and their contact information but I still faced the following issues:

  1. Primary keys: How are table primary keys stored in old system. Primary key ids in ATG are mostly strings. Hence it will not work unless the ids have been changed to be of type integer or the old system had string ids. Once data is converted, make sure all the id generators are updated so that ATG no longer creates ids in the same space.
  2. Password: How are passwords stored in current system. The default implementation in ATG stores password as MD5 hash. The password field will probably definitely need some kind of conversion.
  3. Data conversion: How much data conversion will be needed e.g. a conversion function will be necessary for each of these situations:
    • The gender fields are stored in ATG as integer bytes while old system could have this field stored as text.
    • The country could be stored with the long name or a short two char like GB.
    • Column sizes could be different and hence default column sizes in ATG might need increasing.
  4. Joins: How much joins are required. Understand the current DB model and then ATG user profile data model. ATG user data model involves many tables but most of them are ATG specific.
  5. Data integrity: The current system may not have any constraints or the contraints in place may not be similar to what ATG demands. Hence data clean up will be necessary. ATG does have all kinds of constraints .e.g. .login name has to be unique.
  6. Additional tables: Additional rows will need to be added to various tables just to keep ATG happy. I found that in addition to dps_user and dcs_user tables, empty rows will be also needed in dcs_user_catalog and dcs_user_wishlist tables.

Looking at the complexity and time involved just to migrate the users, it is probably advisable not to migrate order information unless there is enough time and budget allocated for the job.

ATG integration with CMS

One of the missing pieces in the ATG product stack is the lack of out of the box CMS support that would allow business users to change static content in their site e.g. content in pages like contact us, about us etc.

 

Links to ATG commerce reference store static pages

Example links in ATG commerce reference store static pages

The traditional way has been to create content in JSP pages and ask the developers to change the content as and when it needs changing. The approach involves another release cycle and hence takes longer to implement.

The other approach is to develop a CMS functionality with ATG repositories and dynamically change JSP content using the BCC, the ATG merchandising tool. However this doesn’t give creative control to the UI developers and ATG BCC can be a steep learning curve for someone who just wants to change some text or an image in a static page.

ATG’s reluctance to come up with a solution could be simply due to to the fact that it wants to remain UI neutral and would rather focus on the e-commerce engine than competing with CMS vendors. This might change though with Oracle acquiring Fatwire, a leading web content management system. However the integration of Fatwire and ATG is yet to be seen and may take a while.

One solution to this problem could be to simply let another content management system run in parallel with ATG. I have been playing with Liferay recently, the open source portlet container based CMS system and found that the Liferay war could be run in parallel with ATG commerce reference store and one can simply host the static pages in Liferay while linking them from the ATG hosted e-commerce store.

A contact us page created in Liferay

The drawback of this approach is that the header menu for the store which can be dynamic, will have to be created as a portlet in Liferay. Portlets are just another web app, and hence the data can be pulled from ATG if required or can be simply edited in Liferay as and when required. Another issue could be also sharing the session between the two web apps.

I haven’t tested this approach in a production environment yet, but seems like this can provide huge flexibility and freedom to business users and UI developers in a ATG powered site with large amount of static content pages.