Sie zeigen eine alte Version dieser Seite an. Zeigen Sie die aktuelle Version an.

Unterschiede anzeigen Seitenhistorie anzeigen

Version 1 Nächste Version anzeigen »

Regeleditor

Menüaufruf: (Administration) - (Regelwerke) - (Geschäftsregeln)

[Bearbeiten] Regeln bearbeiten

Regeln geschaeftsregeln 1.gif

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.

Regeln geschaeftsregeln 2.gif

[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

Regeln geschaeftsregeln 3.gif

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.

Regeln geschaeftsregeln 4.gif

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);
}
  • Keine Stichwörter