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...).
Name | Beschreibung |
---|
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 LocalConfigACUrl | LocalConfigACUrl 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 PreConfigACUrl | Das 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 ConfigACUrl | Vollständige Url. Kombination aus PreConfigACUrl + LocalConfigACUrl. |
---|
Guid? VBiACClassID | Referenz auf eine Klasse aus dem iPlus-Typsystem. |
---|
Guid? ACClassWFID | Referenz auf einen Workflow-Knoten (Definition - nicht Runtime!). |
---|
IACConfigStore ConfigStore | Referenz zum IACConfigStore. |
---|
object Value | Der eigentliche Konfigurationswert. Die Eigenschaft ist geerbt von Interface IACContainer. |
---|
Name | Beschreibung |
---|
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 ACConfigKeyACUrl | ACConfigKeyACUrl 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 OverridingOrder | Derselbe 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. |
---|