<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Fetch Object Data from Qlik Cloud Dashboard in Data Movement &amp; Streaming</title>
    <link>https://community.qlik.com/t5/Data-Movement-Streaming/Fetch-Object-Data-from-Qlik-Cloud-Dashboard/m-p/2525252#M3315</link>
    <description>&lt;P&gt;One problem I see is that you are only looking at the qDef property. If the Measure references a Master Measure, then qDef will be empty and qLibraryId will have the id of the Master Measure.&amp;nbsp;&lt;/P&gt;&lt;P&gt;I recommend the excellent free &lt;A href="https://community.qlik.com/t5/Qlik-Sense-Documents/Qlik-Explorer-for-Developers/ta-p/1949809" target="_blank" rel="noopener"&gt;Qlik Explorer for Developers&lt;/A&gt; to examine and understand the structure of Qlik Objects.&amp;nbsp;&lt;/P&gt;&lt;P&gt;I note there is a new Python Qlik SDK you may find easier to use than crafting the websocket calls.&amp;nbsp;&lt;A href="https://qlik.dev/toolkits/platform-sdk/" target="_blank"&gt;https://qlik.dev/toolkits/platform-sdk/&lt;/A&gt;&lt;/P&gt;&lt;P&gt;-Rob&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Thu, 24 Jul 2025 18:26:08 GMT</pubDate>
    <dc:creator>rwunderlich</dc:creator>
    <dc:date>2025-07-24T18:26:08Z</dc:date>
    <item>
      <title>Fetch Object Data from Qlik Cloud Dashboard</title>
      <link>https://community.qlik.com/t5/Data-Movement-Streaming/Fetch-Object-Data-from-Qlik-Cloud-Dashboard/m-p/2525149#M3314</link>
      <description>&lt;P&gt;Hello,&lt;BR /&gt;&lt;BR /&gt;Following is the script which we are using to fetch the object metadata from qlik cloud dashboard. We want to list out the dimension, measures and their underlying definitions. However when we run the script we do not the expression used for the measure. We only get label of the measure not the underlying expression.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Example -&lt;/P&gt;&lt;P&gt;Let's suppose there is a bar chart on qlik cloud dashboard which has month as dimension and sum(sales) as measure. We want the output like -&amp;nbsp;&lt;BR /&gt;Dimension - Month, Expression - Sum(Sales)&lt;BR /&gt;&lt;BR /&gt;Script -&amp;nbsp;&lt;BR /&gt;&lt;SPAN&gt;import websocket&lt;BR /&gt;import json&lt;BR /&gt;import ssl&lt;BR /&gt;import os&lt;BR /&gt;from datetime import datetime&lt;BR /&gt;&lt;I&gt;# Assuming config.py exists and contains TENANT_URL, API_KEY, APP_ID&lt;/I&gt;&lt;BR /&gt;from config import TENANT_URL, API_KEY, APP_ID&lt;BR /&gt;&lt;BR /&gt;TENANT = TENANT_URL.replace("https://", "").rstrip("/")&lt;BR /&gt;WS_URL = &lt;STRONG&gt;f&lt;/STRONG&gt;"wss://{TENANT}/app/{APP_ID}"&lt;BR /&gt;&lt;BR /&gt;headers = {&lt;BR /&gt;&amp;nbsp; &amp;nbsp; "Authorization": &lt;STRONG&gt;f&lt;/STRONG&gt;"Bearer {API_KEY}"&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;state = {&lt;BR /&gt;&amp;nbsp; &amp;nbsp; "doc_handle": None,&lt;BR /&gt;&amp;nbsp; &amp;nbsp; "infos": [],&lt;BR /&gt;&amp;nbsp; &amp;nbsp; "current_index": 0,&lt;BR /&gt;&amp;nbsp; &amp;nbsp; "object_handles": {},&lt;BR /&gt;&amp;nbsp; &amp;nbsp; "output_data": []&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;&lt;STRONG&gt;def&lt;/STRONG&gt; on_message(ws, message):&lt;BR /&gt;&amp;nbsp; &amp;nbsp; response = json.loads(message)&lt;BR /&gt;&amp;nbsp; &amp;nbsp; print(response)&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; if response.get("id") == 1:&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; state["doc_handle"] = response["result"]["qReturn"]["qHandle"]&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ws.send(json.dumps({&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "jsonrpc": "2.0",&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "id": 2,&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "handle": state["doc_handle"],&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "method": "GetAllInfos",&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "params": {}&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }))&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; elif response.get("id") == 2:&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; state["infos"] = response["result"]["qInfos"]&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print(&lt;STRONG&gt;f&lt;/STRONG&gt;"\n[✓] Found {len(state['infos'])} objects in the app\n")&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; request_next_object(ws)&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; elif response.get("id", 0) &amp;gt;= 1000 and "qReturn" in response.get("result", {}):&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; qid = response["id"] - 1000&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; obj_handle = response["result"]["qReturn"]["qHandle"]&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; state["object_handles"][qid] = obj_handle&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ws.send(json.dumps({&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "jsonrpc": "2.0",&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "id": 2000 + qid,&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "handle": obj_handle,&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "method": "GetLayout",&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "params": {}&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }))&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; elif response.get("id", 0) &amp;gt;= 2000:&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; qid = response["id"] - 2000&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; layout = response.get("result", {}).get("qLayout", {})&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; metadata = extract_metadata(state["infos"][qid], layout)&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print_metadata(metadata)&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; state["output_data"].append(metadata)&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; state["current_index"] += 1&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; request_next_object(ws)&lt;BR /&gt;&lt;BR /&gt;&lt;STRONG&gt;def&lt;/STRONG&gt; request_next_object(ws):&lt;BR /&gt;&amp;nbsp; &amp;nbsp; if state["current_index"] &amp;lt; len(state["infos"]):&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; info = state["infos"][state["current_index"]]&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; qid = state["current_index"]&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; obj_id = info["qId"]&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ws.send(json.dumps({&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "jsonrpc": "2.0",&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "id": 1000 + qid,&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "handle": state["doc_handle"],&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "method": "GetObject",&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "params": {&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "qId": obj_id&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }))&lt;BR /&gt;&amp;nbsp; &amp;nbsp; else:&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print("\n&lt;span class="lia-unicode-emoji" title=":white_heavy_check_mark:"&gt;✅&lt;/span&gt; Completed extracting all metadata.")&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; save_output_to_file()&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ws.close()&lt;BR /&gt;&lt;BR /&gt;&lt;STRONG&gt;def&lt;/STRONG&gt; extract_metadata(info, layout):&lt;BR /&gt;&amp;nbsp; &amp;nbsp; qid = info["qId"]&lt;BR /&gt;&amp;nbsp; &amp;nbsp; qtype = info["qType"]&lt;BR /&gt;&amp;nbsp; &amp;nbsp; title = layout.get("title") or layout.get("qMeta", {}).get("title", "N/A")&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; metadata = {&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "id": qid,&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "type": qtype,&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "title": title,&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "dimensions": [],&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "measures": [],&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "expressions": [] &lt;I&gt;# Changed to a list to hold multiple expressions&lt;/I&gt;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; }&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; if "qHyperCube" in layout:&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dims = layout["qHyperCube"].get("qDimensionInfo", [])&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; meas = layout["qHyperCube"].get("qMeasureInfo", [])&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;I&gt;# Extract dimensions and their expressions&lt;/I&gt;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for d in dims:&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; metadata["dimensions"].append(d.get("qFallbackTitle"))&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if d.get("qDef", {}).get("qDef"): &lt;I&gt;# Check for calculated dimension expression&lt;/I&gt;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; metadata["expressions"].append(d["qDef"]["qDef"])&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;I&gt;# Extract measures and their expressions&lt;/I&gt;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for m in meas:&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; metadata["measures"].append(m.get("qFallbackTitle"))&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if m.get("qDef", {}).get("qDef"): &lt;I&gt;# Check for measure expression&lt;/I&gt;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; metadata["expressions"].append(m["qDef"]["qDef"])&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; elif "qListObject" in layout:&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;I&gt;# For listboxes, the dimension definition is often here&lt;/I&gt;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dim_info = layout["qListObject"].get("qDimensionInfo", {})&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; metadata["dimensions"].append(dim_info.get("qFallbackTitle", "N/A"))&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if dim_info.get("qDef", {}).get("qDef"): &lt;I&gt;# Check for calculated dimension expression in listbox&lt;/I&gt;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; metadata["expressions"].append(dim_info["qDef"]["qDef"])&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &lt;I&gt;# This might still be relevant for specific text objects or variables&lt;/I&gt;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; if "qStringExpression" in layout and layout.get("qStringExpression", {}).get("qExpr"):&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; metadata["expressions"].append(layout["qStringExpression"]["qExpr"])&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &lt;I&gt;# If the expressions list is empty, set it to None for consistency with previous structure&lt;/I&gt;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &lt;I&gt;# if not metadata["expressions"]:&lt;/I&gt;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &lt;I&gt;# &amp;nbsp; &amp;nbsp; metadata["expressions"] = None # Optional: if you prefer None for no expressions&lt;/I&gt;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; return metadata&lt;BR /&gt;&lt;BR /&gt;&lt;STRONG&gt;def&lt;/STRONG&gt; print_metadata(metadata):&lt;BR /&gt;&amp;nbsp; &amp;nbsp; print("---")&lt;BR /&gt;&amp;nbsp; &amp;nbsp; print(&lt;STRONG&gt;f&lt;/STRONG&gt;"ID: {metadata['id']}")&lt;BR /&gt;&amp;nbsp; &amp;nbsp; print(&lt;STRONG&gt;f&lt;/STRONG&gt;"Type: {metadata['type']}")&lt;BR /&gt;&amp;nbsp; &amp;nbsp; print(&lt;STRONG&gt;f&lt;/STRONG&gt;"Title: {metadata['title']}")&lt;BR /&gt;&amp;nbsp; &amp;nbsp; if metadata["dimensions"]:&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print("Dimensions:", metadata["dimensions"])&lt;BR /&gt;&amp;nbsp; &amp;nbsp; if metadata["measures"]:&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print("Measures:", metadata["measures"])&lt;BR /&gt;&amp;nbsp; &amp;nbsp; if metadata["expressions"]: &lt;I&gt;# Changed to expressions&lt;/I&gt;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print("Expressions:", metadata["expressions"]) &lt;I&gt;# Changed to expressions&lt;/I&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;STRONG&gt;def&lt;/STRONG&gt; save_output_to_file(filename="output_metadata.json"):&lt;BR /&gt;&amp;nbsp; &amp;nbsp; with open(filename, "w", encoding="utf-8") as f:&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; json.dump(state["output_data"], f, indent=4)&lt;BR /&gt;&amp;nbsp; &amp;nbsp; print(&lt;STRONG&gt;f&lt;/STRONG&gt;"\n[✓] Metadata saved to {filename}")&lt;BR /&gt;&lt;BR /&gt;&lt;STRONG&gt;def&lt;/STRONG&gt; on_open(ws):&lt;BR /&gt;&amp;nbsp; &amp;nbsp; print("[✓] WebSocket connected")&lt;BR /&gt;&amp;nbsp; &amp;nbsp; ws.send(json.dumps({&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "jsonrpc": "2.0",&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "id": 1,&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "method": "OpenDoc",&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "handle": -1,&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "params": [APP_ID]&lt;BR /&gt;&amp;nbsp; &amp;nbsp; }))&lt;BR /&gt;&lt;BR /&gt;&lt;STRONG&gt;def&lt;/STRONG&gt; on_error(ws, error):&lt;BR /&gt;&amp;nbsp; &amp;nbsp; print("Error:", error)&lt;BR /&gt;&lt;BR /&gt;&lt;STRONG&gt;def&lt;/STRONG&gt; on_close(ws, code, msg):&lt;BR /&gt;&amp;nbsp; &amp;nbsp; print("WebSocket closed")&lt;BR /&gt;&lt;BR /&gt;websocket.enableTrace(False)&lt;BR /&gt;&lt;BR /&gt;ws = websocket.WebSocketApp(&lt;BR /&gt;&amp;nbsp; &amp;nbsp; WS_URL,&lt;BR /&gt;&amp;nbsp; &amp;nbsp; on_open=on_open,&lt;BR /&gt;&amp;nbsp; &amp;nbsp; on_message=on_message,&lt;BR /&gt;&amp;nbsp; &amp;nbsp; on_error=on_error,&lt;BR /&gt;&amp;nbsp; &amp;nbsp; on_close=on_close,&lt;BR /&gt;&amp;nbsp; &amp;nbsp; header=headers&lt;BR /&gt;)&lt;BR /&gt;&lt;BR /&gt;ws.run_forever(sslopt={"cert_reqs": ssl.CERT_NONE})&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 24 Jul 2025 06:16:23 GMT</pubDate>
      <guid>https://community.qlik.com/t5/Data-Movement-Streaming/Fetch-Object-Data-from-Qlik-Cloud-Dashboard/m-p/2525149#M3314</guid>
      <dc:creator>Nikhil_Qlik1</dc:creator>
      <dc:date>2025-07-24T06:16:23Z</dc:date>
    </item>
    <item>
      <title>Re: Fetch Object Data from Qlik Cloud Dashboard</title>
      <link>https://community.qlik.com/t5/Data-Movement-Streaming/Fetch-Object-Data-from-Qlik-Cloud-Dashboard/m-p/2525252#M3315</link>
      <description>&lt;P&gt;One problem I see is that you are only looking at the qDef property. If the Measure references a Master Measure, then qDef will be empty and qLibraryId will have the id of the Master Measure.&amp;nbsp;&lt;/P&gt;&lt;P&gt;I recommend the excellent free &lt;A href="https://community.qlik.com/t5/Qlik-Sense-Documents/Qlik-Explorer-for-Developers/ta-p/1949809" target="_blank" rel="noopener"&gt;Qlik Explorer for Developers&lt;/A&gt; to examine and understand the structure of Qlik Objects.&amp;nbsp;&lt;/P&gt;&lt;P&gt;I note there is a new Python Qlik SDK you may find easier to use than crafting the websocket calls.&amp;nbsp;&lt;A href="https://qlik.dev/toolkits/platform-sdk/" target="_blank"&gt;https://qlik.dev/toolkits/platform-sdk/&lt;/A&gt;&lt;/P&gt;&lt;P&gt;-Rob&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 24 Jul 2025 18:26:08 GMT</pubDate>
      <guid>https://community.qlik.com/t5/Data-Movement-Streaming/Fetch-Object-Data-from-Qlik-Cloud-Dashboard/m-p/2525252#M3315</guid>
      <dc:creator>rwunderlich</dc:creator>
      <dc:date>2025-07-24T18:26:08Z</dc:date>
    </item>
  </channel>
</rss>

