App
Ein App-Objekt stellt eine Applikation dar und hat folgende Attribute:
idStringDer eindeutige Datenbank-Identifizierer der App.
globalsGlobalsVerweist auf das
Globals-Objekt, das globale Informationen enthält.nameStringDer Name der App.
Dieses Attribut kann geändert werden.
descriptionString oderNoneDie Beschreibung der App.
Dieses Attribut kann geändert werden.
langStringDie Sprache in der die App angezeigt wird (beispielsweise
"de"für Deutsch und"en"für Englisch).typename_nom_sinStringDie Bezeichnung für Datensätze in dieser LivingApp (im Nominativ Singular).
Sind in Ihrer LivingApps z.B. Kunden gespeichert, so wäre dies sinnvollerweise „Kunde“.
Dieses Attribut kann geändert werden.
typename_gen_sinStringDie Bezeichnung für Datensätze in dieser LivingApp (im Genitiv Singular).
Dieses Attribut kann geändert werden.
typename_dat_sinStringDie Bezeichnung für Datensätze in dieser LivingApp (im Dativ Singular).
Dieses Attribut kann geändert werden.
typename_acc_sinStringDie Bezeichnung für Datensätze in dieser LivingApp (im Akkusativ Singular).
Dieses Attribut kann geändert werden.
typename_nom_pluStringDie Bezeichnung für Datensätze in dieser LivingApp (im Nominativ Plural).
Sind in Ihrer LivingApps z.B. Kunden gespeichert, so wäre dies sinnvollerweise „Kunden“.
Dieses Attribut kann geändert werden.
typename_gen_pluStringDie Bezeichnung für Datensätze in dieser LivingApp (im Genitiv Plural).
Dieses Attribut kann geändert werden.
typename_dat_pluStringDie Bezeichnung für Datensätze in dieser LivingApp (im Dativ Plural).
Dieses Attribut kann geändert werden.
typename_acc_pluStringDie Bezeichnung für Datensätze in dieser LivingApp (im Akkusativ Plural).
Dieses Attribut kann geändert werden.
gramgenStringDas grammatikalische Gechlecht der Bezeichnung für Datensätze in dieser LivingApp.
"m"für männlich,"f"für weiblich,"n"für sählich.Dies (und die obigen Attribute
typename_nom_sinusw.) können dazu verwendet werden um korrekte Meldungen für Ihre Datensätze in den Anzeige-Templates zu erzeugen.Dieses Attribut kann geändert werden.
groupAppGroup oderNoneDie AppGroup zu der diese App gehört.
mainBoolEin Flag, das kennzeichnet, ob dies die Haupt-App innerhalb ihrer AppGroup ist.
imageFile oderNoneDas App-Icon in Original-Größe.
Wird das Icon in einer anderen Größe benötigt, kann scaled_url(…) benutzt werden.
Dieses Attribut kann geändert werden.
private_uploadsBoolGibt an, ob auf hochgeladene Dateien dieser App nur von autorisierten Benutzern zugegriffen werden darf.
createdbyUserDer Besitzer der App.
createdatDatumDer Zeitpunkt zu dem die App erstellt wurde.
updatedbyUser oderNoneDer Benutzer, der die App zuletzt geändert hat. (Wurde die App noch nicht geändert, so ist
updatedbyNone.)updatedatDatum oderNoneDer Zeitpunkt, zu dem die App das letzte Mal geändert wurde. (Wurde die App noch nicht geändert, so ist
updatedatNone.)controlsDictionary(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
controlsalle 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 Feldvornamedas normalerweise unterapp.controls.vornamezu finden ist, auch direkt alsapp.c_vornamezur Verfügung steht.recordsDictionary(String ➝ Record) oderNoneDie 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
recordsNone.recordcountInteger oderNoneWenn in der Datenquellen-Konfiguration Nur Anzahl? gesetzt ist, beinhaltet
recordcountdie Anzahl der Datensätze (ansonsten istrecordcountNone).installationInstallation oderNoneWenn die Aplikation durch einen Installationsvorgang erzeugt wurde, ist
installationeinInstallation-Objekt. Ansonsten istinstallationNone.templatesDictionary(String ➝ UL4-Template)Alle internen Templates, die in der App definiert sind. Diese Templates können unter in der Interne Templates-Maske angelegt werden. Die Schlüssel des Dictionarys sind dabei der Identifizierer des Templates und die Werte die UL4-Templates selbst.
Haben 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.gurkzu finden ist, auch direkt alsapp.t_gurkzur Verfügung steht. Oder alsdatasources.beispiel.app.t_gurkwenn Sie als Datenquelle eine andere App ausgewählt haben.viewtemplatesDictionary(String ➝ ViewTemplateInfo) oderNoneDie Anzeige-Templates dieser App. Die Schlüssel des Dictionarys sind die
identifierder Anzeige-Templates.categoriesDictionary(String ➝ Category) oderNoneWenn in der Datenquellen-Konfiguration Kategorien etwas ausgewählt ist, enthält
categoriesdie 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
categoriesNone.paramsDictionary(String ➝ AppParameter)Die Parameter der Applikation (die unter in der Parameter-Maske angelegt werden können). Die Schlüssel des Dictionarys sind die Identifizierer der Parameter. Die Werte sind
AppParameter-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.beispielzu finden ist, auch direkt alsapp.p_beispielzur Verfügung steht.pv_<identifier>ObjektDamit kann direkt auf den Wert eines``AppParameter``-Objekts zugegriffen werden. D. h.
app.pv_beispielist äquivalent zuapp.p_beispiel.value(was wiederum zuapp.params.beispiel.valueäquivalent ist).viewsDictionary(String ➝ View)Die verschiedenen Formularvarianten der Applikation (die unter bei Formularvarianten angelegt werden können). Die Schlüssel des Dictionarys sind die Identifizierer der Views. Die Werte sind
View-Objekte.active_viewViewDie aktive Formularvariante. Ist
active_viewgesetzt (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 (minlengthundmaxlengthfür String-Felder,requiredfür alle).Wird das Attribut
active_viewgesetzt kann als Wert sowohl ein View-Objekt verwendet werden, als auch dieideines View-Objekts. Dieses View-Objekt muß zu dieser App gehören.datasourceDataSourceDas 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 Appaimmera.datasource is None or `a.datasource.app is a.layout_controlsDictionary(String ➝ LayoutControl) oderNoneDie 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_controlsNone.lc_<identifier>LayoutControl„Shortcut“-Attribut zum Zugriff auf die Layout-Controls des aktiven Views.
app.lc_beispielist äquivalent zuapp.layout_controls.beispiel.favoriteBoolGibt an, ob der aktuelle eingeloggte Benutzer diese App als Favorit festgelegt hat.
Dieses Attribut kann geändert werden.
menusDictionary(String ➝ MenuItem) oderNoneDie zu dieser App konfigurierten Menüs. Die Schlüssel in diesem Dictionary sind die Identifizierer und die Werte sind
MenuItem-Objekte.panelsDictionary(String ➝ Panel) oderNoneDie zu dieser App konfigurierten Panels. Die Schlüssel in diesem Dictionary sind die Identifizierer und die Werte sind
Panel-Objekte.save()Methode() ➝ BoolSpeichert die Werte der veränderbaren Attribute in der Datenbank.
Veränderbare Attribute sind``name``,
description,image,favorite,typename_nom_sin,typename_gen_sin,typename_dat_sin,typename_acc_sin,typename_nom_plu,typename_gen_plu,typename_dat_pluundtypename_acc_plu.
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,nachnameundgeburtstagmittels 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
paramskö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 WertNoneder 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
paramskö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. IstrecordNoneso wird ein Link zu einem Listen-Template generiert, wird fürrecordein 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
paramskö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) ➝NoneVerschickt eine E-Mail.
Nähere Informationen finden Sie unter E-Mails über die LivingAPI versenden.
customObjektDieses 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.