Crear un mandato de tarea para el atributo de segmento de cliente

Cree una clase de implementación de mandato de tarea para el nuevo atributo de segmento de cliente y registre la clase en la tabla CMDREG. El mandato de tarea verifica si un cliente pertenece a un segmento de clientes especificado en una actividad de promoción o de marketing.

Por qué y cuándo se efectúa esta tarea

En la herramienta Marketing del Management Center, los usuarios de empresa pueden especificar un segmento de clientes como destino para una promoción, una actividad web o de diálogo o una actividad de correo electrónico. Cuando se ejecuta la promoción o actividad, los servicios de marketing llaman al mandato CheckUserInMemberGroupCmdImpl para determinar si un cliente pertenece al segmento de clientes especificado. El mandato busca los datos que están relacionados con los atributos definidos en el segmento de clientes. En las tablas de base de datos de WebSphere Commerce adecuadas. Por ejemplo, la edad y el sexo del cliente. A continuación, el mandato lleva a cabo la evaluación y devuelve el valor true o false. Debe ampliar la clase CheckUserInMemberGroupCmdImpl de modo que los servicios de marketing puedan incluir el nuevo atributo de segmento de cliente en el proceso de validación.

Procedimiento

  1. Abra HCL Commerce Developer y cambie a la vista Explorador de empresa.
  2. Cree un paquete para sus archivos de mandatos de tarea:
    1. Vaya a WebSphereCommerceServerExtensionsLogic > src.
    2. Pulse con el botón derecho del ratón en la carpeta src y luego pulse Nuevo > Paquete.
    3. En el campo Nombre, escriba un nombre de paquete.
      Por ejemplo, com.your_company_name.membergroup.commands.
    4. Asegúrese de que se especifica WebSphereCommerceServerExtensionsLogic/src en el campo Carpeta de origen.
    5. Pulse Finalizar.
  3. En el nuevo paquete, cree una implementación de mandato de tarea que se amplíe de la clase CheckUserInMemberGroupCmdImpl. Asigne a la clase un nombre.
    Por ejemplo, ExtCheckUserInMemberGroupCmdImpl.

    El ejemplo siguiente es una implementación de mandato de tarea para un nuevo atributo de segmento de clientes. Este atributo permite a los usuarios de negocio especificar que los clientes deben tener un número determinado de puntos de fidelidad para estar en el segmento de cliente.

    /**
     * This class extends the CheckUserInMemberGroupCmdImpl class to implement
     * the evaluation programming logic that handles the loyalty points
     * simple condition.
     */
    
    package com.yourcompanyname.membergroup.commands;
    
    import com.ibm.commerce.condition.ConditionUtil;
    import com.ibm.commerce.condition.SimpleCondition;
    import com.ibm.commerce.membergroup.commands.CheckUserInMemberGroupCmdImpl;
    
    
    public class ExtCheckUserInMemberGroupCmdImpl
    	extends CheckUserInMemberGroupCmdImpl {
    
    	/**
    	 * For this example, the simple condition variable name is defined as
    	 * a string of "loyalty". In practice, this constant should be defined in
    	 *  a separate constant class.
    	 */
    	public static final String VARIABLE_LOYALTY_POINTS = "loyalty";
    
    
    	/**
    	 * Override the parent's method to evaluate the loyalty points
    	 * simple condition.
    	 * @return  <code>true</code> if the condition evaluates to true.
    	 */
    	public boolean evaluate(
    		String variable,
    		String operator,
    		String value,
    		SimpleCondition.Qualifier[] qualifiers) {
    
    		boolean result = false;
    
    		if (VARIABLE_LOYALTY_POINTS.equals(variable)) {
    			// If the simple condition is for loyalty points,
    			// invoke the specific loyalty points evaluation
    			// method to handle the case.
    			result = evaluateLoyaltyPointsCondition(operator, value, qualifiers);
    		} else {
    			// Since we override this evaluate() method from
    			// the parent class to take care of the new loyalty
    			// points condition, call the parent's
    			// evaluate() method to handle all the other simple
    			// conditions.
    			result = super.evaluate(variable, operator, value, qualifiers);
    		}
    		return result;
    	}
    
    
    	/**
    	 * Evaluate the loyalty points condition.
    	 */
    	protected boolean evaluateLoyaltyPointsCondition(
    		String operator,
    		String value,
    		SimpleCondition.Qualifier[] qualifiers) {
    
    		Integer numOfPoints = null;
    		try {
    			// To simplify this example, assume the loyalty points
    			// value is stored in the table USERDEMO in the
    			// customizable column FIELD6. We can use the parent's
    			// class method getDemographics() to retrieve the access
    			// bean that contains the USERDEMO information.
    			if (getDemographics() != null) {
    				numOfPoints = getDemographics().getField6InEJBType();
    			}
    		}
    		catch (Exception e) {
    			// Handle the exception here.
    		}
    
    		// Call the ConditionUtil helper class's evaluateInteger()
    		// method to evaluate the loyalty points integer value
    		// with the given operator.
    		return ConditionUtil.evaluateInteger
    				(numOfPoints, operator, SegmentUtil.toInteger(value));
    	}
    
    }//end-ExtCheckUserInMemberGroupCmdImpl
  4. Guarde y cierre el nuevo archivo de implementación.
  5. Registre el mandato de tarea en la tabla CMDREG:
    1. Ejecute la sentencia SQL siguiente:
      INSERT INTO cmdreg (STOREENT_ID, INTERFACENAME, DESCRIPTION, CLASSNAME, PROPERTIES, LASTUPDATE, TARGET, OPTCOUNTER) 
      VALUES (0, 'com.ibm.commerce.membergroup.commands.CheckUserInMemberGroupCmd', 
      null, 'IMPL_CLASS_FULL_NAME', null, null, 'Local', null);
      Donde IMPL_CLASS_FULL_NAME es el nombre completo de la clase de implementación ampliada, por ejemplo:
      com.yourcompanyname.membergroup.commands.ExtCheckUserInMemberGroupCmdImpl
    2. Reinicie el servidor HCL Commerce para que se apliquen los cambios.
  6. Opcional: Es posible que los usuarios de negocio deseen la opción de poder ver una lista de clientes en un segmento de cliente que utiliza el nuevo atributo. Este tipo de lista no puede visualizarse en la herramienta Marketing del Management Center; no obstante, sí puede verse en HCL Commerce Accelerator.
    1. Para dar soporte a la visualización de este tipo de lista en HCL Commerce Accelerator, puede ampliar la clase ListUsersInMemberGroupCmdImpl. A continuación se proporciona un ejemplo:
      /**
       * This class extends the ListUsersInMemberGroupCmdImpl class to implement
       * the query programming logic that lists all of the customers who belong to
       * a specified customer segment with the loyalty points condition.
       */
      
      package com.yourcompanyname.membergroup.commands;
      
      import com.ibm.commerce.condition.SimpleCondition;
      import com.ibm.commerce.membergroup.commands.ListUsersInMemberGroupCmdImpl;
      
      public class ExtListUsersInMemberGroupCmdImpl
      	extends ListUsersInMemberGroupCmdImpl {
      
      	/**
      	 * For this example, the simple condition variable name is defined as
      	 * a string of "loyalty". In practice, this constant should be defined in
      	 * a separate constant class.
      	 */
      	public static final String VARIABLE_LOYALTY_POINTS = "loyalty";
      
      	/**
      	 * Default constructor
      	 */
      	public ExtListUsersInMemberGroupCmdImpl() {
      		super();
      	}
      
      	/**
      	 * Override the parent's method to convert the loyalty
      	 * points simple condition to SQL.
      	 * @param condition SimpleCondition
      	 * @return SQL string.
      	 */
      	protected String convertToSQL(SimpleCondition condition) {
      
      		String sql = null;
      
      		if (condition != null) {
      			String variable = condition.getVariable();
      			String operator = condition.getOperator();
      			String value = condition.getValue();
      
      			SimpleCondition.Qualifier[] qualifiers = condition.getQualifiers();
      
      			if (VARIABLE_LOYALTY_POINTS.equals(variable)) {
      				// If the simple condition is for loyalty points,
      				// invoke the specific convertLoyaltyPointsCondition()
      				// method to handle the case.
      				sql = convertLoyaltyPointsCondition(operator, value, qualifiers);
      			} else {
      				// Since we override this convertToSQL() method from
      				// the parent class to take care of the new loyalty
      				// points condition, we should call the parent's
      				// convertToSQL() method to handle all the other
      				// simple conditions.
      				sql = super.convertToSQL(condition);
      			}
      		}
      
      		return sql;
      	}
      
      	/**
      	 * Converts the loyalty points condition to an SQL query.
      	 *
      	 * @param operator - The name of the operator.
      	 * @param value - The data for the value.
      	 * @param qualifiers -  An array of qualifiers.
      	 *
      	 * @return An SQL string.
      	 */
      	protected String convertLoyaltyPointsCondition(
      		String operator,
      		String value,
      		SimpleCondition.Qualifier[] qualifiers) {
      
      			// To simplify this example, assume the loyalty points
      			// value is stored in the table USERDEMO in the
      			// customizable column FIELD6. 
      
      		String sql = "MEMBER.MEMBER_ID = any ("
      			+ "select USERS_ID from USERDEMO where FIELD6"
      			+ operator
      			+ value
      			+ ")";
      
      		return sql;
      	}
      
      }//end-ExtListUsersInMemberGroupCmdImpl
    2. Para registrar un mandato de tarea en la tabla CMDREG, ejecute la sentencia SQL siguiente:
      INSERT INTO cmdreg (STOREENT_ID, INTERFACENAME, DESCRIPTION, CLASSNAME, PROPERTIES, LASTUPDATE, TARGET, OPTCOUNTER) 
      VALUES (0, 'com.ibm.commerce.membergroup.commands.ListUsersInMemberGroupCmd', 
      null, 'IMPL_CLASS_FULL_NAME', null, null, 'Local', null);

      Donde IMPL_CLASS_FULL_NAME es el nombre completo de la clase de implementación ampliada.

    3. Reinicie el servidor HCL Commerce para que se apliquen los cambios.