SlideShare ist ein Scribd-Unternehmen logo
1 von 47
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Was ist angesagt?

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
AEM HUB
 

Was ist angesagt? (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
 

Andere mochten auch

Web Tech Java Servlet Update1
Web Tech   Java Servlet Update1Web Tech   Java Servlet Update1
Web Tech Java Servlet Update1
vikram singh
 
e-Eommerce - Framework
e-Eommerce -  Frameworke-Eommerce -  Framework
e-Eommerce - Framework
Snehasish Mandal
 
Adobe_Campaign_Overview
Adobe_Campaign_OverviewAdobe_Campaign_Overview
Adobe_Campaign_Overview
Alex Pepicelli
 
Sap java connector / Hybris RFC
Sap java connector / Hybris RFCSap java connector / Hybris RFC
Sap java connector / Hybris RFC
Monsif Elaissoussi
 
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
AEM HUB
 

Andere mochten auch (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
 

Ähnlich wie Evolve13 cq-commerce-framework

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
 
ElasticPath
ElasticPathElasticPath
ElasticPath
eric_muguet
 
C# .NET Developer Portfolio
C# .NET Developer PortfolioC# .NET Developer Portfolio
C# .NET Developer Portfolio
cummings49
 
Ctools presentation
Ctools presentationCtools presentation
Ctools presentation
Digitaria
 
Fabian Rousselot - Filemaker Portfolio
Fabian Rousselot - Filemaker PortfolioFabian Rousselot - Filemaker Portfolio
Fabian Rousselot - Filemaker Portfolio
Fabian Rousselot
 
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
Lokesh Kumar
 

Ähnlich wie 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
 
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
 
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
 
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
 

Mehr von Paolo Mottadelli

Mehr von 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
 

KĂźrzlich hochgeladen

All Hotel Karnal Call Girls 08168329307 Noor Mahal Karnal Escort Service
All Hotel Karnal Call Girls 08168329307 Noor Mahal Karnal Escort ServiceAll Hotel Karnal Call Girls 08168329307 Noor Mahal Karnal Escort Service
All Hotel Karnal Call Girls 08168329307 Noor Mahal Karnal Escort Service
Apsara Of India
 
Private : +91 9999965857 Affairs: Paschim Vihar Call Girls {{ Monika}} Delh...
Private : +91 9999965857 Affairs: Paschim Vihar Call Girls  {{ Monika}}  Delh...Private : +91 9999965857 Affairs: Paschim Vihar Call Girls  {{ Monika}}  Delh...
Private : +91 9999965857 Affairs: Paschim Vihar Call Girls {{ Monika}} Delh...
Call Girls In Delhi Whatsup 9873940964 Enjoy Unlimited Pleasure
 
💞5✨ Hotel Karnal Call Girls 08168329307 Noor Mahal Karnal Escort Service
💞5✨ Hotel Karnal Call Girls 08168329307 Noor Mahal Karnal Escort Service💞5✨ Hotel Karnal Call Girls 08168329307 Noor Mahal Karnal Escort Service
💞5✨ Hotel Karnal Call Girls 08168329307 Noor Mahal Karnal Escort Service
Apsara Of India
 
Call Girls In Goa 7028418221 Call Girls In Colva Beach Escorts Service
Call Girls In Goa 7028418221 Call Girls In Colva Beach Escorts ServiceCall Girls In Goa 7028418221 Call Girls In Colva Beach Escorts Service
Call Girls In Goa 7028418221 Call Girls In Colva Beach Escorts Service
Apsara Of India
 
💕COD Call Girls In Kurukshetra 08168329307 Pehowa Escort Service
💕COD Call Girls In Kurukshetra 08168329307 Pehowa Escort Service💕COD Call Girls In Kurukshetra 08168329307 Pehowa Escort Service
💕COD Call Girls In Kurukshetra 08168329307 Pehowa Escort Service
Apsara Of India
 
VIP 💞🌷Call Girls In Karnal 08168329307 Escorts Service Nilokheri Call Girls
VIP 💞🌷Call Girls In Karnal 08168329307 Escorts Service Nilokheri Call GirlsVIP 💞🌷Call Girls In Karnal 08168329307 Escorts Service Nilokheri Call Girls
VIP 💞🌷Call Girls In Karnal 08168329307 Escorts Service Nilokheri Call Girls
Apsara Of India
 
Russian BINDASH Call Girls In Mahipalpur Delhi ☎️9711199012
Russian BINDASH Call Girls In Mahipalpur Delhi ☎️9711199012Russian BINDASH Call Girls In Mahipalpur Delhi ☎️9711199012
Russian BINDASH Call Girls In Mahipalpur Delhi ☎️9711199012
Mona Rathore
 
💞Sexy Call Girls In Ambala 08168329307 Shahabad Call Girls Escort Service
💞Sexy Call Girls In Ambala 08168329307 Shahabad Call Girls Escort Service💞Sexy Call Girls In Ambala 08168329307 Shahabad Call Girls Escort Service
💞Sexy Call Girls In Ambala 08168329307 Shahabad Call Girls Escort Service
Apsara Of India
 
Chandigarh Escort Service 📞9878281761📞 Just📲 Call Navi Chandigarh Call Girls ...
Chandigarh Escort Service 📞9878281761📞 Just📲 Call Navi Chandigarh Call Girls ...Chandigarh Escort Service 📞9878281761📞 Just📲 Call Navi Chandigarh Call Girls ...
Chandigarh Escort Service 📞9878281761📞 Just📲 Call Navi Chandigarh Call Girls ...
Sheetaleventcompany
 
Zirakpur Call Girls👧 Book Now📱8146719683 📞👉Mohali Call Girl Service No Advanc...
Zirakpur Call Girls👧 Book Now📱8146719683 📞👉Mohali Call Girl Service No Advanc...Zirakpur Call Girls👧 Book Now📱8146719683 📞👉Mohali Call Girl Service No Advanc...
Zirakpur Call Girls👧 Book Now📱8146719683 📞👉Mohali Call Girl Service No Advanc...
rajveermohali2022
 
Call Girls Service In Udaipur 9602870969 Sajjangarh Udaipur EsCoRtS
Call Girls Service In Udaipur 9602870969 Sajjangarh Udaipur EsCoRtSCall Girls Service In Udaipur 9602870969 Sajjangarh Udaipur EsCoRtS
Call Girls Service In Udaipur 9602870969 Sajjangarh Udaipur EsCoRtS
Apsara Of India
 

KĂźrzlich hochgeladen (20)

All Hotel Karnal Call Girls 08168329307 Noor Mahal Karnal Escort Service
All Hotel Karnal Call Girls 08168329307 Noor Mahal Karnal Escort ServiceAll Hotel Karnal Call Girls 08168329307 Noor Mahal Karnal Escort Service
All Hotel Karnal Call Girls 08168329307 Noor Mahal Karnal Escort Service
 
Private : +91 9999965857 Affairs: Paschim Vihar Call Girls {{ Monika}} Delh...
Private : +91 9999965857 Affairs: Paschim Vihar Call Girls  {{ Monika}}  Delh...Private : +91 9999965857 Affairs: Paschim Vihar Call Girls  {{ Monika}}  Delh...
Private : +91 9999965857 Affairs: Paschim Vihar Call Girls {{ Monika}} Delh...
 
The Clean Living Project Episode 17 - Blue Zones
The Clean Living Project Episode 17 - Blue ZonesThe Clean Living Project Episode 17 - Blue Zones
The Clean Living Project Episode 17 - Blue Zones
 
"Maximizing your savings:The power of financial planning".pptx
"Maximizing your savings:The power of financial planning".pptx"Maximizing your savings:The power of financial planning".pptx
"Maximizing your savings:The power of financial planning".pptx
 
Hire 💕 8617697112 Pulwama Call Girls Service Call Girls Agency
Hire 💕 8617697112 Pulwama Call Girls Service Call Girls AgencyHire 💕 8617697112 Pulwama Call Girls Service Call Girls Agency
Hire 💕 8617697112 Pulwama Call Girls Service Call Girls Agency
 
UDAIPUR CALL GIRLS 96O287O969 CALL GIRL IN UDAIPUR ESCORT SERVICE
UDAIPUR CALL GIRLS 96O287O969 CALL GIRL IN UDAIPUR ESCORT SERVICEUDAIPUR CALL GIRLS 96O287O969 CALL GIRL IN UDAIPUR ESCORT SERVICE
UDAIPUR CALL GIRLS 96O287O969 CALL GIRL IN UDAIPUR ESCORT SERVICE
 
💞5✨ Hotel Karnal Call Girls 08168329307 Noor Mahal Karnal Escort Service
💞5✨ Hotel Karnal Call Girls 08168329307 Noor Mahal Karnal Escort Service💞5✨ Hotel Karnal Call Girls 08168329307 Noor Mahal Karnal Escort Service
💞5✨ Hotel Karnal Call Girls 08168329307 Noor Mahal Karnal Escort Service
 
VIP Model Call Girls Buldhana Call ON 8617697112 Starting From 5K to 25K High...
VIP Model Call Girls Buldhana Call ON 8617697112 Starting From 5K to 25K High...VIP Model Call Girls Buldhana Call ON 8617697112 Starting From 5K to 25K High...
VIP Model Call Girls Buldhana Call ON 8617697112 Starting From 5K to 25K High...
 
Call Girls In Goa 7028418221 Call Girls In Colva Beach Escorts Service
Call Girls In Goa 7028418221 Call Girls In Colva Beach Escorts ServiceCall Girls In Goa 7028418221 Call Girls In Colva Beach Escorts Service
Call Girls In Goa 7028418221 Call Girls In Colva Beach Escorts Service
 
💕COD Call Girls In Kurukshetra 08168329307 Pehowa Escort Service
💕COD Call Girls In Kurukshetra 08168329307 Pehowa Escort Service💕COD Call Girls In Kurukshetra 08168329307 Pehowa Escort Service
💕COD Call Girls In Kurukshetra 08168329307 Pehowa Escort Service
 
VIP 💞🌷Call Girls In Karnal 08168329307 Escorts Service Nilokheri Call Girls
VIP 💞🌷Call Girls In Karnal 08168329307 Escorts Service Nilokheri Call GirlsVIP 💞🌷Call Girls In Karnal 08168329307 Escorts Service Nilokheri Call Girls
VIP 💞🌷Call Girls In Karnal 08168329307 Escorts Service Nilokheri Call Girls
 
Russian BINDASH Call Girls In Mahipalpur Delhi ☎️9711199012
Russian BINDASH Call Girls In Mahipalpur Delhi ☎️9711199012Russian BINDASH Call Girls In Mahipalpur Delhi ☎️9711199012
Russian BINDASH Call Girls In Mahipalpur Delhi ☎️9711199012
 
Call Girls in Bangalore Prachi 💋9136956627 Bangalore Call Girls
Call Girls in  Bangalore Prachi 💋9136956627 Bangalore Call GirlsCall Girls in  Bangalore Prachi 💋9136956627 Bangalore Call Girls
Call Girls in Bangalore Prachi 💋9136956627 Bangalore Call Girls
 
Jumeirah Call Girls Dubai Concupis O528786472 Dubai Call Girls In Bur Dubai N...
Jumeirah Call Girls Dubai Concupis O528786472 Dubai Call Girls In Bur Dubai N...Jumeirah Call Girls Dubai Concupis O528786472 Dubai Call Girls In Bur Dubai N...
Jumeirah Call Girls Dubai Concupis O528786472 Dubai Call Girls In Bur Dubai N...
 
💞Sexy Call Girls In Ambala 08168329307 Shahabad Call Girls Escort Service
💞Sexy Call Girls In Ambala 08168329307 Shahabad Call Girls Escort Service💞Sexy Call Girls In Ambala 08168329307 Shahabad Call Girls Escort Service
💞Sexy Call Girls In Ambala 08168329307 Shahabad Call Girls Escort Service
 
Top 10 Makeup Brands in India for women
Top 10  Makeup Brands in India for womenTop 10  Makeup Brands in India for women
Top 10 Makeup Brands in India for women
 
Chandigarh Escort Service 📞9878281761📞 Just📲 Call Navi Chandigarh Call Girls ...
Chandigarh Escort Service 📞9878281761📞 Just📲 Call Navi Chandigarh Call Girls ...Chandigarh Escort Service 📞9878281761📞 Just📲 Call Navi Chandigarh Call Girls ...
Chandigarh Escort Service 📞9878281761📞 Just📲 Call Navi Chandigarh Call Girls ...
 
Zirakpur Call Girls👧 Book Now📱8146719683 📞👉Mohali Call Girl Service No Advanc...
Zirakpur Call Girls👧 Book Now📱8146719683 📞👉Mohali Call Girl Service No Advanc...Zirakpur Call Girls👧 Book Now📱8146719683 📞👉Mohali Call Girl Service No Advanc...
Zirakpur Call Girls👧 Book Now📱8146719683 📞👉Mohali Call Girl Service No Advanc...
 
High Class Call Girls in Bangalore 📱9136956627📱
High Class Call Girls in Bangalore 📱9136956627📱High Class Call Girls in Bangalore 📱9136956627📱
High Class Call Girls in Bangalore 📱9136956627📱
 
Call Girls Service In Udaipur 9602870969 Sajjangarh Udaipur EsCoRtS
Call Girls Service In Udaipur 9602870969 Sajjangarh Udaipur EsCoRtSCall Girls Service In Udaipur 9602870969 Sajjangarh Udaipur EsCoRtS
Call Girls Service In Udaipur 9602870969 Sajjangarh Udaipur EsCoRtS
 

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