Allgemeines

View Definitionen stellen Sichten auf die Daten dar. Sie werden nicht in jedem Datastore unterstützt, aktuell gibt es nur eine Unterstützung für gisx2 und das Investmanagement.

View Definitionen werden wie Themendefinitionen im jeweiligen themes Verzeichnis des entsprechenden Datastores abgelegt.

Aufbau einer View Definition

<?xml version="1.0" encoding="UTF-8"?>
<View xmlns="http://www.geograt.de/namespaces/gisx3/themedefinition/1.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
	<visibleName>Projekt Übersicht</visibleName>
	<attributeDefinition>
		<attribute>
			<name>datum</name>
			<format>date</format>
		</attribute>
		<attribute>
			<name>plankosten</name>
			<format>currency</format>
		</attribute>
		<attribute>
			<name>auftragsSumme</name>
			<format>currency</format>
		</attribute>
		<attribute>
			<name>rechnungssummeGesamt</name>
			<format>currency</format>
		</attribute>
	</attributeDefinition>
	<defaultDialog>projekt-dlg</defaultDialog>
	<columns>
		e.id as id,
		e.objektNr as objektNr,
		e.objektBez as objektBez,
		e.jahr as jahr,
		e.ort as ort,
		e.plankosten as plankosten,
		(select min(b.benutzerName) from e.benutzer as b) as bearbeiterName1,
		COALESCE(sum(a.betrag),0) as auftragsSumme,
		COALESCE(sum(r.rechnungBetrag),0) as rechnungssummeGesamt
	</columns>
	<from>Projekt e left join e.auftraege as a left join a.rechnungen as r</from>
	<groupBy>e.id,e.objektNr,e.objektBez,e.jahr,e.ort,e.plankosten</groupBy>
	<editableThemeId>projekt</editableThemeId>
	<dashboardThemeId>projekt</dashboardThemeId>
	<authorization>
		<restrictToRoles>
			<roleName>ROLE_ADMIN</roleName>
		</restrictToRoles>
	</authorization>
	<filter>e.plankosten &lt; 100</filter>
</View>

Beschreibung

Die Reihenfolge der Attribute ist nicht zwingend vorgesehen.

AttributeBeschreibungPflichtBeispiel
visibleNameEin sichtbarer NameNein 
descriptionEine kurze BeschreibungNein 
authorizationAngabe der Rollennamen für die dieser View sichtbar ist. Diese Definition können Sie wie in der Beschreibung zur Themendefinition vornehmen.
Wenn nicht angegeben, ist ein View für alle Benutzer sichtbar.

Nein

 

 
defaultCRSDas Standardkoordinatensystem für die Daten des Views. Es gilt der gleiche Mechanismus wie in Themendefinition beschriebenNeinEPSG:31468
columns

Kommagetrennte Angabe der Spalten, die verwendet werden sollen.

Die Verwendung von Funktionen hängt vom jeweilgen Datastore ab.

In gisx2 oder investmangement kann hier nur HQL (bzw. JPA) verwendet werden. Es sind die internen Attributnamen zu verwenden (z.B. "id.project" statt "project").

Geben Sie möglichst jeder Spalte einen entsprechenden Alias, diesen können Sie dann zum Zugriff auf die Daten in Layern, Tabellen, Formularen und zur Attributdefinition verwenden.

 

Ja
e.id.project as project,
e.id.id as id,
e.usage as nutzung,
sum(e.length2D) as len
from

Angabe der Tabellen aus denen selektiert wird (ohne Schlüsselwort "from").

Bei einem datastore der auf einer Datenbank basiert (z.B. gisx2 oder investmanagement) gilt: Die angegebenen Tabellen müssen dem System bekannt sein, d.h. verwenden Sie "SewerEdge" anstatt E0102. Nicht bekannte Tabellen führen zu fehlerhaften Views. Aktuell können Sie sich an dieser Stelle nicht auf andere Themendefinitionen oder Viewdefinitionen beziehen.

Icon
Im Fall von "gisx2" oder "investmanagement" verwenden Sie bitte unbedingt den Alias "e" für die Haupttabelle des Views (bzw. das Ziel der Klickaktion), da GISX 3 diesen Alias für Filteroperationen u.ä. verwendet.
Ja
SewerEdge as e join e.cadData as c
filterAngabe eines Filters für die Daten des Views (ohne Schlüsselwort "where").Nein
e.usage like 'KM%'
groupByAngabe der Spalten nach denen gruppiert werden soll (ohne Schlüsselwort "group by")Nein
e.id.project,e.id.id,e.usage
attributeDefinitionSiehe Themendefinition. Als Namen der Attribute verwenden Sie die Spalten Aliasbezeichnungen aus "columns"Nein 
defaultDialogSiehe Themendefinition.Nein 
editableThemeId

Angabe der ID eines Themas aus dem gleichen Datastore, der für die Bearbeitung (Einfügen bzw. Entfernen von Datensätzen) verwendet werden soll.

Ist diese Angabe nicht vorhanden, sind Daten der Viewdefinition grundsätzlich nicht bearbeitbar.

Nein"mySewerEdge"
dashboardThemeIdAngabe der ID eines Themas aus dem gleichen Datastore, der für die Anzeige in Dashboards verwendet werden soll.Nein"mySewerEdge"
tooltipOptionale Angabe einer Tooltipdefinition, siehe hierzu ThemendefinitionNein 
favoriteOutputOptionale Angabe der Ausgabeanzeige für Favoriten, siehe hierzu Themendefinition. Ist diese Angabe leer, wird im Gegensatz zur Themendefinition die Überschrift des Tooltips verwendet.Nein 

Beispiele zu Spaltendefinitionen

Haltung und angrenzende Schächte

Im folgenden ein Beispiel aus GISX 2, bei dem aus einer Haltung und den Werten von Schacht oben und Schacht unten die Überdeckung (durchschnittliche Tiefe) berechnet wird:

<?xml version="1.0" encoding="UTF-8"?>
<View xmlns="http://www.geograt.de/namespaces/gisx3/themedefinition/1.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
	<visibleName>Kanal Übersicht</visibleName>
	<defaultDialog>haltung</defaultDialog>
	<columns>
		e.id.id as id,
		e.id.project as project,
		e.usage as nutzung,
		e.classification as bezeichnung,
		ko.upperHeight as deckelhoeheOben,
		ku.upperHeight as deckelhoeheUnten,
		round(((ko.upperHeight - e.startHeight) + (ku.upperHeight - e.endHeight)) / 2,2)  as ueberdeckung 
	</columns>
	<from>
		SewerEdge as e, 
		SewerNode as ko, 
		SewerNode as ku
	</from>
	<filter>
		e.id.project = ko.id.project and 
		e.upperNodeId=ko.id.id and
		e.id.project = ku.id.project and 
		e.lowerNodeId=ku.id.id
	</filter>
	<editableThemeId>sewer.sewer-edge</editableThemeId>
	<dashboardThemeId>sewer.sewer-edge</dashboardThemeId>
</View>

Man beachte insbesondere:

  • e.id.id und e.id.project sind notwendig um einen Datensatz eindeutig zu identifizieren. Nur dadurch ist es möglich den Datensatz in einem Formular anzuzeigen. Ferner muss für eine ID der Alias "id" und für ein Projekt der Alias "project" vergeben werden.
  • Für sämtliche Spalten werden Alias Namen vergeben (Diese werden später im Formular verwendet).
  • Im "from" Bereich sind die einzelnen Tabellen aufgeführt.
  • Im "filter" Bereich ist die Verknüpfung zwischen den drei Tabellen definiert

Ein entsprechendes Formular dazu sieht wie folgt aus:

...
		<form>
			<title>Test mit View</title>
			<requestId>
				<attribute>
					<attribute>_id</attribute>
				</attribute>
			</requestId>
			<requestTheme>
				<constant>
					<value>gisx2:sewer.sewerView</value>
				</constant>
			</requestTheme>
			<content>
				<field>
					<name>Nutzung</name>
					<content>
						<featureAttribute>
							<name>nutzung</name>
						</featureAttribute>
					</content>
				</field>
				<field>
					<name>Deckelhöhe oben</name>
					<content>
						<featureAttribute>
							<name>deckelhoeheOben</name>
						</featureAttribute>
					</content>
				</field>
				<field>
					<name>Deckelhöhe unten</name>
					<content>
						<featureAttribute>
							<name>deckelhoeheUnten</name>
						</featureAttribute>
					</content>
				</field>
				<field>
					<name>Überdeckung</name>
					<content>
						<featureAttribute>
							<name>ueberdeckung</name>
						</featureAttribute>
					</content>
				</field>
			</content>
		</form>
...

Beachten Sie dass wir an dieser Stelle als "featureAttribute" die Alias Namen verwenden.

Ergänzend noch eine Tabellendefinition hierzu:

...
		<table>
			<title>Haltungen mit gleichen Baujahr</title>
			<filter>e.yearOfConstruction = :baujahr</filter>
			<themeId>gisx2:sewer.sewerView</themeId>
			<requestParameter>
				<name>baujahr</name>
				<type>
					<attribute>
						<attribute>yearOfConstruction</attribute>
					</attribute>
				</type>
			</requestParameter>
			<column>
				<title>HaltungsNr</title>
				<content>
					<featureAttribute>
						<name>id</name>
					</featureAttribute>
				</content>
			</column>
			<column>
				<title>Nutzung</title>
				<content>
					<featureAttribute>
						<name>nutzung</name>
					</featureAttribute>
				</content>
			</column>
			<column>
				<title>Überdeckung</title>
				<content>
					<featureAttribute>
						<name>ueberdeckung</name>
					</featureAttribute>
				</content>
			</column>
			<action>
				<click>
					<text>Haltung anzeigen</text>
					<href>
						<internal>true</internal>
					</href>
				</click>
			</action>
		</table>
...

Beachten Sie hierzu:

  • Als Filter verwenden wir direktes HQL und einen Platzhalter (Und natürlich wieder den Alias e für die Haupttabelle)
  • Als Spalteninhalt verwenden wir die vergebenen Alias Namen
  • Die definierte "click" Action ruft einen Dialog mit dem Thema sewer.sewer-edge (in dashboardThemeId der ViewDefinition definiert) mit der ID die aus den beiden Spalten mit dem Alias "id" und "project" (Gilt speziell für "gisx2") gebildet wurde.

Verknüpfung von Person zu Flurstück (einfacher Fall)

Die Verknüpfung mehrerer Tabellen kann direkt über das jeweilige Verknüpfungsattribut erfolgen. Dies kann ein Attribut sein, das nur ein Objekt enthält (z.B. Buchungsstelle.buchungsblatt im ALB verweist auf genau ein Buchungsblatt) oder eine Sammlung von Objekten (z.B. Buchungsblatt.buchungsstellen im ALB verweist auf potentiell viel Buchungsstellen). Voraussetzung ist, dass die entsprechende Relationsrichtung im Bean auch implementiert wurde.

In unserem Beispiel gilt: Ein Flurstück ist gebucht auf einer Buchungsstelle. Diese befindet sich auf einem Buchungsblatt.. Auf dem Buchungsblatt gibt es mehrere Namensnummern. Jede Namensnummer ist einer Person zugeordnet. Ziel ist es, einen View zu bauen, der für eine Person die Flurstücke auflisten kann. Wir verwenden dazu die Zuordnungsattribute anstatt der (mehrteiligen) Spaltenrelationen wie im obigen Beispiel:

Namensnummer as n join n.buchungsblatt as b join n.person as p join b.buchungsstellen as s join s.parcels as e

Beachten Sie hierzu:

  • Da das Zielthema das Thema "Flurstücke" ist (in der Datei themes\alkis\flurstueck.xml), muss diese Tabelle den Prefix "e" erhalten. Daher das "s.parcels as e" in <from>-Teil.
  • Man hätte den Join zwischen Person und Namensnummer auch umdrehen können: Person as p join p.namensnummern as n ...

Hier die komplette Datei. (Die Auswahl der Spalten kann beliebig erweitert werden.)

person-flurstuecksview.xml
<?xml version="1.0" encoding="UTF-8"?>
<View xmlns="http://www.geograt.de/namespaces/gisx3/themedefinition/1.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <visibleName>Flurstücke zur Person</visibleName>
    <columns>
        e.id.id as id,
        e.id.project as project,
        e.district as district,
        e.corridorNumber as corridorNumber,
        e.parcelNumber as parcelNumber,
        b.kennzeichen as kennzeichen,
        concat(n.anteil.anteilZaehler,'/',n.anteil.anteilNenner) as anteil,
        n.eigentuemerart as eigentuemerart
    </columns>
    <from>Namensnummer as n join n.buchungsblatt as b join n.person as p join b.buchungsstellen as s join s.parcels as e</from>
    <dashboardThemeId>gisx2:alkis.flurstueck</dashboardThemeId>
    <defaultDialog>alkis.flurstueck</defaultDialog>
</View>

Nutzung in einer Tabelle (Auszug). Der View wird dabei mit einem Filter über ID und Projekt der Person definiert: p.id.id = :personId and p.id.project = :project.

personFlurstuecksListe.xml
<Table ...>
    <filter>p.id.id = :personId and p.id.project = :project</filter>
    <themeId>gisx2:alkis.person-flurstuecksview</themeId>
	... beliebige Spalten aus View ...
    <column>
        <title>Flurstück</title>
        <content>
            <featureAttribute>
                <name>parcelNumber</name>
            </featureAttribute>
        </content>
    </column>
</Table>

Nun fehlt noch die Referenzierung der Tabelle auf z.B. der Personenmaske. Hier wird festgelegt, welche Werte als "personId" und "project" übergeben werden. In diesem Fall die Attribute "id" und "projekt" des Maskenhauptobjekts (da <parent> im <attribute> nicht explizit angegeben ist), also der Person.

person.xml
<Dialog ...>
    ...
    <component id="person-flurstuecke">
        <referencedTable>
            <title>Flurstücke</title>
            <tableId>alkis.personFlurstuecksListe</tableId>
            <parameter>
                <name>personId</name>
                <type>
                    <attribute><attribute>id</attribute></attribute>
                </type>
            </parameter>
            <parameter>
                <name>project</name>
                <type>
                    <attribute><attribute>project</attribute></attribute>
                </type>
            </parameter>
        </referencedTable>
    </component>    
</Dialog>