docs: public Object doSetHandle(Object bookmark, int iOpenMode, String strFields, int iHandleType) throws DBException, RemoteException
      {
          m_objCurrentCacheRecord = NONE;
          m_objCurrentLockedRecord = NONE;
          try {   // This caching logic is exactly the same as seek caching.
              Object objData = null;
              if ((m_mapCache == null) && (m_htCache == null))
                  m_htCache = new Hashtable<Object,Object>();    // Okay, start caching keys and records
              if (m_htCache != null)
              {
                  if (bookmark instanceof Integer)
                      objData = m_htCache.get(bookmark);    // Try to find this in the cache
              }
              m_mapCache = null;  // If seek is used, the grid cache is no good anymore.
              if (objData != null)
                  m_objCurrentCacheRecord = bookmark;   // Current data is Cached
              if (objData == null)
              {
                  m_objCurrentPhysicalRecord = NONE;
                  objData = m_tableRemote.doSetHandle(bookmark, iOpenMode, strFields, iHandleType);
                  if (objData instanceof Vector)
                      if (m_htCache != null)
                  {
                      m_objCurrentPhysicalRecord = bookmark;    // Current data is current
                      m_objCurrentCacheRecord = bookmark;
                      m_htCache.put(bookmark, objData);
                  }
              }
              return objData;
          } catch (RemoteException ex) {
              throw ex;
          }
      }