Elastic Path Production Tools

Projection Driven Bulk Changes

Projection Driven Bulk Changes

Business users and merchandisers create entities, such as brands or attributes, in Elastic Path Commerce Manager. These entities are added as offer attributes in a product or product bundle in the store. With catalog syndication, an entity has a projection created for syndication. A domain event message notifies the projection builder to build the projection for the specified entity. When a projection has updates, such as a change to the brand or attribute, any offers that contain the entity must also be updated. For more information about domain events, see Catalog Syndication Event Messages.

With projection driven bulk changes, catalog syndication consumers can rebuild only the offers with the affected value, instead of all offers. For example, a business user updates the color of a T-shirt from Crimson Red to Ruby Red. There are multiple offers with this item. Using projection bulk changes, any offers with the Crimson Red T-shirt are automatically updated to Ruby Red.

For projection driven bulk changes, when you update and process a projection, a database query returns the list of all products and offers containing the entity. You can use the following projection types to update projection driven bulk changes:


The projection builder processes and sends one or more <entity>_BULK_UPDATE messages to the VirtualTopic.ep.domain.bulk topic in the Java Messaging Service (JMS) for the catalog syndication consumer. One bulk update message might result in multiple catalog event messages with offer codes. You can configure the number of offer codes to send in a single message with the environment property bulkChangeMaxEventSize. For example, if the bulk change affects 1000 offers, you can configure bulkChangeMaxEventSize to send 100 offer codes within a single message for a total of 10 event messages to VirtualTopic.ep.catalog.

The following is an example of the <entity>_BULK_UPDATE message format:

        eventType: "<ENTITY>_BULK_UPDATE",
        guid: <ENTITY_CODE>,
        data: {
            products: [<RELATED_PRODUCT_CODE_1>, <RELATED_PRODUCT_CODE_2>, …]