Versions tabel
Version,Status,Published.Wheels(aantal dependency artifacts).Build (ms).
Elements reference
Deze pagina behandelt alles na het editorwerk: publiceren, versioning, runtime vars/secrets, test execute, execution logs en integratie met datasources.
| Onderdeel | Beschrijving |
|---|---|
| Publish | Valideert draft, bouwt dependencies en maakt een nieuwe version. |
| latestVersion | Elementmetadata verwijst na publish naar nieuwste version. |
| Version status | Bevat build/publish uitkomst per versie. |
| Build metrics | Wheels count en build duration worden opgeslagen. |
Version, Status, Published.Wheels (aantal dependency artifacts).Build (ms).
| Type | Input | Gedrag |
|---|---|---|
| Runtime var | ID + JSON value | JSON moet valide zijn; leesbaar met getVar(). |
| Runtime secret | ID + nieuwe waarde bij opslaan | Write-only opslag; leesbaar met getSecret(). |
| Runtime writeback | setVar() in code | Nieuwe waarde wordt direct naar de runtime store geschreven. |
| Veld | Beschrijving |
|---|---|
version | Leeg betekent latest published version. |
timeoutSeconds | Bereik 1-3600, default 3600. |
params | JSON object met inputparameters. Element widget-runs en widget-test-runs voegen params.__dashview.theme.mode toe met light of dark. Interactieve Element widgets sturen acties terug via params.__dashview.interaction en vorige state via params.__dashview.state. |
{
"version": "",
"timeoutSeconds": 3600,
"params": {
"from": "2026-01-01",
"to": "2026-01-31",
"country": "NL",
"__dashview": {
"theme": {
"mode": "light",
"isDark": false,
"isLight": true
},
"widget": {
"id": "widget_dynamic_html",
"type": "element"
}
}
}
}
trigger-Elements zijn one-shot handlers via POST /element/{elementId}.server-Elements publiceren een ASGI/FastAPI-app via dezelfde gateway: /element/{elementId} en /element/{elementId}/{path...}.| Input | Waar beschikbaar | Beschrijving |
|---|---|---|
params.request | run(params) | Request envelope met method, path, query, headers, body/json/form en bodygrootte. |
params.__dashview.request | run(params) | Zelfde envelope onder de Dashview namespace. |
context.request | run(context, params) | Zelfde envelope voor code die runtime metadata via context leest. |
def run(context, params):
request = context["request"]
return {
"statusCode": 200,
"headers": {"x-element": "trigger"},
"json": {"ok": True, "payload": params.get("json")},
}
from fastapi import FastAPI
app = FastAPI()
@app.post("/logs")
async def ingest_logs(payload: dict):
dataSources.appendRows("chargepoint_logs", [payload])
return {"ok": True}
Authorization en cookie-achtige headers worden niet aan Element-code doorgegeven. Server Elements draaien in dezelfde Element runtime als normale Elements, dus ingebouwde helpers zoals queryDataSources en dataSources.appendRows zijn beschikbaar vanuit de ASGI-app.
element en Default data format = Live stream, of direct via een gepubliceerd Element van type stream_data.dataFormat: "livestream". Legacy configs met streamMode: "commands" blijven ondersteund.| Helper | Doel | Gedrag in widgets |
|---|---|---|
emitProgress(...) | Status/progress doorgeven | Geeft progress events door; voegt geen datasource rows toe. |
appendRows([...]) | Nieuwe rows toevoegen | Widgets zien extra rows terwijl het Element nog draait. |
replaceRows([...]) | Volledige dataset vervangen | Widgets schakelen over naar de nieuwe set rows. |
clearRows() | Huidige rows leegmaken | Maakt de live datasource tabel leeg voordat nieuwe rows volgen. |
/data/{id}/livestream, niet voor gewone snapshot/parquet loads.requestParamsMode op none als je die filterparams juist niet wilt doorgeven.data- en stream_data-Elements zijn direct selecteerbaar als datasource in dashboards; een aparte datasource-doc is daarvoor niet verplicht.def run(context, params):
import time
emitProgress(phase="starting", message="Start live run", progressPercent=0)
clearRows()
for step in range(1, 5):
time.sleep(3)
appendRows([{
"step": step,
"message": f"Tick {step}",
"value": step * 10,
}])
emitProgress(
phase="running",
message=f"Step {step} van 4",
progressPercent=step * 25,
)
return {"done": True}
element-examples/command_stream_demo.py toont incrementele row updates.element-examples/cloudrunlogs.py toont een langere append-only live tail.| Kolom | Beschrijving |
|---|---|
Time | Starttijd van de run. |
Status | Toegestane waarden: success, error, failed. |
Source | Herkomst (admin_test, datasource, flow, etc.). |
Version | Uitgevoerde version. |
Duration | Runtime duur in ms. |
Error | Korte foutsamenvatting. |
View details | Volledige payload incl. meta/stdout/stderr/result en vastgelegde logger-berichten. |
source=server_http nadat de response body klaar is.source=server_websocket wanneer de sessie sluit of faalt.logger, bijvoorbeeld logger.info("Start refresh") of logger.error("API call mislukt").logger.exception(...).stdout of traceback hoeft.elementId, elementVersion, elementEntrypoint.requestParamMap.elementTimeoutSeconds.Test execution payload voor een gepubliceerd Element:
{
"version": "v_20260605090000_abcd12",
"timeoutSeconds": 3600,
"params": {
"country": "NL",
"limit": 20
}
}
Element-backed cached datasource payload:
{
"id": "orders-from-element",
"name": "Orders from Element",
"type": "element",
"dataFormat": "parquet-remote",
"elementId": "el_orders",
"elementVersion": "v_20260605090000_abcd12",
"elementEntrypoint": "run",
"includeRequestQueryParams": true
}
Live stream datasource payload:
{
"id": "orders-live",
"name": "Orders live",
"type": "element",
"elementId": "el_orders_live",
"elementVersion": "v_20260605090000_abcd12",
"elementEntrypoint": "run",
"dataFormat": "livestream",
"requestParamsMode": "filters"
}
Gebruik appendDataSourceRows of dataSources.appendRows wanneer een Element rows blijvend moet opslaan in een uplink/parquet-backed datasource voor latere dashboards, queries of andere Elements.
def run():
rows = [{
"createdAt": "2026-06-05T12:00:00Z",
"status": "ok",
"value": 123,
}]
result = dataSources.appendRows("element_event_store", rows, merge=True)
return {"inserted": result["inserted"]}
appendRows(); duurzame writes maken parquet parts via uplink.meta kan uplink auto-create velden bevatten zoals dataSourceName, dataFormat, parquetPartitionColumn en parquetPartitionGranularity.| Helper | Signature | Return shape | Caveat |
|---|---|---|---|
queryDataSources | queryDataSources(sql, sources=None, includeAllDatasources=None, allowAgentsOnly=False, strictSources=None, maxRows=None, timeoutSeconds=None, backendBaseUrl=None) | Dict-like result met rows, columns, rowCount, .to_pandas(), .to_dataframe(). | Gebruik datasource-id's als tabelnamen; geef expliciete sources mee wanneer nodig. |
appendDataSourceRows | appendDataSourceRows(dataSourceId, rows=None, merge=None, forcedFilterHash=None, meta=None, timeoutSeconds=None, idempotencyKey=None) | Dict-like write result met inserted, parts, uris, createdDataSource en optionele merge. | Duurzame uplink/parquet append only; vereist geïnjecteerde datasource write capability. |
askDashbot | askDashbot(prompt, responseFormat=None, allowTools=None, maxToolCalls=None, toolScope=None, contextId=None, timeoutSeconds=None, ...) | Dict-like Dashbot result met message, text, parsed, usage en warnings. | Alleen beschikbaar bij user-authenticated executions. Tools staan standaard uit; zet allowTools=True alleen bewust aan. |
getVar | getVar(name, default=None) | Actuele opgeslagen JSON value of default. | Leest de runtime store op het moment van aanroepen; alleen voor niet-secret configuratie. |
setVar | setVar(name, value=None) | De JSON-serializable value die is opgeslagen. | Schrijft direct; alleen gebruiken bij bewuste persistente writeback. |
getSecret | getSecret(name, default=None) | Secret value of default tijdens runtime. | Secret values nooit returnen, loggen of committen. |
emitProgress | emitProgress(payload=None, **kwargs) | {"event":"progress","phase":"running",...} | Status only; voegt geen datasource rows toe. |
appendRows | appendRows(rows=None, **kwargs) | {"event":"command","op":"append","rows":[...]} | Alleen live stream / dataFormat="livestream". |
replaceRows | replaceRows(rows=None, **kwargs) | {"event":"command","op":"replace","rows":[...]} | Rows moeten JSON-serializable zijn. |
clearRows | clearRows(payload=None, **kwargs) | {"event":"command","op":"clear"} | Leegt de huidige live datasource rows. |
createNotification | createNotification(payload=None, **kwargs) | Notification side-effect payload in runtime output. | Recipient fields kunnen userUid, userIds of recipientUids zijn. |
createTask | createTask(payload=None, **kwargs) | Task side-effect payload in runtime output. | Gebruik een title; assignees gaan via user/assignee uid fields. |
Import shims werken ook: from queryDataSources import queryDataSources, from query_datasources import query_datasources, import dataSources, from appendDataSourceRows import appendDataSourceRows, from askDashbot import askDashbot en import dashbot.
def run(context, params):
answer = askDashbot(
"Vat deze status samen in een zin.",
allowTools=False,
timeoutSeconds=3600
)
return {"summary": answer.text}
type="element", elementId, elementVersion en elementEntrypoint="run".dataFormat="parquet-remote", queue je een parquet refresh en lees je de datasource flow totdat de terminal refresh event zichtbaar is.dataFormat="parquet" op een datasource die door parquetrefresh ververst moet worden. Gebruik parquet-remote of parquet-remote-view.elementVersion.yield gebruikt voor progress. Gebruik emitProgress, appendRows, replaceRows en clearRows.appendRows() gebruiken wanneer duurzame parquet opslag nodig is. Gebruik appendDataSourceRows() of dataSources.appendRows().yield en return <value> mixen in dezelfde entrypoint.get_element_runtime_contract, list_element_builtin_functions, get_element_builtin_function.validate_element, create_element, update_element, publish_element, run_element_test, list_element_execution_logs, read_element_execution_log.list_runtime_variables, set_runtime_variable, delete_runtime_variable, list_runtime_secrets, set_runtime_secret, delete_runtime_secret.validate_datasource, create_datasource, update_datasource, refresh_datasource_parquet, list_datasource_flows, read_datasource_flow, run_datasource_query.search_dashview_docs, resolve_dashview_doc_topic, read_dashview_doc_topic.GET /elements, GET /elements/{element_id}, POST /elements, PUT /elements/{element_id}.POST /elements/{element_id}/publish, POST /elements/{element_id}/execute.GET /elements/{element_id}/execution-logs, GET /elements/{element_id}/execution-logs/{log_id}.GET /runtime-store/vars, PUT /runtime-store/vars/{variable_id}, GET /runtime-store/secrets, PUT /runtime-store/secrets/{secret_id}.POST /data-sources/{datasource_id}/parquet-refresh voor cached datasource refresh.Gebruik de MCP Swagger helpers get_backend_api_summary, search_backend_api_endpoints en get_backend_api_endpoint voor raw backend calls.
# Before writing Element source through MCP:
runtime = get_element_runtime_contract()
query_helper = get_element_builtin_function("queryDataSources")
secret_helper = get_element_builtin_function("getSecret")
# Before guessing docs filenames:
doc = read_dashview_doc_topic("element-runtime-builtins")
# Before binding a table/filter:
rows = run_datasource_query(
"select * from orders_from_element limit 20",
sources=[{"dataSourceId": "orders_from_element"}],
strict_sources=True,
max_rows=20
)