docs: public int doRecordChange(FieldInfo field, int iChangeType, boolean bDisplayOption)
      { // Read a valid record
          int iErrorCode = super.doRecordChange(field, iChangeType, bDisplayOption);      // Initialize the record
          if (iErrorCode != DBConstants.NORMAL_RETURN)
              return iErrorCode;
          boolean bSetIfModified = true;
          switch (iChangeType)
          {
              case DBConstants.UPDATE_TYPE:   // This should not be necessary (but I do it anyway).
                  if (!this.getOwner().isRefreshedRecord())
                      break;  // No first add
                  bSetIfModified = false;
              case DBConstants.ADD_TYPE:
                  boolean bNonNulls = this.setMainKey(bDisplayOption, null, bSetIfModified);              // Set up the key (keys are marked as changed if they change!)
                  if ((bNonNulls == false) && ((this.getOwner().getMasterSlave() & RecordOwner.SLAVE) == 0))  // Don't return for a server!
                  {
                      if (this.getOwner().getTask() != null)
                          return this.getOwner().getTask().setLastError("Main key cannot be null");
                      return DBConstants.ERROR_RETURN;    // Key can't be null!
                  }
                  break;
          }
          return iErrorCode;      // Initialize the record
      }