Developer

Variables for Troubleshooting

When you develop custom states, include error output variables that can help you troubleshoot problems in the production environment.

To facilitate debugging, include output variables in the state code for an error message, a unique error ID, and a service code. If the state calls an external Web service, for example, the Web service can return a code in the service-code output variable.
// Define output variables

private static final OutputAttribute outErrMsg = 
                     new OutputAttribute("ERR_MSG", "Error Message");        
private static final OutputAttribute outErrUUID = 
                     new OutputAttribute("ERR_UUID", "Error Unique ID");        
private static final OutputAttribute outSvcCode = 
                     new OutputAttribute("SVC_CODE", "Service Code");        
    
// some code omitted here…    
        
@Override    
protected SmappState processStateLogic(…)    
{    
  // Logic implementation    
      
  try {            
    // Reset the error output variable    
    outErrMsg.setHoldValue("");        
    outErrUUID.setHoldValue("");        
    saveOutputAttributes();            
    return continueOk();
  }    
  catch (Exception ex) {            
    String uuid = UUID.randomUUID().toString();        
    log.error(ex.getMessage()+ " [UUID={}]", uuid);        
    outErrMsg.setHoldValue(message);    
    outErrUUID.setHoldValue(uuid);    
    saveOutputAttributes();            
    return continueFail();    
  } 
} 

UUID is a unique user ID that you can use to report errors. For example, if an error occurs, an SMS message can be sent to the consumer, who is identified by the UUID. Consumers can call customer support to report issues, using their UUID. UUIDs are logged so they can be correlated with reported issues.