Paneelinformatie
Toegang tot Dashboard Paneelconfiguraties
Bekijk en maak visualisatiepanelen aan in dashboards, inclusief hun opmaak, positie en configuratie-instellingen.
Dashboardpanelen Opvragen
GET /api/{tenantId}/{projectId}/dashboard/{dashboardId}/panels
Haalt alle geconfigureerde visualisatiepanelen op in een dashboard, inclusief paneltypen, posities, afmetingen en configuratie-instellingen.
Padparameters
| Parameter | Type | Vereist | Beschrijving |
|---|---|---|---|
tenantId |
GUID | Ja | De tenant identificator |
projectId |
GUID | Ja | De projectidentificator |
dashboardId |
GUID | Ja | De dashboardidentificator |
Reactie (200 OK)
{
"dashboardId": "880e8400-e29b-41d4-a716-446655440000",
"panels": [
{
"panelId": "990e8400-e29b-41d4-a716-446655440000",
"name": "Process Flow Chart",
"panelType": "DashboardPanelProcessMap",
"position": "Row: 1, Col: 1",
"width": 6,
"height": 4,
"configuration": "{\"dataSource\": \"MainProcess\", \"visualization\": \"flow\"}"
},
{
"panelId": "aa0e8400-e29b-41d4-a716-446655440000",
"name": "KPI Summary",
"panelType": "DashboardPanelSingleValue",
"position": "Row: 1, Col: 7",
"width": 3,
"height": 2,
"configuration": "{\"metric\": \"avgCycleTime\", \"format\": \"duration\"}"
}
]
}
Response Velden
| Veld | Type | Beschrijving |
|---|---|---|
dashboardId |
GUID | Het dashboard dat deze panelen bevat |
panels |
array | Lijst met paneelobjecten |
Paneelobjectvelden
| Veld | Type | Beschrijving |
|---|---|---|
panelId |
GUID | Unieke identificator voor het paneel |
name |
string | Weergavetitel van het paneel |
panelType |
string | Type visualisatie (zie sectie Paneltypen) |
position |
string | Positie in het grid als "Row: X, Col: Y" |
width |
integer | Breedte van het paneel in grid-eenheden |
height |
integer | Hoogte van het paneel in grid-eenheden |
configuration |
string | JSON-string met paneelspecifieke instellingen |
Foutresponstypes
Niet Gevonden (404):
{
"Error": "Dashboard not found",
"DashboardId": "880e8400-e29b-41d4-a716-446655440000"
}
Dashboardpaneel Maken
POST /api/{tenantId}/{projectId}/dashboard/{dashboardId}/panel
Maakt een nieuw visualisatiepaneel aan in een dashboard. De API maakt automatisch het geschikte selectorblok aan op basis van het paneeltype en de opgegeven instellingen.
Padparameters
| Parameter | Type | Vereist | Beschrijving |
|---|---|---|---|
tenantId |
GUID | Ja | De tenant identificator |
projectId |
GUID | Ja | De projectidentificator |
dashboardId |
GUID | Ja | De dashboardidentificator |
Request Body
{
"title": "string (verplicht)",
"description": "string (optioneel)",
"panelType": "string (verplicht)",
"blockId": "GUID (verplicht voor datapunten)",
"row": "integer (verplicht, 0-gebaseerd)",
"column": "integer (verplicht, 0-gebaseerd)",
"width": "integer (verplicht, 1-12)",
"height": "integer (verplicht, 1-20)",
"settings": "string (optioneel, JSON voor selectorconfiguratie)"
}
Request Body Velden
| Veld | Type | Vereist | Beschrijving |
|---|---|---|---|
title |
string | Ja | Weergavetitel van het paneel |
description |
string | Nee | Optionele beschrijving |
panelType |
string | Ja | Paneeltype klassennaam (zie sectie Paneltypen) |
blockId |
GUID | Ja* | Calculatorblok ID voor weergave (*niet vereist voor DashboardPanelDashboardNote) |
row |
integer | Ja | Rijpositie (0-gebaseerd) |
column |
integer | Ja | Kolompositie (0-gebaseerd) |
width |
integer | Ja | Paneelbreedte in grid-eenheden (1-12) |
height |
integer | Ja | Paneelhoogte in grid-eenheden (1-20) |
settings |
string | Nee | JSON-string met selectorconfiguratie |
Reactie (201 Created)
{
"panelId": "5b54172c-b15c-4dd9-bab6-6cfceb7389df",
"title": "My KPI Panel",
"dashboardPanelClassName": "DashboardPanelSingleValue",
"row": 0,
"column": 0,
"width": 2,
"height": 1,
"blockId": "db0dd1b9-63b5-4754-92b1-2764f4a3fb68"
}
Opmerking: De blockId in de reactie is het SELECTOR blok-ID, niet het originele calculatorblok-ID. De API maakt automatisch een selectorblok dat de calculator wikkelt.
Foutresponstypes
Bad Request (400) - Ontbrekend Blok:
{
"Error": "VALIDATION_ERROR",
"Message": "BlockId is required for panel type 'DashboardPanelSingleValue'"
}
Bad Request (400) - Ongeldig Paneeltype:
{
"Error": "VALIDATION_ERROR",
"Message": "Invalid panel type 'InvalidType'. Valid types: DashboardPanelSingleValue, DashboardPanelCalculator, ..."
}
Bad Request (400) - Blok Niet Gevonden:
{
"Error": "VALIDATION_ERROR",
"Message": "Block 'guid' does not exist"
}
Paneltypen
mindzieStudio dashboards ondersteunen de volgende paneeltypen:
| Paneeltype Klasse | Gemaakt Selector | Beschrijving |
|---|---|---|
DashboardPanelCalculator |
SelectorFullCalculator | Volledige calculatoroutput (proceskaarten, trends, grafieken) |
DashboardPanelSingleValue |
SelectorSingleValueFromLabel | Enkelvoudige waarde / KPI-kaart |
DashboardPanelHorizontalBarChart |
SelectorMultiColumns | Horizontale staafgrafiek, gerangschikte lijsten |
DashboardPanelDataTable |
SelectorFullCalculator | Data tabweergave |
DashboardPanelProcessMap |
SelectorFullCalculator | Proceskaart visualisatie |
DashboardPanelDashboardNote |
(geen) | Tekst-/notitiepaneel (geen blockId vereist) |
DashboardPanelRecommendationSentence |
(geen) | AI aanbevelingsweergave |
Paneelinstellingen per Type
DashboardPanelSingleValue (KPI-kaarten)
Wanneer panelType DashboardPanelSingleValue is, configureren de instellingen hoe een enkele waarde uit de calculatoroutput gehaald wordt:
{
"tableIndex": 0,
"labelColumnName": "Name",
"labelName": "Total Case Count",
"valueColumnName": "Value",
"formatText": "N0"
}
| Instelling | Type | Beschrijving |
|---|---|---|
tableIndex |
integer | Welke uitvoertabel te gebruiken (meestal 0) |
labelColumnName |
string | Kolom met labels (meestal "Name") |
labelName |
string | De te vinden label (bijv. "Total Case Count") |
valueColumnName |
string | Kolom met de waarde (meestal "Value") |
formatText |
string | .NET-formaatstring (N0, F2, P0, enz.) |
Best gebruikt met: CalculatorDataInformation, CalculatorOverview
DashboardPanelHorizontalBarChart (Staafdiagrammen)
Wanneer panelType DashboardPanelHorizontalBarChart is, bevat settings columnNames om SelectorMultiColumns te activeren:
{
"tableIndex": 0,
"columnNames": ["ActivityName", "Count"],
"sortColumnName": "Count",
"sortAscending": false,
"maxRows": 10
}
| Instelling | Type | Beschrijving |
|---|---|---|
tableIndex |
integer | Welke uitvoertabel te gebruiken |
columnNames |
array | Kolommen die in de grafiek worden opgenomen (MOET overeenkomen met calculatoroutput) |
sortColumnName |
string | Kolom om op te sorteren |
sortAscending |
boolean | Sorteerrichting |
maxRows |
integer | Maximaal aantal weergegeven rijen |
BELANGRIJK: Kolomnamen moeten exact overeenkomen met de outputkolommen van de calculator. Bijvoorbeeld, CalculatorActivityFrequency gebruikt de activiteitskolomnaam uit de dataset (zoals "ActivityName"), niet een algemene "Activity".
Best gebruikt met: CalculatorActivityFrequency, CalculatorResourceFrequency
DashboardPanelCalculator (Volledige Visualisaties)
Voor volledige calculatoroutput (proceskaarten, trends) zijn geen speciale instellingen nodig:
{}
Of laat de settings parameter helemaal weg.
Paneelarchitectuur
Dashboardpanelen verbinden niet rechtstreeks met calculatorblokken. Ze gebruiken een driedelige architectuur:
Panel.InputBlockId -> Selector Block -> Calculator Block (via parent_id)
Waarom Selectors? Selectorblokken definiëren HOE de calculatoroutput wordt weergegeven:
- SelectorFullCalculator: Toon volledige output met visualisatie-instellingen
- SelectorSingleValueFromLabel: Haal één waarde op via label-opzoeking
- SelectorMultiColumns: Haal specifieke kolommen op met sorteren/limiteren
De API maakt automatisch het juiste selectorblok aan wanneer je een paneel aanmaakt dat naar een calculator verwijst.
Paneelindelingssysteem
Dashboardpanelen gebruiken een grid-gebaseerd indelingssysteem:
- Grideenheden: 12-koloms gridsysteem
- Positie: Rij- en kolomcoördinaten (0-gebaseerd)
- Grootte: Breedte (1-12 kolommen), Hoogte (1-20 rijen)
- Responsief: Automatische schaalverdeling op verschillende schermformaten
Implementatievoorbeelden
Dashboardpanelen Opvragen
cURL
curl -X GET "https://your-mindzie-instance.com/api/12345678-1234-1234-1234-123456789012/87654321-4321-4321-4321-210987654321/dashboard/880e8400-e29b-41d4-a716-446655440000/panels" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
KPI Paneel Maken (Enkele Waarde)
curl -X POST "https://your-mindzie-instance.com/api/{tenantId}/{projectId}/dashboard/{dashboardId}/panel" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Total Cases",
"panelType": "DashboardPanelSingleValue",
"blockId": "calculator-data-information-guid",
"row": 0,
"column": 0,
"width": 2,
"height": 1,
"settings": "{\"tableIndex\":0,\"labelColumnName\":\"Name\",\"labelName\":\"Total Case Count\",\"valueColumnName\":\"Value\",\"formatText\":\"N0\"}"
}'
Horizontale Staafgrafiek Maken
curl -X POST "https://your-mindzie-instance.com/api/{tenantId}/{projectId}/dashboard/{dashboardId}/panel" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Activity Distribution",
"panelType": "DashboardPanelHorizontalBarChart",
"blockId": "calculator-activity-frequency-guid",
"row": 1,
"column": 0,
"width": 6,
"height": 3,
"settings": "{\"tableIndex\":0,\"columnNames\":[\"ActivityName\",\"Count\"],\"sortColumnName\":\"Count\",\"sortAscending\":false,\"maxRows\":10}"
}'
Volledig Calculator Paneel Maken
curl -X POST "https://your-mindzie-instance.com/api/{tenantId}/{projectId}/dashboard/{dashboardId}/panel" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Case Count",
"panelType": "DashboardPanelCalculator",
"blockId": "calculator-case-count-guid",
"row": 0,
"column": 2,
"width": 2,
"height": 1
}'
JavaScript/Node.js
const TENANT_ID = '12345678-1234-1234-1234-123456789012';
const PROJECT_ID = '87654321-4321-4321-4321-210987654321';
const BASE_URL = 'https://your-mindzie-instance.com';
async function getDashboardPanels(dashboardId, token) {
const url = `${BASE_URL}/api/${TENANT_ID}/${PROJECT_ID}/dashboard/${dashboardId}/panels`;
const response = await fetch(url, {
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
}
});
if (response.ok) {
return await response.json();
} else if (response.status === 404) {
throw new Error('Dashboard niet gevonden');
} else {
throw new Error(`Kan panelen niet ophalen: ${response.status}`);
}
}
async function createDashboardPanel(dashboardId, panelData, token) {
const url = `${BASE_URL}/api/${TENANT_ID}/${PROJECT_ID}/dashboard/${dashboardId}/panel`;
const response = await fetch(url, {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
},
body: JSON.stringify(panelData)
});
if (response.ok) {
return await response.json();
} else {
const error = await response.json();
throw new Error(error.Message || `Kan paneel niet aanmaken: ${response.status}`);
}
}
// Gebruik - Panelen ophalen
const panels = await getDashboardPanels('dashboard-guid', 'your-auth-token');
console.log(`Dashboard: ${panels.dashboardId}`);
console.log(`Panelen: ${panels.panels.length}`);
// Gebruik - KPI paneel aanmaken
const newPanel = await createDashboardPanel('dashboard-guid', {
title: 'Total Cases',
panelType: 'DashboardPanelSingleValue',
blockId: 'calculator-data-information-guid',
row: 0,
column: 0,
width: 2,
height: 1,
settings: JSON.stringify({
tableIndex: 0,
labelColumnName: 'Name',
labelName: 'Total Case Count',
valueColumnName: 'Value',
formatText: 'N0'
})
}, 'your-auth-token');
console.log(`Aangemaakt paneel: ${newPanel.panelId}`);
Python
import requests
import json
TENANT_ID = '12345678-1234-1234-1234-123456789012'
PROJECT_ID = '87654321-4321-4321-4321-210987654321'
BASE_URL = 'https://your-mindzie-instance.com'
def get_dashboard_panels(dashboard_id, token):
"""Haal alle panelen in een dashboard op."""
url = f'{BASE_URL}/api/{TENANT_ID}/{PROJECT_ID}/dashboard/{dashboard_id}/panels'
headers = {
'Authorization': f'Bearer {token}',
'Content-Type': 'application/json'
}
response = requests.get(url, headers=headers)
if response.ok:
return response.json()
elif response.status_code == 404:
raise Exception('Dashboard niet gevonden')
else:
raise Exception(f'Kan panelen niet ophalen: {response.status_code}')
def create_dashboard_panel(dashboard_id, panel_data, token):
"""Maak een nieuw paneel aan in een dashboard."""
url = f'{BASE_URL}/api/{TENANT_ID}/{PROJECT_ID}/dashboard/{dashboard_id}/panel'
headers = {
'Authorization': f'Bearer {token}',
'Content-Type': 'application/json'
}
response = requests.post(url, headers=headers, json=panel_data)
if response.ok:
return response.json()
else:
error = response.json()
raise Exception(error.get('Message', f'Kan paneel niet aanmaken: {response.status_code}'))
# Gebruik - Panelen ophalen
panels = get_dashboard_panels('dashboard-guid', 'your-auth-token')
print(f"Dashboard: {panels['dashboardId']}")
print(f"Aantal panelen: {len(panels['panels'])}")
# Gebruik - KPI paneel aanmaken
settings = {
'tableIndex': 0,
'labelColumnName': 'Name',
'labelName': 'Total Case Count',
'valueColumnName': 'Value',
'formatText': 'N0'
}
new_panel = create_dashboard_panel('dashboard-guid', {
'title': 'Total Cases',
'panelType': 'DashboardPanelSingleValue',
'blockId': 'calculator-data-information-guid',
'row': 0,
'column': 0,
'width': 2,
'height': 1,
'settings': json.dumps(settings)
}, 'your-auth-token')
print(f"Aangemaakt paneel: {new_panel['panelId']}")
C#
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
public class DashboardPanelsResponse
{
public Guid DashboardId { get; set; }
public List<PanelInfo> Panels { get; set; }
}
public class PanelInfo
{
public Guid PanelId { get; set; }
public string Name { get; set; }
public string PanelType { get; set; }
public string Position { get; set; }
public int Width { get; set; }
public int Height { get; set; }
public string Configuration { get; set; }
}
public class CreatePanelRequest
{
public string Title { get; set; }
public string Description { get; set; }
public string PanelType { get; set; }
public Guid BlockId { get; set; }
public int Row { get; set; }
public int Column { get; set; }
public int Width { get; set; }
public int Height { get; set; }
public string Settings { get; set; }
}
public class CreatePanelResponse
{
public Guid PanelId { get; set; }
public string Title { get; set; }
public string DashboardPanelClassName { get; set; }
public int Row { get; set; }
public int Column { get; set; }
public int Width { get; set; }
public int Height { get; set; }
public Guid BlockId { get; set; }
}
public class DashboardPanelClient
{
private readonly HttpClient _httpClient;
private readonly string _baseUrl;
private readonly Guid _tenantId;
private readonly Guid _projectId;
private readonly JsonSerializerOptions _jsonOptions;
public DashboardPanelClient(string baseUrl, Guid tenantId, Guid projectId, string accessToken)
{
_baseUrl = baseUrl;
_tenantId = tenantId;
_projectId = projectId;
_httpClient = new HttpClient();
_httpClient.DefaultRequestHeaders.Authorization =
new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", accessToken);
_jsonOptions = new JsonSerializerOptions { PropertyNameCaseInsensitive = true };
}
public async Task<DashboardPanelsResponse> GetDashboardPanelsAsync(Guid dashboardId)
{
var url = $"{_baseUrl}/api/{_tenantId}/{_projectId}/dashboard/{dashboardId}/panels";
var response = await _httpClient.GetAsync(url);
if (response.IsSuccessStatusCode)
{
var json = await response.Content.ReadAsStringAsync();
return JsonSerializer.Deserialize<DashboardPanelsResponse>(json, _jsonOptions);
}
else if (response.StatusCode == System.Net.HttpStatusCode.NotFound)
{
throw new Exception($"Dashboard {dashboardId} niet gevonden");
}
throw new Exception($"Kan panelen niet ophalen: {response.StatusCode}");
}
public async Task<CreatePanelResponse> CreatePanelAsync(Guid dashboardId, CreatePanelRequest request)
{
var url = $"{_baseUrl}/api/{_tenantId}/{_projectId}/dashboard/{dashboardId}/panel";
var json = JsonSerializer.Serialize(request, _jsonOptions);
var content = new StringContent(json, Encoding.UTF8, "application/json");
var response = await _httpClient.PostAsync(url, content);
if (response.IsSuccessStatusCode)
{
var responseJson = await response.Content.ReadAsStringAsync();
return JsonSerializer.Deserialize<CreatePanelResponse>(responseJson, _jsonOptions);
}
var errorJson = await response.Content.ReadAsStringAsync();
throw new Exception($"Kan paneel niet aanmaken: {errorJson}");
}
}
// Gebruik
var client = new DashboardPanelClient(
"https://your-mindzie-instance.com",
Guid.Parse("12345678-1234-1234-1234-123456789012"),
Guid.Parse("87654321-4321-4321-4321-210987654321"),
"your-access-token");
// Panelen ophalen
var panels = await client.GetDashboardPanelsAsync(Guid.Parse("dashboard-guid"));
Console.WriteLine($"Dashboard: {panels.DashboardId}");
foreach (var panel in panels.Panels)
{
Console.WriteLine($"- {panel.Name} ({panel.PanelType})");
}
// KPI paneel aanmaken
var newPanel = await client.CreatePanelAsync(Guid.Parse("dashboard-guid"), new CreatePanelRequest
{
Title = "Total Cases",
PanelType = "DashboardPanelSingleValue",
BlockId = Guid.Parse("calculator-data-information-guid"),
Row = 0,
Column = 0,
Width = 2,
Height = 1,
Settings = JsonSerializer.Serialize(new
{
tableIndex = 0,
labelColumnName = "Name",
labelName = "Total Case Count",
valueColumnName = "Value",
formatText = "N0"
})
});
Console.WriteLine($"Aangemaakt paneel: {newPanel.PanelId}");
Belangrijke Opmerkingen
API Mogelijkheden
- Leestoegang: Gebruik GET endpoint om paneelconfiguraties op te halen
- Maaaktoegang: Gebruik POST endpoint om nieuwe panelen te creëren met automatische selectorblok-aanmaak
- Wijzigtoegang: Panenwijziging gebeurt momenteel via de mindzieStudio UI
- Verwijdertoegang: Paneelverwijdering gebeurt momenteel via de mindzieStudio UI
Configuratie Parsing
Het veld configuration bevat een JSON-string die geparsed moet worden om instellingen te lezen.
Indelingssysteem
Paneelposities gebruiken een rij/kolom gridsysteem met flexibele grootte. Rij- en kolomwaarden zijn 0-gebaseerd bij het aanmaken van panelen.