docs: public boolean doCommand(String strCommand, ScreenField sourceSField, int iCommandOptions)
      {
          if (strCommand.equalsIgnoreCase(this.getButtonCommand()))
              if (sourceSField == this)
          {       // Only process this command
              Map<String,Object> properties = new Hashtable<String,Object>();
              strCommand = this.getProperties(strCommand, properties);
              if (this.getRecord() != null)
              {
                  Task task = null;
                  if (this.getRecord().getRecordOwner() != null)
                      task = this.getRecord().getRecordOwner().getTask();
                  //xif (task == null)
                  //x    task = BaseApplet.getSharedInstance();
                  Application application = (Application)task.getApplication();
                  if (strCommand.equalsIgnoreCase(ThinMenuConstants.LOOKUP))
                  {
                      BasePanel parentScreen = Screen.makeWindow(application);
                      GridScreen screen = (GridScreen)this.getRecord().makeScreen(null, parentScreen, ScreenConstants.SELECT_MODE, true, true, true, true, properties);
                      if (this.getRecord().getRecordOwner() == null)
                          screen.setSelectQuery(this.getRecord(), false); // Since this record isn't linked to the screen, manually link it.
                  }
                  if (strCommand.equals(ThinMenuConstants.NEXT))
                  {
                      int errorCode = DBConstants.NORMAL_RETURN;
                      if (this.getRecord() != null)
                      {
                          try
                          {
                              if (this.getRecord().getEditMode() == Constants.EDIT_IN_PROGRESS)
                                  this.getRecord().set();
                              if (this.getRecord().getEditMode() == Constants.EDIT_ADD)
                                  this.getRecord().add();
                          }
                          catch( DBException e )
                          {
                              this.getRootScreen().displayError(e);
                          }
                          if (errorCode == DBConstants.NORMAL_RETURN)
                          {
                              try
                              {
                                  this.getRecord().next();
                              }
                              catch( DBException e )
                              {
                                  this.getRootScreen().displayError(e);
                              }
                          }
                      }
                  }
                  if (strCommand.equalsIgnoreCase(ThinMenuConstants.FORM))
                  {
                      BasePanel parentScreen = Screen.makeWindow(application);
                      this.getRecord().makeScreen(null, parentScreen, ScreenConstants.MAINT_MODE, true, true, true, true, properties);
                  }
                  if (strCommand.equals(ThinMenuConstants.PRINT))
                  {   // *** FIX THIS ***
                      BasePanel parentScreen = Screen.makeWindow(application);
                      this.getRecord().makeScreen(null, parentScreen, ScreenConstants.MAINT_MODE, true, true, true, true, properties);
                  }
                  return true;    // Command handled
              }
              if (m_field != null)
              {
                  if (strCommand.equals(ThinMenuConstants.CANCEL))
                  {
                      m_field.setString(Constants.BLANK);
                  }
                  else if (strCommand.equals(ScreenModel.CLEAR))
                  {
                      m_field.setData(null);
                  }
                  else if (strCommand.equals(ThinMenuConstants.UNDO))
                  {
                      m_field.setString(Constants.BLANK);
                  }
                  else if (strCommand.equals(ScreenModel.MAIL))
                  {
                      String strHyperlink = m_field.getHyperlink();
                      if (strHyperlink != null) if (strHyperlink.length() > 0)
                          if (this.getScreenFieldView() != null)
                              this.getScreenFieldView().showDocument(strHyperlink, 0);
                  }
                  else if (strCommand.equals(ScreenModel.EMAIL))
                  {
                      String strHyperlink = m_field.getHyperlink();
                      if (strHyperlink != null) if (strHyperlink.length() > 0)
                          if (this.getScreenFieldView() != null)
                              this.getScreenFieldView().showDocument(strHyperlink, 0);
                  }
                  else if (strCommand.equals(ScreenModel.PHONE))
                  {
                      String strHyperlink = m_field.getHyperlink();
                      if (strHyperlink != null) if (strHyperlink.length() > 0)
                          if (this.getScreenFieldView() != null)
                              this.getScreenFieldView().showDocument(strHyperlink, 0);
                  }
                  else if (strCommand.equals(ScreenModel.FAX))
                  {
                      String strHyperlink = m_field.getHyperlink();
                      if (strHyperlink != null) if (strHyperlink.length() > 0)
                          if (this.getScreenFieldView() != null)
                              this.getScreenFieldView().showDocument(strHyperlink, 0);
                  }
                  else if (strCommand.equals(ScreenModel.URL))
                  {
                      String strHyperlink = m_field.getHyperlink();
                      if (strHyperlink != null) if (strHyperlink.length() > 0)
                          if (this.getScreenFieldView() != null)
                              this.getScreenFieldView().showDocument(strHyperlink, 0);
                  }
                  else if (m_strValue != null)
                  {
                      m_field.setString(m_strValue);
                  }
                  else
                      return super.doCommand(strCommand, sourceSField, iCommandOptions);    // Command handled
                  return true;    // Command handled
              }
              if (m_strValue != null)
              {
                  Task task = null;
                  RecordOwner recordOwner = null;
                  if (m_field != null)
                      recordOwner = m_field.getRecord().getRecordOwner();
                  if (recordOwner == null)
                      if (this.getRecord() != null)
                          recordOwner = this.getRecord().getRecordOwner();
                  if (recordOwner == null)
                      if (this.getConverter() != null)
                          if (this.getConverter().getField() != null)
                              recordOwner = ((BaseField)this.getConverter().getField()).getRecord().getRecordOwner();
                  if (recordOwner != null)
                      task = recordOwner.getTask();
                  //xif (task == null)
                  //x    task = BaseApplet.getSharedInstance();
                  Application application = (Application)task.getApplication();
                  BasePanel screenParent = BasePanel.makeWindow(application);
                  if (strCommand.equals("Record"))
                      BaseScreen.makeScreenFromRecord(null, screenParent, m_strValue, ScreenConstants.MAINT_MODE | ScreenConstants.DEFAULT_DISPLAY, null);
                  else
                      Record.makeNewScreen(m_strValue, null, screenParent, ScreenConstants.DEFAULT_DISPLAY, null, null, true);
                  return true;    // Command handled
              }
              if (strCommand != null) if (sourceSField == this) if (this.getConverter() != null)
              {
              // HACK - I say that SCannedBox should set the target field to the command value, but
              // if I connect a command cannedbox to a field so it gets enabled with it I don't want
              // to set the value, I just want to send the command. You should use a SButtonBox
              // with the value you want set in the constructor!
              // This is a hack, until you can review the code and take this out.
                  if (this.getConverter().getField() != null)
                      if ((!(this.getConverter().getField() instanceof NumberField))
                          || (Utility.isNumeric(strCommand)))
                  {
                      this.getConverter().setString(strCommand);
                      return true;    // Command handled
                  }
              // End hack
              }
          }
          // Do the normal command
          return super.doCommand(strCommand, sourceSField, iCommandOptions);
      }