Search code examples
maximo

Maximo Event Filter Java class not being picked up by Publish Channel


I have written a Java class for event filtering on one of the Publish channels, and rebuilt and deployed it. I have referenced it on the Publish channel too. However, Maximo behaves as if the class was never there.

package com.sof.iface.eventfilter;

import java.rmi.RemoteException;


import psdi.iface.mic.MaximoEventFilter;
import psdi.iface.mic.PublishInfo;
import psdi.mbo.MboRemote;
import psdi.util.MXException;
import psdi.util.logging.MXLogger;
import psdi.util.logging.MXLoggerFactory;


public class VSPPWOCOMPEventFilter extends MaximoEventFilter {

    private static final String SILMX_ATTRIBUTE_STATUS = "STATUS";

    private MXLogger log = MXLoggerFactory.getLogger("maximo.application.EVENTFILTER");

    /**
     * Constructor
     * 
     * @param pubInfo           Publish Channel Information
     * @throws MXException      Maximo Exception
     */
    public VSPPWOCOMPEventFilter(PublishInfo pubInfo) throws MXException {

        super(pubInfo);

    } // end constructor.

    /**
     * Decide whether to filter out the event before it triggers the 
     * Publish Channel or not. 
     */
    public boolean filterEvent(MboRemote mbo) throws MXException, RemoteException {

        log.debug("######## com.sof.iface.eventfilter.VSPPWOCOMPEventFilter::filterEvent() - Start of Method");

        boolean filter = false;  
    //  try {
            String status = mbo.getString(SILMX_ATTRIBUTE_STATUS);
            log.debug("######## com.sof.iface.eventfilter.VSPPWOCOMPEventFilter::filterEvent() -  WO Status " + status);




            if(mbo.isModified("STATUS") && status == "COMP") {

                log.debug("######## com.sof.iface.eventfilter.VSPPWOCOMPEventFilter::filterEvent() - Skipping MBO");

                filter = true;
            } else {

                filter = super.filterEvent(mbo);

            } 
        log.debug("######## com.sof.iface.eventfilter.VSPPWOCOMPEventFilter::filterEvent() - End of Method");

        return filter;

    //  }



    } // end filterEvent.

} // end class.

Please ignore the below text :) A good logging (tracing) is always a lifesaver when you have problems in a production environment. I will never stop telling to my fellow programmers how much is important to fill code with meaningful log calls.Maximo has a good and flexible logging subsystem. This IBM TechNote describes in detail how logging works in Maximo. Let’s now see hot to use Maximo logging in your custom Java code.


Solution

  • It looks like you need to skip the outbound message when the Work Order is completed. When the event doesn't seem to occur, make sure to check for these flags:

    • External System is active
    • Publish Channel is active
    • Publish Channel listener is enabled

    I think you could easily achieve the same result with a SKIP action processing rule. See details here:

    https://www.ibm.com/support/knowledgecenter/en/SSLKT6_7.6.0/com.ibm.mt.doc/gp_intfrmwk/c_message_proc_actions.html

    Also worth mentioning: IBM added automation script support for Event Filtering in version 7.6 so no more build/redeploy required.