JSON Objekt Definition

Damit moTrade Daten anzeigen kann, muss das JSON in der Javascript Datei fehlerfrei konfiguriert werden. Die einzelnen Views, welche moTrade anzeigen kann, werden mit individuellen Parametern konfiguriert, welche in dieser Dokumentation erläutert werden.

Aufbau der JSON Elemente 

Folgende Grafik zeigt, wie die einzelnen View-Bausteine im JSON miteinander verbunden sind. Fett gedruckte Attribute müssen angegeben werden, alle anderen sind optional.

JSON Struktrur

Nachfolgend werden die einzelnen Elemente und deren Attribute ausführlich erklärt, und Beispiele gegeben wie ein solches JSON Element schlussendlich aussehen kann.

View

Beschreibt den äußersten Container der UniversalView2. Der Titel findet sich in der farbigen Leiste oben wieder, die Tabs stehen für die auswählbaren Elemente in der Tab-Bar (iOS am unteren Bildschirmrand, Android oben). „main_menu“ und „top_menu“ stehen für View-Config Einträge aus den Detail-Dialogfeldern (konfigurierbar im Backend). Werden sie nicht angegeben, werden die Menübuttons links oben (main_menu) bzw rechts oben (top_menu) nicht angezeigt.

Parameter

title String, Titel des Views
top_menu String, Optional. View-Config Eintrag der Detail-Dialogfelder.
main_menu Integer, Optional View-Config Eintrag der Detail-Dialogfelder.
tabs Array, JSON Elemente vom Typ “Tab”
active_tab Integer, Standardmäßig ausgewählter Tab bei Aufruf einer UV2. (Default: 0)

JSON_View

Beispiel

{
	"title" : "Adressen"
	"menu_items" : [
		"@uv2_menu_item_add_address_adr"
	],
	"tabs" : [
		"@uv2_tab_alle_adr",
		"@uv2_tab_aufgaben_adr"
	],
	"active_tab" : 0
}

Tab

Jeder einzelne Tab bestimmt welche Tabelle zum Laden der Daten herangezogen werden soll. Primär geschieht dies im SQL Statement (Attribut „sql“). Die Felder im Attribut „search_fields“ beschreiben, welche Felder bei der Eingabe von Suchbegriffen verglichen werden sollen. Im Attribut „pri_keys“ werden die Primary Keys der Tabellen angegeben, aus denen Daten im SQL Statement geladen werden. Für interne Zwecke muss moTrade aus diesen Primary Key Angaben auch die zugehörige Tabelle erkennen können. Bei mocrm-Standard Tabellen ist dies automatisch möglich, bei selbst angelegten Tabellen muss im Backend in den Auswahlfeldern (keyrefs) ein Eintrag mit der Satzart „table_for_prikey“ eingefügt werden. Referenz ist der Primary Key, Referenzname der zugehörige Tabellenname.

Cell_Flavours erlauben es, abhängig von Datensätzen verschiedene Cell-Objekte zu laden.

Parameter

fa_icon String, FontAwesome Icon Name (ohne umschließende #$ Symbole)
title String, Name des Tabs
cell String, JSON Element vom Typ “Cell”
cell_flavour String, Optional. JSON Element vom Typ “Cell Flavour”
sql String, vollständiges SQL Statement, wobei anstelle von Spaltennamen der Ausdruck „{fields}“ zu selektieren ist. Dieser wird von moTrade durch alle Spalten ersetzt. Zwingend notwendig wird {fields} wenn zwei Tabellen gejoined werden. Felder werden dann nach dem Schema „Tabellenname.Spaltenname“ selektiert. „{where}“ wird durch eine Überprüfung auf die searchfields ersetzt. Funktionen wie adrkey(‚adr_id‘) oder aktkey(‚akt_id‘) können im SQL verwendet werden und liefern den entsprechenden Index für eine in moTrade ausgewählte Adresse / Aktion / etc. (siehe Beispiel Konfiguration)
search_fields Array, Optional. Namen der Spalten die auf Suchbegriffe geprüft werden sollen.
pri_keys Array, Spaltennamen aller Primary Key Spalten

tab

Beispiel

{
	"fa_icon" : "home",
	"title" : "Alle",
	"cell" : “@uv2_cell_standard_akt”,
	"sql" : “SELECT {fields} FROM mocrm_aktion WHERE adr_id = adrkey('adr_id') AND {where}",
	"search_fields" : [ ]
	"prikeys" : ["akt_id"]
}

Cell

Das Element definiert den Inhalt der in jeder Zeile dargestellt wird. Enthält einzelne Cell_Blocks, welche horizontal angeordnet verschiedene Datenblöcke repräsentieren. Das Attribut „cell_height“ ist nur für iOS ausschlaggebend, da sich hier der Content an die verfügbare Höhe anpasst, während unter Android die Höhe sich an den Content anpasst.

Parameter

cell_height Integer, Optional (Default: 109). Zeilenhöhe (nur für iOS) in Pixel
headline_field String, Spaltenname in geschwungenen Klammern { … } wessen Inhalt als Titel in den Zeilen eingefügt wird.
headline_color_field String, Optional. Spaltenname in geschwungenen Klammern { … } wessen Inhalt als Hexadezimaler Farbwert für das headline_field interpretiert wird.
fa_accessory_icon String, Optional. FontAwesome Icon Name (ohne umschließende #$ Symbole)
blocks Array, JSON Elemente vom Typ “Cell_Block”

cell

Beispiel

{
	"cell_height" : 109,
	"headline_field" : "{adr_name1}",
	"headline_color_field" : "{adr_color}",
	"blocks" : [
		"@uv2_cell_block_adresse_adr",
		“@uv2_cell_block_kontaktdetails_adr”
	],
	"onclick" : "@uv2_menu_item_aktion_adr",
	"menu_items" : [
		"@uv2_menu_item_crm_reports_adr", 
		"@uv2_menu_item_edit_address_adr"
	]
}

Cell_Flavour

Definiert einen Zelltyp der abhängig vom Wert einer bestimmten Spalte ist. Je nach Wert dieses Feldes werden unterschiedliche Zellen mit ihren unterschiedlichen Datenfeldern geladen. Wurde kein gültiger Wert gefunden, so wird das reguläre “Cell” JSON Objekt geladen dass im “Tab” Objekt definiert wurde.

Parameter

field String, Name der Spalte wessen Felder auf verschiedene Werte geprüft werden.
flavours Dictionary, Key: String, Wert der in “field” vorkommen kann, Value: String, JSON Element vom Typ “Cell”

Beispiel

{
	"field" : "akt_typ",
	"flavours" : {
		"inn" : "@uv2_cell_inn_akt",
		"auf" : "@uv2_cell_ang_akt",
		"ang" : "@uv2_cell_ang_akt"
	}
}

Cell_Block

Cell_Blocks definieren den Typ ihres Inhalts (Beispiel: Liste, Landkarte, Balkendiagramm, etc.), dessen Priorität, Ausrichtung und können bei Bedarf weitere Daten selektieren, wenn das SQL Statement des “Tab” Objektes nicht ausreichend ist. Die Reihenfolge der Blöcke für verschiedene Bildschirmbreiten individuell gewählt werden. moTrade entscheidet automatisch, wie viele Blöcke am Bildschirm Platz haben. Im Attribut „position“ gibt man anschließend an, an wievielter Position der Block stehen soll, wenn beispielsweise 3 Blöcke insgesamt am Bildschirm Platz haben (dieses Beispiel würde dann wie folgt aussehen: {„3“ : 1}, das bedeutet dass bei 3 möglichen Blöcken dieser Block an 1. Stelle angezeigt werden soll).

Parameter

type String, Typ des Blocks, mögliche Typen: text | full_text | map | chart | list | image | sign | stepper | info_stepper
position Dictionary<String, int>, Optional. Position des cell_blocks bei einer gewissen Anzahl an am Bildschirm sichtbaren Blöcken. String: Anzahl der sichtbaren Blöcke, unter Anführungszeichen als String eintragen. Integer: Position des cell_blocks (1 basierend).
sql String, Optional. SQL Statement welches von zusätzlichen Tabellen Felder selektieren kann.
data String, JSON Element vom Typ “Block_…”
align String, Optional (Default: Abhängig von Blocktyp). Alignment des Blockinhaltes, mögliche Werte: left | center | right

block

Beispiel

{
	"type" : "text",
	"priority" : 2,
	"sql" : "",
	"data" : “@uv2_block_data_standard_adr”,
	“align” : “right”
}

Block_Text

Ein regulärer Textblock stellt mehrere Zeilen an Text dar. Jede Zeile ist individuell konfigurierbar. Alle Daten dieses Blocks greifen auf den selben SQL Datensatz zu (im Gegensatz zu Block_List)

Parameter

lines Array, Strings die darzustellenden Text beinhalten

text_small

Beispiel

{
	"lines" : [
		"{per_id}",
		"{akt_igrund}",
		"{akt_status}"
	]
}

Block_List

Ein Listenblock stellt wie auch ein Textblock mehrere Zeilen an Text dar. Im Unterschied zum Textblock greifen diese Zeilen aber jeweils auf einen individuellen SQL-Datensatz zu. Deshalb muss im “Block” JSON Objekt ein SQL Statement angegeben werden welches die benötigte Anzahl an Datensätzen liefert.

Parameter

text String, Textzeile die für jeden Datensatz verwendet wird
max_rows Integer, Maximale Anzahl an Textzeilen die angezeigt werden soll

list_small

Beispiel

{
	"text" : "#$user$# {per_vorname} {per_name}",
	"max_rows" : 4
}

Block_Fulltext

Ein Textblock der Fließtext über mehrere Zeilen hinweg darstellt.

Parameter

text String, Text der dargestellt werden soll
max_rows Integer, Optional. Maximale Anzahl an Textzeilen, nur auf Android Geräten relevant.

freitext_small

Beispiel

{
	"text" : "{adr_freitext}"
}

Block_Map

Zeigt einen Landkartenausschnitt an dessen Position definierbar ist.

Parameter

lat Float, Breitengrad der darzustellenden Position
lon Float, Längengrad der darzustellenden Position

map_small

Beispiel

{
	"lat" : "adr_latitude",
	"lon" : "adr_longitude"
}

Block_Chart

Zeigt ein Balkendiagramm mit bis zu sechs Balken an. Werte und Beschriftungen der Balken sind definierbar.

Parameter

values Array, Float Werte der einzelnen Balken (bis zu sechs)
titles Array, String Werte zur Beschriftung der einzelnen Balken (bis zu sechs)

charts_small

Beispiel

{
	"values" : [
		"adr_uvvj", 
		"adr_ukvvj",
		"adr_uvj"
	],
	"titles" : [
		"{vorvorjahr}",
		"{vorvorjahr}",
		“{vorjahr}"
	]
}

Block_Image

Stellt ein Bild dar.

Parameter

field String, Name der Spalte aus der das Bild geladen werden soll

images_small

Beispiel

{
	"field" : "akt_fot_img1"
}

Block_Sign

Stellt eine Unterschrift dar.

Parameter

field String, Name der Spalte aus der die Unterschrift geladen werden soll

signature_small

Beispiel

{
	"field" : "akt_sign1"
}

Block_Stepper

Stellt einen Block mit „-„, „Info“ und „+“ Button dar. Unter den drei Buttons besitzt er außerdem noch ein TextLabel zur Anzeige von Informationen. Kann zur Positionserfassung benützt werden.

Parameter

button_sql String, SQL Statement dass einen Text zurückliefern muss der im Info Button angezeigt wird.
info_sql String, SQL Statement dass einen Text zurückliefern muss der im TextLabel unter den Buttons angezeigt wird.

Beispiel

{
	"button_sql" : "SELECT CASE WHEN count(*) = 0 THEN '0 Stk' ELSE mocrm_positionen.pos_menge END AS 'val' FROM mocrm_positionen WHERE mocrm_positionen.pos_id = '{mocrm_positionen.pos_id}'",
	"info_sql" : "SELECT CASE WHEN count(*) = 0 THEN 'No information' ELSE mocrm_positionen.pos_preis END AS 'val' FROM mocrm_positionen WHERE mocrm_positionen.pos_id = '{mocrm_positionen.pos_id}'"
}

Block_Info_Stepper

Ähnlich dem Stepper Block, nur dass der Info Stepper Block zusätzlich ein Bild und einen mehrzeiligen Beschreibungstext darstellen kann. Dafür sind die Stepper Buttons bei diesem Block kleiner als beim regulären Stepper Block.

Parameter

img_field String, Name der Spalte aus der die Überschrift geladen werden soll.
text String, Text der im mehrzeiligen Textfeld angezeigt werden soll. Durch Spaltennamen in geschwungenen Klammern können Datenbankfelder eingefügt werden.
max_rows Integer, Optional. Maximale Zeilenanzahl des mehrzeiligen Textfeldes. Nur auf Android Geräten relevant.
button_sql String, SQL Statement dass einen Text zurückliefern muss der im Info Button angezeigt wird.
info_sql String, SQL Statement dass einen Text zurückliefern muss der im TextLabel unter den Buttons angezeigt wird.

Beispiel

{
	"img_field" : "mocrm_artikel.art_imgfilename",
	"text" : "{mocrm_artikel.art_description_de}",
	"max_rows" : 4,
	"button_sql" : "SELECT CASE WHEN count(*) = 0 THEN '0 Stk' ELSE mocrm_positionen.pos_menge END AS 'val' FROM mocrm_positionen WHERE mocrm_positionen.pos_id = '{mocrm_positionen.pos_id}'",
	"info_sql" : "SELECT CASE WHEN count(*) = 0 THEN 'No information' ELSE mocrm_positionen.pos_preis END AS 'val' FROM mocrm_positionen WHERE mocrm_positionen.pos_id = '{mocrm_positionen.pos_id}'"
}