Record
Ein Record-Objekt stellt einen Datensatz einer App dar und hat folgende Attribute:
id
String oderNone
Der eindeutige Datensatz-Identifizierer. Wurde das Datensatz-Objekt neu angelegt (durch Aufruf des App-Objektes) so ist
id
nochNone
und wird erst beim Abspeichern (mittels save()) gesetzt.app
AppDie App zu der dieser Datensatz gehört.
createdat
DatumDer Zeitpunkt zu dem dieser Datensatz angelegt wurde.
createdby
UserDer Benutzer der diesen Datensatz angelegt hat.
updatedat
Datum oderNone
Der Zeitpunkt zu dem dieser Datensatz zuletzt geändert wurde. Wurde der Datensatz noch nie geändert, so ist
updatedat
None
.updatedby
User oderNone
Der Benutzer, der den Datensatz zuletzt geändert hat. Wurde der Datensatz noch nie geändert, so ist
updatedby
None
.fields
Dictionary(String ➝ Field)fields
beinhaltet die Feld-Werte des Datensatzes. Einträge infields
haben dieselbe Reihenfolge, wie die Einträge imcontrols
-Attribut einesApp
-Objekts. Die Schlüssel sind wieder die Feld-Identifizierer und die Werte sindField
-Objekte.f_<identifier>
FieldDie
Field
-Objekte stehen auch über sogenannte „Shortcut“-Attribute zur Verfügung.record.fields.vorname
steht auch z.B. direkt alsrecord.f_vorname
zur Verfügung.values
Dictionary(String ➝ Objekt)values
beinhaltet statt Field-Objekten direkt die Werte der Felder. Für alle Felderx
gilt:record.fields.x.value is record.values.x
v_<identifier>
ObjektAuch Feld-Werte stehen über „Shortcut“-Attribute zur Verfügung.
record.values.vorname
also z.B. alsrecord.v_vorname
.attachments
Dictionary(String ➝ Attachment)Die Anhänge zu diesem Datensatz. Die Dictionary-Schlüssel sind die Datenbank-Identifizierer des Anhangs, die Werte sind Attachment-Objekte.
children
Dictionary(String ➝ Dictionary(String ➝ Record))Die diesem Datensatz zugeordneten Datensätze. Der Dictionary-Schlüssel auf oberster Ebene ist dabei der Identifizierer, der dieser Zuordnung in der Konfiguration gegeben wurde. Das Dictionary auf zweiter Ebene beinhaltet die zugeordneten Datensätze. Die Schlüssel sind die Datensatz-Identifizierer und die Werte sind Record-Objekte. Als Sortierung wird die in der Konfiguration festgelegte Sortierung verwendet.
c_<identifier>
Dictionary(String ➝ Record)Auch für zugeordnete Datensätze gibt es Shortcut-Attribute.
record.children.beispiel
, steht auch direkt alsrecord.c_beispiel
zur Verfügung.errors
Liste(String)Fehlermeldungen die den gesamten Datensatz betreffen als Liste von Strings. Diese werden im Augenblick nicht von System gesetzt, können aber vom Benutzer beliebig geändert werden.
add_error(error)
Methode(String) ➝None
Fügt die übergebene Fehlermeldung zur Liste der Fehlermeldungen (
errors
) hinzu. Diese Methode erwartet die Fehlermeldung als Argument. Das heißt, der Aufruf sieht beispielsweise so aus:record.add_error("Die Bearbeitungszeit ist abgelaufen!")
.has_errors()
Methode() ➝ BoolGibt zurück, ob dieser Datensatz oder eines seiner Felder eine Fehlermeldung hat. Diese Methode erwartet keine Argumente. Das heißt, der Aufruf sieht beispielsweise so aus:
record.has_errors()
.clear_errors()
Methode() ➝None
Leert die Fehlermeldungs-Liste zu diesem Datensatz aber nicht die der Felder. Diese Methode erwartet keine Argumente. Das heißt der Aufruf sieht beispielsweise so aus:
record.clear_errors()
.clear_all_errors()
Methode() ➝None
Leert die Fehlermeldungs-Listen zu diesem Datensatz und zu den dazugehörigen Feldern. Diese Methode erwartet keine Argumente. Das heißt der Aufruf sieht beispielsweise so aus:
record.clear_all_errors()
.is_dirty()
Methode() ➝ BoolGibt an, ob Feld-Werte geändert wurden. Ist der Datensatz noch gar nicht gespeichert, gibt
is_dirty()
immerTrue
zurück.update(**values)
Methode(**Objekt) ➝None
Mithilfe von
update()
kann der Datensatz verändert werden. Die Parameter müssen per Schlüsselwort übergeben werden. Der Parametername ist dabei jeweils der Feld-Identifizierer des zu setzenden Feldes.D.h. ein Aufruf sieht z.B. so aus:
record.update(vorname="Max", nachname="Mustermann")
delete()
Methode() ➝None
Mithilfe von
delete
kann der Datensatz gelöscht werden. Diese Methode benötigt keine Parameter.
save(force, sync)
Methode(Bool, Bool) ➝ BoolMit der Methode
save
kann ein Datensatzobjekt abgespeichert werden. Ist dieses Datensatzobjekt neu angelegt (d.h.id
istNone
) wird beim Aufruf vonsave()
ein neuer Datensatz angelegt und beim Datensatzobjekt der eindeutige Datensatz-Identifizierer (id
) vergeben, sowie die Attributecreatedby
aufglobals.user
(eingeloggter Benutzer) undcreatedat
auf das aktuelle Datum gesetzt. Ist das Datensatzobjekt nicht neu, werden beim Aufruf vonsave()
nur die geänderten Felder gespeichert, sowie das Attributupdatedby
aufglobals.user
undupdatedat
auf das aktuelle Datum gesetzt.Ist
force
False
, so wird der Datensatz nicht gespeichert, wenn er oder einer seiner Felder eine Fehlermeldung hat (d.h. wennhas_errors()
True
zurückgibt), oder wenn Felder von Typapplookup
,multipleapplookup
oderfile
auf noch nicht gespeicherte Datensätze oder Dateien verweisen. Statt dessen wird ein Ausnahme-Fehler erzeugt, der die Ausführung des Anzeige-Templates abbricht. Dieser Ausnahme-Fehler kann dann unter angesehen werden.Ist
force
True
so werden Fehlermeldungen am Datensatz oder seinen Feldern ignoriert, für noch nicht gespeicherte Datensätze oder Dateien wird stattdessenNone
als Wert verwendet und der Datensatz wird trotzdem gespeichert.Wenn für
sync
False
übergeben wird (der Default) ist das Verhalten wie oben beschrieben, wirdTrue
übergeben, so wird nach dem Speichern dasRecord
-Objekt mit dem Datenbank-Inhalt aktualisiert. Das heißt insbesondere, daß Änderungen die durch Datenaktionen an dem Datensatz durchgeführt wurden, imRecord
-Objekt auftauchen.Der Rückgabewert von
save()
gibt an, ob der Datensatz tatsächlich in der Datenbank gespeichert wurde, oder ob dabei ein Fehler aufgetreten ist. Die entsprechende Fehlermeldung wird dabei an den Datensatz gehängt.Bemerkung
Für noch nicht gespeicherte Datensätze oder Dateien wird beim Speichern mit
force=True
zusätzlich eine Fehlermeldung an das Feld-Objekt gehängt (dies kann erst zum Speicherzeitpunkt gemacht werden, nicht zum Zeitpunkt der Zuweisung des Feld-Wertes, da es ja möglich ist, daß ein referenziertes Objekt erst gespeichert wird, nachdem es dem Feld zugewiesen wurde).Noch nicht gespeicherte Dateien können dabei bei der Verwendung innerhalb von Anzeige-Templates nicht auftreten, jedoch bei der Verwendung über das Python-SDK.
executeaction(identifier)
Methode(String) ➝None
Mithilfe von
executeaction
kann eine Daten-Aktion auf dem Datensatz ausgeführt werden. Diese Daten-Aktionen können unter in der Aktionen-Maske definiert werden. Als Parameter muß der Identifizierer der Daten-Aktion übergeben werden.Gibt es z.B. eine Datenaktion mit dem Identifizierer
freigeben
, so kann für den Datensatzrecord
diese Datenaktion folgendermaßen aufgerufen werden:<?code record.executeaction("freigeben")?>
edit_embedded_url(**params)
Methode(**Objekt) ➝ StringGibt die absolute URL zurück für das Eingabe-Formular zum Bearbeiten dieses Datensatzes. 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 record.edit_embedded_url()?>
erzeugt:
https://my.living-apps.de/dateneingabe/1234567890abcdef12345678/10293848576afbecd12345678/edit
Beispiel 2:
<?print record.edit_embedded_url(view="abcdef12345678901234")?>
erzeugt:
https://my.living-apps.de/dateneingabe/1234567890abcdef12345678/10293848576afbecd12345678/edit?view=abcdef12345678901234
Beispiel 3:
<?print record.edit_embedded_url(a=["17", 23], b=None, c=[today(), None])?>
erzeugt:
https://my.living-apps.de/dateneingabe/1234567890abcdef12345678/10293848576afbecd12345678/edit?a=17&a=23&c=2022-11-10
edit_standalone_url(**params)
Methode(**Objekt) ➝ StringGibt die absolute URL zurück für das Eingabe-Formular zum Bearbeiten dieses Datensatzes. 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 record.edit_standalone_url()?>
erzeugt:
https://my.living-apps.de/gateway/apps/1234567890abcdef12345678/10293848576afbecd12345678/edit
Beispiel 2:
<?print record.edit_standalone_url(view="abcdef12345678901234")?>
erzeugt:
https://my.living-apps.de/gateway/apps/1234567890abcdef12345678/10293848576afbecd12345678/edit?view=abcdef12345678901234
Beispiel 3:
<?print record.edit_standalone_url(a=["17", 23], b=None, c=[today(), None])?>
erzeugt:
https://my.living-apps.de/gateway/apps/1234567890abcdef12345678/10293848576afbecd12345678/edit?a=17&a=23&c=2022-11-10
display_embedded_url(**params)
Methode(**Objekt) ➝ StringGibt die absolute URL für die Antwortseite zurück. Bei dieser URL ist die Seite in den üblichen LivingApps-Rahmen eingebettet und der Benutzer muß eingeloggt sein, um diese Seite angezeigt zu bekommen.
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 record.display_embedded_url()?>
erzeugt:
https://my.living-apps.de/dateneingabe/1234567890abcdef12345678/10293848576afbecd12345678/display
Beispiel 2:
<?print record.display_embedded_url(view="abcdef12345678901234")?>
erzeugt:
https://my.living-apps.de/dateneingabe/1234567890abcdef12345678/10293848576afbecd12345678/display?view=abcdef12345678901234
Beispiel 3:
<?print record.display_embedded_url(a=["17", 23], b=None, c=[today(), None])?>
erzeugt:
https://my.living-apps.de/dateneingabe/1234567890abcdef12345678/10293848576afbecd12345678/display?a=17&a=23&c=2022-11-10
display_standalone_url(**params)
Methode(**Objekt) ➝ StringGibt die absolute URL für die Antwortseite zurück. Bei dieser URL ist die Seite nicht in den üblichen LivingApps-Rahmen eingebettet sondern unabhängig und kann auch von nicht eingeloggten Benutzern gesehen werden.
Mittels
params
können der URL zusätzliche Parameter übergeben werden.Beispiel 1:
<?print record.display_standalone_url()?>
erzeugt:
https://my.living-apps.de/gateway/apps/1234567890abcdef12345678/10293848576afbecd12345678/display
Beispiel 2:
<?print record.display_standalone_url(view="abcdef12345678901234")?>
erzeugt:
https://my.living-apps.de/gateway/apps/1234567890abcdef12345678/10293848576afbecd12345678/display?view=abcdef12345678901234
Beispiel 3:
<?print record.display_standalone_url(a=["17", 23], b=None, c=[today(), None])?>
erzeugt:
https://my.living-apps.de/gateway/apps/1234567890abcdef12345678/10293848576afbecd12345678/display?a=17&a=23&c=2022-11-10
display_url(**params)
Methode(**Objekt) ➝ StringGibt die absolute URL zurück für die Antwortseite. Mit dem System-Parameter
la_default_form_variant
kann gesteuert werden, ob dieembedded
oder diestandalone
Variante erzeugt wird. Hat dieser den Wertstandalone
wird diese Variante ausgespielt, sonstembedded
(auch wenn der Parameter nicht angegeben wird).Beispiel 1:
<?print record.display_url()?>
erzeugt:
https://my.living-apps.de/dateneingabe/1234567890abcdef12345678/10293848576afbecd12345678/display
Beispiel 2:
<?print record.display_url(la_default_form_variant="standalone")?>
erzeugt:
https://my.living-apps.de/gateway/apps/1234567890abcdef12345678/10293848576afbecd12345678/display
Mit weiteren Parametern kann die Liste der Request-Parameter in der URL ergänzt werden. Beispiele hierfür finden sich in den Abschnitten display_embedded_url(**params) und display_standalone_url(**params).
template_url(identifier, /, **params)
Methode(String, **Objekt) ➝ StringGibt die absolute URL zurück für ein Detail-Anzeige-Template mit dem Identifizierer
identifier
. Die verlinkte App ist dabei die App zu der Datensatz gehört).Mittels
params
können der URL zusätzliche Parameter übergeben werden.Beispiel 1:
<?print record.template_url("beispiel")?>
erzeugt:
https://my.living-apps.de/gateway/apps/1234567890abcdef12345678/10293848576afbecd12345678?template=beispiel
Beispiel 2:
<?print record.template_url("beispiel", x=17, y=23)?>
erzeugt:
https://my.living-apps.de/gateway/apps/1234567890abcdef12345678/10293848576afbecd12345678?template=beispiel&x=17&y=23
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.