The OpenACS E-Commerce Solution
Rafael A. Calvo and Mark Aufflick
The Open Directory Project (http://www.dmoz.org/) lists more than 200 shopping cart/e-commerce software packages, and more than 20 of these are open source, including Red Hat's Interchange (formerly Minivend), and others familiar to the IT community. So why highlight the Open Architecture Community System (OpenACS) and its e-commerce package?
Simply put, it has a unique angle -- OpenACS was designed to create and maintain online communities (as its name indicates). The community features of OpenACS set it apart from other e-commerce packages. OpenACS community functionalities include calendars, discussion forums, content management, an advertising server, and more.
The OpenACS e-Commerce package provides a huge number of features "out of the box", including managing products, managing users and personalization, managing orders, providing customer service, and auditing and security. These features will be described later, but first we'll provide some background information.
The Open Architecture Community System
The OpenACS framework is based on the former ArsDigita Community System (ACS), which was developed to solve the problem of creating scalable Web community systems. ACS was first released under the GPL license in 1997 by Philip Greenspun (and others), in an attempt to achieve software reuse across a number of community Web-site developments with similar business requirements and use cases. ArsDigita Corporation developed and maintained ACS-based Web sites for commercial customers and kept ACS open source. These customers included Oracle, Siemens, Levi's, MIT's Sloan School of Management, and the World Bank. In 2002, ArsDigita was purchased by Red Hat.
The initial ACS platform was implemented on the AOLserver Web server using the Tcl programming language and the Oracle RDBMS. At this same time, the OpenACS project was commenced by a number of developers seeking to implement a version of ACS that would run on an open source RDBMS.
By 2000, ArsDigita was in a stage of rapid growth and during 2001 changed its strategy to focus on a new application framework fully developed in Java. With this change, OpenACS became the official code base for the Tcl-based ACS system. Today, OpenACS is a mature project in its own right, with more than 5000 members and at least 10 companies that provide commercial support and development. The most recent version, OpenACS 4.6, will have been released by the time of printing.
The framework is being used for large and small sites by a number of organizations including Greenpeace and MIT's Sloan School of Management. As already mentioned, OpenACS is not dependent on any particular RDBMS, and today it runs on either Oracle or PostgreSQL, with the ability to support other ACID-compliant databases if necessary. The architecture stores the queries in XML files that are read at start-up, so different RDBMS have different sets of XML files.
Figure 1 shows the OpenACS architecture. The core packages are those required for OACS to function, which includes a kernel, package management, administration utilities (users, sitemap, and other common business objects), a template system that cleanly separates business logic from presentation, and a backend mail and messaging system. Services such as the events package are implementations of reusable logic that is not application dependent and does not require a user interface. Application packages have a user interface and their code is clearly divided into application and presentation logic. This presentation logic can be neatly implemented in adp (Tcl scripts embedded in HTML) using the template system, which also provides simple control structures that designers can customize.
Each service and application requires a data model that will be integrated into the framework. The integration of these data models enables reusability and a number of functionalities. To increase reusability, the framework has an object-oriented architecture but, because the RDBMS does not implement OO functionalities, they must be added ad hoc by the framework. The OpenACS objects have their attributes stored in tables and a set of methods defined as PL/SQL packages. These packages hold the procedures that make the programming interface for the data model.
The idea behind the OO architecture of OpenACS is that each piece of information that might be reusable should be an object. Since RDBMS are inherently not OO, data structures are integrated into the framework by being added to an acs_objects table that keeps track of every OpenACS object. Another table, called acs_object, defines the standard attributes stored on every object, including a system-wide unique ID, an object type, and auditing columns. The concept of OpenACS object types is equivalent to classes in OO programming languages; because we are using a RDBMS, additional work must be performed. However, if you are just going to use one of the OpenACS applications, such as the e-commerce module, you do not need to go into these internal details.
OpenACS E-Commerce Module
The OpenACS e-commerce package was originally developed by Eve Andersson at ArsDigita, and then ported from ACS to OpenACS by Jerry Asher, Walter McGinnis, and furfly.net, and more recently extended by Bart Teeuwisse. Much of this article is based on their extensive documentation.
We will first look at installing OpenACS and its e-commerce package. Then we will explore using its features.
OpenACS requires either PostgreSQL (7.1 for OpenACS v4.5, 7.2 for v4.6) or Oracle 8i. This article assumes that you are using PostgreSQL, and that it is already installed (available from http://www.postgresql.org). AOLServer requires libxml2 and associated headers (look for packages like libxml2 and libxml2-devel in your package manager, or compile the sources from http://xmlsoft.org).
Special requirements of the e-commerce package are ImageMagick (if you want to have thumbnail images automatically made of your product photos), and qmail (if you want to use the customer service module). Both of these are available in the package manager of most major *nix distributions, or are easily compiled from source.
It is recommended that you create a user and group for the AOL server. You can accomplish this on most systems with the commands:
$ su (enter your root password when prompted) $ groupadd nsadmin $ useradd -m -g nsadmin nsadmin $ exitIf you have compiled PostgreSQL yourself, it pays to be sure that the psql programs and libraries are in your execution and linking path. Before we go any further, we want to su nsadmin so all our AOLServer compilation is done by the unprivileged user we just created. The AOL server software must be compiled, which is easy on most platforms. On other platforms, such as Mac OS X, it will take some work. Download the source for "AOLserver 3.3ad13" from http://openacs.org/software.adp, where the ad13 suffix indicates the version of ArsDigita patches and database drivers included with AOLServer 3.3. The packaged AOLServer 3.4.2 for ACS sources is available at: http://uptime.openacs.org/aolserver-openacs/. The standard OpenACS configuration assumes that you have your Web sites installed under /web, so we will create it in the following command listing. We also need to create database permissions for our nsadmin user (the postgresSQL user on your system may have a different name):
$ su Password: (enter your root password) $ mkdir /web $ chown nsadmin.nsadmin /web $ su -c postgres createuser nsadmin Shall the new user be allowed to create databases? (y/n) y Shall the new user be allowed to create more new users? (y/n) n CREATE USER $ exitNext, download the latest release of OpenACS (version 4.6). It is available as a tarball from http://openacs.org/software.adp, but we will download the latest version including bugfixes from the cvs server:
$ su nsadmin Password: (enter your nsadmin password) $ cd /web $ cvs -d :pserver:[email protected]:/cvsroot login (Logging in to [email protected]) CVS password: (hit enter here for a blank password) $ cvs -z3 -d :pserver:[email protected]:/cvsroot \ checkout -r oacs-4-6 -d openacs-4-6 openacs-4Now for the AOLserver config file -- most of the work has been done for us, so download the template from: http://openacs.org/doc/openacs-4/files/openacs4.tcl.txt and save it to /tmp from your browser. Then relocate, rename, and edit it:
mv /tmp/openacs4.tcl.txt ~nsadmin/mystore.tcl vi ~nsadmin/mystore.tclListing 1 explains the core configuration options that should be all you ever need to modify. Much of the rest of the configuration file is self-explanatory, and is well documented on aolserver.com. We also need to name the site directory and create the database to match the name we gave it in the configuration file:
$ cd /web $ mv openacs-4-6 mystore $ createdb mystore CREATE DATABASE $ createlang pgplsql mystoreNow we are ready to start our server for the bootstrap process. To begin, start the server in a terminal window:
$ cd ~nsadmin $ su -c ./bin/nsd -u nsadmin -g nsadmin -ft ./mystore.tcl Password: (enter your root password) Notice: nsd.tcl: starting to read config file... Warning: nsd.tcl: nsssl not loaded because key/cert files do not exist. Notice: nsd.tcl: finished reading config file. ... Notice: nssock: listening on 0.0.0.0:80 Notice: nssock: starting Notice: nssock: accepting connectionsYou will see a lot more notices and warnings on the screen. The nssl warnings are normal if you don't have valid ssl certificates. AOLserver needs to start as root only to take control of port 80. As soon as this is done, the process switches over to running as the unprivileged user nsadmin, per standard security procedures. The -t option specifies the configuration file. The -f option specifies to run in the foreground for debugging purposes. Normally these messages are saved to the log files in /home/nsadmin/log. Open a Web browser and enter your site address. You will see the screens shown below as well as some others, and it is simply a matter of following the prompts. When the bootstrap loader says it may take some time -- it means it! There are about 300 sql files to be loaded into the database, among other things. At the end of the process, the server will exit ready to be restarted. Now is a good time to configure your server to start up automatically at boot time. Everyone seems to have their own favorite way, but if you want some assistance, check out your *nix distribution documentation. There are also some good pointers at http://www.openacs.org/doc/. However you start it, run the following command as root:
/home/nsadmin/bin/nsd -u nsadmin -g nsadmin \ -t /home/nsadmin/mystore.tclThe server will automatically switch into the background. After giving your server a minute or so to start up. Look for the line saying "accepting connections" in the log file; in our case, that is /home/nsadmin/log/mystore-error.log. The standard front page shown in Figure 2 will greet you. We are ready to install and mount the e-commerce package, so log in using the details you provided at install time, and click the "Package Manager" Link.
Installing and mounting a package in OpenACS is as easy as clicking a few buttons in your browser. Click on the "Install Packages" link and wait for the available package list to load. Unless you really want to load all of the packages, click the "uncheck all" link, and select the following packages: ACS Reference Data, Reference Data - Country, Reference Data - Language, Reference Data - US States, E-Commerce. Click "Next", and then click "Next" on the following screen to load the packages.
After installing packages, you must restart the AOLserver process. How you do this will depend on the way you set up your server to start, so consult your documentation. Return to the home page, and this time click on the "Site Map" link. The site map is where you lay out your OpenACS site. You can create directories and then mount any of your installed applications on those directories. Most packages can be mounted multiple times and will operate as independent applications.
Next to the root URL (/), click "new sub folder". Name the subfolder "ecomm" and click the button. You will now see an empty ecomm folder in your site map; click the "New Application" link next to it, and then select "E-Commerce" from the list. The name you allocate here isn't important, except it helps you identify your applications if you have many of them. We are now ready to configure our e-Commerce application.
Installing OpenACS E-Commerce
The process for applying for a merchant account is specific to the processing gateway chosen, and is documented in the package documentation, which is now available on your site (e.g., http://www.mystore.com/doc/). While still in the site map, you will notice some links next to your newly mounted application. "Set permissions" allows you to customize the default security setup, but for now, click on "set parameters" to configure the core elements of our e-commerce site.
The parameters page is broken into a number of self-explanatory sections, accessed by clicking the links near the top of the page. This setup covers basic issues such as currency, which features you want to enable, whether to allow pre-ordering, etc. As soon as these pages are submitted, your changes will be active. The only parameter that you need to take care of immediately is the EcommerceDataDirectory and the ProductDataDirectory, where files for each product can be uploaded. You will also need to create the directories in the file system.
Similarly, there are simple Web pages for the following configuration areas:
Products -- /ecomm/admin/products
Shipping cost rules -- /ecomm/admin/shipping-costs
Sales tax rules -- /ecomm/admin/sales-tax
User classes -- /ecomm/admin/user-classes
Email templates -- /ecomm/admin/email-templates
Figure 3 shows the main administration page. Be sure to read the help for both shipping cost rules and sales tax rules, because they are quite flexible.
Customizing OpenACS E-Commerce
If you are happy with the (rather bland) default templates, you will now have a fully functioning e-commerce Web site! You can see how it would look in Figure 4.
Thankfully, the templates are easy to customize. The e-commerce package allows you to define different templates for different things (e.g., different product types). There is a basic ui for submitting these templates in the /ecomm/admin/products admin Web page. These, and all other templates, are AOLserver templates with the extension ".adp" and they are a simple extension of the HTML tagset. Web designers will have no trouble learning the simple variable substitution and additional tags such as <if @[email protected] true></if>. Full documentation of these additional tags is on your server at the URL http://mystore.com/doc/acs-templating.
Assuming you have followed the standard install, you will find all of the non-product template .adp files on your computer's file system at /web/mystore/packages/ecommerce/www/. You must edit the email templates that are used to automatically send messages, such as order confirmations, to customers. You can do this at the URL listed above.
Using OpenACS E-Commerce
Producing and maintaining a large-scale product catalogue is a difficult task, and this is, perhaps, where most e-commerce packages fail. Once OpenACS is installed, it is easy to create categories and start adding products. Click the "Add" link on the products admin page and fill in the details.
If you get an error page mentioning a problem creating a directory called /web/yourservername/data/ecommerce/product/, then you missed setting or creating the data directory when you were following the instructions in the site map "set parameters" section. Go to /admin/site-map and click on the "set parameters" link next to the e-commerce package. Click on the "ALL" link up the top, and find the parameter for the data directory. Be sure this directory is set to where you want your products to be stored, and be sure it exists (if not, create it).
By "managing products", we mean the information that relates to them and is shown to your customers in the catalog. You can, for example, batch upload a .csv file of products. The format required for this file can be found in the package documentation already mentioned.
The package has flexible "storage" capabilities that allow you to upload files (e.g., chapters of books) that complement product descriptions. Also, each product can have a "reviews" section and ratings tool, so users can share information.
Since OpenACS was developed for building communities, and an important key to online communities is personalization, it's no surprise that OpenACS offers many great features in this area. For example, you can define rules regarding how to display products (or whether to display them at all) depending on who the user is. In addition, different pricing schemes can be set for individual products. This is useful when you want to have a limited-time sales price, which is given only to those who have the special offer code in their URL, or to users that fall into some particular profile.
Cross-advertising is when you link between products. In OpenACS, the site administrator can specify that one product always links to another product. Product categorization can be set up at /commerce/admin/cat/. For some shops, complex categorization is unnecessary, so product categories, subcategories, and sub-subcategories are optional. However, we believe that for some shops, three levels is limited, and that the catalog data model should be able to handle longer trees (unlimited category levels). There is already work being done on a new catalog engine that should be included in the next version.
Managing Users, Templates, and Personalization
As mentioned, the power of OpenACS is in managing communities of users and personalizing their experiences, which is done by having a common data model, and a standard way of storing information in the RDBMS. This is perfect when you are using or integrating OpenACS applications, but it can get a bit tricky when you write something from scratch. In these cases, the developer documentation and the online community behind the project are indispensable.
After users log in, they can be tracked around the site, and thus grouped into different "market segments" (user groups). The user profile can be built on different sources (e.g., browsing or buying history). With a bit of programming, you could even build profiles on a user's activity in another OpenACS application, like discussion forums or calendars. To set up user classes, you simply go to /commerce/admin/user-classes and the package will guide you. Here you can create groups such as "student", "military", etc., that get special prices, different views of the site, or different product recommendations.
Some countries have more strict laws about the type of information you can keep about your customers, so you may need to make information visible to your users. This can be done by changing your settings in the server's start-up file, so that users can see the user classes to which they belong.
The system has some default rules to handle classes. For example, if a user is a member of more than one class and there are special prices on the same product for both classes, the user will receive the lowest price. Other features include mailing lists and "top 10" lists.
Checking out in OpenACS is similar to other checkouts. Users can suspend orders, receive email alerts, buy and collect gift certificates, get refunds, and check order history and status.
Providing Customer Service
One of the outstanding features of the E-Commerce package is the customer service module. All customer issues and interactions can be logged and categorized to allow reporting and management by different areas of your company. All email correspondence with the customer is automatically logged in the interaction history. Email correspondence is also made easier and more consistent with a "canned" email system that provides templates for your customer service staff to modify and send.
Bulk emails can also be sent to customers based on many interesting criteria such as products they have purchased, products they have looked at, etc. Your emails are even sent through a spell checker.
If you want to see a great site that uses OpenACS, visit Berklee College of Music (http://www.berkleemusic.com/). They are using openACS for their content management, for e-learning, and of course for commerce. The shopping cart is used here to sell physical products (CDS and books), as well as virtual ones (courses).
OpenACS official site: http://www.openacs.org
Web Engineering Group: http://www.weg.ee.usyd.edu.au
Furfly.net consulting: http://www.furfly.net
Berklee College of Music: http://www.berkleemusic.com/
Rafael Calvo is a lecturer and course developer in E-commerce at the University of Sydney. He has taught at several universities, high schools, and professional training institutions. He has worked at Carnegie Mellon University (USA) and Universidad Nacional de Rosario (Argentina). Rafael has managed projects and worked as an Internet consultant for projects in Australia, Brazil, USA, and Argentina. He has a PhD in Artificial Intelligence applied to automatic document classification (e.g., Web site classification). He can be contacted at: [email protected].
Mark Aufflick is a freelance developer and consultant, specializing in Web-based workflow and document systems. He has worked with Australian universities, publishing companies, and financial organizations. Mark was previously employed as an infrastructure technology specialist for a leading global management consulting firm working in Australia, Asia, Europe, and the USA. He has a bachelor's degree in Computer Science from The University of Melbourne. He can be contacted at: [email protected].