runMany = async (
  table_id,
  viewname,
  { columns, layout, auto_save, split_paste, confirm_leave },
  state,
  extra,
  { editManyQuery, getRowQuery, optionsQuery }
) => {
  let { table, fields, rows } = await editManyQuery(state, {
    limit: extra.limit,
    offset: extra.offset,
    orderBy: extra.orderBy,
    orderDesc: extra.orderDesc,
    where: extra.where,
  });
  if (!isNode()) {
    table = Table.findOne({ id: table.id });
    fields = table.getFields();
  }
  const isRemote = !isWeb(extra.req);
  return await asyncMap(rows, async (row) => {
    const html = await render({
      table,
      fields,
      viewname,
      columns,
      layout,
      row,
      req: extra.req,
      res: extra.res,
      state,
      auto_save,
      getRowQuery,
      optionsQuery,
      split_paste,
      isRemote,
      confirm_leave,
    });
    return { html, row };
  });
}
@param {number} table_id
@param {string} viewname
@param {object} opts
@param {*} opts.columns
@param {*} opts.layout
@param {State} state
@param {object} extra
@returns {Promise<Form[]>}