SlideShare a Scribd company logo
AEM Commerce Framework
Paolo Mottadelli - Sr. Mgr. Technical Marketing
@paolomoz
Adobe® Marketing Cloud
Adobe® Experience Manager
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Architecture of the framework
1
Commerce Integrated Platform
JCR repo product DB
Experience Manager PIM/ecommerce
surfer
content editor PIM editor
1 2
PIM synch
3
4
dynamic PIM
Commerce Integrated Platform
surfer
content editor PIM editor
1. Product display component
2. Shopping cart
3. Promotions and vouchers
4. Catalog blueprints
5. Check-out
6. Search
1. Product information integrity
2. Pricing
3. Stock-keeping inventory
4.Variations on shopping cart
AEM eCommerce Integration Modules
1. The integration framework (API used for eCommerce implementations)
2. AEM native (JCR) implementation
3. hybris implementation
4. A number of out-of-the-box AEM components
5. Search (AEM, eCommerce, 3rd party)
6. Catalog management
7. Promotions management
8. Client context cart store
JCR repo product DB
Experience Manager PIM/ecommerce
Architecture of the Commerce Framework
AEM Commerce API
Implementation
AEM Commerce Components
AEM native impl
JCR Repository
hybris impl
hybris DB
other impl
other
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Commerce providers
With code samples
2
eCommerce Engine Selection
CommerceService commerceService =
resource.adaptTo(CommerceService.class);
CommerceSession session =
commerceService.login(slingRequest, slingResponse);
Product baseProduct = resource.adaptTo(Product.class);
GeoImpl
(geometrixx)
hybrisImpl
(hybris)
otherImpl
(xyz)
Site Component
OSGi container
bundle
bundlebundle
cq:commerceProvider = geometrixx
1
2
3
Custom Commerce Provider: code samples
TrainingCommerceServiceFactory
@Component(metatype = true, label = "Day CQ Commerce Factory for Training")
@Service
@Properties(value = {
@Property(name = "service.description", value = "Factory for training commerce service"),
@Property(name = "commerceProvider", value = "training")
})
public class TrainingCommerceServiceFactory extends AbstractJcrCommerceServiceFactory implements
CommerceServiceFactory {
	 public CommerceService getCommerceService(Resource res) {
	 	 return new TrainingCommerceServiceImpl(getServices(), res);
	 }
}
Commerce Factory OSGi configuration
TrainingCommerceServiceImpl
public class TrainingCommerceServiceImpl extends AbstractJcrCommerceService implements
CommerceService {
[...]
	 public CommerceSession login(SlingHttpServletRequest request,
	 	 	 SlingHttpServletResponse response) throws CommerceException {
	 	 return new TrainingCommerceSessionImpl(this, request, response, resource);
	 }
public Product getProduct(final String path) throws CommerceException {
[...] return new TrainingProductImpl(resource); [...]
}
TrainingCommerceSessionImpl
public class TrainingCommerceSessionImpl extends AbstractJcrCommerceSession {
	 [..]
	
}
TrainingCommerceSessionImpl
public class TrainingCommerceSessionImpl extends AbstractJcrCommerceSession {
	 protected void loadCart()
protected void saveCart()
public String getProductPrice(Product product)
public String getCartPrice(Predicate filter)
protected void doAddCartEntry(Product product, int quantity)
protected void calcCart()
public List<Promotion> getActivePromotions()
protected void calcOrder()
	
}
TrainingCommerceServiceFactory
public class TrainingProductImpl extends AbstractJcrProduct {
[...]
	 public String getSKU() {
	 	 return "todo-get-sku-method";
	 }
}
eCommerce Engine Selection
CommerceService commerceService =
resource.adaptTo(CommerceService.class);
CommerceSession session =
commerceService.login(slingRequest, slingResponse);
Product baseProduct = resource.adaptTo(Product.class);
GeoImpl
(geometrixx)
hybrisImpl
(hybris)
trainingImpl
(training)
Site Component
OSGi container
bundle
bundlebundle
cq:commerceProvider = training
1
2
3
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
(more on) CommerceSession
With code samples
3
•updateOrderDetails(Map<String, String> orderDetails);
•getOrderDetails();
•submitOrder();
CommerceSession responsibilities
• addCartEntry(Product product, int quantity);
• modifyCartEntry(int entryNumber, int quantity);
• deleteCartEntry(int entryNumber);
•updateOrderDetails(Map<String, String> orderDetails);
•getOrderDetails();
•submitOrder();
cart content
pricing
order details
1
2
3
•getPromotions();
•addVoucher(String code);
•removeVoucher(String code);
promotions3
CommerceSession is RESTful style (1)
CommerceSession is RESTful style (2)
ORDER%3a%3dorderId%253d9c1346bf-3813-4205-80ec-2fdfd1644143%7cCART%3a
%3dquantity3%253d1%252cquantity0%253d1%252cquantity1%253d1%252cpromotionCoun
t%253d2%252cquantity2%253d1%252cvoucherCount%253d0%252cpromotion1%253d
%252fcontent%252fcampaigns%252fgeometrixx-outdoors%252fcosy-up-to-winter
%252fwinter-female%252fcosy-companions%252cpromotion0%253d%252fcontent
%252fcampaigns%252fgeometrixx-outdoors%252fbig-spender
%252fordervalueover100%252ffree-shipping%252cproduct3%253d%252fcontent
%252fgeometrixx-outdoors%252fen%252fequipment%252fskiing%252fhalifax-winter
%252fjcr%253acontent%252fpar%252fproduct%252cproduct0%253d%252fcontent
%252fgeometrixx-outdoors%252fen%252fwomen%252fcoats%252fcalgary-winter%252fjcr
%253acontent%252fpar%252fproduct%252f397122-s%252cproduct2%253d%252fcontent
%252fgeometrixx-outdoors%252fen%252fseasonal%252fwinter%252fequipment
%252fkamloops-snow%252fjcr%253acontent%252fpar%252fproduct
%252f37924450-7%252centryCount%253d4%252cproduct1%253d%252fcontent
%252fgeometrixx-outdoors%252fen%252fequipment%252fskiing%252fkelowna-snow
%252fjcr%253acontent%252fpar%252fproduct%7c
Name: CommercePersistence, Host: geometrixx.com, Path: /
CommerceSession is RESTful style (3)
protected void loadCart() {
[...]
//
// Load cart from the cookie:
//
Map<String, String> cartStore = ContextSessionPersistence.getStore(request, "CART",
CommerceConstants.COMMERCE_COOKIE_NAME);
[...]
}
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Managing products
Includes solutions for scalability, performance, etc..
4
Products and Variants architecture:
- variant
- color: purple
- id: 397122.1
- variant
- size: S
- variant
- size: L
- variant
- size: M
- variant
- size: XL
- variant
- color: purple
-id: 397122.2
- price: 199
- variant
- size: S
- variant
- size: L
- variant
- size: M
- variant
- size: XL
- type: product
- axes: color, size
- id: 397122
- title: Saskatoon
- price: 299
1
1
1
1 1
1 1
1 1
1 1
Product interface
public interface Product extends Adaptable {
public String getPath(); // path to specific variation
public String getPagePath(); // path to presentation page for all variations
public String getSKU(); // unique ID of specific variation
public String getTitle(); // shortcut to getProperty(TITLE)
public String getDescription(); // shortcut to getProperty(DESCRIPTION)
public String getImageUrl(); // shortcut to getProperty(IMAGE_URL)
public String getThumbnailUrl(); // shortcut to getProperty(THUMBNAIL_URL)
public <T> T getProperty(String name, Class<T> type);
public Iterator<String> getVariantAxes();
public boolean axisIsVariant(String axis);
public Iterator<Product> getVariants(VariantFilter filter) throws CommerceException;
}
AxisFilter implements VariantFilter
public class AxisFilter implements VariantFilter {
...
public boolean includes(Product product) {
ValueMap values = product.adaptTo(ValueMap.class);
if(values != null) {
String v = values.get(axis, String.class);
return v != null && v == value;
}
return false;
}
}
Product Data admin UI
•Double click from Content Finder to open
•Based on Scaffolding
•Create/Change data in /etc/commerce/products
•Can change destination path from Scaffolding page
•Can navigate and change variants (overrides higher level data)
5.6.1
PIM Data & Product References
1
1
1
1 1
1 1
1 1
1 1
1 /etc/commerce/products 2 /content
Proxy Product Pages
make editable
2 nodes
10 nodes
5.6.1
Hardening Product Importer
•ROBUSTNESS: product importer more flexible with products/variants
•EXTENSIBILITY: abstracted-out common parts of product importer
•PERFORMANCE: importing 1000s products takes 80% less
•SCALABILITY: support flat hierarchies through bucketing, proxy pages, scalable search
5.6.1
Catalog Generation V2
•Regional Catalog support (based on MSM)
•Catalog Design Changes support
•Custom Catalog Pages support
•Blueprint & Catalog converter for 5.6.0 to current
5.6.1
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Shopping cart
5
Shopping Cart architecture (CommerceSession)
The CommerceSession performs add, remove, etc.
The CommerceSession also performs the various calculations on the cart.
The CommerceSession also applies vouchers and promotions that have fired to the cart.
Pricing modifiers:
- Quantity discounts.
- Different currencies.
- VAT-liable and VAT-free.
session.calcCart()
protected void calcCart() { ...
for (int i = 0; i < cart.size(); i++) { ...
for (Promotion p : promotions) {
try {
PromotionHandler ph = p.adaptTo(PromotionHandler.class);
PriceInfo discount = ph.applyCartEntryPromotion(this, p, entry);
if (discount != null && discount.getAmount().compareTo(BigDecimal.ZERO) > 0) {
... entry.calcPrices(); ...
} ...
cartTotalPrice = cartTotalPrice.add(entry.getPriceInfo(new PriceFilter("POST_TAX", currencyCode)).get(0).getAmount());
}
setPrice(new PriceInfo(cartPreTaxPrice, currency), "CART", "PRE_TAX");
setPrice(new PriceInfo(cartTax, currency), "CART", "TAX");
setPrice(new PriceInfo(cartTotalPrice, currency), "CART", "POST_TAX");
... }
Shopping Cart architecture (Storage)
In AEM-native carts are stored in the
ClientContext
Personalization should always be driven
through the ClientContext.
CommerceSession.addCartEntry()
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Checkout
6
Checkout architecture (order details)
Order details are not fixed by the API:
updateOrderDetails(Map<String, String> orderDetails);
Shipping options (and prices) depend on weight, delivery address, etc...
The CommerceSession owns shipping pricing; to retrieve and update delivery details:
updateOrder(Map<String, Object> delta)
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
7 Adobe &
hybris integration: product data flow
hybris:
Omni Commerce
Connect
CQ:
/etc/commerce/products
CQ:
/content/site
hybris importer catalog publishing
hybris integration: product data display
JCR repo
CQ
hybris
CQ hybris importer
CQ component volatile data
PIM data
hybris integration: user synchronisation
•Lazy import of hybris users into CQ
•Lazy creation of CQ users in hybris
•CQ stores hybris authentication data for later re-use
•Pluggable architecture for custom authentication schemes (SAML, OAuth)
hybris integration: customising the product import process
•Need to add PIM attributes? Extend HybrisResponseParser.
•Need to change the imported data hierarchy? Extend ImportHandler.
•Need to customize what services are called when importing data? Extend HybrisImporter.
hybris integration: customising the user import process
•ProfileSynchronizer#syncProfile is responsible for sync the user’s CQ profile to the respective
hybris account
hybris integration: customising product and price loading
•HybrisFactory#getProduct is responsible for creating Product instances
•HybrisSession#getProductPriceInfo is responsible for getting the correct price for a product for
the current user
hybris integration: how to install
AEM 5.6.1
3
cq-hybris-content 5.6.22
cq-hybris-server 5.6.01
cq-geometrixx-hybris-content 5.6.100
install packages
5.6.1
hybris with AEM 5.6.1
•Supports hybris 5.0
•hybris 5.0 server embedded by default
•Backward compatible with hybris 4.8.1
•Geometrixx-specific hybris connector
•Extend the default hybris components to a specific implementation;
•Remove internal references in the hybris components to allow for better extensibility
•hybris connector source code included in the content package
5.6.1
Geometrixx-specific hybris connector 5.6.1
Thank you

More Related Content

What's hot

Adobe AEM core components
Adobe AEM core componentsAdobe AEM core components
Adobe AEM core components
Lokesh BS
 
AEM GEMS Session Template Editor Sept 14 2016
AEM GEMS Session Template Editor Sept 14 2016AEM GEMS Session Template Editor Sept 14 2016
AEM GEMS Session Template Editor Sept 14 2016
AdobeMarketingCloud
 
IMMERSE'16 Intro to Adobe Experience Manager & Adobe Marketing Cloud
IMMERSE'16 Intro to Adobe Experience Manager & Adobe Marketing CloudIMMERSE'16 Intro to Adobe Experience Manager & Adobe Marketing Cloud
IMMERSE'16 Intro to Adobe Experience Manager & Adobe Marketing Cloud
AdobeMarketingCloud
 
Build single page applications using AngularJS on AEM
Build single page applications using AngularJS on AEMBuild single page applications using AngularJS on AEM
Build single page applications using AngularJS on AEM
AdobeMarketingCloud
 
IMMERSE'16 Introduction to adobe experience manager back end
IMMERSE'16 Introduction to adobe experience manager back endIMMERSE'16 Introduction to adobe experience manager back end
IMMERSE'16 Introduction to adobe experience manager back end
AdobeMarketingCloud
 
IMMERSE'16 Introduction to AEM Tooling
IMMERSE'16 Introduction to AEM ToolingIMMERSE'16 Introduction to AEM Tooling
IMMERSE'16 Introduction to AEM Tooling
AdobeMarketingCloud
 
AEM (CQ) eCommerce Framework
AEM (CQ) eCommerce FrameworkAEM (CQ) eCommerce Framework
AEM (CQ) eCommerce Framework
Paolo Mottadelli
 
12 hot features to engage and save time with aem 6.2
12 hot features to engage and save time with aem 6.212 hot features to engage and save time with aem 6.2
12 hot features to engage and save time with aem 6.2
Tricode (part of Dept)
 
10 reasons to migrate from AEM 5 to 6.1
10 reasons to migrate from AEM 5 to 6.110 reasons to migrate from AEM 5 to 6.1
10 reasons to migrate from AEM 5 to 6.1
Tricode (part of Dept)
 
Modernizing Adobe Experience Manager (AEM)
Modernizing Adobe Experience Manager (AEM)Modernizing Adobe Experience Manager (AEM)
Modernizing Adobe Experience Manager (AEM)
Gabriel Walt
 
Using AEM in a customer global multi-channel program
Using AEM in a customer global multi-channel programUsing AEM in a customer global multi-channel program
Using AEM in a customer global multi-channel program
Meryll Blanchet
 
Managing Omnichannel Experiences with Adobe Experience Manager (AEM)
Managing Omnichannel Experiences with Adobe Experience Manager (AEM)Managing Omnichannel Experiences with Adobe Experience Manager (AEM)
Managing Omnichannel Experiences with Adobe Experience Manager (AEM)
Gabriel Walt
 
Accelerate Your Next AEM Project
Accelerate Your Next AEM ProjectAccelerate Your Next AEM Project
Accelerate Your Next AEM Project
Mark Kelley
 
IMMERSE 2016 Cedric Huesler US Keynote
IMMERSE 2016 Cedric Huesler US KeynoteIMMERSE 2016 Cedric Huesler US Keynote
IMMERSE 2016 Cedric Huesler US Keynote
AdobeMarketingCloud
 
Extra aem development tools by Justin Edelson
Extra aem development tools by Justin EdelsonExtra aem development tools by Justin Edelson
Extra aem development tools by Justin EdelsonAEM HUB
 
Ask the AEM Community Expert Feb 2016 Session: AEM + Brackets
Ask the AEM Community Expert Feb 2016 Session: AEM + BracketsAsk the AEM Community Expert Feb 2016 Session: AEM + Brackets
Ask the AEM Community Expert Feb 2016 Session: AEM + Brackets
AdobeMarketingCloud
 
Dynamic components using SPA concepts in AEM
Dynamic components using SPA concepts in AEMDynamic components using SPA concepts in AEM
Dynamic components using SPA concepts in AEM
Bojana Popovska
 
Thoughts on Component Resuse
Thoughts on Component ResuseThoughts on Component Resuse
Thoughts on Component Resuse
Justin Edelson
 
Dynamic Components using Single-Page-Application Concepts in AEM/CQ
Dynamic Components using Single-Page-Application Concepts in AEM/CQDynamic Components using Single-Page-Application Concepts in AEM/CQ
Dynamic Components using Single-Page-Application Concepts in AEM/CQ
Netcetera
 

What's hot (19)

Adobe AEM core components
Adobe AEM core componentsAdobe AEM core components
Adobe AEM core components
 
AEM GEMS Session Template Editor Sept 14 2016
AEM GEMS Session Template Editor Sept 14 2016AEM GEMS Session Template Editor Sept 14 2016
AEM GEMS Session Template Editor Sept 14 2016
 
IMMERSE'16 Intro to Adobe Experience Manager & Adobe Marketing Cloud
IMMERSE'16 Intro to Adobe Experience Manager & Adobe Marketing CloudIMMERSE'16 Intro to Adobe Experience Manager & Adobe Marketing Cloud
IMMERSE'16 Intro to Adobe Experience Manager & Adobe Marketing Cloud
 
Build single page applications using AngularJS on AEM
Build single page applications using AngularJS on AEMBuild single page applications using AngularJS on AEM
Build single page applications using AngularJS on AEM
 
IMMERSE'16 Introduction to adobe experience manager back end
IMMERSE'16 Introduction to adobe experience manager back endIMMERSE'16 Introduction to adobe experience manager back end
IMMERSE'16 Introduction to adobe experience manager back end
 
IMMERSE'16 Introduction to AEM Tooling
IMMERSE'16 Introduction to AEM ToolingIMMERSE'16 Introduction to AEM Tooling
IMMERSE'16 Introduction to AEM Tooling
 
AEM (CQ) eCommerce Framework
AEM (CQ) eCommerce FrameworkAEM (CQ) eCommerce Framework
AEM (CQ) eCommerce Framework
 
12 hot features to engage and save time with aem 6.2
12 hot features to engage and save time with aem 6.212 hot features to engage and save time with aem 6.2
12 hot features to engage and save time with aem 6.2
 
10 reasons to migrate from AEM 5 to 6.1
10 reasons to migrate from AEM 5 to 6.110 reasons to migrate from AEM 5 to 6.1
10 reasons to migrate from AEM 5 to 6.1
 
Modernizing Adobe Experience Manager (AEM)
Modernizing Adobe Experience Manager (AEM)Modernizing Adobe Experience Manager (AEM)
Modernizing Adobe Experience Manager (AEM)
 
Using AEM in a customer global multi-channel program
Using AEM in a customer global multi-channel programUsing AEM in a customer global multi-channel program
Using AEM in a customer global multi-channel program
 
Managing Omnichannel Experiences with Adobe Experience Manager (AEM)
Managing Omnichannel Experiences with Adobe Experience Manager (AEM)Managing Omnichannel Experiences with Adobe Experience Manager (AEM)
Managing Omnichannel Experiences with Adobe Experience Manager (AEM)
 
Accelerate Your Next AEM Project
Accelerate Your Next AEM ProjectAccelerate Your Next AEM Project
Accelerate Your Next AEM Project
 
IMMERSE 2016 Cedric Huesler US Keynote
IMMERSE 2016 Cedric Huesler US KeynoteIMMERSE 2016 Cedric Huesler US Keynote
IMMERSE 2016 Cedric Huesler US Keynote
 
Extra aem development tools by Justin Edelson
Extra aem development tools by Justin EdelsonExtra aem development tools by Justin Edelson
Extra aem development tools by Justin Edelson
 
Ask the AEM Community Expert Feb 2016 Session: AEM + Brackets
Ask the AEM Community Expert Feb 2016 Session: AEM + BracketsAsk the AEM Community Expert Feb 2016 Session: AEM + Brackets
Ask the AEM Community Expert Feb 2016 Session: AEM + Brackets
 
Dynamic components using SPA concepts in AEM
Dynamic components using SPA concepts in AEMDynamic components using SPA concepts in AEM
Dynamic components using SPA concepts in AEM
 
Thoughts on Component Resuse
Thoughts on Component ResuseThoughts on Component Resuse
Thoughts on Component Resuse
 
Dynamic Components using Single-Page-Application Concepts in AEM/CQ
Dynamic Components using Single-Page-Application Concepts in AEM/CQDynamic Components using Single-Page-Application Concepts in AEM/CQ
Dynamic Components using Single-Page-Application Concepts in AEM/CQ
 

Viewers also liked

Adobe AEM Commerce with hybris
Adobe AEM Commerce with hybrisAdobe AEM Commerce with hybris
Adobe AEM Commerce with hybris
Paolo Mottadelli
 
AEM Hub 2014: AEM 5.6.1 e-Commerce Integration
AEM Hub 2014: AEM 5.6.1 e-Commerce IntegrationAEM Hub 2014: AEM 5.6.1 e-Commerce Integration
AEM Hub 2014: AEM 5.6.1 e-Commerce Integration
Meryll Blanchet
 
Web Tech Java Servlet Update1
Web Tech   Java Servlet Update1Web Tech   Java Servlet Update1
Web Tech Java Servlet Update1vikram singh
 
Apache Sling as an OSGi-powered REST middleware
Apache Sling as an OSGi-powered REST middlewareApache Sling as an OSGi-powered REST middleware
Apache Sling as an OSGi-powered REST middleware
Robert Munteanu
 
Going Global. Going Local.
Going Global. Going Local.Going Global. Going Local.
Going Global. Going Local.
James Gagliardi
 
Neha Gupta - AIR Mobile: Cross promotion
Neha Gupta - AIR Mobile: Cross promotionNeha Gupta - AIR Mobile: Cross promotion
Neha Gupta - AIR Mobile: Cross promotion
Flash Conference
 
AEM 6.2 -Assets - Creating engaging experience at scale
AEM 6.2 -Assets - Creating engaging experience at scaleAEM 6.2 -Assets - Creating engaging experience at scale
AEM 6.2 -Assets - Creating engaging experience at scale
Kevin Farley
 
Knowledge Sharing : Java Servlet
Knowledge Sharing : Java ServletKnowledge Sharing : Java Servlet
Knowledge Sharing : Java Servlet
Fahmi Jafar
 
e-Eommerce - Framework
e-Eommerce -  Frameworke-Eommerce -  Framework
e-Eommerce - Framework
Snehasish Mandal
 
AEM 6 DAM - Integrations, Integrations, Integrations
AEM 6 DAM - Integrations, Integrations, IntegrationsAEM 6 DAM - Integrations, Integrations, Integrations
AEM 6 DAM - Integrations, Integrations, Integrations
connectwebex
 
Adobe_Campaign_Overview
Adobe_Campaign_OverviewAdobe_Campaign_Overview
Adobe_Campaign_OverviewAlex Pepicelli
 
Implementing Site Search in CQ5 / AEM
Implementing Site Search in CQ5 / AEMImplementing Site Search in CQ5 / AEM
Implementing Site Search in CQ5 / AEM
rtpaem
 
java Servlet technology
java Servlet technologyjava Servlet technology
java Servlet technology
Tanmoy Barman
 
Apache SOLR in AEM 6
Apache SOLR in AEM 6Apache SOLR in AEM 6
Apache SOLR in AEM 6
Yash Mody
 
Sap java connector / Hybris RFC
Sap java connector / Hybris RFCSap java connector / Hybris RFC
Sap java connector / Hybris RFC
Monsif Elaissoussi
 
Five Strategies for Effortless Customer Service
Five Strategies for Effortless Customer ServiceFive Strategies for Effortless Customer Service
Five Strategies for Effortless Customer Service
SAP Customer Experience
 
Adobe Experience Manager - 6th Edition by Cedric Huesler
Adobe Experience Manager - 6th Edition by Cedric HueslerAdobe Experience Manager - 6th Edition by Cedric Huesler
Adobe Experience Manager - 6th Edition by Cedric HueslerAEM HUB
 
Java servlet life cycle - methods ppt
Java servlet life cycle - methods pptJava servlet life cycle - methods ppt
Java servlet life cycle - methods ppt
kamal kotecha
 
M-Commerce
M-CommerceM-Commerce
M-Commerce
BOSS Webtech
 

Viewers also liked (20)

Adobe AEM Commerce with hybris
Adobe AEM Commerce with hybrisAdobe AEM Commerce with hybris
Adobe AEM Commerce with hybris
 
AEM Hub 2014: AEM 5.6.1 e-Commerce Integration
AEM Hub 2014: AEM 5.6.1 e-Commerce IntegrationAEM Hub 2014: AEM 5.6.1 e-Commerce Integration
AEM Hub 2014: AEM 5.6.1 e-Commerce Integration
 
JavaCro'15 - Adobe Experience Manager and Apache Sling - Samir Čauš
JavaCro'15 - Adobe Experience Manager and Apache Sling - Samir ČaušJavaCro'15 - Adobe Experience Manager and Apache Sling - Samir Čauš
JavaCro'15 - Adobe Experience Manager and Apache Sling - Samir Čauš
 
Web Tech Java Servlet Update1
Web Tech   Java Servlet Update1Web Tech   Java Servlet Update1
Web Tech Java Servlet Update1
 
Apache Sling as an OSGi-powered REST middleware
Apache Sling as an OSGi-powered REST middlewareApache Sling as an OSGi-powered REST middleware
Apache Sling as an OSGi-powered REST middleware
 
Going Global. Going Local.
Going Global. Going Local.Going Global. Going Local.
Going Global. Going Local.
 
Neha Gupta - AIR Mobile: Cross promotion
Neha Gupta - AIR Mobile: Cross promotionNeha Gupta - AIR Mobile: Cross promotion
Neha Gupta - AIR Mobile: Cross promotion
 
AEM 6.2 -Assets - Creating engaging experience at scale
AEM 6.2 -Assets - Creating engaging experience at scaleAEM 6.2 -Assets - Creating engaging experience at scale
AEM 6.2 -Assets - Creating engaging experience at scale
 
Knowledge Sharing : Java Servlet
Knowledge Sharing : Java ServletKnowledge Sharing : Java Servlet
Knowledge Sharing : Java Servlet
 
e-Eommerce - Framework
e-Eommerce -  Frameworke-Eommerce -  Framework
e-Eommerce - Framework
 
AEM 6 DAM - Integrations, Integrations, Integrations
AEM 6 DAM - Integrations, Integrations, IntegrationsAEM 6 DAM - Integrations, Integrations, Integrations
AEM 6 DAM - Integrations, Integrations, Integrations
 
Adobe_Campaign_Overview
Adobe_Campaign_OverviewAdobe_Campaign_Overview
Adobe_Campaign_Overview
 
Implementing Site Search in CQ5 / AEM
Implementing Site Search in CQ5 / AEMImplementing Site Search in CQ5 / AEM
Implementing Site Search in CQ5 / AEM
 
java Servlet technology
java Servlet technologyjava Servlet technology
java Servlet technology
 
Apache SOLR in AEM 6
Apache SOLR in AEM 6Apache SOLR in AEM 6
Apache SOLR in AEM 6
 
Sap java connector / Hybris RFC
Sap java connector / Hybris RFCSap java connector / Hybris RFC
Sap java connector / Hybris RFC
 
Five Strategies for Effortless Customer Service
Five Strategies for Effortless Customer ServiceFive Strategies for Effortless Customer Service
Five Strategies for Effortless Customer Service
 
Adobe Experience Manager - 6th Edition by Cedric Huesler
Adobe Experience Manager - 6th Edition by Cedric HueslerAdobe Experience Manager - 6th Edition by Cedric Huesler
Adobe Experience Manager - 6th Edition by Cedric Huesler
 
Java servlet life cycle - methods ppt
Java servlet life cycle - methods pptJava servlet life cycle - methods ppt
Java servlet life cycle - methods ppt
 
M-Commerce
M-CommerceM-Commerce
M-Commerce
 

Similar to Evolve13 cq-commerce-framework

Intoduction commerceserver2009
Intoduction commerceserver2009Intoduction commerceserver2009
Intoduction commerceserver2009
Tarek Yehia
 
WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...Fabio Franzini
 
EVOLVE'16 | Deploy | Varun Mitra | Introduction to AEM based e-commerce
EVOLVE'16 | Deploy | Varun Mitra | Introduction to AEM based e-commerceEVOLVE'16 | Deploy | Varun Mitra | Introduction to AEM based e-commerce
EVOLVE'16 | Deploy | Varun Mitra | Introduction to AEM based e-commerce
Evolve The Adobe Digital Marketing Community
 
Open Source ERP Technologies for Java Developers
Open Source ERP Technologies for Java DevelopersOpen Source ERP Technologies for Java Developers
Open Source ERP Technologies for Java Developers
cboecking
 
Meet Magento Belarus 2015: Uladzimir Kalashnikau
Meet Magento Belarus 2015: Uladzimir KalashnikauMeet Magento Belarus 2015: Uladzimir Kalashnikau
Meet Magento Belarus 2015: Uladzimir Kalashnikau
Amasty
 
Folio3 - An Introduction to PHP Yii
Folio3 - An Introduction to PHP YiiFolio3 - An Introduction to PHP Yii
Folio3 - An Introduction to PHP Yii
Folio3 Software
 
C# .NET Developer Portfolio
C# .NET Developer PortfolioC# .NET Developer Portfolio
C# .NET Developer Portfoliocummings49
 
E-Bazaar
E-BazaarE-Bazaar
E-Bazaar
ayanthi1
 
IBM Cognos 10 Framework Manager Metadata Modeling: Tips and Tricks
IBM Cognos 10 Framework Manager Metadata Modeling: Tips and TricksIBM Cognos 10 Framework Manager Metadata Modeling: Tips and Tricks
IBM Cognos 10 Framework Manager Metadata Modeling: Tips and Tricks
Senturus
 
Ctools presentation
Ctools presentationCtools presentation
Ctools presentationDigitaria
 
James Jara Portfolio 2014 - Enterprise datagrid - Part 3
James Jara Portfolio 2014  - Enterprise datagrid - Part 3James Jara Portfolio 2014  - Enterprise datagrid - Part 3
James Jara Portfolio 2014 - Enterprise datagrid - Part 3
James Jara
 
Universal Migration Checklist for Developers.pdf
Universal Migration Checklist for Developers.pdfUniversal Migration Checklist for Developers.pdf
Universal Migration Checklist for Developers.pdf
Cart2Cart2
 
Fabian Rousselot - Filemaker Portfolio
Fabian Rousselot - Filemaker PortfolioFabian Rousselot - Filemaker Portfolio
Fabian Rousselot - Filemaker PortfolioFabian Rousselot
 
Simplifi commerce oracle atg commerce & endeca training
Simplifi commerce   oracle atg commerce & endeca trainingSimplifi commerce   oracle atg commerce & endeca training
Simplifi commerce oracle atg commerce & endeca training
Lokesh Kumar
 
SimplifiCommerce - Oracle ATG Commerce & Endeca Training - N
SimplifiCommerce - Oracle ATG Commerce & Endeca Training - NSimplifiCommerce - Oracle ATG Commerce & Endeca Training - N
SimplifiCommerce - Oracle ATG Commerce & Endeca Training - NLokesh Kumar
 
Simplifi commerce oracle atg commerce & endeca training - n
Simplifi commerce   oracle atg commerce & endeca training - nSimplifi commerce   oracle atg commerce & endeca training - n
Simplifi commerce oracle atg commerce & endeca training - n
Lokesh Kumar
 
Connecting Xamarin Apps with IBM Worklight in Bluemix
Connecting Xamarin Apps with IBM Worklight in BluemixConnecting Xamarin Apps with IBM Worklight in Bluemix
Connecting Xamarin Apps with IBM Worklight in Bluemix
IBM
 
Write once, ship multiple times
Write once, ship multiple timesWrite once, ship multiple times
Write once, ship multiple times
Željko Plesac
 
Adobe Analytics training course
Adobe Analytics training courseAdobe Analytics training course
Adobe Analytics training course
Multisoft Virtual Acedamy
 

Similar to Evolve13 cq-commerce-framework (20)

Intoduction commerceserver2009
Intoduction commerceserver2009Intoduction commerceserver2009
Intoduction commerceserver2009
 
WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...
 
EVOLVE'16 | Deploy | Varun Mitra | Introduction to AEM based e-commerce
EVOLVE'16 | Deploy | Varun Mitra | Introduction to AEM based e-commerceEVOLVE'16 | Deploy | Varun Mitra | Introduction to AEM based e-commerce
EVOLVE'16 | Deploy | Varun Mitra | Introduction to AEM based e-commerce
 
Open Source ERP Technologies for Java Developers
Open Source ERP Technologies for Java DevelopersOpen Source ERP Technologies for Java Developers
Open Source ERP Technologies for Java Developers
 
Meet Magento Belarus 2015: Uladzimir Kalashnikau
Meet Magento Belarus 2015: Uladzimir KalashnikauMeet Magento Belarus 2015: Uladzimir Kalashnikau
Meet Magento Belarus 2015: Uladzimir Kalashnikau
 
ElasticPath
ElasticPathElasticPath
ElasticPath
 
Folio3 - An Introduction to PHP Yii
Folio3 - An Introduction to PHP YiiFolio3 - An Introduction to PHP Yii
Folio3 - An Introduction to PHP Yii
 
C# .NET Developer Portfolio
C# .NET Developer PortfolioC# .NET Developer Portfolio
C# .NET Developer Portfolio
 
E-Bazaar
E-BazaarE-Bazaar
E-Bazaar
 
IBM Cognos 10 Framework Manager Metadata Modeling: Tips and Tricks
IBM Cognos 10 Framework Manager Metadata Modeling: Tips and TricksIBM Cognos 10 Framework Manager Metadata Modeling: Tips and Tricks
IBM Cognos 10 Framework Manager Metadata Modeling: Tips and Tricks
 
Ctools presentation
Ctools presentationCtools presentation
Ctools presentation
 
James Jara Portfolio 2014 - Enterprise datagrid - Part 3
James Jara Portfolio 2014  - Enterprise datagrid - Part 3James Jara Portfolio 2014  - Enterprise datagrid - Part 3
James Jara Portfolio 2014 - Enterprise datagrid - Part 3
 
Universal Migration Checklist for Developers.pdf
Universal Migration Checklist for Developers.pdfUniversal Migration Checklist for Developers.pdf
Universal Migration Checklist for Developers.pdf
 
Fabian Rousselot - Filemaker Portfolio
Fabian Rousselot - Filemaker PortfolioFabian Rousselot - Filemaker Portfolio
Fabian Rousselot - Filemaker Portfolio
 
Simplifi commerce oracle atg commerce & endeca training
Simplifi commerce   oracle atg commerce & endeca trainingSimplifi commerce   oracle atg commerce & endeca training
Simplifi commerce oracle atg commerce & endeca training
 
SimplifiCommerce - Oracle ATG Commerce & Endeca Training - N
SimplifiCommerce - Oracle ATG Commerce & Endeca Training - NSimplifiCommerce - Oracle ATG Commerce & Endeca Training - N
SimplifiCommerce - Oracle ATG Commerce & Endeca Training - N
 
Simplifi commerce oracle atg commerce & endeca training - n
Simplifi commerce   oracle atg commerce & endeca training - nSimplifi commerce   oracle atg commerce & endeca training - n
Simplifi commerce oracle atg commerce & endeca training - n
 
Connecting Xamarin Apps with IBM Worklight in Bluemix
Connecting Xamarin Apps with IBM Worklight in BluemixConnecting Xamarin Apps with IBM Worklight in Bluemix
Connecting Xamarin Apps with IBM Worklight in Bluemix
 
Write once, ship multiple times
Write once, ship multiple timesWrite once, ship multiple times
Write once, ship multiple times
 
Adobe Analytics training course
Adobe Analytics training courseAdobe Analytics training course
Adobe Analytics training course
 

More from Paolo Mottadelli

Open Architecture in the Adobe Marketing Cloud - Summit 2014
Open Architecture in the Adobe Marketing Cloud - Summit 2014Open Architecture in the Adobe Marketing Cloud - Summit 2014
Open Architecture in the Adobe Marketing Cloud - Summit 2014
Paolo Mottadelli
 
Java standards in WCM
Java standards in WCMJava standards in WCM
Java standards in WCM
Paolo Mottadelli
 
JCR and Sling Quick Dive
JCR and Sling Quick DiveJCR and Sling Quick Dive
JCR and Sling Quick Dive
Paolo Mottadelli
 
Open Development
Open DevelopmentOpen Development
Open Development
Paolo Mottadelli
 
Apache Poi Recipes
Apache Poi RecipesApache Poi Recipes
Apache Poi Recipes
Paolo Mottadelli
 
Jira as a Project Management Tool
Jira as a Project Management ToolJira as a Project Management Tool
Jira as a Project Management Tool
Paolo Mottadelli
 
Interoperability at Apache Software Foundation
Interoperability at Apache Software FoundationInteroperability at Apache Software Foundation
Interoperability at Apache Software Foundation
Paolo Mottadelli
 
Content Analysis with Apache Tika
Content Analysis with Apache TikaContent Analysis with Apache Tika
Content Analysis with Apache Tika
Paolo Mottadelli
 
Content analysis for ECM with Apache Tika
Content analysis for ECM with Apache TikaContent analysis for ECM with Apache Tika
Content analysis for ECM with Apache Tika
Paolo Mottadelli
 

More from Paolo Mottadelli (9)

Open Architecture in the Adobe Marketing Cloud - Summit 2014
Open Architecture in the Adobe Marketing Cloud - Summit 2014Open Architecture in the Adobe Marketing Cloud - Summit 2014
Open Architecture in the Adobe Marketing Cloud - Summit 2014
 
Java standards in WCM
Java standards in WCMJava standards in WCM
Java standards in WCM
 
JCR and Sling Quick Dive
JCR and Sling Quick DiveJCR and Sling Quick Dive
JCR and Sling Quick Dive
 
Open Development
Open DevelopmentOpen Development
Open Development
 
Apache Poi Recipes
Apache Poi RecipesApache Poi Recipes
Apache Poi Recipes
 
Jira as a Project Management Tool
Jira as a Project Management ToolJira as a Project Management Tool
Jira as a Project Management Tool
 
Interoperability at Apache Software Foundation
Interoperability at Apache Software FoundationInteroperability at Apache Software Foundation
Interoperability at Apache Software Foundation
 
Content Analysis with Apache Tika
Content Analysis with Apache TikaContent Analysis with Apache Tika
Content Analysis with Apache Tika
 
Content analysis for ECM with Apache Tika
Content analysis for ECM with Apache TikaContent analysis for ECM with Apache Tika
Content analysis for ECM with Apache Tika
 

Recently uploaded

dilan 1990 movie riview.pptx untuk mata kuliah
dilan 1990 movie  riview.pptx untuk mata kuliahdilan 1990 movie  riview.pptx untuk mata kuliah
dilan 1990 movie riview.pptx untuk mata kuliah
zarraashivaa
 
Gujarat Details in Hindi for children's for presentation in school
Gujarat Details in Hindi for children's for presentation in schoolGujarat Details in Hindi for children's for presentation in school
Gujarat Details in Hindi for children's for presentation in school
shouryajoshi5
 
The Fascinating World of Bats: Unveiling the Secrets of the Night
The Fascinating World of Bats: Unveiling the Secrets of the NightThe Fascinating World of Bats: Unveiling the Secrets of the Night
The Fascinating World of Bats: Unveiling the Secrets of the Night
thomasard1122
 
Types of Garage Doors Explained: Energy Efficiency, Style, and More
Types of Garage Doors Explained: Energy Efficiency, Style, and MoreTypes of Garage Doors Explained: Energy Efficiency, Style, and More
Types of Garage Doors Explained: Energy Efficiency, Style, and More
Affordable Garage Door Repair
 
La transidentité, un sujet qui fractionne les Français
La transidentité, un sujet qui fractionne les FrançaisLa transidentité, un sujet qui fractionne les Français
La transidentité, un sujet qui fractionne les Français
Ipsos France
 
EXPERIENCE MONSTER BITES STREETWEAR APPAREL
EXPERIENCE MONSTER BITES STREETWEAR APPARELEXPERIENCE MONSTER BITES STREETWEAR APPAREL
EXPERIENCE MONSTER BITES STREETWEAR APPAREL
6ctbkfpdxz
 
Understanding the Mahadasha of Shukra (Venus): Effects and Remedies
Understanding the Mahadasha of Shukra (Venus): Effects and RemediesUnderstanding the Mahadasha of Shukra (Venus): Effects and Remedies
Understanding the Mahadasha of Shukra (Venus): Effects and Remedies
Astro Pathshala
 
30 Manipulation Techniques to be a smart person in society (1).pdf
30 Manipulation Techniques to be a smart person in society (1).pdf30 Manipulation Techniques to be a smart person in society (1).pdf
30 Manipulation Techniques to be a smart person in society (1).pdf
minaserver6679
 
MRS PUNE 2024 - WINNER AMRUTHAA UTTAM JAGDHANE
MRS PUNE 2024 - WINNER AMRUTHAA UTTAM JAGDHANEMRS PUNE 2024 - WINNER AMRUTHAA UTTAM JAGDHANE
MRS PUNE 2024 - WINNER AMRUTHAA UTTAM JAGDHANE
DK PAGEANT
 
Care Instructions for Activewear & Swim Suits.pdf
Care Instructions for Activewear & Swim Suits.pdfCare Instructions for Activewear & Swim Suits.pdf
Care Instructions for Activewear & Swim Suits.pdf
sundazesurf80
 

Recently uploaded (10)

dilan 1990 movie riview.pptx untuk mata kuliah
dilan 1990 movie  riview.pptx untuk mata kuliahdilan 1990 movie  riview.pptx untuk mata kuliah
dilan 1990 movie riview.pptx untuk mata kuliah
 
Gujarat Details in Hindi for children's for presentation in school
Gujarat Details in Hindi for children's for presentation in schoolGujarat Details in Hindi for children's for presentation in school
Gujarat Details in Hindi for children's for presentation in school
 
The Fascinating World of Bats: Unveiling the Secrets of the Night
The Fascinating World of Bats: Unveiling the Secrets of the NightThe Fascinating World of Bats: Unveiling the Secrets of the Night
The Fascinating World of Bats: Unveiling the Secrets of the Night
 
Types of Garage Doors Explained: Energy Efficiency, Style, and More
Types of Garage Doors Explained: Energy Efficiency, Style, and MoreTypes of Garage Doors Explained: Energy Efficiency, Style, and More
Types of Garage Doors Explained: Energy Efficiency, Style, and More
 
La transidentité, un sujet qui fractionne les Français
La transidentité, un sujet qui fractionne les FrançaisLa transidentité, un sujet qui fractionne les Français
La transidentité, un sujet qui fractionne les Français
 
EXPERIENCE MONSTER BITES STREETWEAR APPAREL
EXPERIENCE MONSTER BITES STREETWEAR APPARELEXPERIENCE MONSTER BITES STREETWEAR APPAREL
EXPERIENCE MONSTER BITES STREETWEAR APPAREL
 
Understanding the Mahadasha of Shukra (Venus): Effects and Remedies
Understanding the Mahadasha of Shukra (Venus): Effects and RemediesUnderstanding the Mahadasha of Shukra (Venus): Effects and Remedies
Understanding the Mahadasha of Shukra (Venus): Effects and Remedies
 
30 Manipulation Techniques to be a smart person in society (1).pdf
30 Manipulation Techniques to be a smart person in society (1).pdf30 Manipulation Techniques to be a smart person in society (1).pdf
30 Manipulation Techniques to be a smart person in society (1).pdf
 
MRS PUNE 2024 - WINNER AMRUTHAA UTTAM JAGDHANE
MRS PUNE 2024 - WINNER AMRUTHAA UTTAM JAGDHANEMRS PUNE 2024 - WINNER AMRUTHAA UTTAM JAGDHANE
MRS PUNE 2024 - WINNER AMRUTHAA UTTAM JAGDHANE
 
Care Instructions for Activewear & Swim Suits.pdf
Care Instructions for Activewear & Swim Suits.pdfCare Instructions for Activewear & Swim Suits.pdf
Care Instructions for Activewear & Swim Suits.pdf
 

Evolve13 cq-commerce-framework

  • 1. AEM Commerce Framework Paolo Mottadelli - Sr. Mgr. Technical Marketing @paolomoz Adobe® Marketing Cloud Adobe® Experience Manager
  • 2. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Architecture of the framework 1
  • 3. Commerce Integrated Platform JCR repo product DB Experience Manager PIM/ecommerce surfer content editor PIM editor 1 2 PIM synch 3 4 dynamic PIM
  • 4. Commerce Integrated Platform surfer content editor PIM editor 1. Product display component 2. Shopping cart 3. Promotions and vouchers 4. Catalog blueprints 5. Check-out 6. Search 1. Product information integrity 2. Pricing 3. Stock-keeping inventory 4.Variations on shopping cart
  • 5. AEM eCommerce Integration Modules 1. The integration framework (API used for eCommerce implementations) 2. AEM native (JCR) implementation 3. hybris implementation 4. A number of out-of-the-box AEM components 5. Search (AEM, eCommerce, 3rd party) 6. Catalog management 7. Promotions management 8. Client context cart store JCR repo product DB Experience Manager PIM/ecommerce
  • 6. Architecture of the Commerce Framework AEM Commerce API Implementation AEM Commerce Components AEM native impl JCR Repository hybris impl hybris DB other impl other
  • 7. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Commerce providers With code samples 2
  • 8. eCommerce Engine Selection CommerceService commerceService = resource.adaptTo(CommerceService.class); CommerceSession session = commerceService.login(slingRequest, slingResponse); Product baseProduct = resource.adaptTo(Product.class); GeoImpl (geometrixx) hybrisImpl (hybris) otherImpl (xyz) Site Component OSGi container bundle bundlebundle cq:commerceProvider = geometrixx 1 2 3
  • 10. TrainingCommerceServiceFactory @Component(metatype = true, label = "Day CQ Commerce Factory for Training") @Service @Properties(value = { @Property(name = "service.description", value = "Factory for training commerce service"), @Property(name = "commerceProvider", value = "training") }) public class TrainingCommerceServiceFactory extends AbstractJcrCommerceServiceFactory implements CommerceServiceFactory { public CommerceService getCommerceService(Resource res) { return new TrainingCommerceServiceImpl(getServices(), res); } }
  • 11. Commerce Factory OSGi configuration
  • 12. TrainingCommerceServiceImpl public class TrainingCommerceServiceImpl extends AbstractJcrCommerceService implements CommerceService { [...] public CommerceSession login(SlingHttpServletRequest request, SlingHttpServletResponse response) throws CommerceException { return new TrainingCommerceSessionImpl(this, request, response, resource); } public Product getProduct(final String path) throws CommerceException { [...] return new TrainingProductImpl(resource); [...] }
  • 13. TrainingCommerceSessionImpl public class TrainingCommerceSessionImpl extends AbstractJcrCommerceSession { [..] }
  • 14. TrainingCommerceSessionImpl public class TrainingCommerceSessionImpl extends AbstractJcrCommerceSession { protected void loadCart() protected void saveCart() public String getProductPrice(Product product) public String getCartPrice(Predicate filter) protected void doAddCartEntry(Product product, int quantity) protected void calcCart() public List<Promotion> getActivePromotions() protected void calcOrder() }
  • 15. TrainingCommerceServiceFactory public class TrainingProductImpl extends AbstractJcrProduct { [...] public String getSKU() { return "todo-get-sku-method"; } }
  • 16. eCommerce Engine Selection CommerceService commerceService = resource.adaptTo(CommerceService.class); CommerceSession session = commerceService.login(slingRequest, slingResponse); Product baseProduct = resource.adaptTo(Product.class); GeoImpl (geometrixx) hybrisImpl (hybris) trainingImpl (training) Site Component OSGi container bundle bundlebundle cq:commerceProvider = training 1 2 3
  • 17. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. (more on) CommerceSession With code samples 3
  • 18. •updateOrderDetails(Map<String, String> orderDetails); •getOrderDetails(); •submitOrder(); CommerceSession responsibilities • addCartEntry(Product product, int quantity); • modifyCartEntry(int entryNumber, int quantity); • deleteCartEntry(int entryNumber); •updateOrderDetails(Map<String, String> orderDetails); •getOrderDetails(); •submitOrder(); cart content pricing order details 1 2 3 •getPromotions(); •addVoucher(String code); •removeVoucher(String code); promotions3
  • 20. CommerceSession is RESTful style (2) ORDER%3a%3dorderId%253d9c1346bf-3813-4205-80ec-2fdfd1644143%7cCART%3a %3dquantity3%253d1%252cquantity0%253d1%252cquantity1%253d1%252cpromotionCoun t%253d2%252cquantity2%253d1%252cvoucherCount%253d0%252cpromotion1%253d %252fcontent%252fcampaigns%252fgeometrixx-outdoors%252fcosy-up-to-winter %252fwinter-female%252fcosy-companions%252cpromotion0%253d%252fcontent %252fcampaigns%252fgeometrixx-outdoors%252fbig-spender %252fordervalueover100%252ffree-shipping%252cproduct3%253d%252fcontent %252fgeometrixx-outdoors%252fen%252fequipment%252fskiing%252fhalifax-winter %252fjcr%253acontent%252fpar%252fproduct%252cproduct0%253d%252fcontent %252fgeometrixx-outdoors%252fen%252fwomen%252fcoats%252fcalgary-winter%252fjcr %253acontent%252fpar%252fproduct%252f397122-s%252cproduct2%253d%252fcontent %252fgeometrixx-outdoors%252fen%252fseasonal%252fwinter%252fequipment %252fkamloops-snow%252fjcr%253acontent%252fpar%252fproduct %252f37924450-7%252centryCount%253d4%252cproduct1%253d%252fcontent %252fgeometrixx-outdoors%252fen%252fequipment%252fskiing%252fkelowna-snow %252fjcr%253acontent%252fpar%252fproduct%7c Name: CommercePersistence, Host: geometrixx.com, Path: /
  • 21. CommerceSession is RESTful style (3) protected void loadCart() { [...] // // Load cart from the cookie: // Map<String, String> cartStore = ContextSessionPersistence.getStore(request, "CART", CommerceConstants.COMMERCE_COOKIE_NAME); [...] }
  • 22. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Managing products Includes solutions for scalability, performance, etc.. 4
  • 23. Products and Variants architecture: - variant - color: purple - id: 397122.1 - variant - size: S - variant - size: L - variant - size: M - variant - size: XL - variant - color: purple -id: 397122.2 - price: 199 - variant - size: S - variant - size: L - variant - size: M - variant - size: XL - type: product - axes: color, size - id: 397122 - title: Saskatoon - price: 299 1 1 1 1 1 1 1 1 1 1 1
  • 24. Product interface public interface Product extends Adaptable { public String getPath(); // path to specific variation public String getPagePath(); // path to presentation page for all variations public String getSKU(); // unique ID of specific variation public String getTitle(); // shortcut to getProperty(TITLE) public String getDescription(); // shortcut to getProperty(DESCRIPTION) public String getImageUrl(); // shortcut to getProperty(IMAGE_URL) public String getThumbnailUrl(); // shortcut to getProperty(THUMBNAIL_URL) public <T> T getProperty(String name, Class<T> type); public Iterator<String> getVariantAxes(); public boolean axisIsVariant(String axis); public Iterator<Product> getVariants(VariantFilter filter) throws CommerceException; }
  • 25. AxisFilter implements VariantFilter public class AxisFilter implements VariantFilter { ... public boolean includes(Product product) { ValueMap values = product.adaptTo(ValueMap.class); if(values != null) { String v = values.get(axis, String.class); return v != null && v == value; } return false; } }
  • 26. Product Data admin UI •Double click from Content Finder to open •Based on Scaffolding •Create/Change data in /etc/commerce/products •Can change destination path from Scaffolding page •Can navigate and change variants (overrides higher level data) 5.6.1
  • 27. PIM Data & Product References 1 1 1 1 1 1 1 1 1 1 1 1 /etc/commerce/products 2 /content
  • 28. Proxy Product Pages make editable 2 nodes 10 nodes 5.6.1
  • 29. Hardening Product Importer •ROBUSTNESS: product importer more flexible with products/variants •EXTENSIBILITY: abstracted-out common parts of product importer •PERFORMANCE: importing 1000s products takes 80% less •SCALABILITY: support flat hierarchies through bucketing, proxy pages, scalable search 5.6.1
  • 30. Catalog Generation V2 •Regional Catalog support (based on MSM) •Catalog Design Changes support •Custom Catalog Pages support •Blueprint & Catalog converter for 5.6.0 to current 5.6.1
  • 31. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Shopping cart 5
  • 32. Shopping Cart architecture (CommerceSession) The CommerceSession performs add, remove, etc. The CommerceSession also performs the various calculations on the cart. The CommerceSession also applies vouchers and promotions that have fired to the cart. Pricing modifiers: - Quantity discounts. - Different currencies. - VAT-liable and VAT-free.
  • 33. session.calcCart() protected void calcCart() { ... for (int i = 0; i < cart.size(); i++) { ... for (Promotion p : promotions) { try { PromotionHandler ph = p.adaptTo(PromotionHandler.class); PriceInfo discount = ph.applyCartEntryPromotion(this, p, entry); if (discount != null && discount.getAmount().compareTo(BigDecimal.ZERO) > 0) { ... entry.calcPrices(); ... } ... cartTotalPrice = cartTotalPrice.add(entry.getPriceInfo(new PriceFilter("POST_TAX", currencyCode)).get(0).getAmount()); } setPrice(new PriceInfo(cartPreTaxPrice, currency), "CART", "PRE_TAX"); setPrice(new PriceInfo(cartTax, currency), "CART", "TAX"); setPrice(new PriceInfo(cartTotalPrice, currency), "CART", "POST_TAX"); ... }
  • 34. Shopping Cart architecture (Storage) In AEM-native carts are stored in the ClientContext Personalization should always be driven through the ClientContext. CommerceSession.addCartEntry()
  • 35. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Checkout 6
  • 36. Checkout architecture (order details) Order details are not fixed by the API: updateOrderDetails(Map<String, String> orderDetails); Shipping options (and prices) depend on weight, delivery address, etc... The CommerceSession owns shipping pricing; to retrieve and update delivery details: updateOrder(Map<String, Object> delta)
  • 37. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. 7 Adobe &
  • 38. hybris integration: product data flow hybris: Omni Commerce Connect CQ: /etc/commerce/products CQ: /content/site hybris importer catalog publishing
  • 39. hybris integration: product data display JCR repo CQ hybris CQ hybris importer CQ component volatile data PIM data
  • 40. hybris integration: user synchronisation •Lazy import of hybris users into CQ •Lazy creation of CQ users in hybris •CQ stores hybris authentication data for later re-use •Pluggable architecture for custom authentication schemes (SAML, OAuth)
  • 41. hybris integration: customising the product import process •Need to add PIM attributes? Extend HybrisResponseParser. •Need to change the imported data hierarchy? Extend ImportHandler. •Need to customize what services are called when importing data? Extend HybrisImporter.
  • 42. hybris integration: customising the user import process •ProfileSynchronizer#syncProfile is responsible for sync the user’s CQ profile to the respective hybris account
  • 43. hybris integration: customising product and price loading •HybrisFactory#getProduct is responsible for creating Product instances •HybrisSession#getProductPriceInfo is responsible for getting the correct price for a product for the current user
  • 44. hybris integration: how to install AEM 5.6.1 3 cq-hybris-content 5.6.22 cq-hybris-server 5.6.01 cq-geometrixx-hybris-content 5.6.100 install packages 5.6.1
  • 45. hybris with AEM 5.6.1 •Supports hybris 5.0 •hybris 5.0 server embedded by default •Backward compatible with hybris 4.8.1 •Geometrixx-specific hybris connector •Extend the default hybris components to a specific implementation; •Remove internal references in the hybris components to allow for better extensibility •hybris connector source code included in the content package 5.6.1