Develop > Presentation layer > Customize marketing > Marketing customization: Management Center > Customizing triggers, targets, and actions > Add a new trigger, target or action > Create the campaign element task command


Example: campaign element task command for a trigger (daily check type)

When creating a custom trigger for a marketing activity, you can refer to this sample when developing the trigger's task command. This example trigger is a daily check trigger.

To understand what a daily check trigger is, see Types of Dialog activity triggers and when they are processed.


Sample

Here is the task command implementation code for the example trigger. This gift registry trigger finds all customers for whom the current date is a specified number of days before a gift registry event. Marketing Managers could use this trigger to communicate with customers who have set up a store gift registry, for example, a bride-to-be. At a specified number of days before the registry event (for example, 30 days before the wedding), the Marketing Manager could use this trigger to start a Dialog activity that sends an update e-mail to the bride-to-be.

package com.mycompany.commerce.marketing.commands.elements; 
import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; 
import com.ibm.commerce.base.objects.ServerJDBCHelperAccessBean; import com.ibm.commerce.emarketing.utils.EmailActivityStorePathHelper; import com.ibm.commerce.foundation.common.exception.ApplicationError; import com.ibm.commerce.foundation.common.util.logging.LoggingHelper; import com.ibm.commerce.marketing.commands.elements.MarketingCampaignElementTaskCmdImpl; import com.ibm.commerce.marketing.dialog.util.MarketingUtil; import com.ibm.commerce.marketing.runtime.engine.Activity; import com.mycompany.commerce.marketing.logging.CustomMarketingMessageKeys; 
public class GiftRegistryTriggerTaskCmdImpl extends MarketingCampaignElementTaskCmdImpl implements GiftRegistryTriggerTaskCmd {

    /**
     * The name of this class.
     */
    public final static String CLASSNAME = GiftRegistryTriggerTaskCmdImpl.class.getName();     private static final Logger LOGGER = LoggingHelper.getLogger(GiftRegistryTriggerTaskCmdImpl.class); 
    private final static String PARAM_NUMBER_OF_DAYS = "numberOfDays"; 
    /**
     * This method validates that all the required name-value pairs have been set for
     * the campaign element. It checks if the numberOfDays parameter is set.  
     * @param elementParameters: The name-value pairs for this element.
     * @return: This method returns a list of ApplicationError exceptions
     * that contains any validation errors. The list may be empty or be null.
     */
    public List validateParameters(Map elementParameters) {
        final String METHOD_NAME = "validateParameters";         
        if (LoggingHelper.isEntryExitTraceEnabled(LOGGER)) {
            LOGGER.entering(CLASSNAME, METHOD_NAME, elementParameters);         }    
        
        List validationErrors = new ArrayList();         
        Object numberOfDays = elementParameters.get(PARAM_NUMBER_OF_DAYS);         if (numberOfDays == null || numberOfDays.toString().length() == 0) {
            ApplicationError validateError = new ApplicationError(
                    ApplicationError.TYPE_GENERIC_ERROR,                     CustomMarketingMessageKeys._APP_ACTIVITY_GIFT_REGISTRY_MISSING_NUMBER_OF_DAYS,                     null, LOGGER.getResourceBundleName());             validationErrors.add(validateError);         }
        
        if (LoggingHelper.isEntryExitTraceEnabled(LOGGER)) {
            LOGGER.exiting(CLASSNAME, METHOD_NAME, validationErrors);         }        
        return validationErrors;     }
    
    /**
     * This method finds all the customers for whom the current date is
     * the specified number of days before the customer's gift registry event date.
     * A trigger is sent to the marketing services for each customer so that
     * he or she will participate in the applicable Dialog activity. 
     * If the activity is defined in a storefront asset store, then
     * the customers are found in each extended site that refers to the storefront 
     * asset store with a 'com.ibm.commerce.campaigns' relationship.
     */
    public void forwardTriggersForProcessing() {
        final String METHOD_NAME = "forwardTriggersForProcessing";         if (LoggingHelper.isEntryExitTraceEnabled(LOGGER)) {
            LOGGER.entering(CLASSNAME, METHOD_NAME);         }
        boolean traceEnabled = LoggingHelper.isTraceEnabled(LOGGER); 
        Activity activity = getActivity();         Integer elementId = getElementId();         Integer storeId = activity.getStoreId();         int numberOfDays = Integer.parseInt(MarketingUtil.findElementNVPByElementIdAndName(elementId.toString(), PARAM_NUMBER_OF_DAYS)); 
        if (traceEnabled) {
            LOGGER.logp(Level.FINE, CLASSNAME, METHOD_NAME, "activityId=" + activity.getId());             LOGGER.logp(Level.FINE, CLASSNAME, METHOD_NAME, "elementId=" + elementId);             LOGGER.logp(Level.FINE, CLASSNAME, METHOD_NAME, "storeId=" + storeId);             LOGGER.logp(Level.FINE, CLASSNAME, METHOD_NAME, "numberOfDays=" + numberOfDays);         }
        
        try {
            // handle the activity in the store in which it is defined
            processGiftRegistryTrigger(storeId, elementId, activity.getId(), numberOfDays);             
            // if this activity is defined in an asset store, then find the customers in each child store
            Integer[] storeIds = EmailActivityStorePathHelper.getStoresByRelatedStoreAndStoreRelType(
                                    storeId, com.ibm.commerce.server.ECConstants.EC_STRELTYP_CAMPAIGNS);             
            if (storeIds != null){
                for (int j = 0; j
< storeIds.length; j++) {
                    if (!storeIds[j].toString().equals(storeId.toString())) {
                        if (traceEnabled) {
                            LOGGER.logp(Level.FINE, CLASSNAME, METHOD_NAME, "child storeId=" + storeIds[j]);                         }
                        processGiftRegistryTrigger(storeIds[j], elementId, activity.getId(), numberOfDays);                     }
                } //end of for each store
            }
            
        } catch (Exception e) {
            if (traceEnabled) {
                LOGGER.logp(Level.FINE, CLASSNAME, METHOD_NAME, "Exception: " + e);             }
        }
        
        if (LoggingHelper.isEntryExitTraceEnabled(LOGGER)) {
            LOGGER.exiting(CLASSNAME, METHOD_NAME);         }        
        setReturnValue(true);     }
    
    /**
     * This method finds all the customers for whom the current date is
     * the specified number of days before the customer's gift registry event date.
     * The gift registry is associated with the provided store.
     * A trigger is sent to the marketing services for each customer so that
     * he or she will participate in the applicable Dialog activity. 
     * @param storeId: The identifier of the store in which to find the applicable gift registries.
     * @param elementId: The identifier of the trigger element.
     * @param activityId: The identifier of the marketing activity.
     * @param numberOfDays: The number of days before the gift registry event date.
     */
    public void processGiftRegistryTrigger(Integer storeId, Integer elementId, Integer activityId, int numberOfDays) throws Exception{
        final String METHODNAME = "processGiftRegistryTrigger";         if (LoggingHelper.isEntryExitTraceEnabled(LOGGER)) {
            LOGGER.entering(CLASSNAME, METHODNAME, new Object [] {storeId, elementId, activityId});         }
        
        /*
         * The userList is a list with the customer information. Every element in 
         * the list is a child list; in the child list, the first element is the customer's 
         * member ID, and the second element is the customer's personalization ID.
         * IBM recommends to use the method ServerJDBCHelperAccessBean().executeQuery()
         * as this will return the list in the required format. The SQL used should select
         * the member ID and personalization ID as the first two columns.
         * (for example: SELECT USERDEMO.USERS_ID, USERS.PERSONALIZATIONID 
         * FROM USERDEMO USERDEMO, USERS USERS AND USERDEMO.USERS_ID=USERS.USERS_ID AND ...) 
         */
        String sql = ""/* SQL NOT PROVIDED */;         List userList = new ServerJDBCHelperAccessBean().executeQuery(sql);         
        // use this method to have the marketing services send the trigger for each customer in the user list
        forwardTriggersForProcessing(userList, activityId, elementId, storeId);         
        if (LoggingHelper.isEntryExitTraceEnabled(LOGGER)) {
            LOGGER.exiting(CLASSNAME, METHODNAME);         }
    }    
    
}


Related concepts

Campaign element task commands

Related reference

Example: campaign element task command for a trigger (customer event type)

Example: campaign element task command for a target

Example: campaign element task command for an action


+

Search Tips   |   Advanced Search