docs: public int doRecordChange(FieldInfo field, int iChangeType, boolean bDisplayOption)
      {
          if ((iChangeType == DBConstants.AFTER_ADD_TYPE) || (iChangeType == DBConstants.AFTER_UPDATE_TYPE))
              if (!this.getOwner().getField(MessageLog.TIMEOUT_TIME).isNull())
          {
              Date timeTimeout = ((DateTimeField)this.getOwner().getField(MessageLog.TIMEOUT_TIME)).getDateTime();
              Date timeNow = new Date();
              if (timeTimeout != null)
              {
                  if ((m_lastTime == null)
                      || (m_lastTime.getTime() <= timeNow.getTime() + EXTRA_TIME_MS))
                  {   // All the waiting tasks have been run, ping the process to start up again.
                      MessageManager messageManager = ((Application)this.getOwner().getTask().getApplication()).getMessageManager();
                      Map<String,Object> properties = new Hashtable<String,Object>();
                      properties.put(PrivateTaskScheduler.TIME_TO_RUN, timeTimeout);
                      properties.put(PrivateTaskScheduler.NO_DUPLICATE, Constants.TRUE);
                      properties.put(DBParams.PROCESS, MessageTimeoutProcess.class.getName());
                      if (messageManager != null)
                          messageManager.sendMessage(new MapMessage(new BaseMessageHeader(MessageTimeoutProcess.TIMEOUT_QUEUE_NAME, MessageConstants.INTRANET_QUEUE, this, null), properties));
                  }
              }
              m_lastTime = timeTimeout;
          }
          return super.doRecordChange(field, iChangeType, bDisplayOption);
      }