e-Com ATG Framework and Components

ATG Framework and
Component

Pawan Modi
modipawan8126@gmail.com

ATG FRAMEWORK &
COMPONENTS
ATG is the worldwide leader in the E-commerce solutions. This document describes ATG framework to
build e-commerce application.

ATG Page 1

ATG Framework and Components

Table of Contents

ABBREVIATION 7

ATG 8
Introduction 8
ATG Architectures 8
Component Centric Model 8
Model View Controller – MVC 8
Design Patterns followed in ATG 8

ATG Platform 9
ATG Dynamo Port Map 9
Module Dependencies 10

ATG Components 11
Dynamo Application Framework (DAF) 11
Dynamo Personalization Server (DPS) 11
Dynamo Scenario Server (DSS) 11
ATG Portal 11
ATG Commerce 12
ATG Content Administration (ATG Publishing) 12
ATG Merchandising 13
ATG Search 13
ATG CSC (Commerce Service Center) 13
ATG Outreach and Campaign Optimizer 13
ATG Control Center (ACC) 13
ATG Business Control Center (BCC) 14

Dynamo Application Framework (DAF) 15
Nucleus 15
Tag libraries 16
Dynamo Servlet Beans (Droplets) 16
Form Handlers 16
Repository API 16

Components 18
Create / Modify Components 18
Component Properties File 18
CONFIGPATH Environment Variable 19
Component Scope 19
Component Logging 19
GLOBAL.properties 19
Linking Property Values 19

ATG Page 2

ATG Framework and Components

Repositories 21
Repository 21
Repository Item 22
Types of Repository in ATG 23
Item Descriptor 23
Repository View 27
Java Interfaces & Classes 27
Steps in Setting up a SQL Repository 28
Working with Repositories 29

Droplets (Dynamo Servlet Beans) 31
Advantages of Droplets 31
How to use Droplets in a JSP 31
Droplet Parameters 32
Important ATG Out-of-the Box Droplets 32
Steps in writing a Droplet 33
TargetingForEach 34
CategoryLookup, ProductLookup , SKULookup 34
ItemLookupDroplet 34
RepriceOrderDroplet, PriceEachItem, PriceItem 34

Form Handlers 35
Form Handler Beans 35
Form Handler Methods 35
Exception Handling in Form Handler 35
Displaying error messages on page 35
ATG Out-of-the Box Form Handlers 36
Example of Using a FormHandler 36
Steps in writing Custom Form Handler 36
Example of Custom Form Handler (Java Code) 37
Example of Custom Form Handler (JSP Code) 37
SimpleSQLFormHandler 38
RepositoryFormHandler 38
ProfileFormHandler 38
SearchFormHandler 38
/atg/userprofiling/B2CProfileFormHandler 38
atg.b2bcommerce.profile.B2BcommerceProfileFormHandler 38
atg.commerce.profile. CommerceProfileFormHandler 38
ShoppingCartModifier,ExpressCheckoutFormHandler, CartModifierFormHandler 38

ATG Controller Framework (Servlet Pipeline) 39
Request Handling by Servlet pipeline 39
DynamoHttpRequest and DynamoHttpResponse 39
ServletUtil 39
Types of Pipelines 40
Request Processing by DAF Servlet Pipeline 40

ATG Page 3

Pre-checkout Process 70 ATG Page 4 .transient Error! Bookmark not defined. ATG Framework and Components Request Processing by DAS Servlet Pipeline 41 Customize Pipeline Servlet 42 InsertableServlet 42 Steps to Create InsertableServlet 43 DispatcherPipelineableServlet 44 ATG Scenarios (DSS) 45 Difference between Scenarios & Targeters 45 Slots 46 Dynamo Personalization Server (DPS) 47 Personalization 47 Message Content Processor 49 Content Management 50 ATG COMMERCE 53 ATG E-Commerce Functional Components 54 Profile Management 55 Profile Repository 55 Profile Form Handlers 55 B2C Profile Form Handler 56 B2B Commerce Profile Form Handler 56 Profile Tools and Property Manager 56 Create User Profile 57 Create Profile Group 57 Current Location Property 57 Catalog Management 58 Product Catalog 58 Extending default Product Catalog 58 Category Product and SKU 58 Catalog Navigation 59 Navigation History and Breadcrumbs 59 Custom Catalogs 60 Order Management 61 ATG Order Components (OTB) 61 ATG Order Java Interfaces 62 ATG Order Java Classes 63 Customizing OrderTools 65 Order Repository 69 /atg/userprofiling/Profile.

ATG Framework and Components Shopping cart Creation 70 Order Creation 71 Multiple orders creation for an user 71 Saving Modifying Repricing Orders 71 Extending Purchase Process 72 ChangedProperties Java Interface 72 Checkout Process 74 ExpressCheckout/Expedited Checkout 74 Complex checkout 74 Simple Checkout 74 Order Pipeline 75 Running a processor chain 76 User defined Processor Pipeline 76 Tags in Pipeline Definition File 77 Transaction Handling 77 Payment Process 78 Payment Pipeline chain 78 Order Fulfillment 79 Pricing and Promotions 80 PricingModel 80 Droplet for displaying price 80 ATG Pricing Services 81 Pricing Engine 81 Pricing calculators 81 Pricing Objects 81 Price Calculation Flow 82 Pricing Calculators 83 Pricing Engine implementation 83 Promotions 85 Attributes to manage promotions 85 eCoupon 86 Coupon FormHandler 86 Gift certificate 86 Gift certificate FormHandler 86 Extra Info 88 /atg/userprofiling/B2CProfileFormHandler 88 /atg/commerce/catalog/CatalogNavHistory 88 /atg/commerce/ShoppingCart 88 OrderManager 88 Order Repository 88 Profile Repository 89 Product Catalog 89 ATG Page 5 .

ATG Framework and Components sortProperties 89 ATG SEARCH ENGINE OPTIMIZATION (SEO) TECHNIQUES 91 Disclaimer 91 Repository 92 SEORepository 92 SitemapRepository 92 SEO Components 93 JumpServlet 96 JumpServlet Configuration 96 URL Optimization 97 JSP Coding 97 Component Configuration 97 Meta Tag Implementation 100 JSP Coding 100 Canonical URL 102 JSP Coding 102 Component Configuration 102 Sitemap Generation 104 Sitemap Configuration 104 Steps to Generate Sitemap 108 Appendix 109 Droplets 109 Form Handlers 111 ATG Page 6 .

(usually used for broadcasting) SNMP Simple Network Management Protocol. ATG Framework and Components Abbreviation DAS Dynamo Application Server DAF Dynamo Application Framework DSS Dynamo Scenario Server DPS Dynamo Personalization Server DRP Dynamo Request Protocol Server GSS Global Scenario Server LM Load Manager CM Connection Module RMI Remote Method Invocation DCC Dynamo Control Center SBS Session Backup Server UDP User Datagram Protocol alternative protocol to TCP/IP. MIB packet services ATG Page 7 .

The view can access the model getters only.The view gives the presentation of the model. Design Patterns followed in ATG • MVC2 in a Dispatcher View Strategy (a pull based MVC) used by Droplets. This model makes it possible for us to build Dynamo applications by configuring pre-built components instead of writing a lot of Java code from scratch. Component Centric Model Defines the basic architecture of a component.Model View Controller architecture is a standard design pattern that separates an application into three main components: the model. specified the structure of the interfaces and the mechanisms by which it interacts with the container and other components. • Dependency Injection or IoC (Inversion Of Control) used by nucleus to resolve inter dependencies between components. View . It also Provides guidelines to create & implement components that can work together to form the application. which are configured and linked together with . Controller . Model View Controller – MVC Model . the view.The model contains the state of the application. ATG Page 8 . ATG product suite has enabled the vendors to enable their e-commerce commercial capabilities.The controller takes action on the user input and creates. sets the model. ATG Framework and Components ATG Introduction ATG is the worldwide leader in the E-commerce solutions.properties files.  MVC . It is not aware of the view or controller. • MVC2 in a Service To Workers Strategy (a push based MVC) by formhandlers.  Component Centric . and the controller.The Dynamo Web applications are collected out of individual Java Bean components. ATG Architectures ATG follows architecture listed below.

etc. ATG Content Administration.). ATG Commerce. wireless devices. Java-based development environment for building personalized applications for the Web and other communication channels (e-mail messaging. ATG Dynamo Port Map ATG Page 9 . ATG Framework and Components ATG Platform The ATG Platform and its suite of products is a flexible. include Dynamo Application Server. ATG Portal. and the ATG Control Center. The platform and its related products.

If our application requires DSS.MF. Note that we only need to include the top-level module. ATG Page 10 . The list show above will include DSS at a minimum. E. If our application uses facilities provided by other application layers (e-commerce) then we will need to include those modules in the list as well. These dependencies are declared in the module manifest file at location <module- name>/META-INF/MANIFEST. then we need to specify only DSS not DPS. all additional modules required by the top modules will automatically be started. ATG Framework and Components Module Dependencies ATG application often depends on other modules which are started automatically when your module is started.g. which requires DPS.

Data analysis and reporting tools. ATG Page 11 . DAF runs on top of (DAS) or leading J2EE application server and supplies essential facilities for application development and deployment viz. – visitor profiling – content targeting Dynamo Scenario Server (DSS) The Scenarios module (DSS) adds advanced scenario-based personalization features to the ATG Platform. test. including ATG’s own Dynamo Application Server (DAS). and fine-tune customer management scenarios that track and respond to customer behavior. IBM WebSphere and BEA WebLogic.ATG Personalization Module • DSS – ATG Scenarios Module Dynamo Application Framework (DAF) The Dynamo Application Framework (DAF) is a foundation layer. Using the scenario editor. enabling to deliver personalized content to customers according to their characteristics and preferences. business managers can design. – Nucleus – Repositories – Tag libraries – Droplets & Form Handlers This portable framework is designed to run on the industry’s leading J2EE application servers. Business processes can be exposed as workflows. including ready-made business chart templates. are available for charting scenario data. ATG Framework and Components ATG Components The ATG Platform includes the following core components: • DAF .Dynamo Application Framework (Foundation Layer) • DPS . – Scenario based personalization ATG Portal ATG Portal provides a customizable framework for building personalized Web portals for specific user communities. Dynamo Personalization Server (DPS) The Personalization module (DPS) provides tools for visitor profiling and content targeting.

The system maintains the versions for the changes made to publishable assets. – B2B payment methods (purchase orders. customers. Content administration provides following tools. ATG Framework and Components A company. It provides a streamlined system for modifying and deploying content on your site. ATG Commerce ATG Commerce includes everything we need to build and manage personalized ecommerce Web sites. ATG Content Administration (ATG Publishing) ATG Content Administration (earlier known as ATG Publishing) is used for managing the content on the production website. The Portal Application Framework (PAF) is used by developers to create and administer portals and the individual gears that render content and features (a stock ticker or discussion forum. ATG Portal comes with a set of page template and baseline gears that you can use for your own portals. – Product Catalog management – Profile Management – Shopping Cart and Checkout – Order Management – Pricing – Inventory – Customer Service ATG Business Commerce adds support for following business-to-business (B2B) transactions. and partners. each providing access to different content and services. for example. requisitions) – Account-specific product catalogs – Price lists. ATG Consumer Commerce provides business-to-consumer (B2C) storefront development with following features. It keeps track of multiple versions of publishable assets (scenarios or catalog items. for example) within specific publishing projects. multiple shipping/billing addresses etc. might create separate portals for employees. Editing. for example) within portal pages. Check-in Approval – Deployment to Production ATG Page 12 . – Workflow editor – Content Creation.

ATG Merchandising ATG Merchandising application runs on top of ATG Publishing and ATG Commerce. It provides a way to Commerce Business users for creating and maintaining versioned content of various items like ProductCatalog. you can define how each project moves through the various stages of the publishing process i. – Processes natural language queries – Supports faceted navigation in applications – Multiple language support – Industry-specific lexicons – Automated indexing features – Generating reports is easy using ATG Customer Intelligence ATG CSC (Commerce Service Center) ATG CSC (Commerce Service Center) is a web based application that also integrates a ticketing system. ATG Knowledge and Response Management accumulate and provide CRM related information. QA and deployment on the live site. scenarios etc to track visitor behavior and tune the commerce system. content creation. ATG Commerce Service Center is customer service application which can be customized and deployed. editing. The features of ATG Search include. The response time of the search engine is very less. approval. ATG Control Center (ACC) ATG Control Center (ACC) is the integrated (stand-alone) user interface for the ATG Relationship Management Platform and its supported products. Orders etc. ATG Search ATG Search is a leading search engine which lets users find in the information they wanted. ATG Page 13 . It provides a smooth customer service experience. Personalization targeters etc. ATG Framework and Components Using the workflow editor. It enables the sales and service agents to efficiently help customers over telephone. check-in.e. ATG Outreach and Campaign Optimizer ATG Outreach and Campaign Optimizer are used by the marketing people to create promotions. website. which can be used by the Commerce Call center agents to manage customers. email or other means of ATG Commerce. ATG Commerce Service Center helps in increasing revenues and profits by turning the service center into sales center.

page designers. These components include user segments. Management of ATG Personalization Assets You use the ATG Business Control Center to create and manage the components that are responsible for delivering personalized Web site content (content that changes dynamically for each site visitor). and content groups. including the creation and deployment of Web site content. ATG Business Control Center (BCC) The ATG Business Control Center is a browser-based interface that allows marketers and others senior people to create and edit many of the elements required to maintain an ATG-based Web site. content targeters. ACC & BCC. Profiles Management Management of the profiles required by ATG Business Control Center users. ATG Content Administration The ATG Business Control Center is the primary interface for performing ATG Content Administration tasks.e. The activities can be performed in the ATG Business Control Center are divided into the following general areas. and other members of your project team with point-and-click access to the tools they need for building and maintaining ATG applications. Note: Content groups can be created via both i. The ATG Business Control Center is also used as the starting point for launching several ATG applications including the following  ATG Merchandising  ATG Outreach  ATG Service applications ATG Page 14 . site administrators. ATG Framework and Components The ACC provides application developers. business managers. including their organization and role assignments.

• It creates and configures Dynamo components and organizes them into a hierarchical namespace so they can be referenced by other components. • DAF also provides a Web-based component browser. what their initial properties are. Nucleus components are JavaBeans. Components are organized into a hierarchy.. Furthermore. and SNMP monitoring etc. • By reading the various configuration files associated with each component. • Nucleus allows developers to build applications in a component-oriented manner. similar to a file system. • In Nucleus. This results in component names such as /atg/dynamo/service/Scheduler and gives Nucleus the ability to resolve relative names. The ACC creates the necessary configuration files automatically./service/Scheduler. load balancing. such as. • The components are stored in the Nucleus which is representing the components in a hierarchical structure and the components are looked up using the request. Nucleus figures out what components to use in an application.. ATG Framework and Components Dynamo Application Framework (DAF) The ATG Platform is supported by a foundation layer called the Dynamo Application Framework (DAF) that runs on top of our application server.resolveName(“alias name”) method. Our application server handles tasks like session management. But DAF supplies additional following facilities for application development and deployment. • Nucleus is the central registry for the JavaBeans that contain our application-level logic. then gives these components a place to "live" so they can be found by other components. Nucleus • Nucleus is an ATG component container. • The Pages and Components task area in the ATG Control Center shows all of the components currently registered in Nucleus (by module or by path) and provides templates to help we create new ones. and how they connect to each other. ATG Page 15 . we can use the built-in Component Editor to specify initialization parameters and the way the components link together. as part of the Dynamo Administration interface that we can use to examine and modify components in a running Nucleus application. every component has a unique name. • When it comes to configuring components for our application. affording all the advantages of the JavaBeans standard. • Nucleus is the mechanism that creates and configures new components. clustering. either from existing Dynamo classes or our own Java classes.

LDAP repository. manipulating data and handling transactions.  Droplets are based on MVC2 Dispatcher View (pull based) design pattern. The API then accesses the underlying data storage device. Java programmers and page designers can work independently and applications are easier to maintain. ShoppingCartModifier etc. There are lots of custom tags provided in JHTML to access the dynamo components. • DAF comes with a set of ready-made Form handlers like ProfileFormHandler. the DAF framework provides the DSP tag library to access Nucleus components and render dynamic content from our Java Server Pages (JSPs). forwarding the user to some other JSP page etc. • DAF also includes a Core tag library that provides generic tags for flow control.  Dynamo Servlet Beans minimizes the amount of Java code that has to appear in HTML and the amount of HTML that has to be hard-coded into Java classes and also enables the developer to take a “Dispatcher View” approach of MVC2 Design pattern. store. Repository API • The Repository API (atg. Form Handlers • Form handlers are specialized Nucleus components that can be embedded in our JSPs to do form validation and based on the results do certain actions like inserting into database. • ATG support SQL repository.  As a result. • When JSP become the presentation language for java. LDAP systems. translating the API calls into whatever calls are needed to access that particular data store.  DAF comes with a set of ready-made Dynamo Servlet Beans that you can use in your pages. or query a data store. Dynamo Servlet Beans (Droplets)  Dynamo Servlet Beans are specialized Nucleus components that can be embedded in our JSPs to display dynamic content. ATG Page 16 . and content management systems. • Implementations of the Repository API exist to access data stores such as relational databases. that we can use in your pages either directly or customize them using the extension points given.repository. Composite repository & Versioned repository. they make the appropriate calls through this API. • Using Form Handlers is the way to achieve “Service to Workers” (push based) approach of MVC2 design pattern.*) is a data access layer that defines a generic representation of a data store. ATG Framework and Components Tag libraries • Originally the presentation language used by the framework was JHTML. • Whenever ATG applications needs to load.

ATG Page 17 . and even individual properties through the use of Access Control Lists (ACLs). queryable repository. • The Secured Repository Adapter provides fine-grained access control to repository item descriptors. the Composite Repository feature enables us to consolidate multiple data sources and make them available to our application as a single. ATG Framework and Components • In addition. individual repository items.

Create / Modify Components We can create / modify component and configure initial properties by – Using the eclipse ATG component browser plug-in. Component Properties File Properties file is a text file and named with the component name (including full path) following by . CONFIGPATH variable is computed dynamically during startup based on the modules started. For example. Session. Request. – Manually by editing the . separated by forward slashes like /atg/dynamo/service/SMTPEmail. link / unlink components. Use of components gives following advantages. It is called configuration layering.properties extension. • Code reusability • Reduced development time • Container independent • Entire application behavior can be changed by modifying one/some of the components. – Using ATG Control Center (ACC) browser.properties file must be placed under CONFIGPATH of the ATG.MF file of every module started. ATG Framework and Components Components Components in ATG are a public java class with appropriate properties with set/get methods.e. This . The name of the component is the full path name of the .e. The properties file also contains any dependency injections of other components. containing folder names followed by simple component name. DPS/DSS ATG Local ConfigApplication Config ATG Page 18 . a component have one of the 3 scopes i. Using any of the above approach. Properties are name value pair.properties file that specify the class name and the scope and also any default values. Additionally a component comes with . their order of startup and based on the entry in the MANIFEST. Global.properties file. Note: In ATG. ATG local config level & application config level then value from application config level will be taken. /com/vam/firstbean. we can browse components. If the same property value is defined at different level i. set properties (single and multi-value).properties file under the configpath starting with a “/”. Full component name are unique.

ATG looks for component properties file in directories specified by CONFIGPATH environment variable.g.properties is a special properties file. Linking Property Values In a system containing many components.  Session – for individual session. not associated with any specific component this is often used to set logging levels for a set of components. ATG support log levels i. To do this. the last value overrides previous values. per-module or per-application basis. Default log level is info. Description is a short description of component and scope tell about the component scope. Component Scope In ATG. Component Logging Component can log information about their status. enter the component name and property name whose value is to be copied. error. ATG Framework and Components Component properties file mainly contain class. but not changed in the other components. warning. If the same property value is defined in two files. Class is a name of java class with package. CONFIGPATH Environment Variable ATG looks for component properties file in directories specified by CONFIGPATH environment variable. It is called configuration layering.e. ATG Nucleus can link the property of one component to the value of other component. Logging can be done on per-component. debug. it is possible for several components to be initialized with the same property values. If we configure (set value) these properties independently then this can lead to the confusion for the administrator if the value is changed in one component. info.  Request – only to send response for a request.properties GLOBAL. we need to append a “^” to the name of the property we want to set. Log files are generated <jboss>/server/atg/logs Individual component can turn on/off their logging. So every matching properties file is loaded. E. a component can have any one of these scope. So we want to link the property of a component to other component. description & scope information of a component. Finally. GLOBAL.  Global (default) – for everyone. ATG Page 19 . CONFIGPATH=<atgroot>\B2CAppearal\config CONFIGPATH actually points to many folders and Nucleus reads entire CONFIGPATH left to right.

where firstbean is a nucleus name relative to secondbean. ATG Framework and Components For example if there is a second bean whose age property is dependent on firstbean age property. ATG Page 20 . then the properties file of second bean will look like shown below.

It supports numerous databases. A repository is a collection of repository items. it is a collection of JavaBeans whose properties can be found and stored in the data store. which translates the request into whatever calls are needed to access that particular data store. The mission of the repository is to provide a mechanism to retrieve the data elements and a run-time representation of the available Meta information about each object. Connectors use an open. as well as popular open source databases such as and MySQL. Repository The data access layer that defines a generic representation of a data store. The repository is not the data store itself instead.Each employee would have a corresponding repository item. These properties correspond roughly to columns of a table  Item Descriptors . ATG Page 21 .  Repository Queries . Following are the main conceptual parts of the Repository API. ATG Framework and Components Repositories ATG provides an easy to use and powerful object relational mapping (ORM) persistence framework. Repositories access the underlying data storage device through a connector. Connectors for relational databases and LDAP directories are provided out-of-the-box.An employee item descriptor would specify all of the properties that an employee repository item could possess. It uses reflection primarily to determine the java bean properties and does not need the developer to code any POJO also. published interface. Each repository connects to a single data store. But application & subsystems in Dynamo can use different repositories or share the same repository. Repository item is made of properties. including Oracle and DB2. so additional custom connectors can be added if necessary.An application can build queries that return the appropriate employee. Repository item is corresponding to row in database table.  Repository Items .

developers can use targeting rules with the same syntax to find people or content. So each item descriptor must specify the columns that act as the repository ID (which will usually be the same as the table’s primary key. phone number) while another may represent the meta-data associated with a news article (author. or lastName etc. If we don’t define an id property in the item descriptor. a repository item often corresponds to a row in a table. Each repository item must have an identifier. ATG Framework and Components Repository Item Repository items are like a JavaBeans. Their properties are determined dynamically at runtime. In the SQL repository. The properties in a particular repository item depend on the type of item. each user profile is a repository item. Each property has a name. synopsis). The repository ID must uniquely identify the repository item from all other repository items of the same type. such as id. In the SQL profile repository. ATG Page 22 . So the purpose of the Repository interface system is to provide a unified way for data access. firstName. One item might represent the user profile (name. Each repository item is made of properties. which is string. For example. The properties available to a type of repository item are defined in the repository’s item descriptors. these properties correspond roughly to columns of a table. These properties store the data that makes up a repository item. then the id property must use the default data-type. keywords. In the SQL repository. which is called a repository ID. For example. address.

For example. map. 3. user profiles. 2. ATG Framework and Components Types of Repository in ATG The following Repository models exist in ATG. The column specified by the multi-column-name attribute is used for multi-valued properties of data- types array. a SQL repository instance that supports a commerce application might have different item descriptors representing users. the ATG Page 23 .). In the SQL repository. products. Versioned Repositories .ItemDescriptorImpl. application security information. The multi-column-name attribute ensures that the ordering of the multivalues are maintained. This is to maintain versions of repository items. For map type properties.use ATG’s Generic SQL Adapter (GSA) connector to perform a mapping between ATG and data stored in a SQL database. LDAP Repository . Also Repositories can support multiple item descriptors. SQL Repositories . String. Composite Repository . For example. as well as the class of the Java object used to represent that type (Integer. orders.Uses the Dynamo LDAP connector to access user data in an LDAP directory. 1. each database table might have its own repository item descriptor.repository. product categories. The item descriptor gives a name to the type. and more. Item-Descriptor Relationships • One to One – Represented by ‘auxiliary’ tables. Item Descriptor Each repository item type is described by a Repository item descriptor (which has a one-to-one correlation with RepositoryView). The name of each property is defined in the item descriptor. The item descriptors exposed by a repository depend on a combination of the underlying data store and the configuration of the repository.RepositoryItemDescriptor interface and may subclass atg. An item descriptor implements the atg.repository.provides a means for using more than one data store as the source for a single repository. etc. 4. and list and is not used for sets (which are unordered). and also describes the properties for that type. etc. Or another alternative might join multiple tables into a single item descriptor. It can be used to access content.an extension of the GSA used in ATG Publishing. • One to Many – Represented by ‘multi’ tables • Many to Many – achieved using an intermediate table.

Cascade Update If a repository item has a property that refers to other items and that has the cascade="update” attribute set. insert. ATG Framework and Components values in the column specified by the multi-column-name attribute must be a string. these values should be an integer or numeric type. then when the item is created following action executes. and must be sequential. – A new item of the type declared by the item-type attribute is also created and – The property is set to point to the other item created. updated. or delete. The cascade attribute can take one or more values i. Cascade Insert If a repository item has a property with the item-type attribute and the cascade="insert" attribute set. • xml-combine="replace" • xml-combine="remove" • xml-combine="append" • xml-combine="append-without-matching" • xml-combine="prepend" • xml-combine="prepend-without-matching" Cascade attribute The SQL repository uses the cascade attribute to better handle hierarchical properties with either the item-type or component-item-type attributes. and deleted along with the parent item. Xml-Combine Xml combine tag is use to extend default catalog (product catalog). The item is created. For list or array type properties. The cascade="insert" attribute is ignored for properties that use component-item-type. added. then. update. ATG Page 24 .e. The cascade="insert" attribute is typically used with cascade="update" and cascade="delete" so that management of this item is completely automatic.

For example. then when you remove the repository item. Do not use cascade="delete" in properties on the “many” side of the relationship that refer to items on the “one” side of the relationship. since deleting one employee item would then delete the company item that is referenced by the remaining employee items. Item-Descriptor Hierarchy (Inheritance) Item-descriptors also allow inheriting data from parent table. The employee item descriptor itself defines a company property. They are readable and writable. we can have derived properties. Derived properties In a SQL repository. Any referenced items that are new (transient) items are added. Fetching the child repository item will automatically fetch data from the parent table as well. The item on the “one” side of the relationship cannot be deleted safely. In this one-to-many relationship. since multiple items may be referring to it. There exists an auxiliary relationship between the parent and child item-descriptors. ATG Framework and Components – When we call addItem(). ATG Page 25 . any new (transient) items referenced by this property are added automatically to the repository and – When we call updateItem. any items that are referenced by the property will also be removed. but not queryable. the employee property in the company item descriptor could use cascade="delete". when you remove a reference to this item. any referenced items that have been modified are automatically updated. Transient attributes are never stored or read from the persistent data store. But the company property in the employee item descriptor should not use cascade="delete". the item is automatically removed. This feature enables one repository item to derive property values from another repository item or from another property in the same repository item. The parent item-descriptor specifies/restricts the child item-descriptors that can inherit it by specifying the sub-type-property attribute. Transient Properties The SQL repository allows us to define transient attributes for a repository item. suppose you have an item descriptor named company with an employee property that references many repository items defined by an employee item descriptor. Cascade Delete If a repository item has a property with the cascade="delete" attribute set. Special care must be taken in cascade delete in one-to-many relationships. Also.

suppose you have a query like this job = manager AND sal = 5555 If query caching is enabled. We size and flush caches separately for separate item types.caching is handled separately in each VM. Cache Modes The SQL repository implements several different modes of caching. whenever an item of a given item type is added to or removed from the repository. with no invalidation events to synchronize updates from different server instances. all queries are invalidated in the query cache for that item descriptor. Query caching is turned off by default. ATG Page 26 . the result set is retrieved from the database and stored in the query cache. • No Caching (disabled) • Simple Caching . Cache Invalidation Item cache entries are invalidated when that item is updated & affected queries are also invalidated. For example. In addition. Item Caches & Query Caches Each item descriptor in a SQL repository has its own separate item cache and query cache. rather than needing to access the database. but which is instead a direct child of an <item-descriptor> tag. the SQL repository can retrieve the result set from the cache. The query cache holds the repository IDs of items that match particular queries in the cache. • Locked Caching . The item cache holds property values for repository items.read and write locks are used to synchronize the caches. Which mode is to be chosen depends on the nature of your Dynamo application. ATG Framework and Components A transient property can be specified by defining a <property> tag that is not associated with any database table. the next time this same query is issued. the SQL repository uses simple caching. By default. Then. It is indexed by the repository item IDs. Simple mode is better if the application is running on only one JVM and is not clustered across. the first time this query is issued.

where at the most one server alone will be handling the updates. Repository View atg.RepositoryView If you do not have an exact repository ID. • If the ATG applications are deployed on a cluster of servers. atg. To enable a different cache mode for an item descriptor. By default. set the cache-mode attribute in the item-descriptor tag of the repository definition file. This interface provides methods to access RepositoryItems. The IDs for items in different item types might not overlap.repository. corresponding to the three main elements of the repository.repository. From this returned object you can build and execute a query. then we have to go in for either Locked caching or Distributed Caching. you can use the view named by the defaultViewName property. Note: • Simple mode is better if the application is running on only one JVM and is not clustered across. You can find out what views are available through the viewNames property of the Repository component.RepositoryItem • The atg. • For repositories like ProfileAdapterRepository. it is better to use Locked caching because we have single server & many modules wants to try operation at the same time. ATG Page 27 . If you need to use the default view. Alternatively.repository.Repository The atg. it is the default view. you can retrieve that view through the RepositoryView getView(String pName) method.repository.repository. • Each RepositoryItem is uniquely identified through its repositoryId property. ATG Framework and Components • Distributed Caching . This is useful if you need to build a system to navigate and view the entire contents of a repository. RepositoryViews and ItemDescriptors.RepositoryItem interface is the immutable interface that represents an element from a repository. the SQL repository uses simple caching. you can create properties for your own services that allow you to explicitly name the view your code is interested in using. Item descriptors and RepositoryViews often have a one-to-one relationship and often have the same name. Java Interfaces & Classes atg. but if there is. you can search for items in the repository through a RepositoryView.Repository interface is the base definition of any repository implementation.caching with cache invalidation events. After you have a name. There might be no view that can return all items in the repository.

you can no longer change the ID. • Once a query is built. • Once the item has become persistent. • Create the necessary tables in the database. atg. for elements that match the “where” clauses of the query. • Once a query is built from the QueryBuilder. • Make the GSARepository java class into a global component by defining a .. • This QueryBuilder object can be obtained from the repository view’s queryBuilder property. it is executed via the various executeQuery methods defined in the RepositoryView interface. if no elements could be found.repository.repository. or – null. you can change its repository ID by changing the value of the id property. which you can build using the atg.QueryBuilder • Sets of repository items can be gathered by queries. • Use the startSQLRepository command line tool to test out the repository and get the DDL structure.repository. for example SQL. ATG Framework and Components • After a repository item is created. Above methods return either – an array of RepositoryItems. but before it is added to the database. each RepositoryView implementation translates the internalized data structure into its native query language.properties file and configure the properties like DataSource.QueryBuilder interface. • Add the necessary item-descriptors in the XML file and map them to the appropriate tables. Definition file etc. and then return an array of repository items that match the supplied query criteria. ATG Page 28 . Steps in Setting up a SQL Repository • Write a Repository definition XML file following the DTD of the gsa-template tag.RepositoryView atg.

Creating Item We can create items using the following two methods. 1. just pass the ID and ItemDescriptor name of the item to the removeItem method. These methods return instances of MutableRepositoryItem. initialRepositories property if the repository has to be started automatically during the ATG startup. The item exists only in the memory. The repository component will be started when an application component accesses it. ATG Framework and Components • Add the repository to the ContentRepositories component. Fetch a mutable version of the repository item through the getItemForUpdate or getItemsForUpdate methods. ATG Page 29 . the first time. or just leave it. Working with Repositories Retrieving Item We can retrieve items from the repository using the following methods. The item’s property values will be deleted and will no longer be accessible from the repository. we can turn it to a persistent repository item use the addItem method. Updating Item The MutableRepository updates a repository item transactionally in three steps. Adding Item Once an item is created using create item method. This does not insert the item into the Repository. Removing Item Removing item persistently. Note –Above methods creates a MutableRepositoryItem.

3. Use this method to change as many properties as you wish. Save the changes with the updateItem method. If there was any type of error. Depending on how you have configured transactional behavior. ATG Page 30 . Object pPropertyValue) to update the property value. Above changes will not be reflected in the repository until the final updateItem operation is invoked. ATG Framework and Components 2. the update can be committed immediately. MutableRepositoryItem has a method setPropertyValue(String pPropertyName. a RepositoryException is thrown. This method extracts all the changes required for the item and updates the item in the data store. or the update may happen automatically when the associated transaction commits.

ATG Page 31 . • Passing parameters to droplet. Advantages of Droplets We can include multiple droplets in a single page. DAF (Dynamo Application Framework) comes with a set of ready-made (out-of-the-box) Droplets that can be used.ForEach. The user can create their own droplets based on their need. Switch. For examples . How to use Droplets in a JSP • Import droplets using following statement. • Using droplets using following tag. It minimizes the amount of Java code that has to appear in HTML and the amount of HTML that has to be hard-coded into Java classes. They are referred as Custom Droplets. IsEmpty etc. • Droplets can be nested • Parameters can be passed between different droplets. IsNull. ATG Framework and Components Droplets (Dynamo Servlet Beans) Droplet is a Servlet Bean to dynamically generate HTML from a Java Object.

depending on whether its input parameter is null Name Function Range Displays a subset of the elements of an array Redirect Redirects the user to the specified page ATG Page 32 . ATG Framework and Components Droplet Parameters • Input parameters – Passed to the servlet bean – Usually used by the java code to process • Output parameters – Set by the servlet bean – Used on the JSP’s to display dynamic content • Open parameters – Open parameters contain the data that is rendered by the servlet bean. Important ATG Out-of-the Box Droplets Name Function For Displays a single output the number of times specified ForEach Displays each element of an array Compare Displays one of a set of possible outputs. depending on the relative value of its two input parameters CurrencyFormatter Displays a numeric value as a currency amount. formatting it based on the locale ErrorMessageForEach Displays error messages that occur during a form submission Format Displays one or more text values. formatting them based on locale IsEmpty Displays one of two possible outputs. depending on whether its input parameter is empty IsNull Displays one of two possible outputs. and specify code to execute at different stages of servlet processing. – Marked by dsp:oparam tags.

arranging the output in a two-dimensional format TableRange Displays a subset of the elements of an array. • Make the droplet into a component using the ATG Component Browser. Example of Custom Droplet (Java Code) ATG Page 33 .DynamoServlet class.. • Override the service() method and provide the logic there. • Write the BeanInfo class and define all the necessary parameters in that. • Embed the droplet in a JSP page using the <dsp:droplet . • Us the OPARAM tags to mix the HTML content and the dynamic values returned by the droplet. arranging the output in a two-dimensional format RQLQueryForEach Constructs an RQL query and renders its output parameter once for each element returned by the query RQLQueryRange Constructs an RQL query of a SQL database and renders its output parameter for a selected subset of the elements returned by the query Steps in writing a Droplet • Write a java class extending the atg.servlet.> tag and pass the necessary parameters. depending on the value of its input parameter TableForEach Displays each element of an array. ATG Framework and Components Switch Displays one of a set of possible outputs. • Identify the appropriate Input parameters that can be passed to droplet and the OPARAMS the droplet will render and also the various output parameters the droplet will set in the request.

ProductLookup . ItemLookupDroplet RepriceOrderDroplet. SKULookup Categories. CategoryLookup. PriceItem These droplets are used to display the price of the SKUs. products and sku’s can be displayed with the help of CategoryLookup. ATG Framework and Components Example of Custom Droplet (JSP Code) TargetingForEach TargetingForEach droplet uses the RootCategories targeter to find root categories. ATG Page 34 . ProductLookup and SKULookup droplets respectively. PriceEachItem.

the corresponding subproperty in the propertyExceptions contains that exception. true if any errors occurred. ShoppingCartModifier etc.. Form Handler Beans These beans have their getters and setters. A handler method is typically invoked when the user clicks the submit button and handles the processing of the form. The form handler checks the validity of the data. modifying profile. “ErrorMessageForEach”.g. • Dynamically setting values to component’s properties. Exception Handling in Form Handler As mentioned. – formError: A Boolean i. ATG Framework and Components Form Handlers Form handlers are specialized nucleus components that embedded in JSPs to do form validation and based on the results do certain actions like inserting into database. etc.g. deleting profile etc. – propertyExceptions: A read-only property that returns a dictionary of subproperties. • Displaying live value of the component’s property. Storing and retrieving information from database. Using Formhandlers we can associate various inputs to the nucleus components. These are properties which can be set by the input elements in a form. one for each property set by the form.e. • Direct interaction with SQL database e. The form handler can evaluate the validity of the data and check for errors if any. display an error message. FormHandler used to create a profile can have methods for creating profile. This droplet is used to display the errors occurred during form Handling. Form Handler Methods A form handler class must include one or more handler methods.) Following are the use cases of form handlers. FormHandler is used to handle errors and exceptions. direct the user to a different page. User can create their own Formhandlers based on their need. – formExceptions: A vector of the exceptions that occurred when the form is processed. check for errors. • Example is ProfileFormHandler.g. and determines what action to take (e. The beans can be use for output also. Any property that generates an exception. E. These exceptions are stored in following properties. ATG Page 35 . Displaying error messages on page Check for the value of “formError” Boolean & render the error or exception using droplet i. forwarding the user to some other JSP page etc.e. FormHandler can have several methods depending on its purpose. They are referred as Custom FormHandlers. submits the data.

• Provide the appropriate handleXXX methods e.g. ProfileFormHandler Connect forms with user profiles stored in a profile repository. • Write the validation logic inside the handler methods and return appropriate Boolean codes. ATG Framework and Components ATG Out-of-the Box Form Handlers Name Function SimpleSQLFormHandler Works with form data that is stored in a SQL database. Example of Using a FormHandler Steps in writing Custom Form Handler • Create a java class extending the atg. CartModifierFormHandler Used to process an order such as adding to cart. QueryFormHandler Specifying properties to Search Engine.droplet. handleCreate(). RepositoryFormHandler Saving repository data to a database. • Provide either a Map data structure to hold the form data or provide individual fields with appropriate set/get methods.GenericFormHandler base class. modifying and deleting user profiles. Also used to obtain refinements from existing data. ATG Page 36 . Creating. Each Handler method will be triggered by a corresponding dsp:input submit button from the JSP page. modifying cart etc. handleUpdate() etc.

if any.name is bean used to set the value after the form is submitted. Example of Custom Form Handler (JSP Code) In following sample code. ATG Page 37 . handleAddData() is handler method and name is handler bean. Example of Custom Form Handler (Java Code) In the following code sample. The handler method will contain logic to do the validations and handling errors. When user clicks on submit button the handleAddData() method of MyFormHandler Java class get called which will process data and transfer control to the successURL specified in form action. the input MyFormHandler. • Forward the user to the appropriate success URL. into the formExceptions Vector or proceed to do the business logic. The data is processed and control is redirected to the successURL specified in the form. ATG Framework and Components • Populate validation errors.

SearchFormHandler SearchFormHandler for specifying properties available to a search engine.profile.b2bcommerce. ATG Framework and Components SimpleSQLFormHandler SimpleSQLFormHandler for working with form data that is stored in a SQL database. /atg/userprofiling/B2CProfileFormHandler atg. CartModifierFormHandler These form handlers are used to manage the Shopping Carts. RepositoryFormHandler RepositoryFormHandler for saving repository data to a database. You can also extend these and other form handler classes to handle the specific needs of your application. ProfileFormHandler ProfileFormHandler class to connect forms with user profiles stored in a profile repository.ExpressCheckoutFormHandler. ATG Page 38 .profile.commerce. CommerceProfileFormHandler ShoppingCartModifier.B2BcommerceProfileFormHandler atg.

ATG Framework and Components ATG Controller Framework (Servlet Pipeline) ATG controller framework is used to handle the HTTP requests. DynamoHttpRequest and DynamoHttpResponse The Dynamo server provides specific request. response pair called DynamoHttpServetRequest and DynamoHttpServletResponse. – session tracking – page compilation Request Handling by Servlet pipeline Request handling can usually be broken down into a series of independent steps. • DynamoHttpServletResponse: There is also a corresponding atg.ServletUtil) is used to import the information of Dynamo specific requests or response. a first servlet in pipeline. such as status code. For example. such as the output stream and access its values. It is a mutable class whereas HttpServletrequest is immutable. The controller is called as servlet pipeline while is formed by a sequence of separable independent steps.servlet. jsp should use following sample code.DynamoHttpServletResponse that allows you to change properties of the HttpServletResponse. When a servlet is done acting on the request. Every request sent to the Dynamo server is dispatched to the servlet pipeline. This class implements HttpServletRequest. DynamoHttpServletRequest object is created by DynamoHandler i. such as setPathInfo or setPathTranslated. ATG Page 39 .e. it can pass the request to the next servlet. Each step may depend on additional information being available about the request. This linked-list of servlet is called the servlet pipeline.servlet. ServletUtil This class (atg. The pipeline is started by Page filter and most requests handled by Nucleus are dispatched to the PageFilter or DynamoProxyServlet. • DynamoHttpServletRequest: atg. Each servlet in turn performs its specific function on the request. Each servlet is also given a pointer to the next servlet in the pipeline. DynamoHttpServletrequest provides methods that allow us to change the properties of the request. Major tasks of Servlet Pipeline include. to access the state object parameter. The sequence of the steps is important because each step might depend on additional information about the request. Each of the steps is made by a single Nucleus service which implements the Servlet interface. The linked list of these servlet called as request-handling pipeline. The request is delivered to the servlet at the head of the pipeline.servlet. DynamoHandler create this object by wrapping generic HttpServletRequest object. This provides the flexibility of customizing the pipeline through configurable components.DynamoHttpServletRequest. so order does matter.

it checks the request and response for a reference to a Dynamo request and response pair. the application server creates an instance of the HttpServletRequest and HttpServletResponse. 2. Request Processing by DAF Servlet Pipeline When a JSP page is requested. it relies on the page compiler provided in the DAS servlet pipeline to generate JHTML into a servlet that’s rendered as HTML by the application server. By default. When a user performs an action that prompts a response. • DAF Servlet Pipeline . PageFilter is mapped to handle JSP requests. the DAF servlet pipeline runs through the set of servlet shown below. • DAS Servlet pipeline . ATG Page 40 .It is used to handle JHTML request. Following figure also depicts the common servlets contained in the DAF Pipeline. Because JHTML is a proprietary language. This pipeline is for customer application jsp request. The application server follows the following path for processing the request. 1. the application server uses servlet and filter mappings defined in web. ATG Framework and Components Types of Pipelines There are two request-handling pipelines used by Dynamo. Based on the directories and file extension of the requestURI. 3. When the application server invokes PageFilter.It is used to handle the JSP request.xml to determine the next resource to call.

Note:- Although DynamoHandler does the same thing in both pipelines but a different version of DynamoHandler is used for each request type. 3. It is responsible to handle jsp pages. PageFilter will start the DAF servlet pipeline by calling DynamoHandler. user. Now it is a responsibility of DynamoHandler to generate DynamoHttpServletRequest wrapping generic HttpServletRequest. As JHTML is a proprietary language. A call for a page in the dyn directory. The last servlet in the pipeline is TailPipelineServlet. no filters are involved in request-handling process. By default. The DAS servlet pipeline performs the same request and response handling tasks as the DAF servlet pipeline. pageFilter call an instance of DynamoHandler a first servlet in a pipeline.doFilter(). and security information. 5. It is responsible for calling FilterChain. DynamoProxyServlet make call to DynamoHandler to start DAS pipeline. DynamoProxyServlet is used in DAS pipeline instead of pageFilter. The DAF servlet pipeline will process through a series of servlets that modify the request and response by extracting path information and providing session. ATG Framework and Components 4. The pair does not exist. ATG Page 41 . they will be invoked before DynamoProxyServlet.xml. one of the servlets in the pipeline. which is responsible for starting the DAS servlet pipeline by calling DynamoHandler. the first servlet in the pipeline. 2. if you create custom servlet filters. 4. it relies on the page compiler provided in the DAS servlet pipeline to generate JHTML into a servlet that’s rendered as HTML by the application server. pageFilter is use only in DAF request handling pipeline. Note: ATG Business commerce pipeline includes additional components more than ATG Consumer Commerce. Request Processing by DAS Servlet Pipeline DAS is used to handle JHTML request. The pipeline runs through the set of servlet. 1. which invokes the next filter defined in web. 6. One task common to both pipelines is the compiling of JHTML pages by PageCompileServlet. which holds all JHTML pages. causes the application server to invoke DynamoProxyServlet. The application server follows the following path for processing the request.

• DynamoProxyServlet calls /atg/dynamo/servlet/pipeline/DynamoHandler to start the DAS servlet pipeline for JHTML requests. This class implements all Servlet methods. by invoking a method called passRequest.PipelineableServletImpl class. so we need to override the service method. which specifies the next servlet in the pipeline. The PipelineableServlet interface has two subinterfaces that provide additional mechanisms for determining the next component to invoke. ATG Page 42 . The main difference between the DAS and DAF servlet pipelines is that the DAS servlet pipeline automatically compiles the page from JHTML to Java. Customize Pipeline Servlet All servlets in a pipeline implement “PipelineableServlet” interface of atg. ATG Framework and Components • PageFilter calls /atg/dynamo/servlet/dafpipeline/DynamoHandler to start the DAF servlet pipeline for JSP requests. it passes the request and response objects to the servlet specified by this property. whereas the DAF servlet pipeline relies on the application server to handle the complete page compilation process. In order to write custom pipeline servlet.servlet. Example: if we want to insert a servlet i. between two servlets i. Servlet1 & Servlet2 in the pipeline.e. Servlets that implement PipelineableServlet have a nextServlet property that points to the next component to invoke.e.e.pipeline. When your servlet finishes processing.servlet. The components created by these servlets should be globally scoped and configured to the pipeline. “PipelineableServlet”. Create a component using this servlet. You can write custom pipeline servlet by extending the atg. This class defines a property called nextServlet of type Servlet.pipeline package. The key advantage of this mechanism is that it does not require modifying any existing servlets in the pipeline compared to PipelineableServlet. needs to implement an interface i. Servlet1a. InsertableServlet Servlets that implement the InsertableServlet interface have an insertAfterServlet property that enables the servlet to insert itself in a specific spot in the pipeline.

3. Add the path to your servlet to the initialServices property of /atg/dynamo/servlet/Initial ATG Page 43 . if you want your servlet to follow the DynamoServlet in the pipeline. you can reroute the pipeline by changing the value of the Servlet1. 4. Set the insertAfterServlet property of your servlet to point to the path of the pipeline servlet you want your servlet to follow in component’s property file. all you have to do is set Servlet1a.nextServlet property pointing to Servlet1a rather than Servlet2. Steps to Create InsertableServlet Following steps involve creating & adding an InsertableServlet to the servlet pipeline. It does not really matter where you put your servlet in the component hierarchy. and set Servlet1a. For example. But if Servlet1a implements InsertableServlet. 2.nextServlet to point to Servlet2. MyServlet.g.insertAfterServlet to point to Servlet1. use 5. Servlet1a is able to do this because it effectively sets its own nextServlet property to the value of Servlet1’s nextServlet property and rewrites Servlet1’s nextServlet property to point to Servlet1. Define it as a component in the Nucleus hierarchy of this servlet. ATG Framework and Components If Servlet1a implements PipelineableServlet. 1. and Servlet1a will automatically be “spliced” into the pipeline right after Servlet1 and before Servlet2. extending InsertableServletImpl. Write a servlet e.

list2<servlets> If key1 is matched then servlets from list1 will be invoked in sequence. key1. depending on some condition. the MimeTypeDispatcher servlet determines which servlet to invoke depending on the MIME type of the request. ATG Page 44 . This interface includes a dispatcherServiceMap property that is a Map of possible servlets to invoke next. For example. If key2 is matching the condition then servlets from list2 will be invoked in sequence. list1<servlets> key2. ATG Framework and Components DispatcherPipelineableServlet DispatcherPipelineableServlet interface provides a mechanism for conditionally branching the pipeline.

A scenario anticipates and tracks the actions of the people who visit our Web site and responds appropriately by tailoring the content of the site. an Action element defines what the system does in response. logging in). If we want to set up a long-term approach to content and visitor management. use targeters. or sending targeted e-mail messages.NO Scenarios Targeters 1 Scenarios are triggered by events. We can configure it to listen to various events (by default. we can set up empty slots that generate their own requests for 3 content). Events in DAF are just JMS messages and therefore the scenario server acts as a MessageSink. Example: If a customer registers. then send them a reminder e-mail offering a 10% discount toward their first purchase. Scenarios use a feature called slots to display dynamic content. its definition is saved in the scenario registry (located at the Nucleus path /atg/registry/data/scenarios) as a file with the extension . Slots provide some powerful advantages over targeters (for example.sdl. ATG Framework and Components ATG Scenarios (DSS) DSS adds advanced personalization features such as customer management scenarios. we can fine-tune our business initiatives and the site's overall design to best meet the needs of our customers. ATG Page 45 . The business rules we can set up through If we want to personalize content as a targeters are more flexible in some cases than result of a site visitor's doing something scenarios. By analyzing the data collected from scenarios. Difference between Scenarios & Targeters S. visitors. use a highly complex rules to match content to 2 scenario. When a scenario is created or modified in the ACC. offering price promotions. Targeters are not event based. Targeters don’t use slots. Scenarios are represented visually in the ATG Control Center by flow diagrams that describe targeted customer interactions as a series of "if. data analysis and reporting to the Dynamo framework. Event element defines what the site visitor does.then" triggers and responses. use 4 scenarios. Scenario server itself is event driven. if we need to set up specific (for example. but doesn't log in within two weeks.. it receives all the standard Dynamo events). For this reason.. Scenarios are event-driven.

Add an appropriate targeting servlet bean (for example. Create a scenario that specifies the content you want to display in the slot and defines the circumstances in which the content appears. The process of creating and setting up a slot has the following steps. which can make displaying content faster. 2. 3. 1. For example. ATG Framework and Components Slots Slots are Nucleus components that can be used to display and manage dynamic content on Web site. Scenarios use slots to manage the delivery of dynamic content. scenarios allow us to set up an empty slot that generates its own request for content when a site visitor displays the page. ATG Page 46 . In the Targeter property of the bean. Slots are more powerful and flexible than targeters. Targeting servlet beans are used to include slots in site pages and scenarios are used to fill them with content. Example. specify the slot component. Slots have better caching capabilities. slots have better caching capabilities than targeters. which can make displaying content faster. Create the slot component. TargetingForEach) to the page or pages where you want the slot to appear.

a Web site should recognize that we are looking at a particular category of information. and Web sites started including site maps among their pages. Example is /atg/userprofiling/ProfileAdapterRepository. This concept called as personalization. A content ATG Page 47 .  Slots that display their content in the context of certain events. modify and query user profile data in LDAP (Lightweight Directory Access Protocol) directory.A content repository is a collection of content items managed by a single system such as a relational database. and presentation of the site to fit each visitor's characteristics and preferences.Using this. content. and information for that category.It is pre-configured default repository for DPS. file system. Some Web applications explicitly segment their users into several affinity groups (such as visitors and members. Most Web sites today have their own search engines. DPS Repository Dynamo SQL Profile Repository . Dynamo LDAP Profile Repository . ATG Framework and Components Dynamo Personalization Server (DPS) ATG provides a way to match page content to individuals based on their needs and preferences. companies such as Yahoo started creating indexes of all the available content. Using this. and searching for the right piece of information was difficult. one big problem was trying to find valuable information. and associate different content with each group of users. Personalization ATG Personalization lets you customize content for specific users and events. There was not much content published. Content Repository . primarily through two mechanisms. Why personalization is important? When the World Wide Web was first developed.  Content targeters that match content to specific users. Personalized Web sites customize the behavior. or scenarios. because the amount of content on even a single site is too vast to navigate by means of a site map. or third-party content management system. which is the process of displaying different content to each site visitor depending on his or her preferences and requirements. we can store. services. we can store. To make finding the sparse information easier. DPS provides a full set of customizable tools for displaying targeted information. and show the related products. Ideally. modify and query user profile data in a SQL database. or investors and brokers). ATG Personalization Module (DPS) provides features that are specifically designed to support Web site personalization.

/atg/userprofiling/ProfileFormHandler . A SQL content repository must contain following things.ContentRepository interface. Keeping track of profile attributes makes it possible to segment site visitors into target audiences called profile groups. DPS makes profiles persistent by storing them in a database.. or explicit.ScenarioProfileFormHandler . either directly or as an element in a page. Note: Since the GSARepository class implements both the atg. If ATG is started with DSS then ScenarioProfileFormHandler is an implementation class.Repository interface and the atg.process form input and updating user profiles. So a repository can contain multiple repository item types. Once we create a profile group. DPS includes two implementations of the Dynamo Repository API for accessing stored profile data. postCreateUser(). atg.userprofiling. User Profile Management When a person visits our Web site.scenario. registration. postLoginUser() etc.content. preLoginUser(). attribute) or the date of the person's last login (a system-generated. attribute). So a single repository can contain both content repository items (arranged in a hierarchical structure with folders that can contain repository items and other folders) and non-content repository items (arranged in a flat structure). only the values vary from user to user. ATG Page 48 . provided. All profiles track the same attributes. DPS creates a profile for him or her (based on a profile template) and stores it in a database. or implicit. Business managers create profile groups by defining business rules in the Targeting > Profile Groups window of the ATG Control Center. such as the name he or she entered in a registration form (a self-reported. Also there are extension methods like preCreateUser().  One and only one item descriptor that defines repository items that act as folders (the folder item descriptor) and  One or more item descriptors that define content repository items (the content item descriptors).repository. DPS Form Handler This form handlers contains the handler methods to handle the user login.repository. ATG Framework and Components repository typically serves as a source of content items to be displayed to a user. we can use it to define our targeting rules and scenarios (if we have DSS installed). updation etc. This profile contains a list of properties that describe the person's characteristics.

SimpleContentProcessor and HtmlContentProcessor. Usually. ATG Page 49 .e. Determines whether to send the Message content as “text/html”. Optionally. The Personalization module includes two concrete subclasses of MessageContentProcessor i. 3. “text/plain”. Performs word wrapping on the plain text version of the content. ATG Framework and Components Profile Properties The profile contains properties that describe the person's characteristics. Explicit Properties – Explicit properties are provided by site visitors when they fill registration form to become a member of your site. HtmlContentProcessor HtmlContentProcessor a more sophisticated implementation of MessageContentProcessor.Implicit properties are information that the system gathers about visitors by tracking their behavior at your site. Implicit Properties . if contentType is “text/html” the rendered page is sent as HTML and if the contentType is “text/plain” it will be sent as simple text (no word wrapping). 4. MessageContentProcessor is an abstract class. But Control Center provides options that let us view the profiles in the repository. 1. or “multipart/alternative” with “text/plain” and “text/html” parts. There are two kinds of profile properties. 2. and delete profiles if necessary. the system updates profile properties automatically. edit. converts it into content of type “text/plain”. Examples of explicit properties are a person's name and address. SimpleContentProcessor This doesn’t do any processing on the passed in message content. Takes in content of type “text/html”. Message Content Processor MessageContentProcessor is responsible for actually setting the e-mail message content given the rendered message body. We can also use them to add. Example. TemplateEmailInfoImpl’s contentProcessor property points to an object of MessageContentProcessor. Example is a list of recently browsed Web pages is an implicit property.Message content. This does the following jobs. We can also implement our own content-processing scheme by creating a subclass of MessageContentProcessor that implements all of its methods. The MIME type of the content in the Message is specified by the service’s contentType property.mail. but simply uses the content as is to set the javax. We do not have to change them.

Once we create a content group. either directly or as an element in a Dynamo Server Page. The ACC includes a wizard to help us create components that make up an XML Content Repository. we can use it to define our targeting rules and scenarios (if we have DSS installed). is associated with a particular type of media (an HTML or XML file. Content targeters are the business rules created using the ACC. business managers create rule sets that control how content is displayed on the Web site. a GIF file. file system. in a particular context. We can also run targeting operations against the content attributes to match content items with visitor profiles. we can run queries against meta-data attributes to search for and manage particular content items. Content data is also stored in searchable repositories. Dynamo includes three implementations of Content Repositories. ATG Framework and Components Content Management The term content refers to discrete units of information (a news article or a banner image. and RepositoryPropertyDescriptor components. we can organize content items into logical groupings called content groups by defining business rules in the Targeting > Content Groups window of the ATG Control Center.) and has meta-data that describe its characteristics. HTML Content Repository The HTML Content Repository provides access to HTML files stored in a file system. Content targeters that match content to specific users. ATG Page 50 . a PDF document. XML Content Repository The XML Content Repository provides access to XML files stored in a file system. Content Targeter & Targeting Targeting is the process of displaying content items to a particular user. or content item. or third-party content management system. for example) available for display to Web site visitors. at a particular time. SQL Content Repository The SQL Content Repository provides access to content stored in a SQL database. etc. HTMLItemDescriptor. Similar to profile groups. Once we set up a content repository. In the DPS rule-based system. HTML content repository can be created from ACC with repository component and its associated DataStore. A content repository is a collection of content items managed by a single system such as a relational database. XMLItemDescriptor. Each unit of content. Business rules define the content that we show to each profile group. including the XMLRepositoryService component and its associated XMLDataStore. and RepositoryPropertyDescriptor components.

such as the third through the seventh. ATG Page 51 . They differ only in whether they display all of the items returned by the targeter. Each one uses a targeter to gather a set of items from a content repository. or just a specific subset. Note . To display targeted content. and renders the content items on the page.If we have ATG Scenarios. • TargetingArray The first four of these servlet beans perform fundamentally similar operations. We can disable this behavior for any targeting servlet bean by setting one or both of the following parameters in the servlet. • TargetingRandom displays n items chosen randomly. ATG Personalization includes five targeting servlet beans • TargetingForEach displays all of the items returned by the targeter. You can create targeters through the Content window of the Control Center. site must include content targeters that define the rules that determine which users see what content. ATG Framework and Components Content targeter relates the content group with the profile group. • TargetingFirst displays the first n items. where n is a number you specify. • TargetingRange displays a range of items. we can use scenarios instead of targeting rules to control the content that we display to each profile group.

• Set up visitor profiles. ATG Framework and Components Steps Involve in Personalization Once we have planned our approach to the relationship between site visitors and content. match content groups to profile groups & determine the visitor behavior that we will track and use to update profiles. we use the Control Center to Create profile groups. • Set up content items. • Preview the site • Analyze data and fine tune the personalization ATG Page 52 . Use following steps to personalize website. group similar content items together. • Track visitor behavior. • Group content items together • Match content items with targeted audiences (profile groups). • Create profile groups.

It handles pricing. inventory. • Custom catalogs for different users from different organizations. ATG Framework and Components ATG Commerce ATG Commerce module provides the foundational packages for online store. and customer relationships. • Exporting an Order as XML. merchandising. • Shopping carts. • Modular code execution using pipelines ATG support following features for Business Commerce. • Catalog navigation & Product/SKU Comparison. • Inventory management • Merchandising(promotions. • Orders management like canceling. • Volume Pricing & Tiered pricing ATG Page 53 . • Scheduled order for regular buyers. ATG support following features for Consumer Commerce. • Cost Centers to track internal costs. coupons. • Profile management • Product Catalog • Product catalog display templates. multiple shopping carts for a user. fulfillment. ATG supports both B2C by ATG Consumer Commerce and B2B by ATG Business Commerce. targeted promotions. gift certificates) • Integration with Payment gateways and TAX systems. viewing orders. • Setting pricing models. • Order approvals by other higher authorities.

 Checkout and Payment Processing. ATG support following e-com functional components.  Product catalog services and Navigation  Pre-checkout/Purchasing process like Shopping carts  Merchandising features like cross-sell. up-sell etc. ATG Framework and Components ATG E-Commerce Functional Components ATG is not just a framework but a package where common e-commerce features are provided out of box.  Order Fulfillment ATG Page 54 . Developers can use these features in their e-com application with minor configurations.  Profile Creation and Management.

date of birth and home address. giftLists etc. The following operations are performed by overriding the addPropertiesOnLogin. • Address based properties like shipping Address. postCreateUser and postLoginUser methods from the ProfileFormHandler. The Personalization module defines a base “user” Item Descriptor in it. the anonymous user’s active promotions are copied into the list of active promotions of the persistent user. such as first and last name.userprofiling. allowExpressCheckout etc.CommerceProfileFormHandler) is a subclass of atg. ATG Framework and Components Profile Management Profile management is the extension of Personalization functionality. During login. wish lists. credit card collection and other minor features. • List features like wishList. wish lists.ProfileFormHandler for commerce specific operations. The following are the extensions of personalization. billingAddress etc. An anonymous user can accumulate promotions in their activePromotions attribute.  Profile Repository  Profile Form Handler  Profile Tools and Property Manager Profile Repository Describes the attributes that ATG Commerce adds to the user Item Descriptor to support gift lists. The Personalization module’s Profile Repository is an instance of the Generic SQL Adapter. promotions. Profile Form Handlers The ATG Commerce profile form handler (atg. expirationYear etc. credit card collection and other minor features. 1. It is located in /atg/userprofiling/ProfileAdapterRepository. It adds several attributes to the user Item Descriptor to support gift lists. usedPromotions etc. • Payment based properties like CreditCard number. • Shopping preferences like allowPartialShipping.profile. ATG Page 55 . This user has many general attributes defined. address books. type. Additionally it also provides properties such as • Promotions based properties like activePromotions. e-mail address.commerce. promotions. address books.

The B2CProfileFormHandler also provide handler methods to check up creditcards for their format and there is a converter to print the Credit card number masked. The /atg/userprofiling/B2CProfileFormHandler component is used to handle user specific operations like user login. Class /atg/userprofiling/B2CProfileFormHandler extend from atg.B2BCommerceProfileFormHandler class that extends the CommerceProfileFormHandler and this is available under B2BCommerce for use. must be handled in our FormHandler component which will extend the B2CProfileFormHandler.transient property to check up whether the user is logged in or not and act accordingly. B2C Profile Form Handler It is extending user Profile form handler for B2C Commerce.userprofiling. Also describes the extensions related to the ATG Commerce Property Manager.xml can be extended to add more properties.profile.profile. 3. registration. We can use the Profile. it is extended to include the concept of addition or removal of CostCenters for B2B sites. During the registration and login process. Profile Tools and Property Manager Profile tools & property manager provide additional methods to access commerce specific profile properties such as shipping and billing addresses and credit card information. ATG Page 56 . After log in. The userProfile. any shopping carts (Orders) created before logging in are changed to be persistent.commerce.profile. In B2B. logoff etc. This also contains a Map property by name ‘editValue’ that holds extra properties like shippingAddress etc.CommerceProfileFormHandler class and is injected the component CommerceProfileTools to perform most of the commerce profile related activities. which provides additional access to profile property names specific to Commerce customers that are used by Commerce Profile Tools. Note: Any custom profile property that is added by us.ProfileTools.b2bcommerce. ATG Commerce profile tools Class atg.CommerceProfileTools is a subclass of atg.commerce. the PricingModelHolder component is reinitialized to cache all the promotions that the persistent user has accumulated during previous sessions. It provides additional methods to access commerce specific profile properties such as shipping and billing addresses and credit card information. ATG Framework and Components 2. If the user’s persistent profile contains any old shopping carts (Orders in an incomplete state). these shopping carts are loaded into the user’s session. B2B Commerce Profile Form Handler ATG Commerce provides a class atg.

and profile”.  In a category page. Administrators etc. to browse the catalog and other pages. Extending the Commerce profile Form Handler 2. It can be configured to allow anonymous users to visit the site.xml 3.  That enable targeters to know what kind of targeting information is available.currentLocation) that may be used by complex targeting systems to enable the targeter to know what kind of targeting information is available.  It is an enumerated property type whose choices can be “unknown. create.profile.CommercePropertyManager is a subclass of atg. Profile groups or segments to be used to target the specific customers.commerce. Extending the repository userProfile. ATG Page 57 .PropertyManager. shopping_cart. Create Profile Group ACC is used to create user groups such as Anonymous users. ATG Framework and Components Example: The shipping addresses are managed by the Commerce Profile Tools component. Members. Create User Profile The User Profile can be created by 1. delete and update profile repository shipping addresses as well as to retrieve all shipping addresses. store_home. It provides additional access to profile property names specific to Commerce customers that are used by CommerceProfileTools.userprofiling. ATG Commerce Property Manager Class atg. catalog_product. or they can register as members through a registration page. This interface enables them to search. catalog_category. catalog_search. members can access the My Profile page that allows them to maintain personal and commerce profiles and to track their order information. edit. This provides a convenient central location to store property names that may change depending on the site. • Returning registered members can log in with their user names and passwords. we can set the property like shown below. This extension of the tools component provides methods to create. checkout. Current Location Property The user profile has a property called currentLocation (/atg/userprofiling/Profile. Once they log in. duplicate. Example: The shipping address property names are stored in CommercePropertyManager. • Administrators can view and manipulate user profile data using the Profile interface in the ACC. and delete user profiles. home.

But. products and SKU’s (Stock Keeping Units). But new tables must be created in the database to accommodate the extended properties. products. A product may have several different SKUs associated with it. A product is a navigational end-point in the catalog. The location of this XML file is /atg/commerce/catalog/productCatalog. customers purchase a SKU and not a product. Catalog repository items can be edited using ATG Control Center (ACC). and images) are repository items. ATG Page 58 . The product catalog is built by adding new repository items and defining relationships between them. • xml-combine="replace" • xml-combine="remove" • xml-combine="append" • xml-combine="append-without-matching" • xml-combine="prepend" • xml-combine="prepend-without-matching" Category Product and SKU The main item types for standard catalogs are categories. Xml combine tag is use to extend default catalog. products. It is a repository containing repository items like category. ATG Framework and Components Catalog Management Product Catalog The Product Catalog is a primary component in the Commerce Application. ATG Commerce includes a default catalog which can be extended as per the need. These extensions can be created to add properties to categories. Extending default Product Catalog ATG Consumer Commerce comes with an XML definition file that contains the information for the standard product catalog.xml Xml-combine is used to extend the default catalog. etc. and colors. the product catalog is an ATG repository and the various elements of the catalog (such as categories. A reference to this XML file is found in the /atg/commerce/catalog/ProductCatalog component. representing varieties. In ATG Commerce. A product catalog is a hierarchical tree of categories and products. media. This provides an organizational framework to a commerce site. sizes. products and sku’s.

A blank navAction is treated as push. Developers can use TargetingForEach droplet which uses the RootCategories targeter to find root categories. ATG Page 59 . ATG Commerce provides CatalogNavHistory component to track the customer’s path through the catalog. ATG provide targeters to find root categories.to detect use of the Back button and should be passed in with any link that leads to a page that uses breadcrumbs. navCount . representing different combinations of size and color Catalog Navigation A catalog home page displays a list of root categories. Options are push. 2. Navigation History and Breadcrumbs ATG provides some components to keep a track of the path a customer follows when browsing a website. These links are called Breadcrumbs. 1. Category is considered to be a root category if their root category property is set to true. ProductLookup and SKULookup droplets respectively. Categories. ATG Framework and Components For example. The component is placed under /atg/commerce/catalog/CatalogNavHistory.operation to be performed on the stack. a list of the items the customer visited can be constructed and can be displayed as links so that the customer can navigate back using them. a product that represents a specific shirt might have many associated SKUs. The component uses the following input parameters. navAction . products and sku’s can be displayed using CategoryLookup. pop and jump. Using these components.

catalog. Step 2: Configure the product catalog repository to use the custom catalog xml file. The Product Catalog can be altered to create a number of sub- catalogs representing the smallest section of the inventory that the customers want to view.servlet. Step 3: To keep the atg.CatalogItemLookupDroplet ATG Page 60 . Define the path of this repository in the productCatalog.repository. ATG Framework and Components Custom Catalogs Custom catalogs are an important feature for commerce websites.properties And use the following class: $class=atg.custom. ItemLookupDroplet from returning an item that is not in the current catalog. /atg/commerce/catalog/CategoryLookup.properties file. Step 1: Create a new database to accommodate the custom catalog data. It is needed to provide information to particular customers or companies. A custom catalog can be setup in following 3 steps.properties /atg/commerce/catalog/SkuLookup.properties /atg/commerce/catalog/ProductLookup.commerce. change the following servlet beans.

Few of them are listed below. editing. a session-scoped component whose handleXXX methods add. deleting items to a shopping cart. and switch between carts Order Repository Repository to store the Order details Order Manager There is a business layer class called as OrderManager which takes care of creating/loading/refreshing/updating the orders. Cybercash – Order History ATG Order Components (OTB) ATG provide good number of out of box components for Order Management feature. The component that utilizes OrderHolder is /atg/commerce/ShoppingCart. Customers can have an unlimited number of orders in existence at one time. Order Holder This class maintains the current Order object as well as a collection of saved Order objects. Order Manager interacts with the pipeline processors. delete. ATG Framework and Components Order Management ATG Order management supports functionality like – Adding. – Calculating the promotions if exists – Ensuring items are shipped by the preferred method – Validating credit card information. This component in turn interacts with the Pipeline processors. normal checkout. Order Orders are in process. – Multiple shopping carts for user – Multiple shipping and payment methods – Provides various types of checkout like ExpressCheckout/Expedited Checkout. complex checkout etc – Payment Integration with Cybersource. Shopping cart Shopping Cart is an Order in incomplete state. ATG Page 61 .

Form Handlers CartModifierFormHandler. ShoppingCartModifier. This includes information such as a credit card number. and Relationships. PaymentGroupsDroplet which can help in accumulating necessary information. The default property settings should be suitable for most sites. shipping costs. ShippingGroups. PaymentGroup The PaymentGroup interface contains payment information. ATG Page 62 . are used to manage the Shopping Carts Droplets RepriceOrderDroplet. ATG Order Java Interfaces Order The Order interface represents the delivery and payment information for a collection of items. CommerceItem The CommerceItem interface represents information about a product to be purchased. and tax information for each item or the entire Order. and the amount to be charged. Payment Manager There is a component called as PaymentManager which in turns interfaces with Payment Pipeline to talk to the third-party payment gateways to ensure that the CreditCard authorization/debit is handled seamlessly. PriceItem etc. PriceEachItem. A CommerceItem contains the SKU (also called the catalogRefId) and the quantity of the item purchased. An Order contains CommerceItems. A ShippingGroup could contain a physical delivery address. ATG Framework and Components Pipeline Includes a sequence of Pipeline processors to do the job in a fine grained transactionally aware manner for order submission and payment. ExpressCheckoutFormHandler etc. which are used to display the price of the SKUs. PaymentGroups. This pipeline contains the sequence of processors for order submission and payment. ShippingGroup The ShippingGroup interface contains information about the delivery of a collection of CommerceItem objects. ShippingGroupsDroplet. but can be changed. an expiration date. OrderTools OrderTools contains a set of properties that you can use to customize the purchase process.

such as an e-mail address. and Relationship objects. – HardgoodShippingGroup . HandlingInstruction The HandlingInstruction interface describes special handling for a CommerceItem within a given ShippingGroup. Item Classes – CommerceItemImpl: This class implements CommerceItem. ShippingGroup. and tax. as well as the Relationships to items in the shipping group. ATG Framework and Components Relationship The Relationship interface represents an association between two or more of the commerce objects listed above. In addition to storing inherited data. it stores information about how the CommerceItems are to be shipped to a physical street address. ATG Page 63 . In addition to storing inherited data. or tax costs in the PaymentGroup. It stores the payment information for CommerceItems. It stores the data describing where and how to ship CommerceItems.This class implements ShippingGroup and extends ShippingGroupImpl. PaymentGroup. Payment Classes – PaymentGroupImpl . It stores the data about a specific item in an Order.This class implements PaymentGroup. Shipping classes – ShippingGroupImpl -This class implements ShippingGroup. shipping costs. It contains data structures for managing collections of other commerce objects. shipping costs. such as the carrier and postaladdress. It manages collections of CommerceItem. ATG Order Java Classes Order Classes – OrderImpl: This class implements Order. – ElectronicShippingGroup . It also can contain Relationships to those items. Gift wrapping is an example of HandlingInstruction. There are 2 subclasses which have actual implementation called HardgoodShippingGroup and ElectronicShippingGroup. it stores information about how CommerceItems are to be delivered electronically. such as the relationship between a CommerceItem and a ShippingGroup. This class provides no functionality itself.This class implements ShippingGroup and extends ShippingGroupImpl.

– GiftCertificate . shipping costs. ATG Page 64 . and tax costs are paid for using a credit card.When this Relationship is added to a PaymentGroup and ShippingGroup. the shipping cost is paid for using the information in the PaymentGroup. In addition to storing inherited data. Handling Classes – HandlingInstructionImpl .This class implements HandlingInstruction.When this Relationship is added to a ShippingGroup and CommerceItem. This class provides no functionality itself. shipping costs. it stores information about how CommerceItems. This Relationship object itself contains data such as the quantity to be shipped. In addition to storing inherited data. but should be used through a subclass like GiftlistHandlingInstruction. ATG Framework and Components This class provides no functionality itself. This Relationship object itself contains data such as the amount of the tax cost to be paid for using the PaymentGroup. it stores information about how CommerceItems. and tax costs are paid for using a gift certificate. the CommerceItem is shipped using the information in the ShippingGroup.This class implements HandlingInstruction and extends HandlingInstructionImpl. the CommerceItem is paid for using the information in the PaymentGroup. CommerceItem ID.When this Relationship is added to a PaymentGroup and CommerceItem. it also stores data about which CommerceItems in the Order were added from a gift list. the tax cost or order cost is paid for using the information in the PaymentGroup. – CreditCard .This class implements PaymentGroup and extends PaymentGroupImpl. – PaymentGroupCommerceItemRelationship .This class implements PaymentGroup and extends PaymentGroupImpl. but is used through the CreditCard and GiftCertificate subclasses. as well as data about what quantity of CommerceItems in which ShippingGroups need special handling. – PaymentGroupShippingGroupRelationship . and tax costs are paid for using a store credit. This Relationship object itself contains data such as the amount of the shipping cost to be paid for using the PaymentGroup. and quantity.pShippingGroupRelationship.This class implements PaymentGroup and extends PaymentGroupImpl. – StoreCredit . it stores information about how CommerceItems. – GiftlistHandlingInstruction . In addition to storing all the basic data that it inherits. It contains a ShippingGroup ID. shipping costs. – PaymentGroupOrderRelationship . Relationship classes – ShippingGroupCommerceItemRelationship . In addition to storing inherited data.When this Relationship is added to a PaymentGroup and Order. This Relationship object itself contains data such as the quantity of the item to be paid for using the PaymentGroup.

The OrderTools component is located in Nucleus at /atg/commerce/order/. address2. These objects are referenced when a user checks out. The following OrderTool properties can be customized. – atg. address1. beanNameToItemDescriptorMap.core. defaultPaymentGroupAddressType.util. defaultOrderType. lastName. postalCode.core. relationshipTypeClassMap. defaultPaymentGroupType.core. ATG Page 65 . ownerId and ContactInfo Properties like phoneNumber.util.util. City. We need to extend these objects to track additional information about your users if needed. shippingTypeClassMap.country. commerceItemTypeClassMap. state. The methods within these classes are used to make changes to an Order. faxNumber. defaultShippingGroupAddressType. email.Address – atg. These methods contain the logic that alters the Order’s data structure and maintains its accuracy. defaultCommerceItemType. paymentTypeClassMap. ATG Framework and Components Address classes There are two classes atg. Business Layer Classes The business layer classes contain the logic and business rules for the purchase process. middleName.Address and atg.ContactInfo. orderTypeClassMap. Following are business layer classes – OrderTools – OrderManager – CommerceItemManager – ShippingGroupManager – HandlingInstructionManager – PaymentGroupManager – OrderQueries – SimpleOrderManager Customizing OrderTools OrderTools need to be customized when the order module is extended.ContactInfo These classes address Properties like firstName.util. defaultShippingGroupType.core.

a string is passed as a parameter to the create method. (For example.) This constructs an instance of a CommerceItem class that is mapped to that string. When creating a new PaymentGroup. ATG Page 66 . You can have more than one type of ShippingGroup object. (For example. When creating a new Order.) This constructs an instance of an Order class that is mapped to that string. shippingTypeClassMap This property defines the type-to-class name mapping for ShippingGroup objects. the string hardgoodShippingGroup could be passed.) This constructs an instance of a ShippingGroup class that is mapped to that string. a string is passed as a parameter to the create method. a string is passed as a parameter to the create method. You can have more than one type of CommerceItem object. the string creditCard could be passed. a string is passed as a parameter to the create method. paymentTypeClassMap This property defines the type-to-class name mapping for PaymentGroup objects.) This constructs an instance of a PaymentGroup class that is mapped to that string. (For example. (For example. commerceItemTypeClassMap This property defines the type-to-class name mapping for CommerceItem objects. ATG Framework and Components orderTypeClassMap This property defines the type-to-class name mapping for Order objects. You can have more than one type of Order object. the string “default” could be passed. You can have more than one type of PaymentGroup object. When creating a new ShippingGroup. When creating a new CommerceItem. the string “default” could be passed.

You can have more than one type of Relationship object. you can customize the environment to use a Relationship class you have subclassed. Relationships are created by methods based on the type of relationship that the method needs. The format is <bean name>=<repository item descriptor>. By overriding the default values. Relationships are not created directly by a user. beanNameToItemDescriptorMap This property maps a bean name to an OrderRepository item descriptor name. When saving an Order. All objects that can be mapped to an item descriptor are listed in the beanNameToItemDescriptorMap. ATG Page 67 . The following code defines the default values. The example below demonstrates how a mapping is defined in the properties file. ATG Framework and Components relationshipTypeClassMap This property defines the type-to-class name mapping for Relationship objects. the processors that contain the code for saving look for an OrderRepository item descriptor with the same name as the bean class. It is used to configure the class type that will be instantiated when a request to construct a relationship is made. The beanNameToItemDescriptorMap property contains this mapping. The relationshipTypeClassMap property maps a name to a class.

The following code defines the default value.” which in turn maps to a class in the commerceItemTypeClassMap property.” which in turn maps to a class in the orderTypeClassMap property. the default type is defined as the string “default. defaultShippingGroupType This property defines the default ShippingGroup type. the default type is defined as the string hardgoodShippingGroup. In the example below. The following code defines the default value. which in turn maps to a class in the shippingTypeClassMap property. In the example below. The following code defines the default value. which in turn maps to a class in the paymentTypeClassMap property. To customize your address information you need to subclass RepositoryContactInfo and use your new class name for the defaultPaymentGroupAddressType. defaultCommerceItemType This property defines the default CommerceItem type. The following code defines the default value. the default type is defined as the string creditCard . defaultPaymentGroupType This property defines the default PaymentGroup type. In the example below. To customize your address information you need to subclass RepositoryContactInfo and use your new class name for the defaultShippingGroupAddressType. ATG Page 68 . the default type is defined as the string “default. defaultShippingGroupAddressType This property defines the default ShippingGroupAddressType. ATG Framework and Components defaultOrderType This property defines the default Order type. defaultPaymentGroupAddressType This property defines the default PaymentGroupAddressType. In the example below.

It is implemented using a SQL repository. the processors that save and load an Order look for an item descriptor that is mapped to the corresponding commerce object class. The beanNameToItemDescriptorMap property of the OrderTools component maps the Order Repository item descriptors to Bean names. The base Order Repository definition file is located at <ATG9. ATG Framework and Components Order Repository The Order Repository is the layer between ATG Commerce and the database server.xml. this base file is combined with an additional definition file that is located at <ATG9.xml ATG Page 69 . In ATG Consumer Commerce.0dir>/B2BCommerce/config/atg/commerce/order/orderrepository. the beanNameToItemDescriptorMap property contains this mapping. this base file is combined with an additional definition file that is located at<ATG9.0dir>/B2CCommerce/config/atg/commerce/order/orderrepository. In ATG Commerce. The repository is where Orders are saved after processing and stored in between customers’ visits to your site.xml.0dir>/DCS/config/atg/commerce/order/orderrepository. In ATG Business Commerce.

and error processing. ProductLookupDroplet and SkuLookupDroplet to retreive product and sku by passing productid and skuId. CartModifierFormhandler contains many handle methods to add product to shopping cart. 2. This java class has package /atg/commerce/order/purchase/CartModifierFormhandler. ATG Framework and Components Pre-checkout Process Shopping cart Creation The shopping cart can be implemented by following steps. 1. 6. PurchaseProcessHelper PurchaseProcessHelper contains the common functionality required by the purchase process form handlers as well as commerce web services. When add to cart button is clicked then handleAddItemToOrder method is invoked in CartModifierFormHandler. 5. PurchaseProcessFormHandler This abstract class defines the very general FormHandling functionality that the purchase process formhandlers require. 8. including Transaction management. 7. These values are passed to the as hidden fields when the user pushes the “Add To Cart” submit button provided by us. Repository id of product and sku needs to be passed to cartModifierFormhandler to add the same to cart. Above repository Ids are passed as hidden parameters in form. This method adds item to order. handleAddItemToOrder method of CartModiferFormhandler internally calls api of PurchaseProcessFormhandler and PurchaseProcessHelper to add items to order. 4. Finally handleAddItemToOrder method of CartModifierFormhandler call updateOrder() method of OrderManager Class to save order to repository. Shopping cart can be implemented using cartModifierFormhandler or extending cartModifierFormHandler. 3. These Ids goes to cartModifierFormhandler when user submits form by clicking add to cart button. ATG Page 70 . central configuration. PipelineChain execution.

Any previously existing Order object is placed into the collection of saved carts. • handleSetOrder() • handleRemoveItemFromOrder() • handleMoveToPurchaseInfo() – This method checks for any modification in the order then it starts the checkout process. Modify Order It provides methods to modify an Order by catalogRefId of CommerceItem. The orderType parameter decides the type of order to be created. Multiple orders creation for an user Creating multiple orders requires atg. Customers can have an unlimited number of orders in existence at one time.commerce. modify or repricing the order we need an instance of CartModifierFormHandler class.commerce. Saving Order Many of the methods in CartModifierFormHandler call OrderManager. Saving Modifying Repricing Orders In order to save. a session-scoped component whose handleXXX methods add.updateOrder() to save the Order in its present state to the Order Repository. Multiple shopping carts can be implemented by using the handleCreate method of the OrderHolder class. This is located in Nucleus at /atg/commerce/order/purchase/CartModifierFormHandler. The type of order created depends on an api used to create an order. and switch between carts. We need to pass profileId to createOrder() method for creating the order.order. OrderHolder class maintains the current Order object as well as a collection of saved Order objects.order. delete. If orderType parameter is null then defaultOrderType is created using OrderTool.OrderHolder in addition to atg. The component that utilizes OrderHolder is /atg/commerce/ShoppingCart. ATG Framework and Components Order Creation There are many api exposed by OrderManager to create an order. OrderManager internally uses OrderTool api to create order. This method creates a new Order and sets it as the currentOrder in the OrderHolder.Order. ATG Page 71 .

These handle methods internally calls createRepriceParameterMap() method of PurchaseProcessFormhandler to reprice an order. then RepriceOrderDroplet servlet bean is used to reprice the Order before displaying its price to the user. ChangedProperties Java Interface The ChangedProperties interface enhances performance when saving an Order to the Order Repository. every get() method needs to call the getPropertyValue() method. This reduces the amount of processing when the OrderManager.g.commerce. Extending Purchase Process Creates a new class called MyCommerceItemImpl by extending CommerceItemImpl and adds a new String properties e.commerce. shortDescriptioon.pricing. The calls to getPropertyValue() and setPropertyValue() retrieve and set the values of properties directly on the repository item objects. The commerce object that supports the ChangedProperties interface. In ATG Commerce. and similarly every set() method needs to call the setPropertyValue() method. This enhances the performance because we set the value directly to repository item and saving the only property that is actually changed.order. if the users make changes to their orders through other purchase process form handlers that do not reprice orders. ATG Framework and Components RepriceOrder The handleAddXXX and handleRemoveXXX methods of CartModifierFormHandler automatically reprice the Order whenever the user makes changes to it. they are part of the atg.order. However.AmountInfo.commerce. such as the form handlers that create and manage shipping groups. all commerce objects implements ChangedProperties interface except for atg.updateOrder() is called to save order to repository. Call to getPropertyValue("PropertyName") retreive the property directly from repository item and eliminate the need to create member variable in the class that are not changed. ATG Page 72 .AuxiliaryData and all subclasses of atg.ChangedProperties interface.

updateOrder() is called to save the Order to the repository. pShortDescription) in the setShortDescription() method causes the shortDescription repository item property to be set directly when the method is called. ATG Framework and Components In the example above. the call to setPropertyValue("shortDescription". ATG Page 73 .  Enhances the performance because we set the values directly to the repository item and save the properties only that have actually been changed in the class. The call to getPropertyValue("shortDescription") retrieves the property directly from the repository item and eliminates the need to create a member variable in the class to store the value. Advantages  Reduces the amount of processing when OrderManager.

 CreatePaymentGroupFormHandler . It supports the following methods  handleExpressCheckout .processOrder() method. which executes the processOrder pipeline.Reprices the Order by running the pipeline specified in ExpressCheckoutFormHandler.Associating shipping groups with an Order and its items. Also Separate form handlers exist to support the following tasks:  CreateShippingGroupFormHandler .  runRepricingProcess . 1. Simple Checkout It is same as Express checkout but expects the user to fill in the shipping and payment group during checkout. ATG Framework and Components Checkout Process Checkout process is initiated when the order is submitted.Submitting an Order for checkout . ATG Page 74 . Complex checkout Provides several form handlers to support a checkout process that uses any number or type of shipping group and payment group.updateOrder() to save the Order in its present state to the Order Repository. Express Checkout / Expedited Checkout 2.used to submit the current Order for checkout. The method then calls the OrderManager.  PaymentGroupFormHandler . then calls OrderManager. this property is set to repriceOrder. Simple checkout ExpressCheckout/Expedited Checkout Express checkout supports the use of only a single profile HardgoodShippingGroup and a single profile CreditCard for a given Order.  ShippingGroupFormHandler . Bydefault.  commitOrder . We can manage and expedite the pre-checkout process for Orders using the ExpressCheckoutFormHandler. ATG supports following 3 types of checkout.Creating payment groups.invokes the runRepricingProcess() method to reprice the Order.Creating shipping groups.  CommitOrderFormHandler . It retrieves the predefined shipping group and payment group at runtime automatically from user profile.Associating payment groups with an Order and its items.repriceOrderChainId. and finally calls commitOrder() to submit the Order for checkout. Complex checkout 3.

2. ATG Framework and Components Order Pipeline Order pipeline is used to process order.0dir>/B2CCommerce/config/atg/commerce/commercepipeline. Each processor after execution returns a status code and determines which processor in the chain to execute next. Order processing occurs when a customer has supplied all the necessary information for the Order and has submitted it for checkout. Call to executeValidateForCheckoutChain processor internally calls validateForCheckout pipeline. The Pipeline Manager enables us to dynamically add and remove processors and chains of processors. ATG Page 75 .xml located at /<ATG9. OrderManager. 5. 4. 1. The processOrder pipeline first validates an order by calling executeValidateForCheckoutChain processor in the pipeline. This is a first processor in processorder pipeline and then invokes the sequence of processor in the pipeline.processOrder calls the PipelineManager to execute the processOrder pipeline which is configured in Commerce Pipeline.xml 3.processOrder(). The processing of an Order begins with a call from FormHandlers (CartModifierFormHandler) to OrderManager.

service. A processor in a pipeline can be extended by overriding runProcess() method. atg. The runProcess() method is called on the head PipelineLink object of the processor chain and it is responsible for following tasks. Pipeline manager start the processor chain by invoking the runProcess() method of first processor in the chain and passes it the user data. User defined Processor Pipeline Pipelines can be created/deleted in following two ways. and 3. ATG Framework and Components Running a processor chain PipelineManager is responsible to call any processor chain using runProcess method. Returning the return code to the PipelineChain. If status code is 0 then it tell PipelineManager to stop this chain or if the code is other then 0 then it calls the next processor to execute. and can be configured in the pipeline. If the return value is other than o. ACC’s PipelineEditor is used for creating. Four methods are called before and after the call to runProcess() in the PipelineProcessor to handle the transaction in the following order – preChainTransaction() – postChainTransaction() – preLinkTransaction() – postLinkTransaction() The runProcess() method is called between these methods and the call is returned to the PipelineChain with a return value. 1. it tells the PipelineManager that execution for this chain should be stopped.STOP_CHAIN_EXECUTION). ATG Page 76 . If the return value is 0 (PipelineProcessor.pipeline API Any non-globally scoped Pipeline Managers need to be created using the API. deleting or modifying the Pipelines graphically. handling the transaction (if required) 2. then it calls the next processor to execute. CommercePipeline.xml is the sample pipeline definition file provided. executing the processor. It is a simple way to construct and manage the global PipelineManager without writing code. XML file Pipeline Manager can be initialized with a set of processor chains at startup using an XML configuration file called a pipeline definition file.

Transition A reference to the next link to be executed mapped by a return value. • resultclassname .PipelineChain. Transaction Handling The valid transaction modes are as follow. • name . ATG Framework and Components Tags in Pipeline Definition File PipelineManager The top level tag that encloses a definition of a Pipeline Manager. PipelineChain Tag defining a given processor chain in the Pipeline Manager.service.(required) the name of the processor chain • headlink . The default is atg.pipeline. Processor The name of the Pipeline Processor object.the full name of a Java class which is to be instantiated and used as the PipelineChain object.(required) the first processor in the chain to be executed • transaction . – TX_REQUIRED – TX_REQUIRES_NEW – TX_SUPPORTS – TX_NOT_SUPPORTED – TX_MANDATORY ATG Page 77 .the default transactional mode of all the processors in this chain • classname . The value must be this class or a subclass of it.the full name of a Java class which is to be instantiated and used as the PipelineResult object Pipelinelink Defines a processor within the chain and names it.

or crediting the appropriate payment method.commerce. It performs payment operation by calling appropriate payment pipeline according to paymentgroup passed as parameter. They are configured in paymentGroupToChainNameMap of PaymentManager.commerce. giftcertificate and storecredit. A seperate payment pipeline is defined for each type of payment group i. and it tracks the results of those payment operations using PaymentStatus objects. Payment Pipeline chain Each of the payment pipelines is composed of two processors. credit() and debit(). 1. These methods take the order object and one paymentgroup or list of paymentgroup as parameters. and credit work for the atg. and credit work for the atg.CreditCard • giftCertificateProcessorChain . Example for CreditcardProcessorChain. It manages the authorization. ATG Page 78 . debiting.GiftCertificate class.Performs the actual operation authorizing.pipeline handles authorization. debit.order. • creditCardProcessorChain .e. debit. the action is CREDIT and the CreditCardInfo is the action object. First processor . PaymentManager consist of methods like authorize().Aggregates the information required to performing the requested payment action and creates an XXXInfo object for use in that action.order. 2. creditcard. and credit of PaymentGroups in an Order. Second processor .pipeline handles authorization. debit. ATG Framework and Components Payment Process The Payment Process is handled by payment pipelines and payment pipeline is called by PaymentManager.

debit. ATG supports to split them into separate pipelines if it needs to be handled differently. Order Fulfillment ATG Commerce provides extension points to link the Commerce system with any Fulfillment system. ATG Framework and Components Note: By default a single pipeline exists to perform authorize. ATG Page 79 . and credit actions for a single PaymentGroup type. ATG commerce comes with a simple implementation of a Fulfillment system that can be accessed via the Dynamo Admin UI. One of the processor in the commerce pipeline called as sendOrderFulfillmentMessage can be configured to send out a JMS message to the designated fulfillment system.

The list price is the full. in the product template page of the catalog) or in the context of the shopping cart of an item dynamically. These two pieces are called the “qualifier” (when) and the “target” (what) and are a part of every promotion. or the customer's profile by calculating dynamically using a combination of standard prices and promotions. ACC is used to set up the prices and promotions for the products in the catalog. Droplet for displaying price PriceItemDroplet – Component used is /atg/commerce/pricing/PriceItem – Use to display the amount price that is calculated dynamically by the pricing engine for a particular user at a particular time. PMDL (Pricing Model Definition Language) PMDL is used to describe promotions. Standard Prices Standard prices are the prices specified for the product in the catalog. The ACC and BCC include a discount rule interface for creating rules. It also contains information about when the pricing model may be used. Different prices can be offered depending on circumstances such as timing. The sales price represents actual selling price for an item on sale. The prices specified with the catalog are list price and sales price. This includes the discount rules for when a promotion may apply and the rules for what may be discounted. It outputs an element parameter that is of type CommerceItemImpl that is renamed to SKU using the elementName parameter RepriceOrderDroplet – Component used is /atg/commerce/order/purchase/RepriceOrderDroplet ATG Page 80 . other products being purchased. The system uses this flag to determine the base price of the item. Every product can have two pricing models. – PriceItem takes a SKU repository item as its item parameter. It calculates different prices for the same item depending on whether that item is displayed alone (for example. Promotional prices Promotional price is the price after applying the promotions or discounts. The boolean property On Sale indicates whether the item is on sale or not. ATG Framework and Components Pricing and Promotions PricingModel Pricing model is a repository item that describes a discount. It includes a PMDL rule and the discount type and amount. undiscounted price of a product.

3. These components work together to determine prices for catalog items. Retrieving any promotions that are available to the site visitor. ORDER. TAX. Pricing Engines 2. ATG Page 81 . ATG Framework and Components – It is use to reprice an order by sending a required parameter which specified pricing operation to execute. Pricing services comprises of following two components.commerce. – They are ORDER_TOTAL. Looking up the price in the catalog by priceList. NO_REPRICE ATG Pricing Services The pricing services provide a flexible system for personalizing the prices of items in product catalog. 1. 3. Invoking a qualifier service that identifies the objects to discount. Pricing services uses the list price to calculate the new price based on the promotions or discounts applied on it. ITEMS. ORDER_SUBTOTAL. 1. Pricing calculators Pricing calculators are responsible for the following tasks. SHIPPING. Determining which calculators generate the price. 1. Thus the system is granular enough to create a system with the facility of pricing the items differently for different shoppers. 2. Determine price using the information received from the engines and from the qualifier. The content for every shopper can be personalized to show different categories and the prices can be tailored dynamically. 2. sales tax. and shipping. Pricing Calculators Pricing Engine Pricing engine is mainly responsible for following three tasks. Invoking the calculators in the correct order.PricingConstants interface. Pricing Objects Items List Price property of the product catalog is used to specify the list price of an item. Pricing operations are defined in the atg.pricing. total orders. ORDER_SUBTOTAL_SHIPPING. ORDER_SUBTOTAL_TAX.

ATG Page 82 . This includes the following. sites can use a third-party system such as CyberSource or TAXWARE to handle tax calculations. Tax It calculates the sales tax for an order. The pricing engine processes one at a time. The resulting lists are concatenated. For example. a site could use a list price precalculator or an order subtotal precalculator to establish a base price to which subsequent calculators will apply a discount. The pricing engine applies its configured PostCalculators. The pricing engine builds a list of global promotions. Price Calculation Flow 1. a customer might have a coupon offering a 10% discount on a total order). It builds the list by using its globalPromotionsQuery property to query the Promotions repository. It applies promotions by priority. Shipping price It calculates the price of shipping for an order and apply discounts if applicable. Alternatively. which make any necessary modifications to the price after any discounts have been applied. tiered price) • salePrice (if item is on sale) 3. The pricing engine accesses the current customer’s profile and retrieves any promotions listed in the activePromotions property of the profile. • listPrice (fixed price. PriceItem servlet bean in a page or from the ATG Commerce PricingTools class calls the pricing engine. bulk price. During checkout. The pricing engine applies its configured precalculators. ATG Framework and Components Order It calculates the total cost of an order and apply any discount that is applicable (for example. searching for any promotion given to all customers (global). A precalculator modifies a price without using any associated promotions. 6. 2. All the precalculators (defined in ItemPricingEngine) are executed in order. 5. 4.

ebg.ShippingPricingEngineImpl. Shipping and Tax Pricing Engines calculate the shipping cost and tax (as applicable) using configured Shipping and Tax Calculators.order. while getPreCalculators() method of com.pricing. all the Tax calculators are configured as preCalculators for TaxPricingEngine at /atg/commerce/pricing/TaxPricingEngine.order.pricing.sec. Tax calculators Similarly.properties (corresponding java class com. Pricing Engine implementation SECShippingPriceEngineImpl SECShippingPriceEngineImpl extends atg.sec. ATG Framework and Components Pricing Calculators Shipping calculators All the shipping Calculators in our application are configured as preCalculators for ShippingPricingEngine at /atg/commerce/pricing/ShippingPricingEngine.sec.order.order.pricing. Following method calculate the shipping cost for particular order.commerce.ebg.properties (corresponding java class com. SECShippingCalculatorImpl_en_US The component for this calculator is available at /atg/commerce/pricing/SECShippingCalculatorImpl_en_US.SECShippingPriceEngineImpl). ATG Page 83 . getPreCalculators() method of com.SECShippingPriceEngineImpl returns an array of configured shipping calculators . respectively.SECTaxPriceEngineImpl). Following calculators are configured as its pre Calculators.SECTaxPriceEngineImpl returns an array of configured tax calculators. SECShippingDiscountCalculator_en_US The component for this calculator is available at /atg/commerce/pricing/SECShippingDiscountCalculator_en_US.ebg.ebg.pricing.pricing. Following method of this calculator calculates the discounted shipping cost for particular order.sec. the component for SECShippingPriceEngineImpl is available at /atg/commerce/pricing/ShippingPricingEngine.

Following calculators are configured as its pre Calculators.TaxPricingEngineImpl . ATG Page 84 . SECTaxDiscountCalculator_en_US The component for this calculator is available at /atg/commerce/pricing/SECTaxDiscountCalculator_en_US. the component for SECTaxPriceEngineImpl is available at /atg/commerce/pricing/TaxPricingEngine.commerce. SECTaxProcessorTaxCalculator_en_US The component for this calculator is available at /atg/commerce/pricing/SECTaxProcessorTaxCalculator_en_US. ATG Framework and Components SECTaxPriceEngineImpl SECTaxPriceEngineImpl extends atg. Following method of this calculator calculates the applicable tax.pricing. Following method of this calculator calculates the applicable tax.

1. • Item level • Order level • Shipping level • Tax level. free shipping etc. inactivePromotions Stores promotions that can no longer be used. Users can set up promotions from ACC. Attributes to manage promotions Following are the three important attributes to manage promotion for each user. Specific amount off a whole order 3. activePromotions Stores the list of promotions that can be used by the user in pricing their orders. percentage off or in terms of another free product. The system also treats coupons as a type of promotion. Promotions can be any kind such as fixed price off. Specific amount off a particular product 2. ATG Page 85 . Percentage amount off a whole order 5. usedPromotions Stores any promotions used in an order. ATG scenarios support the set up of cross sell and up sell features. which is one of the default ATG Commerce repositories. Examples of promotions are. A promotion would be moved into the inactive list. the following is the priority level to apply promotions. Free shipping for a specific product Promotions can be applied at 4 levels based on the priority set. Percentage amount off a particular product 4. By default. Specific amount or percentage off a product based on an attribute 6. Promotions are stored in the Promotions repository. Free product or free order 7. ATG Framework and Components Promotions ATG supports dynamic set up of offers or promotions on specific products or groups of products.

 handleClaimCoupon() .formhandler.CouponFormHandler.SECPurchaseProcessFormHandler is the java class created to handle gift certificate addition to an order.SECCouponFormHandler extends atg.sec. 1. 1. Gift certificates allow a customer to pay for all or part of a purchase using a prepaid amount.To claim a coupon code and add it to order. Processing a gift certificate involves the following steps. you can increase sales and attract new business. for example) sent to specific customers. 2. ATG Commerce fulfills the purchase for Customer A (and sends a notification e-mail to Customer B as part of the fulfillment process). Create a promotion.ebg. Creating an eCoupon is a two step process. Customer B uses (claims) the gift certificate to pay for all or part of an order. Gift certificate Gift certificate represents another mode of payment. Customer A purchases the gift certificate on behalf of Customer B.sec.To remove an already applied coupon from the order.formhandler.  handleRemoveCoupon() . 3. SECCouponFormHandler is the java class created to handle coupon addition and removal from an order. By providing gift certificates as an option for your customers. 2. Methods used in SECCouponFormHandler are as follow. Create a coupon and associate it with promotion created in step 1. Gift certificate FormHandler SECPurchaseProcessFormHandler Class com. Coupon FormHandler SECCouponFormHandler Class com.commerce. Customers redeem coupons by entering a claim code during the checkout process. ATG Page 86 . Methods used in SECPurchaseProcessFormHandler are as follow.order. You can use the ATG Control Center or BCC to manage coupon repository items.ebg. just like credit card payment.order.promotion. ATG Framework and Components eCoupon Coupons are a type of promotion (20% of an order over $100.

To claim a gift certificate. ATG Framework and Components  handleClaimGiftCertificate() . ATG Page 87 .

ATG Framework and Components

Extra Info
/atg/userprofiling/B2CProfileFormHandler
 Component is use to handle user specific operations like login, registration logoff etc.
 It is extended from atg.commerce.profile. CommerceProfileFormHandler class.
 It contains a Map property by name “editValue” that holds extra properties like Shipping
Address etc.
 It also contains handler methods to check up credit cards for their format and there is a
converter to print the Credit card number masked.

/atg/commerce/catalog/CatalogNavHistory
 Component to track the customer’s path through the catalog.
 This component takes the following input parameters.
o navAction – defines the operation type to be performed on stack. Options are “push,
pop & jump”. A blank navAction is treated as push.
o navCount –

/atg/commerce/ShoppingCart
 Shopping cart component is a session-scoped component whose handleXXX methods add,
delete, and switch between carts.
 This component utilizes an object of OrderHolder class which contains the current order as well
as saved order objects.

OrderManager
 Order manager is a business layer component which takes care of creating, loading, refreshing,
updating the orders.
 This component also interacts with the pipeline processors.

Order Repository
Order repository stores an order details.

ATG Page 88

ATG Framework and Components

Profile Repository

Dynamo SQL Profile Repository
It is pre-configured default repository for DPS. Using this, we can store, modify and query user profile
data in a SQL database.

Dynamo LDAP Profile Repository
Using this, we can store, modify and query user profile data in LDAP (Lightweight Directory Access
Protocol) directory.

Product Catalog
 The Product Catalog is a primary component in the Commerce Application.
 It is a repository containing repository items like category, products, media, images etc.
 ATG Commerce application comes with a default product catalog which can be extended as per
business need.
 Catalog repository items can be edited using ATG Control Center (ACC).
 A product catalog is a hierarchical tree of categories and products.
 Default product catalog xml file is /atg/commerce/catalog/ProductCatalog.
 Default product catalogs can be extended to meet business needs.
o Xml-combine tag is used to extend the default catalog.
o Extensions can be created to add properties to categories, products and sku’s.
o New tables must be created in the database to accommodate the extended properties.
 The main item types for the catalogs are categories, products and SKU’s (Stock Keeping Units).
 A product is a navigational end-point in the catalog. However, customers purchase a SKU and
not a product.
 A product may have several different SKUs associated with it, representing varieties, sizes, and
colors.

Custom Catalog
Custom catalog is repository needed to provide information to particular customers or companies.

sortProperties
the sortProperties property of this component holds the property whose values determine the sort
order. By default, items are sorted by display name in alphabetical order.

A string that specifies how to sort the list of repository items. This parameter is specified as a comma
separated list of property names. The first name specifies the primary sort, the second specifies the
secondary sort, etc. If the first character of each keyword is a -, this sort is performed in descending
order. If it is a + or it is not a -, it is sorted in ascending order.

ATG Page 89

ATG Framework and Components

Note: This parameter is only valid for repository items, it will not work with enumerated data-types.

ATG Page 90

 Sitemap Creation & Maintenance We will discuss them in coming sections. ATG out of box supports following SEO techniques to improve the ranking of our site. This section is demonstrating the SEO capabilities that ATG has implemented and supported. Here. ATG Page 91 . ATG Framework and Components ATG Search Engine Optimization (SEO) Techniques Search Engine Optimization technique is used to optimize the site for indexing purpose and to improve the ranking of the page in search engine index. Bing etc. Disclaimer SEO is vast topic and is not restricted to the techniques discussed here.  Canonical URLs for Products and Categories. Search Engine is referred to the engines used for indexing the websites like Google. yahoo.  Url Optimization  Meta Tag Implementation for JSP.

SEORepository & SitemapRepository to store SEO information. ATG Framework and Components Repository ATG SEO makes use of two repositories i.e. The path of this repository is /atg/sitemap/SitemapRepository ATG Page 92 . This repository is extensible and can be customized according to your project needs. SitemapRepository All sitemaps related information is stored in SitemapRepository. Kindly refer Repository section to know basic about repositories. The path of this repository is /atg/seo/SEORepository. SEORepository All SEO related data is stored & maintain in SEO repository.

In easy term. Also since most of the robots don’t crawl more than 100kb of information from a web page. this droplet generates URL for search engine robots. this droplet creates URL for human users. all the large images on the page will be shown only to the human users and not to the crawlers (robots). S. Every URL should be SEO friendly as all the URLs are generated using CatalogItemLinkDroplet. 3 CategoryIndirectTempla /atg/repository/seo/ This Droplet generates static URL te CategoryIndirectTemplate for categories based on a predefined template. The URLs generated here are optimized URLs. In easy term. Kindly refer Droplet section to know basic about droplets. ATG Framework and Components SEO Components ATG has defined several components to fetch information from SEO and Sitemap repositories and render SEO friendly pages for search engine robots. 2 CategoryDirectTemplate /atg/repository/seo/CategoryDi This Droplet generates URLs for rectTemplate categories mapping directly into the web application. Following is the list of important components used for SEO. 4 ProductDirectTemplate /atg/repository/seo/ This Droplet generates URLs for ProductDirectTemplate products mapping directly into the ATG Page 93 .No Droplet Name Component Path Description 1 CatalogItemLink /atg/repository/seo/CatalogIte This Droplet is used to render page mLink with either a static URL (optimized) if the visitor is robot or with dynamic URL if visitor is a human user. URLs created via this template should not require forwarding by a jump servlet.

5 ProductIndirectTemplat /atg/repository/seo/ This Droplet generates static URL e ProductIndirectTemplate for products based on a predefined template. 7 ProductSitemapGenerat /atg/sitemaps/ProductSitemap This component generates or Generator product sitemap xml with optimized URLs of all products available in catalog repository. 9 SitemapIndexGenerator /atg/sitemaps/SitemapIndexGe This component generates the nerator entries in the SitemapRepository & that will be used to create siteIndex xml file. ATG Framework and Components web application. this droplet creates url for human users. This xml contain optimized URLs of all categories in product catalog. This xml contain optimized URLs of all products in product catalog. In easy term. 11 SitemapWriterService /atg/sitemaps/SitemapWriterS This component creates XML files ATG Page 94 . 10 SitemapGeneratorServi /atg/sitemaps/SitemapGenerat This component manages the ce orService process of scheduling and invoking various sitemap generator components. 8 StaticSitemapGenerator /atg/sitemaps/StaticSitemapGe This component generates nerator sitemap xml with optimized URLs of all static pages like contactUs etc. In easy term. 6 CategorySitemapGener /atg/sitemaps/CategorySitema This component generates ator pGenerator category sitemap xml with optimized URLs of all categories available in catalog repository. URLs created via this type of template should not require forwarding by a jump servlet. this droplet generates url for search engine robots. The URLs generated here are optimized.

12 CanonicalItemLink /atg/repository/seo/ This droplet generates canonical CanonicalItemLink url for products and Categories. ATG Framework and Components ervice from SitemapRepository. ATG Page 95 .

Jump Servlet uses direct URL template to translate indirect URL to direct URL. http://mywebsite. Example: URL that is indexed by search engine looks like below. We make sure that search engine is indexing optimized URLs only and same is shown to user.e. If found then request will be processed by JumpServlet. Also add jump servlet to initial.properties so that servlet is ready to serve with the server startup.Direct URL means non-optimized URL and indirect URL means optimized URL with jump keyword. with the keyword jump) and JumpServlet translate this URL to original (non-optimized) URL to process user request. ATG Framework and Components JumpServlet Jump servlet is the servlet placed in DAFPipeline which sense for keyword “jump” in request URL. http://mywebsite. Hence user comes to our website with optimized URLs (i. These optimized URLs contain jump keyword. ATG Page 96 . Jump servlet needs to be defined in web.xml of commerce application.jsp?productId=prod450074&skuId=sku400068 JumpServlet Configuration Jump Servlet component is present at path /atg/dynamo/servlet/dafpipeline.com/root/US/standardPDP/pdp. Whenever request comes via indirect URL (optimized URL with jump keyword) then jump servlet translate it to direct URL. As mentioned earlier that we show optimized URLs to search engine robots.com/root/jump/productname/productDetail/prod450074 JumpServlet translate the above URL in to non-optimized URL like shown below to process the request. Note: .

We can achieve Url Optimization using following steps. ATG Framework and Components URL Optimization URL optimization technique is to create neat and clean URL for robot visitor.e. Try to include product name & important attributes in URL. If system detects the visitor is search engine crawler then application renders optimized URLs (clean URL). http://mywebsite. Considering that we are generating the URL for a category here. Param element showing in following example is the category object.URL formed above is perfectly according the indirect template defined for Product and Category.com/mycontextroot/jump/Motorola-Milestone/productDetail/prod450074 Note: . Same coding snippet will be used to generate optimized URL for Product. JSP Coding When robot crawl the page then we have to show clean URLs. ATG Page 97 . human or robot) and renders the URLs accordingly. CategoryIndirectTemplate This component gets called when CatalogItemLink droplet executed on JSP. If user agent is robot than URL looks like below. Component Configuration In order to achieve URL optimization we have to configure the bunch of components. We will discuss these components in coming section. This increases the possibility of improving the ranking of page. Following component on the JSP checks for user agent (i. Configurations of important attributes are shown below. Make sure your URL contains important keywords such that it matches user search teams.

We use item in URL format. As JumpServlet looks for keyword jump in the URL and if found then convert the URL to direct (non-optimized) URL for the processing. If the visitor is human user then CatalogItemLink droplet makes call to CategoryDirectTemplate to form direct URL. In above example you can see that item is defined as Category and that is coming from ProductCatalog repository. Kindly check the ATG document for complete list of attributes CategoryDirectTemplate This component is used to generate direct URL (non-optimized) for human users. It checks if URL formed according to regular expression defined here. As user visit the page on the site then CatalogItemLink droplet gets executed. Actual URL looks like below by applying above format. urlTemplateFormat & indirectRegex. What is the source of item and how to get their value. This droplet checks the user profile and makes internal call to respective template (Direct or Indirect) component to form and render URL. This is mostly for validation purpose and to ensure that URL format and regex are in sync. ATG Page 98 . Following is the configuration of this component.There are many other properties available in this component. Point to remember here is it should contain keyword jump. ATG Framework and Components urlTemplateFormat This property defines the format of indirect (optimized URL) URL. regexElementList This property is to support above two properties i. Example is shown above.com/mycontextroot/jump/MobilePhone/categorycat170064 indirectRegex This property defines the regex for your URL format. Note: . Hence we define the item here.e. http://mywebsite.

Kindly see the configuration below. Templates get resolved by using the item type and visitor profile. ProductDirectTemplate Refer CategoryDirectTemplate section above. Example: if visitor is human and item is category then CategoryDirectTemplate will be used to form URL hence direct URL (non-optimized) gets formed. Hence I am not documenting the configuration for Product item. ATG has created all SEO components considering two basic Item types i. ATG Framework and Components Refer above section to know about property urlTemplateFormat. These template components will not be considered to form desired URL unless they are listed in templates property of CategoryTemplateMapper for item type Category. Product and Category because we mostly want to optimize the URL of product and category items. ProductTemplateMapper Refer CategoryTemplateMapper section above. ProductIndirectTemplate Refer CategoryIndirectTemplate section above. We can define custom Direct / Indirect URL template component. CategoryTemplateMapper This component keeps the list of URL templates defined in the system. If the project requirement is also to optimize the URL of custom items (other than Product and Category) then you can define similar set of components by using the existing OOB java classes and do the configuration to generate respective direct and indirect URLs.We have discussed above URL optimization for Item type Category. templates This property is list type of property that contains the list of templates defined. But if visitor is robot (crawler) and item is category then CategoryIndirectTemplate will be used to form URL hence indirect URL (optimized) gets formed. Note: .e. We need same set of components and configuration for Item type Product. Following are the name of important components for item type Product. ATG Page 99 .

description and title information. keywords. ATG Page 100 . title. If we don’t provide unique data to title. description and keyword for given pages then Crawler consider them all as a single page though their body content is different & therefore ranking of the page comes down. Here the key to fetch this data from SEO repository is the page URL. SEO tag repository is used to store meta tag data i. JSP Coding JSP coding is needed to fetch meta tag data i. Primary key to retrieve this data from the SEO repository is url of the page.e. In this way same code snippet can be used and effort can be saved. We can populate or update these tags dynamically from BCC (publishing). You can create a JSP fragment with the following piece of code and include the same in the header section of all other JSPs. Due to large number of pages in the website. to raise the ranking of the pages of our site. ATG Framework and Components Meta Tag Implementation Web search engines ranking of page is partly based on the words that appear in certain HTML tags. Idea here is to generate meta tags for every main JSP with unique title. description and keyword information. This data will be retrieved and meta tags will be populated with the relevant keywords. Admin user has to populate meta tag data very first time in SEO repository from BCC (publishing) for every page in the website.e. particularly <meta> tags and the <title> tag. This data will be controlled by merchandising user from BCC (publishing) application. A common SEO technique is to list key search terms in these tags. keyword and description information for given page. description and title for every page exist in the website. it is not feasible to provide data manually for these tags for every page exist.

That means the number of pages in your website is equal to number of products in your catalog. As shown above. by appending the product name in title information coming from SEO Repository. Example For Product “Nokia X101”. ATG Page 101 . That also means search engine have found tons of valuable information in website for indexing.jsp in your WAR. This JSP has meta tags (title etc). But if we don’t append product name than title looks same for all products hence crawler consider them as single (same) page though they are showing different products information. title looks like below Product Detail Page – Motorola AY203 Assume ProductDetail page is served by productDetail. By appending product name in title and description. you are making the virtual unique pages & increasing the chance of getting indexed. we are making many unique virtual pages at run time. You can fetch information from repository like shown above and append product name in it. ATG Framework and Components You can further tweak the above code by appending the product / category name in title information coming from repository. Pages rendered for different products consider as unique page because their title are different. title looks like below Product Detail Page – Nokia X101 Product “Motorola AY203”. Same JSP is used to render the information for “Nokia” and “Motorola” products. Hence crawler will index them all.

This link tag can be specified like below. application should specify the link tag on product detail page which specifies the canonical URL on the page. JSP Coding We have to put canonical URL on product detail page and category summary page.com/mycontextroot/jump/Motorola-Milestone-XT720- black/productDetail/prod450074/cat170064"/> The canonical URL is similar to static URL. http://mywebsite. The process includes converting unfriendly URL to SEO friendly URL so that search engines index the page with the product name appearing in URL. ATG Framework and Components Canonical URL Canonical URLs are the outcome of the process of normalization of the URLs to make them consistent across the site. Human user gets this URL as search results (search engine) and they comes to the site by clicking the same. Refer following configuration and put this configuration in CanonicalItemLink droplet component.com/mycontextroot/jump/Motorola-Milestone-XT720-black/productDetail /prod450074/cat17006 For SEO using Canonical URLs technique. http://mywebsite.e.jsp?productId=prd10002 And after normalization same look like this. jump servlet translate this URL to dynamic URL (non-optimized) and request is processed. For example: The URL before normalization look like. ATG Page 102 .com/mycontextroot/country/productDetails. Idea here is to have direct URL for product detail page and category summary page for web spider. Component Configuration You need to configure component i. When a web spider accesses the page using static URLs it finds a link on the page and gets indexed. Put the following piece of code in header section of Product Detail JSP and category summary page. <link rel="canonical" href="http://mywebsite. CanonicalItemLink droplet to render canonical URL for product item type.

Hence if item is Product then ProductIndirectTemplate component is used to form canonical URL. ATG Framework and Components itemDescriptorNameToUrlTemplateMap This is map property that contains item to indirect template mapping. Same applies for item type Category. defaultRepository It takes reference of repository where item belongs to. ATG Page 103 .

Create component XXXXWebApp at the following path in your ATG module. Sitemaps are not an official standard. Here XXXX stands for application context root. but they are supported by many search engines. Create component XXXXSiteMap at the following path in your ATG module. Here XXXX stands for your application context root in capital letters. so web spiders are able to identify site content without relying exclusively on their ability to crawl and parse the pages. lastModified. 3.properties 2. Sitemap is an xml file that list URLs of all pages in your website. Yahoo and MSN. It contains basic information like URL. More URLs in sitemap drives more indexing of data from the site and increases the chance of higher ranking. changeFrequency and priority about the page. ATG Framework and Components Sitemap Generation Sitemaps are files stored on a web server that list the URLs of useful pages available in our website. Now add following configuration in the above created component properties file.properties ATG Page 104 . It is good to generate unique URLs for all these items and put them all in sitemap xml file. <ATG_HOME>/YourModule/config/atg/registry/webappregistry/XXXXSiteMap. including Google. 1. Here XXXX stands for your application context root in capital letters. As commerce website always have long list of categories and infinite products. Sitemap Configuration We need to create & configure certain components to generate appropriate sitemap xml files for our commerce website. <ATG_HOME>/YourModule/config/atg/registry/webappregistry/XXXXWebApp. Sample entry in sitemap xml is shown below.

webApp .000 URLs and must be no larger than 10MB (10. sitemapFilePrefix_2.485. monthly. Context path should not be included here if webApp property is specified. Now configure ProductSitemapGenerator component. Sample configuration of this component is shown below. urlPrefix . This component is responsible for generating Sitemap xml for item type Product. ATG Page 105 . <ATG_HOME>/YourModule/config/atg/sitemap/ProductSitemapGenerator. sourceRepository .URL prefix with protocol.760 bytes). itemDescriptorName .The priority of this URL relative to other URLs on your site. Following attributes are needed to be configured for this component. Template .xml and so on. Sitemap file must have no more than 50. This component is present at the following path.Generator uses this template to construct sitemap URL for repository item of type ItemDescriptorName Both direct and indirect templates can be set here. Valid values are: always. Now add following configuration in above created component properties file. 5.xml. daily. Priority .0 to 1. ATG Framework and Components 4. never. Here XXXXEar is the name of application EAR and xxxx is context root of application.catalog id that will be used for resolving derived properties sitemapFilePrefix – Prefix for your Sitemap xml file. contextCatalog . If we list more pages (URL) than this limitation.How frequently the page is likely to change. changeFrequency . yearly.Type of repository item to retrieve.properties.0. Use indirect template to generate sitemap with optimized URLs for repository items.repository to retrieve information for generator.Used to retrieve application's context root. Valid values range from 0. hourly. weekly. host. port and context path. then generator will split information into several files with names sitemapFilePrefix_1.

Now configure CategorySitemapGenerator component. Note: . This component is responsible for generating Sitemap xml for item Category. The configuration is exactly same as shown above for item type Product. Now configure StaticSitemapGenerator component. 7.You need to configure this component according to your environment setup. ATG Page 106 .properties. <ATG_HOME>/YourModule/config/atg/sitemap/CategorySitemapGenerator. This component is present at the following path. Here property staticPages maintains the list of static pages in your website. ATG Framework and Components 6. This component is responsible for generating the sitemap for static pages in your website like contact us etc.

e. ATG Page 107 . 9. <ATG_HOME>/YourModule/config/atg/sitemap/SitemapIndexGenerator. This component is backbone for generating Sitemaps. Property warDir is the property that takes absolute path of folder to place sitemap xml files generated. If we define new Generator (for new item type) then it is mandatory to add the same in sitemapGenerators list property of this component else sitemap will not be generated for new Generator added. Now configure SitemapGeneratorService component. Ideally this should be the root of your application WAR. This component is responsible for storing the sitemap data in repository. This component generates sitemap according to the configuration done in respective generators (i. This component also creates a list of sitemaps generated according to the configuration. ProductSitemapGenerator etc). ATG Framework and Components 8. Now configure SiteMapIndexGenerator component. This is available at the following path.properties.

After the generation of the sitemap. Provide user and password to enter in to application. Refer following section for the same. To know the path. invoke the Sitemap Writer service to write to xml files. We are done with all required configuration for sitemap. ATG Framework and Components 10. http://mywebsite. 2.com/dyn/admin 3. 5. ATG Page 108 . Steps to Generate Sitemap 1. Make sure commerce (production) server is up and running. Now you can find the SiteMap xml files are generated at the configured path. This component is responsible for writing down the sitemaps data in to XML files at the configured path. Now we are ready to generate first set of Sitemap xmls. Sitemap Administration Write Sitemaps Start service. 4. Now configure final component i. check the value of warDir property of component SitemapGeneratorService. Also ensure the access to /dyn/admin application. Go to Sitemap Administration  Generate sitemap  Start service. Go to /dyn/admin application.e. SitemapWriterService.

pdf for the detail. and renders the item on the page. 340) atg.repository. Please refer the ATGPageDevGuide.pdf. (ATGPageDevGuide. you must use another servlet bean to format the outputCategoryLookup. (ATGPageDevGuide. 261) atg. (ATGPageDevGuide.ErrorMessageForEach Displays error messages that occur during a form submission.droplet. 263) atg.pdf.targeting.targeting. ATG Framework and Components Appendix Droplets Following are the extensively used droplets.droplet. (ATGPageDevGuide. 257) atg.pdf. 322) atg.TableForEach Displays each element of an array. Instead. 342) atg. 320) atg.servlet.droplet. (ATGPageDevGuide. 352) ATG Page 109 .droplet.For Displays a single output the number of times specified.pdf. and renders the item on the page.ItemLookupDroplet Looks up an item in one or more repositories based on the item’s ID.RepositoryLookup Looks up an item in a specific repository. depending on input parameter value. atg.droplet. based on the item’s ID.pdf. (ATGPageDevGuide. (ATGPageDevGuide.targeting.pdf.TargetingArray TargetingArray differs from the others in that it does not format the output of the targeting operation.ForEach Displays each element of an array. (ATGPageDevGuide.TargetingFirst Displays the first n items.RQLQueryForEach Constructs an RQL query and renders its output parameter once for each element returned by the query. 350) atg.pdf. (ATGPageDevGuide. 280) atg.pdf.repository.Switch Displays one of several possible outputs.pdf. arranging the output in a two-dimensional format.pdf. where n is a number you specify. (ATGPageDevGuide.servlet.

TargetingRange Displays a range of items. (ATGPageDevGuide.TargetingForEach Displays all of the items returned by the targeter.gifts. ATG Framework and Components atg.GiftitemDroplet ATG Page 110 .targeting.pdf. 355) atg. 358) atg. such as the third through the seventh.pdf.pdf.commerce. (ATGPageDevGuide.targeting. (ATGPageDevGuide.targeting.TargetingRandom Displays n items chosen randomly. 360) ProductLookup SkiwLookup CatalogItemLookupDroplet RepriceOrderDroplet PriceEachItem PriceItem ShippingGroupsDroplet PaymentGroupsDroplet PriceItemDroplet RepriceOrderDroplet /atg/commerce/gifts/GiftlistLookupDroplet /atg/commerce/gifts/GiftlistDroplet atg.

ATG Framework and Components Form Handlers SimpleSQLFormHandler ShoppingCartModifier ExpressCheckoutFormHandler CartModifierFormHandler GiftListFormHandler GiftListSearch ATG Page 111 .

Sign up to vote on this title
UsefulNot useful