Sunday, 31 August 2014

Associating a site with Catalog in ATG

Today while importing the catalog data in BCC. I faced one issue.After completion of data load into BCC I realized that site information is missing from catalog items (category,product and SKUs).

Here is the list of steps I followed from ATG documentation to resolve this issue.


Note : Before following these steps.Run a full deployment fololwoed by Catalog Update Service (This will also create project in BCC.You need to deploy the project). 

Steps to register/create a site and associate it with a catalog.
  1. In the Business Control Center, expand Site Administration, then click Manage Site Assets.
  2. Enter a name and optional description for the project and click Continue.
  3. Create a new site and assign the existing application’s catalog as the default catalog for the new site. During this step, the site ID for the new site is assigned to the existing catalog. The same ID is also assigned to any of the catalog’s categories and sub-catalogs.
  4. At this point, existing catalog folders will appear in Merchandising as unsited items. If you want to keep them, these folders also need a site ID. Follow the steps below to assign a site ID to your catalog folders:
    • In the Business Control Center, expand Merchandising, then click Manage Commerce Assets.
    • Enter a name and optional description for the project and click Continue.
    • Navigate to Site Catalogs, then to Unsited Items.
    • Click the split screen icon at the bottom left of the window.
      BCC Split Screen Icon
      BCC Split Screen Icon
    • In the bottom portion of the split screen, navigate to Site Catalogs.
    • Drag a catalog folder from the top pane to the site you want it affiliated with in the bottom pane. The catalog folder is now affiliated with the site and has that site’s ID assigned to it.
  5. Deploy the project. During deployment, the site ID you assigned to the catalog is propagated from the catalog down to its constituent products and SKUs (by the CatalogMaintenanceService, which runs automatically on deployment).

Saturday, 23 August 2014

Configure Users and Groups in Endeca Workbench

Here are the steps to configure Users and Groups for Endeca Workbench.
  1. Login into to Endeca Workbench as admin user.
  2. On first drop down menu (application selection menu), select Administrative Tools.
  3. Go to User Management section.
  4. Here you will see two tabs.
                 1.  Users
                 2.  Group.

1. User Configuration.

To create user click on Add User link on Users tab.

Workbench Users Tab
Workbench Users Tab
Create User pop up will display.

Create User Pop Up
Create User Pop Up
Enter the user details, here you can associate user with existing group.Then click on permissions tab select the permissions for user.

2. Group Configuration.

To create a group click on click on Group Tab on User Management page.

Now click on Add Groups button on this tab.

Workbench Group Tab
Workbench Group Tab

Create Group pop up will display.Enter the group details,click on permission tab to enter the permissions.Click on membership tab to select a sub group or user.

Group Detail Pop Up
Group Detail Pop Up


Sunday, 17 August 2014

Introduction to Endeca Tools and Framework

Oracle Endeca Tools and Frameworks enable the dynamic presentation of content across all channels.
Deployments That Use Oracle Endeca Experience Manager Require the Tools and Frameworks package for  Oracle Endeca Commerce with Experience Manager. Deployments That Do not include Experience Manager Require the Tools and Frameworks package for Oracle Endeca Commerce with Guided Search.

Both versions of the package include the Following:

• Oracle Endeca Workbench, a tools suite That enables merchandising Content Spotlighting, and search  Configuration for cross-channel applications.
• The Endeca Assembler, an API for controlling the presentation of commerce sites and collecting usage information across all channels.
• The Endeca Tools Service.
• The Endeca Deployment Template, A Collection of operational components That Provides a Starting Point  for Developing and deploying Endeca applications.
• The Discover Electronics Reference Application.

Tuesday, 29 July 2014

Introduction to Endeca Content Acquisition System (CAS)

The Endeca Content Acquisition System (CAS) is a set of Components That add, configure, and crawl data sources for use in an application.The Endeca Content Acquisition System crawls data sources, Converts documents and files to Endeca records, and stores them for Use in an Forge pipeline.Output of CAS is number of Record Store instances (one per data source).

Below are Important Points Related to CAS.



  • The Endeca CAS service is a servlet container That runs the CAS Server, the Component Instance.Manager, and any number of Record Store instances (one per data source).
  • The CAS Server is the component That Manages all file systems and CMS crawling operations.
  • The CAS Console Endeca Workbench is a Web-based application used to crawl various data sources including file systems and content management systems.
  • The CAS Server API allows users to write programs That Communicate With The CAS server.The Server API has a WSDL interface and a CAS Server Command-Line Utility.
  • The Dimension Value Id Manager is a CAS Component That Creates, stores dimension value identifiers.
  • The Endeca Web Crawler manages all Web crawl-related operations.
  • The Component Instance Manager Creates, lists, and deletes Record Store instances. The Component Instance Manager has a WSDL interface and overpriced a CIM Command-Line Utility.
  • The Endeca Record Store Provides persistent storage for generation of Records. The Record Store has a WSDL interface and Also a Record Store Command-line Utility.The CAS Server writes crawl output from each data source to a unique Record Store instance.
  • Endeca CMS connectors are available for use in the CAS Console Endeca Workbench or the CAS Server API. CMS Connectors Provide a means to access and crawl data sources in a wide variety of CMS types.
  • List and Remove Endeca application flags

    Below are useful eaccmd command options to list and remove Endeca application flags.

    1. List all flags.
              Syntax    : eaccmd list-flags --app AppicationName

              Example : eaccmd list-flags --app Discover

        2.   Remove particular flag.

              Syntax    : eaccmd remove-flag --app AppicationName --flag <flagName>

              Example : eaccmd remove-flag --app Discover --flag setbaselinedatareadyflag

        3.   Remove all flags.

             Syntax   : eaccmd remove-flag --app AppicationName 

            Example : eaccmd remove-flag --app Discover 

    Sunday, 29 June 2014

    Price Generation in ATG

    ATG Commerce pricing services are based on below two complementary elements:
    1. Pricing engines.
    2. Pricing calculators.
    1. Pricing engines.
    •     Retrieving any promotions that are available to site visitors.
    •     Determining which pricing calculators generate prices.
    •     Invoking the calculators in the correct order.
     2. Pricing calculators.
    •     Looking up the price.
    •     Using information they receive from the pricing engines, promotions, and the qualifier service to determine prices. 

    Before pricing happens, the following steps take place:

    1. On a scheduled basis, the pricing engines load global promotions (those defined as applying automatically to all customers). An engine builds its list by using its globalPromotionsQuery property to query the Promotions repository, searching for any promotion where the Automatically Give to All Customers (global) property is set to true.

    2. At the start of the customer session, a PricingModelHolder instance is created. PricingModelHolder calls each pricing engine’s getPricingModels() method.

    3. The pricing engine getPricingModels() method gets any promotions listed in the activePromotions property of the current customer’s profile and merges them with the global promotions list it previously created.

    4. PricingModelHolder periodically updates both the global and active promotions.

    The result is that PricingModelHolder has a merged list of global and active promotions for each pricing engine. When the customer performs an action that prompts a pricing operation, such as adding an item to their cart, the following steps are performed:

    1. The business layer logic (such as a PriceItem servlet bean in a page) invokes a pricing engine.

    2. The pricing operation invokes PricingTools which then gets the PricingModelHolder for that customer.

    3. PricingTools gets the promotions from the PricingModelHolder and calls the pricing engine’s priceItems method, passing in the promotions as a list.

    4. The pricing engine applies its configured precalculators in the order in which they appear in its preCalculators property. A precalculator modifies a price without using any associated promotions. Each type of engine calls its corresponding type of precalculator.

    5. The pricing engine then takes the promotions list that was passed in and can again veto promotions from that list. The remaining promotions are sorted by priority and then evaluated.

    For each available promotion, ATG Commerce does the following:
    • The pricing engine calls the appropriate helper method (findQualifyingItems, findQualifyingOrder, or findQualifyingShipping) in the Qualifier class to determine which items should be discounted. The pricing engine passes the current pricing context into the helper method’s input parameters.
    • The findQualifyingItems() method calls evaluateTarget(), which returns a Collection of QualfiedItem objects, representing CommerceItem objects. The findQualifyingOrder() and findQualifyingShipping() methods return a single MatchingObject.
    • The QualifiedItem and MatchingObject include discount information such as the PMDL discount structure. 
    • The QualifiedItem or MatchingObject information is returned to the pricing engine, which uses the discount information to determine which calculator to use.
    • The pricing engine calls the calculator and passes in the items to be discounted and the discount information.
    • The calculator marks items that have received a discount, which might not be eligible for further promotions.
    • The qualifier marks items that have already been used as qualifiers for the promotion. This prevents the qualifier items from being used again during the same price calculation.
    • The calculator applies the discount to the list of objects.

    6. The pricing engine applies its configured PostCalculators, which make any necessary modifications to the price after discounts have been applied. Each pricing engine calls postcalculators of its own type.
    7. The pricing engine returns an updated PriceInfo object.

    Note : This process is repeated every time a price is requested. Price requests are resource-intensive, and should be performed only when necessary.


      Sunday, 15 June 2014

      ATG 10.2 BCC transaction issue

      While setting up the CRS (ATG 10.2, MySQL and JBoss 5.1), I have faced few issues.Here I am sharing the solution of one of them.The execution of initial (first) deployement on BCC failed due to below exception.

      CONTAINER:atg.repository.RepositoryException; SOURCE:org.jboss.util.NestedSQLException: Could not enlist in transaction on entering meta-aware object!; - nested throwable: (javax.transaction.SystemException: java.lang.Throwable: Unabled to enlist resource, see the previous warnings. tx=TransactionImple < ac, BasicAction: 7f000001:c41a:5395f5cb:a16b status: ActionStatus.ABORT_ONLY >); - nested throwable: (org.jboss.resource.JBossResourceException: Could not enlist in transaction on entering meta-aware object!; - nested throwable: (javax.transaction.SystemException: java.lang.Throwable: Unabled to enlist resource, see the previous warnings. tx=TransactionImple < ac, BasicAction: 7f000001:c41a:5395f5cb:a16b status: ActionStatus.ABORT_ONLY >)) at atg.adapter.gsa.GSAItemDescriptor.getPersistentItem(GSAItemDescriptor.java:5549) at atg.adapter.gsa.GSAItemDescriptor.getOrWaitForPersistentItem(GSAItemDescriptor.java:5053) at atg.adapter.gsa.GSAItemDescriptor.getItem(GSAItemDescriptor.java:3275) at atg.adapter.gsa.GSARepository.getItem(GSARepository.java:353) at atg.deployment.repository.ReferenceItemGenerator.findReferenceItemInRepository(ReferenceItemGenerator.java:699) at ........................................

      The soltion to this issue is to update jboss connection datasource file (atg-ds.xml) for xa-datasource (replace local-tx-datasource with xa-datasource).Update the other elements of the file accordingly.

      Below is the sample connection detail.

      <xa-datasource>
      <jndi-name>ATGProductionDS</jndi-name>
      <xa-datasource-property name="URL">
                             jdbc:mysql://localhost:3306/Production
              </xa-datasource-property>
      <xa-datasource-class>
                             com.mysql.jdbc.jdbc2.optional.MysqlXADataSource
              </xa-datasource-class>
      <xa-datasource-property name="User">CRS_Production</xa-datasource-property>
      <xa-datasource-property name="Password">CRS_Production</xa-datasource-property>
      <min-pool-size>5</min-pool-size>
              <!-- The maximum connections in a pool/sub-pool -->
             <max-pool-size>300</max-pool-size>
        <!-- To avoid deadlocks you need set this -->
        <transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation>
      </xa-datasource>