docs: public boolean doAction(String strAction, int iOptions)
      {
          FieldList record = this.getFieldList();
          FieldTable fieldTable = null;
          if (record != null)
              fieldTable = record.getTable();
          boolean bFlag = false;
          try   {
              bFlag = super.doAction(strAction, iOptions);
              if (bFlag)
                  return bFlag;
              if (Constants.FORM.equalsIgnoreCase(strAction))
              {
                  record = this.makeSelectedRowCurrent();
                  if ((record.getEditMode() == Constants.EDIT_CURRENT) || (record.getEditMode() == Constants.EDIT_IN_PROGRESS))
                      this.getBaseApplet().setProperty(Constants.OBJECT_ID, record.getCounterField().toString());
                  JBaseScreen screen = this.createMaintScreen(null);  // Do NOT pass my record since it is connected to a remote grid table.
                  if (screen != null)
                  {
                      Container parent = null;
                      //xthis.getFieldList().setOwner(screen);    // The record belongs to the new screen
                      if (screen.getParentObject() instanceof Container)
                          parent = (Container)screen.getParentObject();
                      this.getBaseApplet().changeSubScreen(parent, screen, null, iOptions);
                      bFlag = true;
                  }
              }
              if (Constants.SUBMIT.equalsIgnoreCase(strAction))
              {
                  if (m_jTableScreen.isEditing())
                      m_jTableScreen.editCellAt(m_jTableScreen.getEditingRow(), m_jTableScreen.getEditingColumn()); // Validate current
                  m_thinTableModel.updateIfNewRow(-1);    // Update any locked record.
                  this.repaintCurrentRow();
                  bFlag = true;
              }
              if (Constants.DELETE.equalsIgnoreCase(strAction))
              {
                  record = this.makeSelectedRowCurrent();
                  if (record != null)
                  {
                      if ((record.getEditMode() == Constants.EDIT_IN_PROGRESS) ||
                          (record.getEditMode() == Constants.EDIT_CURRENT))
                      {
                          fieldTable.remove();
                      }
                      fieldTable.addNew();
                      this.repaintCurrentRow();
                      bFlag = true;
                  }
              }
              if (Constants.RESET.equalsIgnoreCase(strAction))
              {
                  int iRow = m_jTableScreen.getSelectedRow();
                  if (iRow != -1)
                  {
                      if (m_jTableScreen.isEditing())
                          m_jTableScreen.removeEditor();
                      m_thinTableModel.makeRowCurrent(-1, true);   // Invalidate current row
                      m_thinTableModel.makeRowCurrent(iRow, false); // Re-read selected row
                      this.repaintCurrentRow();
                  }
                  bFlag = true;   // Handled by this screen
              }
          } catch (DBException ex)  {
              this.getBaseApplet().setStatusText(ex.getMessage(), JOptionPane.ERROR_MESSAGE);
          } catch (Exception ex)  {
              ex.printStackTrace();
          }
          return bFlag;
      }