Geschäftsregelsatz-Ausführungsplan ausführen
Die Generierung des Ausführungsplans eines Geschäftsregelsatzes umfasst Folgendes:
1. Erstellen der spezifischen Instanz RuleValidation auf Grundlage des in der Geschäftsregel definierten Selektors
2. Mit der Instanz RuleValidation wird bestimmt, ob die Konfiguration der Geschäftsregel mit der Methode isConfigurationValid gültig ist. Wenn die Konfiguration nicht gültig ist, wird die Instanz RuleValidation für den Geschäftsregelsatz-Ausführungsplan übersprungen, und es wird ein Fehler protokolliert.
3. Die Instanz RuleValidation wird für jede Geschäftsregel mit den folgenden Elementen aufgerufen:
a. Sammlung von Objekten, die mit den Regeln auszuwerten sind
b. Kontextspezifische Kriterien (wie die Container-Referenz), die von der Instanz RuleValidation zum Konfigurieren der Ausführung verwendet werden können.
4. Die Instanz RuleValidation wird dem Ausführungsplan hinzugefügt.
Die Schnittstelle RuleValidation wird in allen Geschäftsregelvalidatoren implementiert. Eine typische Geschäftsregel lässt sich zwei Hauptkategorien zuordnen:
• Einfache Validierung: Die Regelprüfung wird für das Geschäftsobjekt selbst oder für die durch die Beziehung konfigurierten Ausgangsobjekte durchgeführt. Beispiele hierfür sind die Prüfung auf Attributvalidierung oder die Prüfung eines Lebenszyklusstatus des Objekts vor der Freigabe.
• Strukturierte Validierung: Die Regeln können für Geschäftsobjekte ausgeführt werden oder auch nicht, beinhalten jedoch einige Validierungsprüfungen für die zugeordneten Objekte, wie z.B. die Kinder des Teils oder Dokuments. Bei dieser Art der Validierung ist in der Regel ein komplexerer Satz von Algorithmen erforderlich, um die Geschäftsvalidierungsregeln zu berechnen und das Validierungsergebnis mit dem entsprechenden Kennzeichen zu füllen. Ein Beispiel für eine strukturierte Validierungsregel ist eine Validierungsprüfung, die sicherstellt, dass sich alle Ergebnisobjekte und alle abhängigen Objekte der ersten Ebene im richtigen Status befinden.
Es werden die folgenden unterstützten Implementierungen von RuleValidation bereitgestellt:
|
Geschäftsregel-Selektor
|
RuleValidation
|
Beschreibung
|
|
CHECKOUT_RULE
|
com.ptc.core.businessRules.validation.CheckoutRuleValidator
|
Validiert, dass Objekte nicht an einen Benutzer oder in ein Projekt ausgecheckt sind
|
|
RELEASE_TARGET
|
com.ptc.core.businessRules.validation.ReleaseTargetValidator
|
Stellt sicher, dass alle "Ergebnisobjekte" einen für die Freigabe geeigneten Status aufweisen und dass ein entsprechender Änderungsmanagementübergang für sie angegeben ist, der mit den zugewiesenen Lebenszyklus-Übergangsregeln übereinstimmt.
|
|
ATTRIBUTE_RULE
|
com.ptc.core.businessRules.validation.AttributeRuleValidator
|
Validiert, dass die angegebene Attributregelkonfiguration für einen Objekttyp gültig ist.
|
|
BOM_RELEASE_RULE
|
com.ptc.core.businessRules.validation.BOMReleaseRuleValidator
|
Stellt sicher, dass sich alle Ergebnisobjekte und alle ihre Kinder der ersten Ebene in einem geeigneten Status befinden.
|
|
|
Der Erhöhungsantrag unterstützt die Attributregel und die Regel "Auschecken". Die Änderungsnachricht unterstützt jede Regel.
|
Die Instantiierung von RuleValidation basiert auf dem in der Geschäftsregel definierten Selektor. Anwendungsdienste werden verwendet, um die implementierende Klasse für den definierten Selektor zu suchen. Wenn keine implementierende Klasse definiert ist oder die Klasse nicht instanziiert werden kann, wird ein Fehler protokolliert.
Vor dem Ausführen einer Validierung ruft die Engine die Methode RuleValidation.isConfigurationValid auf, mit der bestimmt wird, ob die Geschäftsregelkonfiguration gültig ist. Diese Validierung der Geschäftsregelkonfiguration wird auch beim Laden der Geschäftsregel aufgerufen. Da jedoch die registrierte Instanz RuleValidation geändert werden kann, wird die Validierung der Konfiguration auch vor dem Ausführen der Geschäftsregelvalidierung aufgerufen.
Die Initialisierungsmethode für TheRuleValidation namens prepare wird verwendet, um eine anfängliche Vorverarbeitung des gesamten Satzes von Ausgangsobjekten durchzuführen, die anhand des Geschäftsregelsatzes validiert werden. Dies ermöglicht eine beliebige Vorvalidierung im Windchill Server (beispielsweise für das Abrufen der Lebenszyklusvorlage, die vielen Elementen gemeinsam ist). Es empfiehlt sich, Multiobjekt-APIs mit der Methode RuleValidation.prepare aufzurufen. Es wird davon abgeraten, die Methode RuleValidation.peformValidation zum Aufrufen mehrerer Objekte zu verwenden.
Wenn die Methode RuleValidation.isConfigurationValid true zurückgibt, wird für jedes Ausgangsobjekt RuleValidation performValidation aufgerufen. Das Ausgangsobjekt wird innerhalb von RuleValidationObject übergeben. Das RuleValidationObject enthält das Zielobjekt (das Ausgangsobjekt, wenn es kein Link ist, oder die Rolle A oder Rolle B, wenn das Ausgangsobjekt ein Link ist) und den Link (wenn das Ausgangsobjekt ein Link ist). Wenn es sich bei der Geschäftsregel um eine RuleValidation des strukturierten Typs handelt, enthält auch das RuleValidationObject die gesammelten Kinder und eine Zuordnung der gesammelten Kinder zu den Links, mit denen sie gesammelt wurden. performValidation sollte immer ein neues RuleValidationResult mit einem Verweis auf das Zielobjekt und nicht auf den Link zurückgeben.
Geschäftsregel-Engine und Sequenzdiagramm
Geschäftsregel-Engine und -Validierungs-Interaktionsdiagramm
Implementierungen der RuleValidation werden in service.properties registriert. Fügen Sie Folgendes zu der benutzerdefinierten Datei service.properties xconf hinzu, um eine Implementierung der RuleValidation zu erstellen oder zu überschreiben:
<Service context="default" name="com.ptc.core.businessRules.validation.
RuleValidation">
<Option serviceClass="com.ptc.core.businessRules.validation.
CheckoutRuleValidator"
selector="CHECKOUT_RULE"
cardinality="singleton"
requestor="null"/>
</Service>
Die Kardinalität der RuleValidation sollte nach Möglichkeit auf "Singleton" festgelegt werden, damit die Anzahl der Instanzen einer bestimmten Implementierung der RuleValidation verringert wird. Die addToProcessingMap() von RuleValidationKey kann zum Speichern von Vorvalidierungsdaten verwendet werden, um die Thread-sichere Verarbeitung von Implementierungen der RuleValidation zu unterstützen, wenn die Kardinalität auf "Singleton" festgelegt ist.