QlikElixir.QIX.Protocol (qlik_elixir v0.3.5)

View Source

JSON-RPC protocol handling for Qlik Engine API.

The Qlik Engine API uses JSON-RPC 2.0 over WebSocket.

Message Format

Request:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "ClassName.Method",
  "handle": 0,
  "params": [...]
}

Response:

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {...}
}

Error:

{
  "jsonrpc": "2.0",
  "id": 1,
  "error": {"code": -32602, "message": "Invalid params"}
}

Handles

  • 0 = Global object (used for OpenDoc, GetActiveDoc, etc.)
  • App handle = returned from OpenDoc (e.g., 1)
  • Object handle = returned from GetObject (e.g., 2, 3, etc.)

Summary

Functions

Builds params for Doc.GetAllSheets request.

Builds params for GenericObject.GetHyperCubeData request.

Builds params for GenericObject.GetLayout request.

Builds params for Doc.GetObject request.

Builds params for Global.OpenDoc request.

Decodes a JSON-RPC response.

Extracts the qHandle from an OpenDoc or GetObject response.

Extracts hypercube data matrix from GetHyperCubeData response.

Extracts sheet list from GetAllSheets response.

Functions

build_get_all_sheets()

@spec build_get_all_sheets() :: list()

Builds params for Doc.GetAllSheets request.

build_get_hypercube_data(path, pages)

@spec build_get_hypercube_data(String.t(), [map()]) :: map()

Builds params for GenericObject.GetHyperCubeData request.

Parameters

  • path - Path to the hypercube definition (usually "/qHyperCubeDef")
  • pages - List of page requests (defaults to first 1000 rows)

build_get_layout()

@spec build_get_layout() :: list()

Builds params for GenericObject.GetLayout request.

build_get_object(object_id)

@spec build_get_object(String.t()) :: map()

Builds params for Doc.GetObject request.

Note: QIX API expects params as a map, not array.

build_open_doc(app_id)

@spec build_open_doc(String.t()) :: map()

Builds params for Global.OpenDoc request.

Note: QIX API expects params as a map, not array.

decode_response(json)

@spec decode_response(String.t()) :: {:ok, map()} | {:error, map()} | {:error, atom()}

Decodes a JSON-RPC response.

Returns:

  • {:ok, %{id: id, result: result}} for successful responses
  • {:error, %{id: id, code: code, message: message}} for error responses
  • {:error, :invalid_json} for malformed JSON
  • {:error, :invalid_protocol} for non-JSON-RPC messages

encode_request(method, handle, params, request_id)

@spec encode_request(String.t(), non_neg_integer(), list(), pos_integer()) ::
  {:ok, String.t(), pos_integer()}

Encodes a JSON-RPC request.

Returns {:ok, json_string, request_id}.

extract_handle(arg1)

@spec extract_handle(map() | nil) :: {:ok, non_neg_integer()} | {:error, :no_handle}

Extracts the qHandle from an OpenDoc or GetObject response.

extract_hypercube_data(arg1)

@spec extract_hypercube_data(map()) :: {:ok, [list()]}

Extracts hypercube data matrix from GetHyperCubeData response.

extract_sheets(arg1)

@spec extract_sheets(map()) :: {:ok, [map()]}

Extracts sheet list from GetAllSheets response.