SlideShare una empresa de Scribd logo
1 de 22
Descargar para leer sin conexión
Paolo Mottadelli
Adobe Technical Marketing      eCommerce
                               Integration Framework
CQ Gems




   Adobe® Experience Manager

   Adobe® Marketing Cloud
Commerce Integrated Platform

                                       dynamic PIM
                surfer

            1                      4                                      2

            Experience Manager                       PIM/ecommerce

                   JCR repo                          3   product DB


                  content editor                             PIM editor
                                         PIM synch
Commerce Integrated Platform


               surfer


            1. Product display component   1. Product information integrity
            2. Shopping cart               2. Pricing
            3. Promotions and vouchers     3. Stock-keeping inventory
            4. Catalog blueprints          4. Variations on shopping cart
            5. Check-out
            6. Search




                  content editor                          PIM editor
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                              Experience Manager   PIM/ecommerce
8. Client context cart store
                                                           JCR repo          product DB
Architecture of the Commerce Framework



                       AEM Commerce Components


                              AEM Commerce API


                               Implementation
           AEM native impl         hybris impl   other impl

             JCR Repository         hybris DB      other
eCommerce Engine Selection

                Site                                        Component
                                                     CommerceService commerceService =
                                       2           resource.adaptTo(CommerceService.class);

                                                     CommerceSession session =
                                            commerceService.login(slingRequest, slingResponse);

                                           Product baseProduct = resource.adaptTo(Product.class);
                                             3



                                                           OSGi container
                                                  bundle                            bundle
        1
                                                 GeoImpl           bundle         otherImpl
    cq:commerceProvider = geometrixx         (geometrixx)       hybrisImpl           (xyz)
                                                                  (hybris)
CommerceSession


   • addCartEntry(Product product, int quantity);
   • modifyCartEntry(int entryNumber, int quantity);        cart content
   • deleteCartEntry(int entryNumber);



   •updateOrderDetails(Map<String, String> orderDetails);
   •getOrderDetails();                                         pricing
   •submitOrder();



   •updateOrderDetails(Map<String, String> orderDetails);
   •getOrderDetails();                                      order details
   •submitOrder();
CommerceSession is RESTful style (1)
CommerceSession is RESTful style (2)

          Name: CommercePersistence, Host: geometrixx.com, Path: /
          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
CommerceSession is RESTful style (3)




public class AbstractJcrCommerceSession implements CommerceSession {
    ...
    cartStore = ContextSessionPersistence.getStore(request, "CART", CommerceConstants.COMMERCE_COOKIE_NAME);
    ...
}
Products and Variants architecture:

     1
                                 1                      1           1
         - type: product              - variant         - variant   - variant
         - axes: color, size          - color: purple   - size: S   - size: M
         - id: 397122                 - id: 397122.1
         - title: Saskatoon                             1           1
         - price: 299                                   - variant   - variant
                                                        - size: L   - size: XL

                                 1                      1           1
                                      - variant         - variant   - variant
                                      - color: purple   - size: S   - size: M
                                      -id: 397122.2     1           1
                                      - price: 199
                                                        - variant   - variant
                                                        - size: L   - size: XL
PIM Data & Product References



   1    /etc/commerce/products   2   /content
                   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;
    }
}
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()
Checkout architecture
Cart and Order Data

The CommerceSession owns the three elements:

  Cart contents
  Pricing
  The order details

  Cart contents

  The cart contents schema is fixed by the API:

  public void addCartEntry(Product product, int quantity);
  public void modifyCartEntry(int entryNumber, int quantity);
  public void deleteCartEntry(int entryNumber);

  Pricing

  The pricing schema is also fixed by the API:

  public String getCartPreTaxPrice();
  public String getCartTax();
  public String getCartTotalPrice();
  public String getOrderShipping();
  public String getOrderTotalTax();
  public String getOrderTotalPrice();
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)
Hands on
Defining the scope




1. Build a new Commerce Implementation: “training”

2. Apply the new implementation to Geometrixx Outdoors

3. Store the cart data in the repository (/home/users/a/admin/commerce/cart)
adobe.com/go/gems
     @CQDev

Más contenido relacionado

Similar a Here are the steps to build a new Commerce Implementation in AEM:1. Define the scope of the implementation. What eCommerce platform or systems will it integrate with? Will it be a custom or open-source implementation? 2. Choose an implementation technology. Options include Java, Node.js, etc. This will depend on what technologies the eCommerce platform uses.3. Implement the Commerce API. Create Java classes that implement the required interfaces like CommerceSession, Product, etc. 4. Configure OSGi services. Register the implementation as an OSGi service for the commerceProvider configuration.5. Develop AEM components. Build components to display products, cart, checkout, etc that use

Real-Time Personalized Customer Experiences at Bonobos (RET203) - AWS re:Inve...
Real-Time Personalized Customer Experiences at Bonobos (RET203) - AWS re:Inve...Real-Time Personalized Customer Experiences at Bonobos (RET203) - AWS re:Inve...
Real-Time Personalized Customer Experiences at Bonobos (RET203) - AWS re:Inve...Amazon Web Services
 
APIs for catalogs
APIs for catalogsAPIs for catalogs
APIs for catalogsX.commerce
 
Relevance trilogy may dream be with you! (dec17)
Relevance trilogy  may dream be with you! (dec17)Relevance trilogy  may dream be with you! (dec17)
Relevance trilogy may dream be with you! (dec17)Woonsan Ko
 
Decoupled Days 2019: Delivering Headless Commerce
Decoupled Days 2019: Delivering Headless CommerceDecoupled Days 2019: Delivering Headless Commerce
Decoupled Days 2019: Delivering Headless CommerceMatt Glaman
 
Developing enterprise ecommerce solutions using hybris by Drazen Nikolic - Be...
Developing enterprise ecommerce solutions using hybris by Drazen Nikolic - Be...Developing enterprise ecommerce solutions using hybris by Drazen Nikolic - Be...
Developing enterprise ecommerce solutions using hybris by Drazen Nikolic - Be...youngculture
 
Hexagonal at Scale, with DDD and microservices! - Voxxed Days microservices 2...
Hexagonal at Scale, with DDD and microservices! - Voxxed Days microservices 2...Hexagonal at Scale, with DDD and microservices! - Voxxed Days microservices 2...
Hexagonal at Scale, with DDD and microservices! - Voxxed Days microservices 2...Cyrille Martraire
 
Holiday Extras journey to the cloud
Holiday Extras journey to the cloudHoliday Extras journey to the cloud
Holiday Extras journey to the cloudNilan Peiris
 
Object Oriented Programming 2 (C#)
Object Oriented Programming 2 (C#) Object Oriented Programming 2 (C#)
Object Oriented Programming 2 (C#) Tanveer Ahmed
 
Personalized Search on the Largest Flash Sale Site in America
Personalized Search on the Largest Flash Sale Site in AmericaPersonalized Search on the Largest Flash Sale Site in America
Personalized Search on the Largest Flash Sale Site in AmericaAdrian Trenaman
 
Google App Engine in 40 minutes (the absolute essentials)
Google App Engine in 40 minutes (the absolute essentials)Google App Engine in 40 minutes (the absolute essentials)
Google App Engine in 40 minutes (the absolute essentials)Python Ireland
 
AmiBroker AFL to DLL Conversion
AmiBroker  AFL to DLL ConversionAmiBroker  AFL to DLL Conversion
AmiBroker AFL to DLL Conversionafl2dll
 
Presentation bsm wms product control 2014 en
Presentation  bsm wms  product control  2014 enPresentation  bsm wms  product control  2014 en
Presentation bsm wms product control 2014 enBinh Nguyen
 
Developing enterprise ecommerce solutions using hybris by Drazen Nikolic
Developing enterprise ecommerce solutions using hybris by Drazen NikolicDeveloping enterprise ecommerce solutions using hybris by Drazen Nikolic
Developing enterprise ecommerce solutions using hybris by Drazen Nikolicyoungculture
 
DSL - expressive syntax on top of a clean semantic model
DSL - expressive syntax on top of a clean semantic modelDSL - expressive syntax on top of a clean semantic model
DSL - expressive syntax on top of a clean semantic modelDebasish Ghosh
 
Magento's Imagine eCommerce Conference 2011 - Mash-up of Magento and Salesfor...
Magento's Imagine eCommerce Conference 2011 - Mash-up of Magento and Salesfor...Magento's Imagine eCommerce Conference 2011 - Mash-up of Magento and Salesfor...
Magento's Imagine eCommerce Conference 2011 - Mash-up of Magento and Salesfor...MagentoImagine
 
Retail referencearchitecture productcatalog
Retail referencearchitecture productcatalogRetail referencearchitecture productcatalog
Retail referencearchitecture productcatalogMongoDB
 
Magento Imagine eCommerce Conference 2011: Using Magento's Import Module
Magento Imagine eCommerce Conference 2011: Using Magento's Import ModuleMagento Imagine eCommerce Conference 2011: Using Magento's Import Module
Magento Imagine eCommerce Conference 2011: Using Magento's Import Modulevarien
 
Magento's Imagine eCommerce Conference 2011 - Import Export in a Flash with t...
Magento's Imagine eCommerce Conference 2011 - Import Export in a Flash with t...Magento's Imagine eCommerce Conference 2011 - Import Export in a Flash with t...
Magento's Imagine eCommerce Conference 2011 - Import Export in a Flash with t...MagentoImagine
 
Company segmentation - an approach with R
Company segmentation - an approach with RCompany segmentation - an approach with R
Company segmentation - an approach with RCasper Crause
 

Similar a Here are the steps to build a new Commerce Implementation in AEM:1. Define the scope of the implementation. What eCommerce platform or systems will it integrate with? Will it be a custom or open-source implementation? 2. Choose an implementation technology. Options include Java, Node.js, etc. This will depend on what technologies the eCommerce platform uses.3. Implement the Commerce API. Create Java classes that implement the required interfaces like CommerceSession, Product, etc. 4. Configure OSGi services. Register the implementation as an OSGi service for the commerceProvider configuration.5. Develop AEM components. Build components to display products, cart, checkout, etc that use (20)

Real-Time Personalized Customer Experiences at Bonobos (RET203) - AWS re:Inve...
Real-Time Personalized Customer Experiences at Bonobos (RET203) - AWS re:Inve...Real-Time Personalized Customer Experiences at Bonobos (RET203) - AWS re:Inve...
Real-Time Personalized Customer Experiences at Bonobos (RET203) - AWS re:Inve...
 
Data warehousing
Data warehousingData warehousing
Data warehousing
 
APIs for catalogs
APIs for catalogsAPIs for catalogs
APIs for catalogs
 
Relevance trilogy may dream be with you! (dec17)
Relevance trilogy  may dream be with you! (dec17)Relevance trilogy  may dream be with you! (dec17)
Relevance trilogy may dream be with you! (dec17)
 
Decoupled Days 2019: Delivering Headless Commerce
Decoupled Days 2019: Delivering Headless CommerceDecoupled Days 2019: Delivering Headless Commerce
Decoupled Days 2019: Delivering Headless Commerce
 
Developing enterprise ecommerce solutions using hybris by Drazen Nikolic - Be...
Developing enterprise ecommerce solutions using hybris by Drazen Nikolic - Be...Developing enterprise ecommerce solutions using hybris by Drazen Nikolic - Be...
Developing enterprise ecommerce solutions using hybris by Drazen Nikolic - Be...
 
Hexagonal at Scale, with DDD and microservices! - Voxxed Days microservices 2...
Hexagonal at Scale, with DDD and microservices! - Voxxed Days microservices 2...Hexagonal at Scale, with DDD and microservices! - Voxxed Days microservices 2...
Hexagonal at Scale, with DDD and microservices! - Voxxed Days microservices 2...
 
Holiday Extras journey to the cloud
Holiday Extras journey to the cloudHoliday Extras journey to the cloud
Holiday Extras journey to the cloud
 
Object Oriented Programming 2 (C#)
Object Oriented Programming 2 (C#) Object Oriented Programming 2 (C#)
Object Oriented Programming 2 (C#)
 
Personalized Search on the Largest Flash Sale Site in America
Personalized Search on the Largest Flash Sale Site in AmericaPersonalized Search on the Largest Flash Sale Site in America
Personalized Search on the Largest Flash Sale Site in America
 
Google App Engine in 40 minutes (the absolute essentials)
Google App Engine in 40 minutes (the absolute essentials)Google App Engine in 40 minutes (the absolute essentials)
Google App Engine in 40 minutes (the absolute essentials)
 
AmiBroker AFL to DLL Conversion
AmiBroker  AFL to DLL ConversionAmiBroker  AFL to DLL Conversion
AmiBroker AFL to DLL Conversion
 
Presentation bsm wms product control 2014 en
Presentation  bsm wms  product control  2014 enPresentation  bsm wms  product control  2014 en
Presentation bsm wms product control 2014 en
 
Developing enterprise ecommerce solutions using hybris by Drazen Nikolic
Developing enterprise ecommerce solutions using hybris by Drazen NikolicDeveloping enterprise ecommerce solutions using hybris by Drazen Nikolic
Developing enterprise ecommerce solutions using hybris by Drazen Nikolic
 
DSL - expressive syntax on top of a clean semantic model
DSL - expressive syntax on top of a clean semantic modelDSL - expressive syntax on top of a clean semantic model
DSL - expressive syntax on top of a clean semantic model
 
Magento's Imagine eCommerce Conference 2011 - Mash-up of Magento and Salesfor...
Magento's Imagine eCommerce Conference 2011 - Mash-up of Magento and Salesfor...Magento's Imagine eCommerce Conference 2011 - Mash-up of Magento and Salesfor...
Magento's Imagine eCommerce Conference 2011 - Mash-up of Magento and Salesfor...
 
Retail referencearchitecture productcatalog
Retail referencearchitecture productcatalogRetail referencearchitecture productcatalog
Retail referencearchitecture productcatalog
 
Magento Imagine eCommerce Conference 2011: Using Magento's Import Module
Magento Imagine eCommerce Conference 2011: Using Magento's Import ModuleMagento Imagine eCommerce Conference 2011: Using Magento's Import Module
Magento Imagine eCommerce Conference 2011: Using Magento's Import Module
 
Magento's Imagine eCommerce Conference 2011 - Import Export in a Flash with t...
Magento's Imagine eCommerce Conference 2011 - Import Export in a Flash with t...Magento's Imagine eCommerce Conference 2011 - Import Export in a Flash with t...
Magento's Imagine eCommerce Conference 2011 - Import Export in a Flash with t...
 
Company segmentation - an approach with R
Company segmentation - an approach with RCompany segmentation - an approach with R
Company segmentation - an approach with R
 

Más de 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 2014Paolo Mottadelli
 
Integrating with Adobe Marketing Cloud - Summit 2014
Integrating with Adobe Marketing Cloud - Summit 2014Integrating with Adobe Marketing Cloud - Summit 2014
Integrating with Adobe Marketing Cloud - Summit 2014Paolo Mottadelli
 
Adobe AEM Commerce with hybris
Adobe AEM Commerce with hybrisAdobe AEM Commerce with hybris
Adobe AEM Commerce with hybrisPaolo Mottadelli
 
Jira as a Project Management Tool
Jira as a Project Management ToolJira as a Project Management Tool
Jira as a Project Management ToolPaolo Mottadelli
 
Interoperability at Apache Software Foundation
Interoperability at Apache Software FoundationInteroperability at Apache Software Foundation
Interoperability at Apache Software FoundationPaolo Mottadelli
 
Content Analysis with Apache Tika
Content Analysis with Apache TikaContent Analysis with Apache Tika
Content Analysis with Apache TikaPaolo 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 TikaPaolo Mottadelli
 

Más de Paolo Mottadelli (11)

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
 
Integrating with Adobe Marketing Cloud - Summit 2014
Integrating with Adobe Marketing Cloud - Summit 2014Integrating with Adobe Marketing Cloud - Summit 2014
Integrating with Adobe Marketing Cloud - Summit 2014
 
Adobe AEM Commerce with hybris
Adobe AEM Commerce with hybrisAdobe AEM Commerce with hybris
Adobe AEM Commerce with hybris
 
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
 

Último

"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
What is Artificial Intelligence?????????
What is Artificial Intelligence?????????What is Artificial Intelligence?????????
What is Artificial Intelligence?????????blackmambaettijean
 

Último (20)

"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
What is Artificial Intelligence?????????
What is Artificial Intelligence?????????What is Artificial Intelligence?????????
What is Artificial Intelligence?????????
 

Here are the steps to build a new Commerce Implementation in AEM:1. Define the scope of the implementation. What eCommerce platform or systems will it integrate with? Will it be a custom or open-source implementation? 2. Choose an implementation technology. Options include Java, Node.js, etc. This will depend on what technologies the eCommerce platform uses.3. Implement the Commerce API. Create Java classes that implement the required interfaces like CommerceSession, Product, etc. 4. Configure OSGi services. Register the implementation as an OSGi service for the commerceProvider configuration.5. Develop AEM components. Build components to display products, cart, checkout, etc that use

  • 1. Paolo Mottadelli Adobe Technical Marketing eCommerce Integration Framework CQ Gems Adobe® Experience Manager Adobe® Marketing Cloud
  • 2. Commerce Integrated Platform dynamic PIM surfer 1 4 2 Experience Manager PIM/ecommerce JCR repo 3 product DB content editor PIM editor PIM synch
  • 3. Commerce Integrated Platform surfer 1. Product display component 1. Product information integrity 2. Shopping cart 2. Pricing 3. Promotions and vouchers 3. Stock-keeping inventory 4. Catalog blueprints 4. Variations on shopping cart 5. Check-out 6. Search content editor PIM editor
  • 4. 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 Experience Manager PIM/ecommerce 8. Client context cart store JCR repo product DB
  • 5. Architecture of the Commerce Framework AEM Commerce Components AEM Commerce API Implementation AEM native impl hybris impl other impl JCR Repository hybris DB other
  • 6. eCommerce Engine Selection Site Component CommerceService commerceService = 2 resource.adaptTo(CommerceService.class); CommerceSession session = commerceService.login(slingRequest, slingResponse); Product baseProduct = resource.adaptTo(Product.class); 3 OSGi container bundle bundle 1 GeoImpl bundle otherImpl cq:commerceProvider = geometrixx (geometrixx) hybrisImpl (xyz) (hybris)
  • 7. CommerceSession • addCartEntry(Product product, int quantity); • modifyCartEntry(int entryNumber, int quantity); cart content • deleteCartEntry(int entryNumber); •updateOrderDetails(Map<String, String> orderDetails); •getOrderDetails(); pricing •submitOrder(); •updateOrderDetails(Map<String, String> orderDetails); •getOrderDetails(); order details •submitOrder();
  • 9. CommerceSession is RESTful style (2) Name: CommercePersistence, Host: geometrixx.com, Path: / 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
  • 10. CommerceSession is RESTful style (3) public class AbstractJcrCommerceSession implements CommerceSession { ... cartStore = ContextSessionPersistence.getStore(request, "CART", CommerceConstants.COMMERCE_COOKIE_NAME); ... }
  • 11. Products and Variants architecture: 1 1 1 1 - type: product - variant - variant - variant - axes: color, size - color: purple - size: S - size: M - id: 397122 - id: 397122.1 - title: Saskatoon 1 1 - price: 299 - variant - variant - size: L - size: XL 1 1 1 - variant - variant - variant - color: purple - size: S - size: M -id: 397122.2 1 1 - price: 199 - variant - variant - size: L - size: XL
  • 12. PIM Data & Product References 1 /etc/commerce/products 2 /content 1 1 1 1 1 1 1 1 1 1 1
  • 13. 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; }
  • 14. 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; } }
  • 15. 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.
  • 16. 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"); ... }
  • 17. Shopping Cart architecture (Storage) In AEM-native carts are stored in the ClientContext Personalization should always be driven through the ClientContext. CommerceSession.addCartEntry()
  • 18. Checkout architecture Cart and Order Data The CommerceSession owns the three elements: Cart contents Pricing The order details Cart contents The cart contents schema is fixed by the API: public void addCartEntry(Product product, int quantity); public void modifyCartEntry(int entryNumber, int quantity); public void deleteCartEntry(int entryNumber); Pricing The pricing schema is also fixed by the API: public String getCartPreTaxPrice(); public String getCartTax(); public String getCartTotalPrice(); public String getOrderShipping(); public String getOrderTotalTax(); public String getOrderTotalPrice();
  • 19. 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)
  • 21. Defining the scope 1. Build a new Commerce Implementation: “training” 2. Apply the new implementation to Geometrixx Outdoors 3. Store the cart data in the repository (/home/users/a/admin/commerce/cart)