code: func (obj *Doc) GetTablesAndKeysRaw(ctx context.Context, windowSize interface{}, nullSize interface{}, cellHeight int, syntheticMode bool, includeSysVars bool) (json.RawMessage, json.RawMessage, error) {
  	result := &struct {
  		Tr json.RawMessage	`json:"qtr"`
  		K json.RawMessage	`json:"qk"`
  	} {}
  	err := obj.rpc(ctx, "GetTablesAndKeys", result, ensureEncodable(windowSize), ensureEncodable(nullSize), ensureEncodable(cellHeight), ensureEncodable(syntheticMode), ensureEncodable(includeSysVars))
  	return result.Tr, result.K, err 
  }
docs: // Returns:
  // 
  // • The list of tables in an app and the fields inside each table.
  // 
  // • The list of derived fields.
  // 
  // • The list of key fields.
  //
  // Parameters:
  //
  // ◾ windowSize       -   Size of the window that is used to display the results.
  //
  // ◾ nullSize         -   
  //
  // ◾ cellHeight       -   Height of a cell in a table in pixels.
  //
  // ◾ syntheticMode    -   One of:
  // 
  // • true for internal table viewer:
  // Shows a more detailed view on how the Qlik engine defines the relations between fields and the quality of the keys.
  // 
  // • false for source table viewer:
  // Shows the natural relation between fields without reference to synthetic keys and resultant linking synthetic tables. Instead synthetic keys are represented by multiple connectors between tables.
  //
  // ◾ includeSysVars   -   If set to true, the system variables are included.
  //