code: public Map<String, Map<String, String>> getObjectScalars(TableDefinition    tableDef,
                                                               Collection<String> objIDs,
                                                               Collection<String> fieldNames) {
          checkServiceState();
          Map<String, Map<String, String>> objScalarMap = new HashMap<>();
          Tenant tenant = Tenant.getTenant(tableDef);
          if (objIDs.size() > 0 && fieldNames.size() > 0) {
              String storeName = objectsStoreName(tableDef);
              for(DRow row: DBService.instance(tenant).getRows(storeName, objIDs)) {
                  Map<String, String> scalarMap = new HashMap<>();
                  objScalarMap.put(row.getKey(), scalarMap);
                  Iterator<DColumn> colIter = row.getColumns(fieldNames).iterator();
                  while (colIter.hasNext()) {
                      DColumn col = colIter.next();
                      String fieldValue = scalarValueToString(tableDef, col.getName(), col.getRawValue());
                      scalarMap.put(col.getName(), fieldValue);
                  }
              }
          }
          return objScalarMap;
      }
docs: Retrieve the requested scalar fields for the given object IDs in the given table.
  The map returned is object IDs -> field names -> field values. The map will be
  empty (but not null) if (1) objIDs is empty, (2) fieldNames is empty, or (3) none
  of the requested object IDs were found. An entry in the outer map may exist with an
  empty field map if none of the requested fields were found for the corresponding
  object.
  
  @param tableDef      {@link TableDefinition} of table to query.
  @param objIDs        Collection of object IDs to fetch.
  @param fieldNames    Collection of field names to fetch.
  @return              Map of object IDs -> field names -> field values for all
  objects found. Objects not found will have no entry in the
  outer map. The map will be empty if no objects were found.