Objekt-Modell

Ziel

Bereitstellung von Service-Methoden und Datenstrukturen für die Abbildung von Geschäftsobjekten.

Ein Geschäftsobjekte in diesem Sinne hat keine exakt scharfe Definition. Vielmehr sollten alle Objekte im System als "Geschäftsobjekt" definiert werden, wenn einer der hier angebotenen Dienste sinnvoll Verwendung finden kann, bzw. wenn das Sicherheitsmodell auf diese Objekte angewandt werden soll.

Das im folgenden verwendete Wort "Dienst" bezieht sich auf bereitgestellte Programmschnittstellen.

Folgende Dienste werden bereitgestellt:

  • Zentrales Repository aller Geschäftsobjekte
  • Herstellen von Relationen aller Geschäftsobjekte untereinander.
  • Zentrale Methoden zum Speichern von Historien-Informationen (Verlauf, Protokollierung)
  • Zentrale Methoden zum Tagging der Objekte
  • Zentrale Methoden für Dokumente (Dateien) an den Objekten
  • Zentrale Methoden für Kommentare / Diskussionen an den Objekten
  • Zentrale Verortung (Geometrie)
  • Zentrales Berechtigungskonzept über Sicherheitscontainer
  • DMS Anbindung

Anforderungen Deklaration als "Geschäftsobjekt"

Die API bietet entsprechende Möglichkeiten o.g. Funktionen bereitzustellen und zudem eine Möglichkeit zum Instanziieren von Objekten.

Alle internen Tabellen haben das Prefix "PIB_".

Für die Realisierung stehen für Datenbank und C# "Schnittstellen" zur Verfügung.

Folgende Annahmen werden getroffen:

  • Die Daten aller Geschäftsobjekte befinden sich in einem Datenspeicher, dem PiB Store (relationale DB, z.Z. PostgreSQL und MsSQL)

  • Neben der UniqueId wird dort noch eine numerische Id vergeben, diese ist aus Performance-Gründen und für die Möglichkeit der einfache Adressierung durch Benutzer gedacht. Für das Auflösen OID (String) <-> ID (number) steht die Klasse IduIT.PiB.ObjectModel.PibID zur Verfügung. Beachte, dass diese Autowert-ID nicht dauerhaft eindeutig ist und nicht aus der eigentlichen Geschäftstabelle ist.

  • Alle Geschäftsobjekte verfügen über eine "Guid" (hier: ein String, max. 255 Zeichen)

  • Es gibt ein zentrales Repository aller Geschäftsobjekte, dieses ist Bestandteil vom PiB Objektmodell

    • Dafür wird eine Tabelle bereitgestellt, PIB_OBJECTS, diese referenziert alle Objekte

    • Der Ersteller einer Objekt-Klasse muss hier kooperieren, indem die Tabelle den folgenden Konventionen entspricht und beim Einspielen in der Datenbank die Methode (DB-spezifisch)

      pib_register_object_table(tableName,tableShort,handlerTypeName) aufruft.

    Diese Methode stellt Trigger für Insert/Update/Delete der Objekte in der Geschäftstabelle bereit, die das Synchronisieren mit dem Repository realisiert. Der handlerTypeName sollte nicht nachträglich geändert werden.

    Es wird davon ausgegangen, dass das IDU DB XML Update verwendet wird. Folgendes Template sollte für die Erstellung der Geschäftstabellen verwendet werden:

      <?xml version="1.0" encoding="utf-8" ?>
      <Updates xmlns="http://schemas.webs.idu.de/db/sqlUpdate"
      	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      	>
      <Templates>
      	<!--
      	xsi:schemaLocation="http://schemas.webs.idu.de/db/sqlUpdate http://webs.idu.de/xsdschemas/Cardo/SqlUpdater/SqlUpdateDescription.xsd"
      	-->
    
      	<!--Vorlage für Geschäftsobjekte, muss dann mit tpl_metadata gemeinsam verwendet werden-->
      	<CreateTableTemplate uniqueId="tpl_pibObj" columnAddOrder="Begin">
      		<Column name="PiBOID" columnDataType="Varchar" notNull="true" size="255">
      			<Description>Unique-Id des Geschäftsobjektes</Description>
      		</Column>
      		<Column name="Title" columnDataType="Varchar" notNull="true" size="255">
      			<Description>Anzeigetitel des Objektes</Description>
      		</Column>
      		<Contraints>
      			<!-- PK, oder mind. ein Unique-Id auf die PiBOID-->
      			<PrimaryKey columnNames="PiBOID" name="{ts}_pk" />
      		</Contraints>
      	</CreateTableTemplate>
    
      	<!-- Schablone für Metadaten-Spalten zum Datensatz. -->
      	<CreateTableTemplate uniqueId="tpl_metadata" columnAddOrder="End">
      		<Column name="ds_creator" columnDataType="Varchar" size="255" notNull="true">
      			<Description>Ersteller des Datensatzes</Description>
      			<DefaultValue>
      				<Function>UserName</Function>
      			</DefaultValue>
      		</Column>
      		<Column name="ds_created" columnDataType="DateTime" notNull="true">
      			<Description>Zeitpunkt, zu dem der Datensatz erstellt wurde</Description>
      			<DefaultValue>
      				<Function>Now</Function>
      			</DefaultValue>
      		</Column>
      		<Column name="ds_modifier" columnDataType="Varchar" size="255" notNull="true">
      			<Description>Bearbeiter des Datensatzes</Description>
      			<DefaultValue>
      				<Function>UserName</Function>
      			</DefaultValue>
      		</Column>
      		<Column name="ds_modified" columnDataType="DateTime" notNull="true">
      			<Description>Zeitpunkt, zu dem der Datensatz zuletzt bearbeitet wurde</Description>
      			<DefaultValue>
      				<Function>Now</Function>
      			</DefaultValue>
      		</Column>
      	</CreateTableTemplate>
      </Templates>
      </Updates>
    

Zuletzt geändert: 21.03.2024 09:46:22 (erstmals erstellt 15.01.2019)