Erweiterte Programmierung


Der Konfigurationsspeicher wird mittels zwei Schnittstellen gip.core.datamodel.IACConfigStore  und gip.core.datamodel.IACConfig abgebildet.

IACConfigStore-Interface

Mit der IACConfigStore-Schnittstelle können Sie alle (auch komplexen) Daten für Objekte speichern und lesen, die miteinander verknüpft sind. IACConfigStore implementieren Entitiy-Framework-Klassen, die einen sogenannten Anwendungskontext darstellen (z.B. Fertigungsaufträge, Stücklisten, Bestellungen...). Ein Anwendungskontext ist eine Gruppe von semantisch  zusammengehöriger Tabellen wobei eine Tabelle die sogenannte "Haupttabelle" ist.

Ein einfaches Beispiel für einen Anwendungskontext wären die Tabellen "Bestellkopf" und "Bestellpostionen" die in einer "1:N-Beziehung" vorliegen. Die "Bestellkopf"-Tabelle wäre die "Haupttabelle" zu der die Konfigurationsdaten gespeichert werden. 

Die Entity-Klasse, die die "Haupttabelle" in einer Gruppe semantisch verknüpfter Tabellen darstellt, muss die Schnittstelle IACConfigStore implementieren. In unserem Beispiel wäre das die Tabelle "Bestellkopf". Andere Tabellen innerhalb dieser Gruppe können auch IACConfigStore implementieren, wenn sie zusätzliche Daten für sich selbst speichern möchten. Im iPlus-Framework und iPlus-MES implementieren folgenden Entity-Klassen diese Schnittstelle: ACClass, ACClassDesign, ACClassMethod, ACClassProperty, ACProgram, Material, MaterialWF, Partslist, ProdOrderPartslist.

Die wichtigste Eigenschaft der IACConfigStore-Schnittstelle ist ConfigurationEntries:

IEnumerable<IACConfig> ConfigurationEntries { get; }

Dieser Enumerator gibt alle Konfigurationseinträge zurück, die unter der Haupttabelle gespeichert sind. Konfigurationseinträge sind Entity-Klassen, die die Schnittstelle IACConfig implementieren.

 

IACConfig-Interface

Die IACConfig-Schnittstelle ermöglicht das Lesen und Speichern, von Konfigurationswerten.
Konfigurationswerte können nicht nur für die Haupttabelle (die EF-Klasse, die das IACConfigStore-Interface implementiert) gespeichert werden, sondern auch für alle anderen Tabellen innerhalb des gleichen Anwendungskontexts. Um eine Untertabelle zu adressieren oder eine Beziehung zwischen einer oder mehreren Entitäten zu beschreiben wird ACUrl verwendet. ACUrl's können nicht nur für lebende ACComponent-Instanzen verwendet werden, sondern es können auch Entity-Objekte (Tabelleneinträge) adressiert werden. Zu diesem Zweck stellt die Schnittstelle die Eigenschaften KeyACUrl, PreConfigACUrl, LocalConfigACUrl bereit.

Definieren Sie nicht zu viele Tabellen die IACConfig implementieren. Wir empfehlen eine Konfigurationstabelle pro Haupttabelle (z.B. für Fertigungsaufträge, Stücklisten, Bestellungen...). 

 

Member von IACConfig

NameBeschreibung
string KeyACUrl

Mit der KeyACUrl-Eigenschaft adressieren Sie eine andere Untertabelle oder ACComponent. Die URL ist entweder absolut oder relativ zur "Haupttabelle". Technisch bedeutet "Relativ", dass jede Konfigurationstabelle über einen Fremdschlüssel auf einen Eintrag in ihrer Haupttabelle verweist und die ACUrl dann relativ dazu ist. Wenn die KeyACUrl leer bzw. null ist, bedeutet dies, dass es sich um eine Konfiguration für die Haupttabelle selbst handelt.

Beispiele:

a.) Es gibt eine Haupttabelle Material die IACConfigStore implementiert und eine Konfigurationstabelle MaterialConfig die IACConfig implementiert. Im Fremdschlüsselfeld "MaterialID" verweist die MaterialConfig auf ein Material X aus der Haupttabelle. In der KeyACUrl steht ".\Materialcalculation(4711)". Das bedeutet, dass eine Konfiguration für die Untertabelle Materialcalculation gespeichert worden ist, die für das Material X in Kombination mit der MaterialCalculationNo 4711 gilt.

b.) Eine KeyACUrl kann auch eine "Live-ACUrl" für eine Instanz aus einer Anwendungsstruktur enthalten. z.B. "\Mixery\WeigherA\Motor". 

Die KeyACUrl wird automatisch gesetzt, wenn die Konfiguration per Methode IACConfigStore.NewACConfig() hinzugefügt wird, da IACConfigStore.ACConfigKeyACUrl diese relative URL selbst zurückgibt. Haupttabellen geben einen Null-String als ACConfigKeyACUrl zurück. Untertabellen Ihre relative URL zur Haupttabelle. Wenn also die Entity-Klasse Materialcalculation das Interface IACConfigStore implementiert, dann würde die IACConfigStore.ACConfigKeyACUrl ".\Materialcalculation(4711)" für Material X zurückgeben.

Für eine Beziehung zwischen zwei oder mehr Objekten verwenden Sie den OR-Operator "||" ("ACUrlHelper.Delimiter_Relationship") zum Trennen weiterer ACUrls.
z.B. "ACClass(Mixery)\ACClass(HopperscaleTypeA1)\PAPointMatOut1|| ACClass(Mixery)\ACClass(Mixer)\PAPointMatIn1".

string LocalConfigACUrlLocalConfigACUrl verweist auf eine Eigenschaft, die relativ zu dem von KeyACUrl angegebenen Objekt ist. Es kann auch für etwas anderes verwendet werden, wenn Sie eine individuelle Logik programmieren. In den meisten Fällen wird LocalConfigACUrl zum Adressieren von Eigenschaften von ACMethods (virtuellen Methoden) in Workflows oder deren Konfigurations-Eigenschaften verwendet.
z.B. "MixeryDef\Mixer(0)\Dosing(0)\SMStarting\SkipComponents" oder "MixeryDef\Mixer(0)\Dosing(0)\Dosing\FlowRate1"
string PreConfigACUrlDas Aufrufen von Unter-Workflows ähnelt dem Aufrufen eines Unterprogramms. Beim Aufrufen von Unterprogrammen müssen Parameter übergeben werden, die speziell für diesen Aufruf gelten. Wenn dasselbe Unterprogramm von einem anderen Programm aufgerufen wird, müssen andere Parameter übergeben werden.
Dies ist auch bei Workflows der Fall. Wenn Sie andere Parameter für den Unter-Workflow definieren möchten, müssen Sie wissen, von wo aus der Unter-Workflow aufgerufen wurde. Dies wird in dieser Eigenschaft gespeichert.
string ConfigACUrlVollständige Url. Kombination aus PreConfigACUrl + LocalConfigACUrl.
Guid? VBiACClassIDReferenz auf eine Klasse aus dem iPlus-Typsystem.
Guid? ACClassWFIDReferenz auf einen Workflow-Knoten (Definition - nicht Runtime!).
IACConfigStore ConfigStoreReferenz zum IACConfigStore.
object ValueDer eigentliche Konfigurationswert. Die Eigenschaft ist geerbt von Interface IACContainer.

 Member von IACConfigStore

NameBeschreibung
IEnumerable<IACConfig> ConfigurationEntries

Eine threadsichere und zwischengespeicherte Liste von Konfigurationseinträgen vom Typ IACConfig. 

Wichtig: Caching!

Bitte bedenken Sie, dass Konfigurationswerte gecached sind. Rufen Sie explizit die Methode ClearCacheOfConfigurationEntries() auf, um den Cache zurückzusetzen und ein erneutes Laden von der Datenbank zu forcieren.

string ACConfigKeyACUrlACConfigKeyACUrl gibt die relative Url zur "Haupttabelle" zurück.
Diese Eigenschaft wird verwendet, wenn NewACConfig() aufgerufen wird. NewACConfig() erstellt eine neue IACConfig-Instanz und setzt die IACConfig.KeyACUrl-Eigenschaft mit dieser ACConfigKeyACUrl.
IACConfig NewACConfig(...)Erstellt und fügt eine IACConfig-Instanz zu ConfigurationEntries hinzu.
Technisch: Die implementierende Klasse erstellt ein neues Entitätsobjekt und fügt es seiner zugehörigen Konfigurationstabelle hinzu.
Mit diesem Aufruf wird der IACConfig.KeyACUrl-Eigenschaft die ACConfigKeyACUrl-Eigenschaft zugewiesen.
void RemoveACConfig(...)Entfernt eine Konfiguration aus ConfigurationEntries und dem Datenbankkontext.
decimal OverridingOrderDerselbe Konfigurationswert (in "IACConfig.Value" gespeichert) kann in verschiedenen Config-Tabellen gespeichert werden, die aufeinander aufbauen.
Wir nennen dieses Szenario "Konfigurationsparameter-Überschreibung" oder das Prinzip der "strikten Entitätstrennung mit fortschreitender Konkretisierung".
Mit dieser Eigenschaft wird die "Übergeordnete Reihenfolge" definiert. Dieser Parameter ist nicht speicherbar und wird automatisch neu berechnet von Klassen, die die Schnittstelle IACConfigProvider implementieren (ConfigManagerIPlus und ConfigManagerIPlusMES). Mehr dazu im nächsten Kapitel.

 

 

Klassen, die IACConfigStore implementieren sind:

  1. ACClass.
    In dieser Tabelle werden alle der iPlus-Runtime bekannten Typen gespeichert. Auch Anwendungsbäume werden darüber definiert. ACClass-Einträge werden während des Registriervorgangs oder durch Einfügen neuer Klassen in der Varobatch-Entwicklungsumgebung angelegt.
    Die entsprechende Konfigurationstabelle ist ACClassConfigDiese Entity-Framework-Klasse implementiert die Schnittstelle IACConfig. Objekte, die ACClass in seiner ConfigurationEntries zurückgibt, sind also ACClassConfig-Instanzen. 
  2. ACClassPropertyACClassDesignACClassMethod.
    In diesen Tabellen werden die Eigenschaften, Designs und Methoden-Deklarationen gespeichert die zu einer ACClass gehören.
    Die entsprechende Konfigurationstabelle ist jedoch ACClassConfig wie auch von ACClass! Der einzige Unterschied ist, dass ConfigurationEntries nur die Einträge zurückgibt, bei der die KeyACUrl mit der ACConfigKeyACUrl übereinstimmt.
  3. ACClassWF.
    Diese Tabelle dient zur Speicherung von Workflows. Workflowknoten speichern Ihre Parameterwerte in dieser Tabelle.
  4. MaterialMaterialWFACClassMethodPartslistProdOrderPartslistInOrderOutOrderPicking... sind Tabellen im "iPlus-MES"-Datenbankmodell. Ihre Konfigurationstabellen werden genauso benannt wie die Haupttabelle - jedoch mit der Endung "Config": MaterialConfigMaterialWFACClassMethodConfigPartslistConfigProdOrderPartslistConfigInOrderConfigOutOrderConfigPickingConfig.

Folgende Code-Beispiele zeigen die Verwendung des Konfigurationsmechanismus: