docs: public int doRecordChange(Field field, int iChangeType, boolean bDisplayOption)
      {   // So what... there's a new record
          if (iChangeType == DBConstants.FIELD_CHANGED_TYPE)
          { // When the first field changes, lock the record!
              Utility.getLogger().info(this.getTableNames(false) + " Record field changed");
              if ((this.getOpenMode() & DBConstants.OPEN_LOCK_ON_CHANGE_STRATEGY) == DBConstants.OPEN_LOCK_ON_CHANGE_STRATEGY)
              {
                  Task task = null;
                  if (this.getRecordOwner() != null)
                      task = this.getRecordOwner().getTask();
                  //if (task == null)
                  //    task = BaseApplet.getSharedInstance();
                  Object[] rgobjEnabledFields = null;
                  try   {
                      if (this.getEditMode() == Constants.EDIT_ADD) // No status = no action
                          if ((this.getOpenMode() & DBConstants.OPEN_REFRESH_AND_LOCK_ON_CHANGE_STRATEGY) == DBConstants.OPEN_REFRESH_AND_LOCK_ON_CHANGE_STRATEGY)
                      {   // Special case - Write/lock on addNew()
                          if ((field != null)
                              && (field.isVirtual()))
                                  return DBConstants.NORMAL_RETURN;   // Don't acknowledge a virtual field change
                          if ((field instanceof CounterField)
                              || (this.getCounterField() == null))
                                  return DBConstants.NORMAL_RETURN;   // Don't acknowledge a counter field change or a non auto file
                          this.handleRecordChange(DBConstants.REFRESH_TYPE);     // Tell listeners I'm going to refresh the record
                          rgobjEnabledFields = this.setEnableNonFilter(null, false, false, false, false, false);
                          boolean[] rgbModified = this.getModified();
                          this.add();
                          Object varBookmark = this.getLastModified(DBConstants.DATA_SOURCE_HANDLE);
                          this.getTable().setHandle(varBookmark, DBConstants.DATA_SOURCE_HANDLE);
                          this.edit();        // Lock this record
                          this.setEditMode(this.getEditMode() | DBConstants.EDIT_REFRESHED);  // Special Mode
                          this.setModified(rgbModified);  // This is required, so any file listeners looking for a modified field on add will see this modified field
                          this.setEnableNonFilter(rgobjEnabledFields, false, false, false, false, false);   // Re-enable all file behaviors
                          rgobjEnabledFields = null;
                          return this.handleRecordChange(DBConstants.AFTER_REFRESH_TYPE);     // Tell listeners I refreshed the record
                      }
                      int iErrorCode = this.edit();        // Lock this record
                      if (iErrorCode != DBConstants.NORMAL_RETURN)
                      {
                          if (iErrorCode == DBConstants.ERROR_RETURN)
                          {
                              String strError = "Record locked";
                              if (task != null)
                              {
                                  strError = ((BaseApplication)task.getApplication()).getResources(ResourceConstants.ERROR_RESOURCE, true).getString(strError);
                                  return task.setLastError(strError);
                              }
                          }
                          return iErrorCode;  // Error
                      }
                  }
                  catch(DBException ex)  {
                      if (task != null)
                      {
                          String RECORD_LOCKED_BY_MESSAGE = "Record locked by ";
                          String strError = ex.getMessage();
                          if ((strError != null) && (strError.startsWith(RECORD_LOCKED_BY_MESSAGE)))
                              strError = ((BaseApplication)task.getApplication()).getResources(ResourceConstants.ERROR_RESOURCE, true).getString(strError.substring(0, RECORD_LOCKED_BY_MESSAGE.length() - 1)) + strError.substring(RECORD_LOCKED_BY_MESSAGE.length() - 1);
                          else
                              strError = ((BaseApplication)task.getApplication()).getResources(ResourceConstants.ERROR_RESOURCE, true).getString(strError);
                          return task.setLastError(strError);
                      }
                      return ex.getErrorCode();
                  } finally {
                      if (rgobjEnabledFields != null)
                          this.setEnableNonFilter(rgobjEnabledFields, false, false, false, false, false);   // Re-enable all file behaviors
                  }
              }
          }
          return DBConstants.NORMAL_RETURN;
      }