The job ProcessActivePromotionProducts is used to determine which products are affected by which promotions for each channel. It usually runs once per day at 10pm and checks all promotions associated with products via inclusion/exclusion for promotion conditions and promotion discounts, see ICM Online Help | Discount Rules for details. The result is a list of all products to which promotions apply being stored in the ActivePromoProducts table. It is used in the storefront to show the customer which product might be cheaper due to a promotion.
Especially in environments with a lot of products and promotions, the performance of the job sometimes dropped dramatically. To improve the performance and stability of this job the underlying code base has been completely reworked.
Term | Description |
---|---|
ICM | Intershop Commerce Management |
SMC | Intershop System Management |
Job | A process in ICM which can be triggered manually or automatically via scheduling in SMC. It performs tasks that, among other things, improve the performance of the ICM system, see Reference - Intershop 7.10 Jobs for all available ICM 7.10 jobs. |
The job ProcessActivePromotionProducts is available for each channel by default.
The updated jobs ProcessActivePromotionProducts_beta and ProcessActivePromotionProducts_both are new and have to be created manually, either by adjusting an existing ProcessActivePromotionProducts or by creating a new job. They will be described later in detail.
The pipeline has three start nodes: Start, Start_Beta and Start_Both. Start_Beta and Start_Both are available from ICM 7.10.38.9.
For further details see the following sections.
Performs basic tasks that lead to the creation and removal of data from the ActivePromoProducts table:
Start_Beta basically does the same thing but uses mainly queries, while the Start node uses only a few queries and mainly pipeline logic.
This node is called Beta because it is experimental. It has not yet been tested with real customer data. Therefore, it is hard to make a statement about its accuracy and performance.
A dry run option has been added to test the successful execution of the job before changing the data in the database, which allows comparing the results of both jobs without changing the data.
It is described in detail in the following section.
The updated job has the same configuration, except that it uses the start node Start_Beta. To configure Start_Beta, perform the following steps:
Click Apply.
The job ProcessActivePromotionProducts should appear in the list.
Info
You can either edit the existing jobs or create new ones, see Intershop System Management Online Help | Creating New Scheduled Jobs for details.
The configuration DryRunMode has been added to run the job and compare the results of both jobs without breaking anything.
The DryRunMode runs all the logic to analyze the data, but only writes detailed debug log entries and a summary into the attribute field ActivePromotionProductsDryRunLog. This can be accessed from the Attributes tab of the job.
Here is an example that shows what kind of data might appear in the ActivePromotionProductsDryRunLog attribute if there are differences. It contains promotion UUIDs and product UUIDs to make it easier to find the problematic promotion configuration:
Tip
For a clearer presentation, copy the field content into a text editor.
SetActivePromoProductsV2-Summary - createdCount:4 - removedCount:3 - existingCount:417 - postRemovedCount:2 - RunDate:2021/Nov/23-11:07:17 Removed DtysGwQxfeQAAAF9FRdpuC_3 | ThsKDgAXUfMAAAF9vlZJeAo. Removed DtysGwQxfeQAAAF9FRdpuC_3 | V7sKDgAXuegAAAF9CklJeAo. Removed DtysGwQxfeQAAAF9FRdpuC_3 | g2sKDgAXHyQAAAF9CUlJeAo. Created DtysGwQxfeQAAAF9FRdpuC_3 | 19AKDgAXYb4AAAF9hklJeAo. Created DtysGwQxfeQAAAF9FRdpuC_3 | ow8KDgAXD20AAAF9gElJeAo. Created DtysGwQxfeQAAAF9FRdpuC_3 | adMKDgAXOXIAAAF9fElJeAo. Created DtysGwQxfeQAAAF9FRdpuC_3 | p_UKDgAXmDsAAAF9iklJeAo. SetActivePromoProductsV2-PromotionUUID:DtysGwQxfeQAAAF9FRdpuC_3-createdCount:4-removedCount:3-existingCount:166 Erased(PostRemoved) 28SsGwQxmzEAAAF9zSppuDLq | tk0KDgAXHA8AAAF9HWBJeAo. Erased(PostRemoved) 28SsGwQxmzEAAAF9zSppuDLq | viYKDgAX2A4AAAF9NGBJeAo. RemoveActivePromoProducts-PromotionUUID:28SsGwQxmzEAAAF9zSppuDLq - postRemovedCount:2 RemoveActivePromoProducts-over-all-promotions-PostRemovedCount:2
If it looks as in the snippet above, i.e. createdCount, removedCount and postRemovedCount are larger than 0, the old job should still be used.
However, if everything works smoothly, createdCount, removedCount and postRemovedCount should be 0. In that case, there are no deviations from the old job and Start_Beta can replace the old start node Start entirely.
To use the new job, do not forget to disable DryRunMode by either removing the attribute or setting its value to something other than true (e.g.: false or not_true).
Note
The ActivePromotionProductsDryRunLog attribute value does not always change and is not automatically removed. Therefore, check RunDate to make sure that the data belongs to the last run.
As the name implies, this node executes both, Start and Start_Beta, one after the other. By using this configuration the start node Start_Beta always runs in DryRunMode.
With mass data, running the job with this start node can take some time to execute, so only run this on test systems and never on live.
Intershop recommends to enable the debug log and select the package com.intershop.component.marketing.pipelet.promotion as category. This provides a lot of data which can be used to analyze if something went wrong or if there are any differences.
Start_Both basically uses the same configuration as Start_Beta, except that it uses Start_Both as start node.
To configure the job's attributes, perform the following steps:
If there is more than one channel on which this job must be executed, the start time should be set with a five-minute delay per channel.