Regeleditor
Menüaufruf: (Administration) - (Regelwerke) - (Geschäftsregeln)
[Bearbeiten] Regeln bearbeiten
In dieser Maske können Geschäftregeln definiert werden. Vergeben Sie hier einen Namen, unter dem später die Regel auswählbar ist sowie eine Beschreibung nach Bedarf.
Ist das Aktiv-Flag gesetzt, wird die Regel über compilliert und die Binärdateien auf dem Server abgelegt.
40px Achtung: Nur einen aktive Regel wird auch ausgeführt !
Den Java-Sourcecode erfassen Sie im Reiter Regel. Wenn Sie die Regel speichern, wird ein Java Compiler angestossen. Im Falle eines Fehlers sehen Sie im unteren Bereich des Fensters die Compiler Ausgaben.
[Bearbeiten] Regelausführung
Im Reiter Verwendung können Sie die Ausführung der Regel spezifizieren. Wählen Sie zunächst die Entität, für die die Regel ausgeführt werden soll. Unter Ereignis haben Sie folende Auswahlmöglichkeiten:
- Speichern: Regel wird VOR dem Speichern eines Objektes ausgeführt
- Löschen: Regel wird VOR dem Löschen eines Objektes ausgeführt
- Benutzer: Regel kann manuell ausgeführt werden
Wenn Sie die 'Benutzer' eingestellt haben, können Sie die Regel direkt aus dem Datensatz heraus ausführen. Dazu betätigen Sie den Button Regel ausführen.
Wählen Sie in dem Dialog die entsprechende Regel aus. Möchten Sie das Objekt nach der Regelausführung gespeichert haben, so aktivieren Sie Objekt nach Regelausführung speichern.
[Bearbeiten] Beispiele
[Bearbeiten] Verfügbare Methoden zum Auslesen und Schreiben von Werten und ID-Feldern
// Wert auslesen bei Entität ohne Statusmodell: Object wert = (Object)server.getFieldValue(sEntityName, sFieldName); // Wert aus aktuellem Objekt auslesen Object wert = (Object)server.getFieldValue(sEntityName, iObjectId, sFieldName); // Wert aus Objekt iObjectId auslesen // Wert auslesen bei Entität mit Statusmodell: Object wert = (Object)server.getAttribute(sAttributeName).getValue(); // Wert aus aktuellem Objekt auslesen Object wert = (Object)server.getAttribute(iObjectId, sAttributeName).getValue(); // Wert aus Objekt iObjectId auslesen // Wert setzen bei Entitäten mit und ohne Statusmodell server.setFieldValue(sEntityName, sFieldName, oValue); // Wert in aktuellem objekt setzen server.setFieldValue(sEntityName, iObjectId, sFieldName, oValue); // Wert in Objekt iObjectId setzen // ID auslesen bei Entität mit Statusmodell: Integer id = server.getAttribute(sAttributeName).getValueId(); // Id-Feld in aktuellem objekt auslesen Ingeger id = server.getAttribute(iGenericObjectId, sAttributeName).getValueId(); // Id-Feld aus Objekt iObjectId auslesen // ID setzen bei Entität mit und ohne Statusmodell: server.setField(sEntityName, sFieldName, iValueId, oValue); // Id-Feld in aktuellem objekt setzen server.setField(sEntityName, iObjectId, sFieldName, iValueId, oValue); // Id-Feld in Objekt iObjectId setzen // Untergeordnete Entität -> Unterformular bei Entität mit Statusmodell: Collection<MasterDataVO> collmdvo = server.getDependants(sEntityName); // Untergeordnete Entität -> Unterformular bei Entität ohne Statusmodell: Collection<MasterDataVO> collmdvo = server.getDependants(sEntityName, null); Collection<MasterDataVO> collmdvo = server.getDependants(iObjectId, sEntityName, sForeignKeyFieldName); // UF in Objekt iObjectId, übergeben Sie hier zusätzlich den Namen des Referenzfeldes auf die übergeordnete Entität (sForeignKeyFieldName) for (MasterDataVO mdvo : collmdvo) { // Wert auslesen Object wert = (Object)mdvo.getField(sFieldName); // Beispiel: Übergabeparameter = 'kunde' // ID auslesen Integer id = (Integer)mdvo.getField(sFieldName+"Id"); // Beispiel: Übergabeparameter = 'kundeId' // Wert setzen mdvo.setField(sFieldName, oValue); // ID setzen mdvo.setField(sFieldName+"Id", oValue); } |
[Bearbeiten] Achtung Sonderfall:
Soll eine ID in einem MasterData Objekt eingetragen werden, dass nicht über den Hauptdatensatz (mit getDependants) geholt wurde, sondern z.B. so:
MasterDataVO item = server.getMasterData("<EntityName>", iObjectId); item.setField("<fieldName>", oValue); item.setField("<fieldName>" + "Id", iValueId); |
,
so werden Änderungen nicht übernommen, weil nur im Object Item gespeichert wird und nicht in der Datenbank. Um dies zu erreichen muss das Objekt zum Speichern an Nuclos explizit übergeben werden:
MasterDataVO item = server.getMasterData("<EntityName>", iObjectId); item.setField("<fieldName>" + Id , iValueId); try { final org.nuclos.server.masterdata.ejb3.MasterDataFacadeLocal mdFa cade = ServiceLocator.getInstance() .getFacade(org.nuclos.server.masterdata.ejb3.MasterDataFacadeLocal.class); mdFacade.modify("<EntityName>",item ,null); } catch(Exception e) { throw new NuclosBusinessRuleException(e); } |
[Bearbeiten] Neue Zeilen in Unterformular hinzufügen
Map<String, Object> mpFields = new HashMap(); mpFields.put("<Feld1>", <Wert>); mpFields.put("<Feld2>", <Wert>); ... server.addSubformEntry("<Name Subentität>", mpFields); |
[Bearbeiten] MasterDataVO Objekte löschen
MasterDataVO mdvo = ....; try { org.nuclos.common2.ServiceLocator.getInstance().getFacade(org.nuclos.server.masterdata.ejb3.MasterDataFacadeLocal.class).remove("<Name der Entität>", mdvo, false); }catch (Exception e) { e.printStackTrace(); } |
[Bearbeiten] Dokumentenanhänge auslesen und bearbeiten
public void rule(RuleInterface server) throws NuclosBusinessRuleException { final Integer intid = server.getGenericObject().getId(); // Bedingung final CollectableComparison condDocs = org.nuclos.common.SearchConditionUtils.newMDReferenceComparison(MasterDataMetaCache.getInstance().getMetaData(org.nuclos.common.NuclosEntity.GENERALSEARCHDOCUMENT.getEntityName()), "genericObject", intid); // Suchbedingung zusammenbauen (CollectableSearchExpression) org.nuclos.server.genericobject.searchcondition.CollectableSearchExpression expression = new org.nuclos.server.genericobject.searchcondition.CollectableSearchExpression(condDocs); Collection<Object> result = server.getMasterDataIds(org.nuclos.common.NuclosEntity.GENERALSEARCHDOCUMENT.getEntityName(), expression); // Datensatz auslesen final MasterDataVO mdvoDocument = server.getMasterData(org.nuclos.common.NuclosEntity.GENERALSEARCHDOCUMENT.getEntityName(), org.nuclos.common2.IdUtils.unsafeToId(result.iterator().next())); // Datei extrahieren final org.nuclos.server.genericobject.valueobject.GenericObjectDocumentFile file = mdvoDocument.getField("file", org.nuclos.server.genericobject.valueobject.GenericObjectDocumentFile.class); } |