App
Ein App
-Objekt stellt eine Applikation dar und hat folgende Attribute:
id
StringDer eindeutige Datenbank-Identifizierer der App.
globals
GlobalsVerweist auf das
Globals
-Objekt, das globale Informationen enthält.name
StringDer Name der App.
description
String oderNone
Die Beschreibung der App.
lang
StringDie Sprache in der die App angezeigt wird (beispielsweise
"de"
für Deutsch und"en"
für Englisch).image
File oderNone
Das App-Icon in Original-Größe.
Wird das Icon in einer anderen Größe benötigt, kann scaled_url(…) benutzt werden.
private_uploads
BoolGibt an, ob auf hochgeladene Dateien dieser App nur von autorisierten Benutzern zugegriffen werden darf.
createdby
UserDer Besitzer der App.
createdat
DatumDer Zeitpunkt zu dem die App erstellt wurde.
updatedby
User oderNone
Der Benutzer, der die App zuletzt geändert hat. (Wurde die App noch nicht geändert, so ist
updatedby
None
.)updatedat
Datum oderNone
Der Zeitpunkt, zu dem die App das letzte Mal geändert wurde. (Wurde die App noch nicht geändert, so ist
updatedat
None
.)controls
Dictionary(String ➝ Control)Die Definition der Felder der App. Dieses Dictionary ist sortiert, d.h. beim Durchlauf werden die Felder in der Reihenfolge durchlaufen in der sie angelegt wurden. Die Schlüssel in diesem Dictionary sind die Feld-Identifizierer und die Werte sind
Control
-Objekte.Normalerweise beinhaltet
controls
alle Felder des Datensatzes, außer wenn in der Datenquellen-Konfiguration Nur Listenfelder? gesetzt ist, dann werden nur diejenigen Felder übernommen, die unter ausgewählt wurden.c_<identifier>
ControlControl
-Objekte stehen auch über sogenannte „Shortcut“-Attribute zur Verfügung. D.h. dass beispielsweise das Feldvorname
das normalerweise unterapp.controls.vorname
zu finden ist, auch direkt alsapp.c_vorname
zur Verfügung steht.records
Dictionary(String ➝ Record) oderNone
Die Datensätze der App. Dies sind evtl. nicht alle Datensätze, wenn der Benutzer nur eingeschränkte Zugriffrechte besitzt. Dieses Dictionary ist sortiert, die Reihenfolge kann in der Konfiguration der Datenquellen konfiguriert werden. Die Schlüssel des Dictionarys sind die Datensatz-Identifizierer und die Werte sind
Record
-Objekte.Wenn in der Datenquellen-Konfiguration Nur Anzahl? gesetzt ist, ist
records
None
.recordcount
Integer oderNone
Wenn in der Datenquellen-Konfiguration Nur Anzahl? gesetzt ist, beinhaltet
recordcount
die Anzahl der Datensätze (ansonsten istrecordcount
None
).installation
Installation oderNone
Wenn die Aplikation durch einen Installationsvorgang erzeugt wurde, ist
installation
einInstallation
-Objekt. Ansonsten istinstallation
None
.templates
Dictionary(String ➝ UL4-Template)Alle internen Templates, die in der App definiert sind. Diese Templates können unter Interne Templates-Maske angelegt werden. Die Schlüssel des Dictionarys sind dabei der Identifizierer des Templates und die Werte die UL4-Templates selbst.
in derHaben Sie als Datenquelle nicht die aktuelle, sondern eine andere App ausgewählt, haben Sie hiermit die Möglichkeit, auf die internen Templates dieser in der Datenquelle konfigurierten App mit zuzugreifen.
t_<identifier>
UL4-TemplateTemplate
-Objekte stehen auch über sogenannte „Shortcut“-Attribute zur Verfügung. D. h., dass beispielsweise das Templategurk
, das normalerweise unterapp.templates.gurk
zu finden ist, auch direkt alsapp.t_gurk
zur Verfügung steht. Oder alsdatasources.beispiel.app.t_gurk
wenn Sie als Datenquelle eine andere App ausgewählt haben.categories
Dictionary(String ➝ Category) oderNone
Wenn in der Datenquellen-Konfiguration Kategorien etwas ausgewählt ist, enthält
categories
die Kategorien, denen diese App zugeordnet ist. Die Schlüssel des Dictionarys sind die internen Datenbank-Identifizierer der Kategorie und die Werte sindCategory
-Objekte.Ist bei Kategorien nichts ausgewählt, ist
categories
None
.params
Dictionary(String ➝ AppParameter)Die Parameter der Applikation (die unter Parameter-Maske angelegt werden können). Die Schlüssel des Dictionarys sind die Identifizierer der Parameter. Die Werte sind
in derAppParameter
-Objekte.p_<identifier>
AppParameterAppParameter
-Objekte stehen auch über sogenannte „Shortcut“-Attribute zur Verfügung. D. h., dass beispielsweise der App-Parameterbeispiel
, der normalerweise unterapp.params.beispiel
zu finden ist, auch direkt alsapp.p_beispiel
zur Verfügung steht.pv_<identifier>
ObjektDamit kann direkt auf den Wert eines``AppParameter``-Objekts zugegriffen werden. D. h.
app.pv_beispiel
ist äquivalent zuapp.p_beispiel.value
(was wiederum zuapp.params.beispiel.value
äquivalent ist).views
Dictionary(String ➝ View)Die verschiedenen Formularvarianten der Applikation (die unter Formularvarianten angelegt werden können). Die Schlüssel des Dictionarys sind die Identifizierer der Views. Die Werte sind
beiView
-Objekte.active_view
ViewDie aktive Formularvariante. Ist
active_view
gesetzt (was durch Ändern dieses Attributs im Template getan werden kann, bzw. bei Formular-Templates automatisch passiert), werden beim Setzen von Feld-Werten die in dieser Variante definierten Feld-Restriktionen berücksichtigt (minlength
undmaxlength
für String-Felder,required
für alle).Wird das Attribut
active_view
gesetzt kann als Wert sowohl ein View-Objekt verwendet werden, als auch dieid
eines View-Objekts. Dieses View-Objekt muß zu dieser App gehören.datasource
DataSourceDas DataSource-Objekt das diese App beinhaltet, oder
None
, wenn es für diese App kein DataSource-Objekt gibt. D.h. es gibt für jede Appa
immera.datasource is None or `a.datasource.app is a
.layout_controls
Dictionary(String ➝ LayoutControl) oderNone
Die Layout-Controls des aktiven Views. Dazu muß es einen aktiven View geben und in der Datenquelle muß bei Felder Alle Felder und Layout-Felder ausgewählt sein. Ansonsten ist
layout_controls
None
.lc_<identifier>
LayoutControl„Shortcut“-Attribut zum Zugriff auf die Layout-Controls des aktiven Views.
app.lc_beispiel
ist äquivalent zuapp.layout_controls.beispiel
.favorite
BoolGibt an, ob der aktuelle eingeloggte Benutzer diese App als Favorit festgelegt hat.
menus
Dictionary(String ➝ MenuItem) oderNone
Die zu dieser App konfigurierten Menüs. Die Schlüssel in diesem Dictionary sind die Identifizierer und die Werte sind
MenuItem
-Objekte.panels
Dictionary(String ➝ Panel) oderNone
Die zu dieser App konfigurierten Panels. Die Schlüssel in diesem Dictionary sind die Identifizierer und die Werte sind
Panel
-Objekte.
insert(**values)
Methode(**Objekt) ➝ RecordMithilfe von
insert()
kann in der App ein neuer Datensatz angelegt werden. Die Parameter müssen per Schlüsselwort übergeben werden. Der Parametername ist dabei jeweils der Feld-Identifizierer des zu setzenden Feldes. Beispielsweise kann in eine Personen-App mit den Feldernvorname
,nachname
undgeburtstag
mittels folgendem Aufruf ein Datensatz eingefügt werden:<?code record = app.insert( vorname="Max", nachname="Mustermann", geburtsdatum=@(2000-02-29), )?>
Der zurückgegebene Datensatz wird mit den übergebenen Feldwerten initialisiert und das Attribut
id
(der eindeutige Datensatz-Identifizierer) ist gesetzt. Jedoch spiegelt der Datensatz keinerlei Änderungen wieder, die evtl. vom System über Datenaktionen durchgeführt wurden.new_embedded_url(**params)
Methode(**Objekt) ➝ StringGibt die absolute URL zurück für das Eingabe-Formular zum Anlegen neuer Datensätze dieser App. Bei dieser URL ist das Formular in den üblichen LivingApps-Rahmen eingebettet und der Benutzer muß eingeloggt sein um es benutzen zu können.
Mittels
params
können der URL zusätzliche Parameter übergeben werden. Als Werte werden sowohl Strings unterstützt als auch Listen von Strings (in diesem Fall wird der Parameter mehrmals an die URL angefügt). Außerdem wird beim WertNone
der Parameter ignoriert.Beispiel 1:
<?print app.new_embedded_url()?>
erzeugt:
https://my.living-apps.de/dateneingabe/1234567890abcdef12345678/new
Beispiel 2:
<?print app.new_embedded_url(view="abcdef12345678901234")?>
erzeugt:
https://my.living-apps.de/dateneingabe/1234567890abcdef12345678/new?view=abcdef12345678901234
Beispiel 3:
<?print app.new_embedded_url(a=["17", 23], b=None, c=[today(), None])?>
erzeugt:
https://my.living-apps.de/dateneingabe/1234567890abcdef12345678/new?a=17&a=23&c=2022-11-10
new_standalone_url(**params)
Methode(**Objekt) ➝ StringGibt die absolute URL zurück für das Eingabe-Formular zum Anlegen neuer Datensätze dieser App. Bei dieser URL ist das Formular nicht in den üblichen LivingApps-Rahmen eingebettet sondern unabhängig und kann auch von nicht eingeloggten Benutzern ausgefüllt werden.
Mittels
params
können der URL zusätzliche Parameter übergeben werden.Beispiel 1:
<?print app.new_standalone_url()?>
erzeugt:
https://my.living-apps.de/gateway/apps/1234567890abcdef12345678/new
Beispiel 2:
<?print app.new_standalone_url(view="abcdef12345678901234")?>
erzeugt:
https://my.living-apps.de/gateway/apps/1234567890abcdef12345678/new?view=abcdef12345678901234
Beispiel 3:
<?print app.new_standalone_url(a=["17", 23], b=None, c=[today(), None])?>
erzeugt:
https://my.living-apps.de/gateway/apps/1234567890abcdef12345678/new?a=17&a=23&c=2022-11-10
template_url(identifier, record=None, /, **params)
Methode(String, Record oderNone
, **Objekt) ➝ StringGibt die absolute URL zurück für ein Anzeige-Template mit dem Identifizierer
identifier
. Istrecord
None
so wird ein Link zu einem Listen-Template generiert, wird fürrecord
ein Datensatz übergeben, so wird ein Link zu einem Detail-Template generiert (Die verlinkte App ist dabei die App für die diese Methode aufgerufen wird, nicht die App zu der der Datensatz gehört).Mittels
params
können der URL zusätzliche Parameter übergeben werden.Beispiel 1:
<?print app.template_url("beispiel")?>
erzeugt:
https://my.living-apps.de/gateway/apps/1234567890abcdef12345678?template=beispiel
Beispiel 2:
<?print app.template_url("beispiel", r)?>
erzeugt:
https://my.living-apps.de/gateway/apps/1234567890abcdef12345678/0987654321fedcba1234?template=beispiel
Beispiel 3:
<?print app.template_url("beispiel", x=17, y=23)?>
erzeugt:
https://my.living-apps.de/gateway/apps/1234567890abcdef12345678?template=beispiel&x=17&y=23
home_url()
Methode() ➝ StringGibt die absolute URL zur Detail-Seite einer App zurück.
Beispiel:
<?print app.home_url()?>
erzeugt:
https://my.living-apps.de/apps/1234567890abcdef12345678.htm
datamanagement_url()
Methode() ➝ StringGibt die absolute URL zur Datenmanagement-Seite einer App zurück.
Beispiel:
<?print app.datamanagement_url()?>
erzeugt:
https://my.living-apps.de/_id_36_.htm?uuid=1234567890abcdef12345678&dId=1234567890abcdef12345678&resetInfo=true&templateIdentifier=created_1234567890abcdef12345678
import_url()
Methode() ➝ StringGibt die absolute URL zur Import-Seite einer App zurück.
Beispiel:
<?print app.import_url()?>
erzeugt:
https://my.living-apps.de/import-export/1234567890abcdef12345678.htm
tasks_url()
Methode() ➝ StringGibt die absolute URL zur Aufgaben-Seite einer App zurück.
Beispiel:
<?print app.tasks_url()?>
erzeugt:
https://my.living-apps.de/_id_1073_.htm?uuid=1234567890abcdef12345678&dId=1234567890abcdef12345678&p_tpl_uuid=1234567890abcdef12345678&resetInfo=true&templateIdentifier=created_task_1234567890abcdef12345678
datamanagement_config_url()
Methode() ➝ StringGibt die absolute URL zur Datenmanagement-Konfigurations-Seite einer App zurück.
Beispiel:
<?print app.datamanagement_config_url()?>
erzeugt:
https://my.living-apps.de/datenmanagement-konfigurieren/1234567890abcdef12345678.htm
permissions_url()
Methode() ➝ StringGibt die absolute URL zur Berechtigungs-Seite einer App zurück.
Beispiel:
<?print app.permissions_url()?>
erzeugt:
https://my.living-apps.de/_id_833_.htm?uuid=1234567890abcdef12345678&dId=1234567890abcdef12345678&resetInfo=true
datamanageview_url(identifier)
Methode(String) ➝ StringGibt die absolute URL zu einer Datenauswertungs-Seite im Datenmanagement einer App zurück.
Beispiel:
<?print app.datamanageview_url("beispiel")?>
erzeugt:
https://my.living-apps.de/_id_36_.htm?uuid=1234567890abcdef12345678&dId=1234567890abcdef12345678&resetInfo=true&templateIdentifier=created_1234567890abcdef12345678_datamanage_master_beispiel
seq()
Methode() ➝ NumberGibt einen fortlaufenden Integer-Wert zurück, der innerhalb dieser App eindeutig ist.
send_mail()
Methode(from
: String oderNone
,reply_to
: String oderNone
,to
: String oderNone
,cc
: String oderNone
,bcc
: String oderNone
,subject
: String oderNone
,body_text
: String oderNone
,body_html
: String oderNone
, attachments: File oderNone
) ➝None
Verschickt eine E-Mail.
Nähere Informationen finden Sie unter E-Mails über die LivingAPI versenden.
custom
ObjektDieses Attribut kann vom Benutzer für beliebige zusätzliche Informationen gesetzt werden.
x_<identifier>
ObjektEs werden beliebige zusätzliche Attribute unterstützt deren Namen mit
x_
beginnt.
Neue Datensatzobjekte können angelegt werden, indem das App-Objekt aufgerufen
wird. Feld-Werte können als Keyword-Argumente übergeben werden. So erzeugt z. B.
datasources.beispiel.app()
ein leeres Datensatzobjekt zur App „Beispiel“.
Besitzt diese App die Felder vorname
, nachname
und geburtstag
kann mittels folgendem Aufruf ein Datensatz-Objekt mit den entsprechenden
Feld-Werten angelegt werden:
<?code record = app(
vorname="Liv",
nachname="Logic",
geburtsdatum=@(2000-02-29),
)?>
Im Gegensatz zu insert() wurde der Datensatz
nach diesem Aufruf noch nicht gespeichert, dies erfolgt erst durch den Aufruf
von record.save(). Daher sind vorher
die Attribute id
, createdby
, createdat
, updatedby
und
updatedat
auch None
und werden erst durch den Aufruf von
record.save() gesetzt.
Ist eine App nicht explizit in einer Datenquelle konfiguriert, so kann das
zugehörige App
-Objekt trotzdem innerhalb der LivingAPI auftauchen, wenn
ein Datensatz über ein Auswahlfeld auf diese App verweist. In einem solchen
Fall ist sowohl records
als auch recordcount
None
.
Wird durch Aufruf des App-Objektes eine neues Datensatz-Object angelegt, und die App hat einen aktiven View so werden die in diesem View konfigurierten Standardwerte für die Felder berücksichtigt.
Außerdem werden bei aktivem View zwar alle Felder des Datensatzes gespeichert, aber Fehler in Feldern, die nicht im aktiven Vies sind werden ignoriert.