Module: sdw/templates/inline/inlineEditormanager

Dieses Modul definiert die Klasse InlineEditormanager. Der InlineEditormanager steuert die Bearbeitung fachlicher Datenobjekte durch den Aufruf und die Beendigung passender Inline-Editoren. Die Präsentation der Datenobjekte im statischen, also nicht editierbaren Modus ist ebenfalls Aufgabe des InlineEditormanagers. Das Konzept ist simpel:

  • Die Datenobjekte werden auf einer HTML-Seite in der Form label: value präsentiert. Der Label ist ein klickbarere Hyperlink.
  • Durch Anklicken des Hyperlinks verwandelt sich die statische Repräsentation des Datenobjektes in einen Editor. Das kann ein Standardeditor wie date, time, integer oder dropdownlist sein, oder aber ein komplexer Editor für ein fachliches Objekt wie KundenSelektor. Ein erneutes Anklicken schließt den Editor wieder falls das Datenobjekt noch unbearbeitet ist. Wurden Änderungen vorgenommen, wird das Anklicken des Labels eines offenen Editors ignoriert, der Nutzer ist aufgefordert seine Änderungen mit ok oder cancel zu bestätigen bzw. abzulehnen.
  • Nach dem Editieren kümmert sich der Editormanager um die Propagation echter Änderungen an die Server-API und schreibt die geänderten Werte in die HTML-Seite.

Der Aufruf der Editoren erfolgt entweder einzeln durch Anklicken des Labels des Datums oder für alle Editoren zusammen durch Klick auf den entsprechenden Tollbarbutton. Zuerst genannter Modus wird SingleEditModus bezeichnet, letzterer EditAllModus.

  • Im SingleEditModus können durchaus mehrere oder sogar alle Editoren offen sein, sie müssen nur einzeln durch Labelklick aktiviert werden. In diesem Modus verfügt jeder InlineEditor über einen ok- und einen cancel-Button, ggf. noch ergänzt um einen clear-Button der das Datenobjekt löscht und dann die ok-Methode aufruft. In diesem Modus wird jede echte Änderung eines Datenobjektes, die mit ok bestätigt wurde, nach dem Schließen des Editor sofort und einzeln an die Server-API propagiert. Offene Editoren, deren Wert nicht valide ist, können nicht mit ok, sondern nut mit cancel beendet werden.

  • Im EditAll-Modus werden alle Editoren durch den Editormanager gleichzeitig aktiviert, so dass die HTML-Seite wie ein Dialog wirkt, zwischen dessen Formularelementen man mit Tab-Sprüngen navigieren kann. Die Editoren haben keine eigenen ok- und cancel-Buttons, lediglich optionale clear-Buttons. OK und Cancel wird für alle Editoren gleichzeitig durch Klick auf den entsprechenden Button der Toolbar ausgelöst. Bei Klick auf ok werden alle Editoren, die einen validen Wert beinhalten, durch ok geschlossen. Alle Editoren, die keinen validen Inhalt haben, werden durch cancel geschlossen und geben ihr BeforeImage zurück. Der Editormanager sorgt in diesem Modus dafür, dass alle geänderten Werte in einem einzigen Aufruf an die Server-API propagiert werden.

  • Da sich diese beiden Modi nicht ausschließen existieren Mischformen. Ist z.B. einer (oder mehrere) Editoren geöffnet kann der Nutzer immer noch auf "alles editieren' klicken, so dass alle bisher nicht geöffneten Editoren ohne separaten ok- und cancel-Button geööfnet werden. Trotzdem kommt es zu keinen Konflikten: Die vorher geöffneten Editoren können weiterhin separat geschlossen werden, echte Änderungen werden sofort an die Server-API propagiert. Klickt der Nutzer auf 'alles speichern' oder 'alles zurücksetzen' sind davon auch die noch offenen Editoren, die separat geöffnet worden sind, betroffen. Auch im EditAll-Modus können offene Editoren, wenn sie keinen geänderten Inhalt haben, durch Anklicken des Label-Hyperlinks wieder geschlossen werden.

  • Als Besonderheit wird der Datentyp Map unterstützt, der eine OSM-Karte nutzt um geographische Informationen als Marker darzustellen.

Die Klasse EditorMetadata stellt die notwendigen Metadaten zur Verfügung. Dort werden eine Vielzahl von Metadaten definiert, wie Datentyp, Editorklasse, Labelitems, Opcodes für die Anforderung von optionLists für dropDown-Editoren usw.

Author:
  • sdw.systems
Source:
See:

Extends

Requires

Members

(private) dataItem

Source:

editorMetadata

Properties:
Name Type Description
args.editorMetadata module:sdw/templates/inline/editorMetadata

EditorMetadata-Objekt, eine von :sdw/templates/inline/editorMetadat abgeleitete Klasse, beschreibt die zu bearbeitenden Daten in Bezug auf Datentyp, zu verwendende Editoren, readonly usw. Wird von der abgeleiteten Klasse geladen.

Source:

editors

Properties:
Name Type Description
editors module:sdw/templates/inline/editor

Assoziatives Array das zu einer domId Editorbjekte verwaltet und Statusinformationen verfügbar macht.

Source:

emdKlasse

Properties:
Name Type Description
emdKlasse Object

Zeiger auf die Metadaten für die ausgewählte Klasse

Source:

id

Properties:
Name Type Description
id UUID

Die Id des Datenobjektes welches dieser Editormanager verwaltet. Wird beim Öffnen des Kontextmenüs des Baumes dafür verwendet um abzugleichen, ob der Editormanager das gleiche Datenobjekt verwaltet wie das im Baum angeklickte falls es sich um einen Rechtsklick handelt. Falls dem nicht so ist wird das Kontextmenüs des Baumes nicht aktiviert. So wird sichergestellt, das man auf z.B. innerhalb des Baumes an beliebiger Stelle auf Löschen klickt, im Viewbereich aber noch ein ganz anderes Objekt dargestellt ist.

Source:

(private) klasse

Source:

mapItems

Properties:
Name Type Description
mapItems Array.<Object>

Array in dem alle EditorMetadataItems vom Typ map drinstecken.

Source:

maps

Properties:
Name Type Description
maps Array.<Object>

Array der Leaflet-Maps, im allgemeinen leer oder einelementig.

Source:

markerItemArray

Properties:
Name Type Description
markerItemArray Array.<Object>

Array von EditormetadataItems.item, entspricht dem item-Array des Items mit dem Datatyp this.datatypeMap. Die so referenzierten Items werden als Marker auf der Karte angezeigt

Source:

moduleName

Properties:
Name Type Description
moduleName String

Name des Moduls aus lokaler Konstante

Source:

Methods

afterStoreAction(metadataItem, afterImageForStore)

Kann von den abgeleiteten Klassen überschrieben werden um noch individuelle Änderungen vorzunehmen nachdem der Editor beendet ist. Zum Beispiel können berechnete Werte aktualisiert und angezeigt werden. Diese Implementierung macht gar nichts.

Parameters:
Name Type Description
metadataItem Object

Das MetadataItem, das das bearbeitete Datenobjekt beschreibt.

afterImageForStore Object

Das Afterimage, also der Zustand des Datenobjektes nach der Bearbeitung durch den Editor

Source:

commitAfterImage(metadataItem, afterImageForStore, updateAPI)

Wird von jedem einzelnen Editor aufgerufen, wenn dieser mit OK beendet wurde und auch wirklich alles ok ist. Die geänderten Daten können persistent gemacht werden. Das betrifft

  1. Die Änderung der Daten im lokalen Datenspeicher: Das Modell des Trees, das Modell des Kalenders und ggf. weitere Modells oder Sichten
  2. Die Propagation der Änderung an den Server, also der Aufruf einer API-Funktion um die Daten auf dem Server zu aktualisieren

Ob die Daten direkt an die API gesendet werden oder nicht hängt für alle nicht tabellenwertige Datenobjekte davon ab, ob der letzte Parameter true oder false ist. Tabellenwertige Daten werden immer direkt an die API propagiert, denn diese haben separate Opcodes für das store, aus Sicht der API sind das ja eigenständige Objekte.

Parameters:
Name Type Description
metadataItem Object

Das MetadataItem, das das bearbeitete Datenobjekt beschreibt.

afterImageForStore Object

Das Afterimage, also der Zustand des Datenobjektes nach der Bearbeitung durch den Editor

updateAPI Boolean

Zeigt an, ob diese Änderung sofort an die API gesendet werden soll (true) oder ob damit gewartet werden soll, bis alle Editoren geschlossen sind und alle erfolgreichen Änderungen mit einem einzigen Request an die API gesendet werden sollen

Source:

constructor(args, klasse)

Der Konstruktor stellt alle Argumente innerhalb der Klasse unter this.argument zur Verfügung. Danach wird setProperties() aufgerufen um abgeleiteten Klassen nochmals Gelegenheit zu geben Eigenschaften zu setzen. Danach wird ein neuer ContentPane erzeugt dem ContainerView zurückgegeben, der diese Klasse instantiiert hat. Danach enthält der ContentPane des ContainerViews einen leeren ContentPane, der durch Aufruf von initialize() gefüllt wird. Vorher wird ein neuer Array für die Editoren definiert.
Gibt es mindestens einen Datentyp mit geographischen Daten, wird nach initialize() für jedes dieser Daten nocht initMap() aufgerufen.

Parameters:
Name Type Description
args Object

Argumentobjekt

Properties
Name Type Description
dataItem Object

JSON-Fragment, die zu bearbeitenden Daten

klasse String

Name der fachlichen Klasse für die dieser Editormanager gebraucht wird

Source:

countOpenEditors() → {Integer}

Gibt die Anzahl der aktuell geöffneten Editoren zurück. Wird von der Methode this.invokeEditor aufgerufen, die den Editor ja auch wieder schließt wenn dirty==false ist, um festzustellen ob dies der letzt geöffnete Editor war. Wenn dem so ist werden die Toolbarbuttons entsprechend gesetzt. Ruft für alle Metadata-Gruppen die Methode this.countOpenEditorsOfGroup auf und summiert das Ergebnis auf.

Source:
Returns:

Die Anzahl der aktuell offenen Editoren

Type
Integer

countOpenEditorsOfGroup(Metadata-Gruppe) → {Integer}

Gibt die Anzahl der aktuell geöffneten Editoren der MetadataItem-Gruppe zurück.

Parameters:
Name Type Description
Metadata-Gruppe Object

als JSON-Objekt

Source:
Returns:

Die Anzahl der aktuell offenen Editoren der MetadataItem-Gruppe

Type
Integer

createInlineEditorGroup(emdGroup, dataItem)

Baut das GUI für eine EditorGruppe auf. Falls die Gruppe einen Label hat wird dieser gesetzt und der Tooltip an das Label gehängt. Läuft über alle Items der Gruppe und ruft für jedes Item die Methode createInlineEditorRow() auf.

Parameters:
Name Type Description
emdGroup Object

Das Group-Objekt aus den Editormetadaten

dataItem Objekt

Das DataItem

Source:

createInlineEditorRow(divGroup, emd, ed)

Wird für alle DataItems aufgerufen. Darf nicht überschrieben werden.

Parameters:
Name Type Description
divGroup Object

Das Dom-Objekt, an das die abgeleitete Klasse das Ergebnis, also die customRow, anhängen kann.

emd Object

EditormetadataItem das das ed-Item beschreibt.

ed Object

DataItem Das Datenitem

Source:

createInlineEditorTableRow(domNodeTableBody, emdSubItem, dataItem, even)

Baut für tabellenwertige Objekte eine weitere Zeile der Tabelle zusammen. Kann von den abgeleiteten Klassen überschrieben werden. Falls das emdSubItem eine rowHeader und eine opcDownload-Eigenschaft hat wird das rowheader-Attribut des dataItems als href-Link ausgestaltet, der beim Click einen Download von der API ausführt mit dem Opcode des emdSubItems und der OID des dataItems[oid]

Parameters:
Name Type Description
domNodeTableBody Object

Dom-Objekt, der domNodeTableBody-Node in den die Row eingehängt werden soll

emdSubItem Object

Das Sub-Objekt aus den Editormetadaten

dataItem Objekt

Das DataItem, ebenfalls auf den notwendigen Scope für diese Zeile reduziert, also ein Zeiger auf ein Array-Element

even Objekt

Alterniert zwischen true und false um die Zeilenfärbung mittels css zu ermöglichen

Source:

createLabel(emdKlasse, treeItem) → {String}

Wird von updateLabels aufgerufen und vom tree selber innerhalb von onDNDPasteItem wenn nach einer Sortierung per dnd die Positionsnummern in den Labels angepasst werden müssen.

Parameters:
Name Type Description
emdKlasse Object

Zeiger auf das Editormetadataobjekt, erwartet wird das emdKlasse.labelItems.length > 0 ist

treeItem Object

Das geänderte treeItem aus dem die Werte der Labelitems ausgelesen werden sollen.

Source:
Returns:

Der neue Label, ein String, der sich aus den konketenierten labelItems-Werten bildet, ggf. durch emdKlasse.labelItemSeparators getrennt

Type
String

createMarker(metadataItem, afterImageForStore, setMarkerCallBack)

Kann von den abgeleiteten Klassen überschrieben werden. Erzeugt neue MarkerObjekte und ruft für jedes neu erzeugte MarkerObjekt die mitgegebene Callback-Methode auf um den Marker auf der Karte anzuzeigen. Diese Implementierung macht nichts außer die Callback-Methode zu Dokumentationszwecken mit Null aufzurufen.

Parameters:
Name Type Description
metadataItem Object

MetadataItem des geänderten DataItems

afterImageForStore Object

Der neue Wert des DataItems

setMarkerCallBack Callback

Muss für jedes neue Marker-Objekt mit dem marker-Objekt als Parameter aufgerufen werden.

Source:

createMarkerIcons()

Baut Marker-Icons vom Typ Leaflet.Icon in den Grundfarben. Diese werden für alle Karten shared genutzt.

Source:

dispose()

Löscht alle Objekte des EditorManagers und gibt die Resourcen frei

Source:

disposeEditor()

Wird vom sterbenden Editor als letzte Aktion aufgerufen, nachdem er sich selber schon vollkommen vernichtet hat. Insbesondere hat er schon alle Aufräumarbeiten für die dijit-GUI-Objekte erledigt. Hier geht es nur noch darum, den Editor aus der Liste der Editoren zu löschen Falls der GanzeBreiteModus aktiv ist, wird die Sichtbarkeit des Labels wieder eingeschaltet.

Source:

downloadFile()

Callback, kann von den abgeleiteten Klassen überschrieben werden. Wird durch einen Click auf einen rowHeader, der die Eigenschaft opcDownload gesetzt hat, aufgerufen. per anchor angeklickt wird.

Source:

getEditorCount() → {Integer}

Gibt die Anzahl der Editoren für das MetadataItem zurück. Falls diese Anzahl==0 ist brauchen keine aktiven Elemente auf der Seite zu sein. Kann von den abgeleiteten Klassen überschrieben werden um ro/rw-Funktionalität in Bezug auf die Toolbar zu realisieren, die anklickbaren Labels müssen aber extra behandelt werden.

Source:
Returns:

Die Anzahl der Editoren dieses Editormanagers

Type
Integer

getGeoData(mapItem)

Baut einen Array von Geodatenobjekten zusammen und übergibt diesen in einem Methodenaufruf an die Methode this.initMap. Jedes Geodaten-Objekt wird als Marker in der Karte zum EditorMetadaten-Objekt emdItem dargestellt. Kann von den abgeleiteten Klassen überschrieben werden um die Geodaten auf unterschiedlichste Art und Weise zur Verfügung zu stellen. Der Methodenaufruf this.initMap(mapItem, geoData); muss dabei von den abgeleiteten Klassen ebenfalls gemacht werden weil das Holen der Geodaten oft asynchron ist. Diese Implementierung gibt einen einelementigen Array zurück, nämlich die Geodaten an der Stelle this.dataItem[mapItem.item]

Parameters:
Name Type Description
mapItem Objekt

Ein emdItem mit Datentyp map

Source:

getInnerHTML(emd, ed) → {String}

Helpermethode, gibt den im HTML darzustellenden Value wieder. Berücksichtigt die Datentypen, z.B. Checkox-Symbol für boolsche Werte

Parameters:
Name Type Description
emd Object

Editormetadatafragment

ed Object

DataItem. Wenn das dataItem mit der onClick-Methode aus dem tree geholt wurde ist es kein Array[0], wenn es direkt aus dem Store kommt ist es ein Array[0]

Source:
Returns:

innerHTML, Konstante oder ein href auf ein Icon

Type
String

hasBeenUpdated() → {Boolean}

Prüft, ob der Ediotrmanager mindestens einen Editor hat, der geöffnet ist und geänderte Daten hat. Wird insbesondere dazu gebraucht um vor dem Wechsel von Editormanagern oder dem Schließen von Tabs zu prüfen ob es noch ungesicherte Daten gibt.

Source:
Returns:

true, falls es ungesicherte Daten gibt, sonst false

Type
Boolean

initialize()

Wird vom Konstruktor aufgerufen und stellt die äußerste Schleife beim Bau des GUI dar. Erstellt das alles umfassende

als this.editorContainer und traversiert dann über alle Editormetadaten-Gruppen um für jede Gruppe die Methode this.createInlineEditorGroup() aufzurufen. Danach erfolgt die Initialisierung der Toolbarbuttons:

  • EditAll wird aktiviert wenn this.getEditorCount() > 0
  • Print wird aktiviert wenn emdKlasse den opcPrint definiert
Source:

initMap()

Initialisiert die Darstellung geographischer Daten Wird vom Konstruktor nach dem Bau und Rendern des GUI aufgerufen.

  • Es muss genau eine EditorMetadata-Item vom Typ this.datatypeMap geben
  • Das items-Attribut dieses Items muss ein Array von Strings sein, die auf die item-Eigenschaft derjenigen items der fachlichen Klasse verweisev, die geographische Daten auf dieser Karte anzeigen sollen und dafür eine geo-Eigenschaft haben die ein Objekt mit lat, lon, name, adresse und rolle beinhaltet.
  • Falls es keine solchen Items gibt wird die Karte auf die Metadatan-Koordinaten des Mandanten zentriert.
Source:

invokeEditor(hasOkAndCancelButtons, hasFocus)

Öffnet einen Inline-Editor Falls der Editor schon offen ist und das Datum noch nicht bearbeitet wurde wird der Editor wieder geschlossen. Wenn das der letzte offene Editor war werden die Toolbarbuttons entsprechend gesetzt. Falls das Datum bereits bearbeitet wurde passiert nichts, der Nutzer muss entscheiden zwischen ok und cancel Die Editorklasse wird aus den Editormetadaten ausgelesen und mit dojo.require geladen und instantiiert. Ein Zeiger auf den neuen Editor wird in dem assoziativen Array this.editors an der Stelle der UUID eingehängt. Falls in den Metadaten divEditorWrapperWidth==max ist wird der anklickbare Label ausgeblendet, somit wird der Editor ganz links positioniert. Um das Ausdehnen des Editos kümmert sich dieser selber, siehe invoke() in der Editorbasisklasse.

Parameters:
Name Type Description
hasOkAndCancelButtons boolean

Im Einzeleditormodus hat jeder Editor separate true und cancel-Buttons, im EditAll-Modus nicht da ok und cancel über die Toolbar für alle geöffneten Editoren aufruft

hasFocus boolean

ImEinzeleditormodus ist hasFocus==true, d.h. wenn der Editor die setFocus()-Methode überschrieben hat wird der Focus auf ihn gesetzt. Im EditAllModus wird hasFocus==false gesetzt, nur der erste Editor hat hasFocus==true

Source:

invokeEditorFromButton(domIdButton)

Startet einen Inline-Editor nachdem auf den Label des Attributes geklickt worden ist, also im SingeEditModus. Filtert die UUID der Editorinstanz aus der domIdButton heraus und ruft damit invokeEditor(UUID, true, false) auf, wobei der 2. Parameter bedeutet, dass die neue Editorinstanz separate ok- und cancel-Buttons haben soll, der dritte dass es sich um einen Single-Edit-Mode mit Focus handelt. Neue Objekte werden normalerweise zum ersten Mal im EditAll-Modus bearbeitet.

Parameters:
Name Type Description
domIdButton String

Die um die Buttonkonstante als Prefix erweiterte UUID der Editorinstanz wie sie im zugehörigen Metadatenobjekt hinterlegt ist.

Source:

loadPDF()

Druckfunktion. Wird über die Toolbar aufgerufen. Kann von den abgeleiteten Klassen überschrieben werden

Source:

onClickToolbarButton(domId) → {Boolean}

Wird von onClickToolbarButtonWithEvt der Klasse Toolbar aufgerufen

Parameters:
Name Type Description
domId String

Eine Konstante die angibt, welcher Button gedrückt worden ist

Source:
Returns:

Zeigt an, ob der Event hier verarbeitet werden konnte oder nicht.

Type
Boolean

openItemInNewTab()

Callback, öffnet einen neuen Tab. Wird vom rowheader aufgerufen, oder besser von dessen unsichtbaren button der per anchor angeklickt wird.

Source:

propagateToServer(klasse, opcode, oid, data)

Wird von den Methoden commitAfterImage() für genau ein geändertes Datenobjekt und von der Methode store() für alle geänderten Datenobjekte aufgerufen. Sendet die Änderungen unter Verwendung des Opcodes und der OID an den Server. Als Vehicle kommt ein sdw/command-Objekt zum Einsatz, der Aufurf ist asynchron und das Ergebnis wird von einem Callback abgefangen, der im Falle einer Exception diese in einem alert() anzeigt und den Nutzer auffordert, die Daten erneut vom Server zu laden.

Parameters:
Name Type Description
klasse String

name der fachlichen Klasse aus den EditorMetadaten

opcode Number

Opcode der API, siehe API-Dokumentation

oid OID

des betroffenen Objektes, siehe API-Dokumentation

data Object

JSON-Objekt das die geänderten Daten in der Form Attribut=Wert beschreibt, siehe API-Dokumentation

Source:

readOnly(emdGroup, dataItem) → {Boolean}

Steuert ob die Attribute eines sichtbaren Knotens im Baum editiert werden können oder nicht. Falls der treeNode seleber das Attribute readOnly hat und dieses auf true gesetzt ist wird das berücksichtigt. In späteren Versionen können auch die Metadaten zusärtlich ausgewertet werden. Wird an 3 Stellen aufgerufen:

  1. Beim initialize(), steuert den EditAll-Button
  2. Beim createGroup(), steuert die Gruppeneditierfunktion
  3. Beim createRow, steuert die Einzeleditierfunktion
Parameters:
Name Type Description
emdGroup Object

Das Group-Objekt aus den Editormetadaten

dataItem Objekt

Das DataItem

Source:
Returns:

readOnly true oder false

Type
Boolean

setMarker(map, marker, addToArray)

Zeigt ein neues Marker-Objekt in der Karte an. Wird beim Initialisieren der Karte von initMap mit addToArray=false aufgerufen und beim Editieren der Geo-Objekte als Callback ohne addToArray-Parameter um dynamisch neue Marker auf die Karte zu bringen.

Parameters:
Name Type Description
map Object

Die map auf der der Marker angezeigt werden soll

marker Object

Zeiger auf das neue L-Marker-Objekt

Properties
Name Type Description
item String

Zeiger auf das zugehörige EditorMetadata-Item

lat Number

Längengrad

lon Number

Breitengrad

adresse String

Adressstring, wird im Tooltip und Popup angezeigt

name Object

Bezeichnung des Objektes, wird im Tooltip und Popup angezeigt

rolle Object

Rolle des Objektes, wird im Tooltip und Popup angezeigt

addToArray Boolean

Steuert, ob das neue Marker-Objekt von in den Marker-Array eingetragen werden muss, default=true. Nur bei der initialen Darstelleung sind die Marker schon im Array, dann false.

Source:

setProperties()

Gibt der abgeleiteten Klasse neben den Constructor args die Möglichkeit Eigenschaften der Basisklasse zu setzen. Wird vom Konstruktor der Basisklasse aufgerufen. Die abgeleiteten Klassen sollten diese Möglichkeit nutzen um das Metadaten-Objekt zu laden, so was wie this.editorMetadata=new EditorMetaData(...); Pure virtual, gibt lediglich eine Warnung aus falls diese Methode von der abgeleiteten Klasse nicht korrekt überschrieben wurde

Source:

setValueOfItem(item, value)

Setzt den Wert eines Items sowohl im TreeStore als auch im GUI auf den übergebenen Wert. Der übergebene Wert wird unformatiert erwartet. Unformatiert bedeutet, dass der Wert so wie er ist kompatibel zum Datentyp als Attributausprägung in den TreeStore geschrieben werden kann, also

  • Dezimalzahlen ohne 1000er Punkte und mit Punkt statt Komma
  • Datumsangaben im ISO-Format
  • Keine Einheitsangaben
  • usw. Vor dem Setzen des Wertes im GUI wird dieser anhand der Editormetadaten-Information formatiert.
Parameters:
Name Type Description
item String

Der Name des Items gemäß Editormetadata ger gesetzt werden soll

value String

Der neue Wert, unformatiert

Source:

startEditmodeForAllEditableControls()

Setzt den zugeordneten ContainerView in den AlleBearbeitenModus, d.h. alle Editoren werden aktiviert. Dazu wird für jede emdGruppe die Methode startEditmodeForAllEditableControlsOfGroup: function(newObject, emdGroup, groupHasFocus) aufgerufen und der Rückgabewert, die Anzahl der offenen Editoren jeder gruppe, aufsummiert. Falls die Gesamtsumme der Editoren aller Gruppen > 0 ist wird der EditAllModus-Button disabled. Das Enablen der ok und cancel-Button fird in der Methode startEditmodeForAllEditableControlsOfGroup gemacht. Das ist zwar ggf. redundant, stört aber nicht. groupHasFocus ist für die 1. Gruppe true, sonst false. Dadurch bekommt das 1. Control in der 1. Gruppe den Focus.

Source:

startEditmodeForAllEditableControlsOfGroup(emdGroup,, groupHasFocus) → {Integer}

Aktiviert alle Editoren in der übergebenen Gruppe. Wird aufgerufen von startEditmodeForAllEditableControls für alle Gruppen und vom Anchor/Button des Gruppenlabels für genau eine Gruppe. Das betrifft allerdings nur Datenobjekte, deren Metadatum kein alert-Tag haben. Diese Datenobjekte müssen separat aktiviert und bearbeitet werden. Das entspricht der Klappe über dem Abschußknopf der Rakete: Erst Hochklappen, dann kann gefeuert werden. Für alle Editormetadatenobjekte wird geprüft, ob diese bereits einen offenen Editor haben, wenn nicht wird invokeEditor aufgerufen mit hasOkAndCancelButtons==false und hasFocus==false mit Ausnahme des ersten Editors, bei dem hasFocus==true ist. Falls es mindestens einen Editor gibt der geöffnet werden konnte werden danach die Toolbarbuttons entsprehend gesetzt, also ok und canel an. EditAllModus kann weiterhin angeklickt werden.

Parameters:
Name Type Description
emdGroup, Object

ein JSON-Objekt dass die Gruppe definiert

groupHasFocus Boolean

Falls true bekommt das 1. Control der Gruppe den Focus. Falls diese Methode von startEditmodeForAllEditableControls aufgerufen wird ist der Parameter nur für die 1. Gruppe true, beim Aufruf durch den Anchor/Button des Gruppenlabels immer true

Source:
Returns:

Anzahl der Editoren dir geöffnet werden konnten.

Type
Integer

stopEditmodeForAllEditableControls(save)

Wird vom umgebenden ContainerView, der die Buttons verwaltet, aufgerufen falls auf den "alles speichern" oder "alles verwerfen" Button geklickt wird. Der Unterschied spiegelt sich in dem Parameter wider: true bedeutet speichern, false bedeutet verwerfen. In Abhängigkeit dieses Parameters ruft diese Methode für alle offenen Editoren entwededer ok() oder cancel auf(). Die ok() Methode wird dabei fix mit dem Paramter false versehen was bedeutet, dass die Änderungen nicht auch direkt an den Server propagiert werden sollen. Das ist naheliegend, denn wenn der Editor im EditAllModus ist, sollen die Änderungen der einzelnen Editoren nicht direkt und einzeln an den Server propagiert werden, sondern gesammelt werden und danch mit einem einzigen Aufurf an den Server gesendet werden. Dazu wird die Methode store() aufgerufen

Parameters:
Name Type Description
save Boolean

Änderungen speichern (true) oder verwerfen (false)

Source:

store()

Wird von der Methode stopEditmodeForAllEditableControls() aufgerufen wenn nach close all alle Editoren zu sind und der lokale store up to date ist. Sammelt die Änderungen am dataItem und schreibt die wirklich geänderten Objekte in ein JSON-Objekt, dass mit der Methode propagateToServer() an die API gesendet wird.
Dazu wird die Liste der Metadatenitems durchlaufen und alle Items, die das hasBennUpdated-Flag tragen als Zugriffsmuster für das DataItem genutzt. Danach wird das hasBeenUpdated-Flag des MetadataItems resetted.

Source:

updateLabels(metadataItem, afterImageForStore)

Wird von commitAfterImage aufgerufen und setzt alle sichtbaen Labels im GUI, die das geänderte dataItem enthalten, auf den neuen Wert. Für Skalare wird im Kopf der Metadaten nach den LabelItems gesucht, für tabellenwertige Objekte wird innerhalb der Tabellendefinition in den Metadaten danach gesucht. Ist LabelItems an den entsprechenden Stellen nicht verfügbar passiert nix.

Parameters:
Name Type Description
metadataItem Object

Das MetadataItem, das das bearbeitete Datenobjekt beschreibt.

afterImageForStore Object

Das Afterimage, also der Zustand des Datenobjektes nach der Bearbeitung durch den Editor

Source:

updateMarkers(mapId, metadataItem, afterImageForStore)

Wird von commitAfterImage aufgerufen um die Kartendarstellung zu aktualisieren.

  1. Prüft, ob das MetadataItem Element von this.markerItemArray ist. Wenn ja, dann
  2. Läuft über den this.markers-Array bis das zugehörige Marker-Item gefunden wurde und löscht diesen zugeordneten Marker von der Karte.
  3. Löscht das Element aus this.markers-Array
  4. Holt für den neuen Wert in afterImageForStore anhand der OID und der Klasse neue Geodaten
  5. Fügt diese als neuen Marker in this.markers-Array ein und aktualisiert die Karte.
Parameters:
Name Type Description
mapId Integer

Laufende Nr. des Kartenobjektes, im Allgemeinen 0 für die erste Karte

metadataItem Object

MetadataItem des geänderten DataItems

afterImageForStore Object

Der neue Wert des DataItems

Source: