Versionen im Vergleich

Schlüssel

  • Diese Zeile wurde hinzugefügt.
  • Diese Zeile wurde entfernt.
  • Formatierung wurde geändert.


Sourcecode-Die Anpassungen in den von Java-Regeln

...

Java-Package

...

Java-Klasse

...

Kurzbeschreibung

...

org.nuclet.mt940.logic

...

MT940Logic

...

Auslesen aller beim Import und der Zuordnung zu berücksichtigenden Referenzobjekte in Methode getReferences()

...

org.nuclet.mt940.rule

...

CheckBankTransactionRef

...

Behandlung der Referenzobjekte beim manuellen Zuordnen/Entfernen zu/von einem Bankumsatz in Methode checkReferences()

...

erfolgen in drei Schritten.

Bitte folgen Sie den Anweisungen in den folgenden, untergeordneten Abschnitten.


Unterkapitel

Beschreibung

4.7.1 Nuclet-Schnittstellen

Anpassung von Wrapper-Klassen an die tatsächlich genutzten Businessobjekte

4.7.2 Businessobjekt-Fassaden

Definition von tatsächlich verwendeten Businessobjekt-Klassen und -Attributen

4.7.3 StatuswechselDefinition von relevanten Statuswechseln

Tabelle 4.7Tabelle 4: Anwendungsspezifische Anpassungen in Java-Regeln

...

Alle notwendigen Anpassungen werden nun der Reihe nach, in diesen Abschnitten detailliert (und Klasse für Klasse, erläutert.

a) MT940Logic

Die Methode getReferences() wird vor dem Importvorgang ausgeführt. Sie dient dazu, alle bereits existierenden Objekte einzulesen, die beim Import der Bankumsätze als mögliche Referenzobjekte herangezogen werden sollen (bspw. Kundenrechnungen, die noch offen sind und nicht bereits zu einem Bankumsatz zugeordnet wurden).

An dieser Stelle sollte also eine Datenbankabfrage implementiert werden, die alle für eine Zuordnung in Frage kommenden Business-Objekte zurückliefert.

Das vorgefertigte und auszutauschende Fragment nutzt die in der Entität „Bankumsatz“ („Bank Transaction“) als Dummy-Referenz eingetragene (und zu ersetzende) BusinessObject-Klasse MT940Reference.

 

Codeblock
languagejava
titleorg.nuclet.mt940.logic.MT90Logic
  
/**
  * Fetches all references that need to be considered during the MT940 import process, e.g.
  * all open client billings/invoices that have not yet been linked to other bank transactions
  * 
  * @note A dummy implementation of <code>org.nuclet.mt940.logic.AbstractMt940Logic</code> has 
  * been  provided with this class here, its methods are meant to be implemented with user 
  * specific behaviour.
  * 
  * @return all references that need to be considered during the MT940 import process; the return
  * value comes as as <code>Map</code> in which the <code>BusinessObject</code> represents the
  * map's key while the text, which is meant to be used to link the reference to a bank
  * transaction, represents the map's value
  * 
  * @throws BusinessException might be thrown in case of errors or other exceptions
  *
  */
 public Map<BusinessObject, String> getReferences() throws BusinessException
 {
     final HashMap<BusinessObject, String> mpReferences = new HashMap<BusinessObject, String>();
        
     // @replace!
     // Please, replace this code fragment here with your specific code fitting your needs.
     // 
     // - MT940Reference is just a placeholder for the BusinessObject you'd like to use.
     // - If your aim was to link your client billings to your bank transactions, the client 
     //    billings being represented by the Nuclos-entity "Client Billing", you would use the 
     //    related BusinessObject-class "ClientBilling" here.
     // - Please, expand the query below to a more specific form.
     //
     // - In case only ClientBilling objects of two specific states should be considered, 
     //   a fitting code example could look like this:
     //
     // final Query<ClientBilling> qryGetReferencesStateAB = QueryProvider.create(ClientBilling.class);                                
     // qryGetReferencesStateAB.where(ClientBilling.NuclosState.eq(ProcessClientBillingSM.State_AB.getId()));
     //
     // final List<Rechnung> lstReferencesStateAB = QueryProvider.execute(qryGetReferencesStateAB);                
     //
     // for (final ClientBilling clientBilling : lstReferencesStateAB) {
     //     mpReferences.put(clientBilling, clientBilling.getBillingNumber());
     // }
     // 
     // final Query<ClientBilling> qryGetReferencesStateXY = QueryProvider.create(ClientBilling.class);                                
     // qryGetReferencesStateXY.where(ClientBilling.NuclosState.eq(ProcessClientBillingSM.State_XY.getId()));
     // 
     // final List<ClientBilling> lstReferencesStateXY = QueryProvider.execute(qryGetReferencesStateXY);                
     // 
     // for (final ClientBilling clientBilling : lstReferencesStateXY) {
     //     mpReferences.put(clientBilling, clientBilling.getBillingNumber());
     //  }
     //
     //   return mpReferences;
     //                   
     return mpReferences;
  
}

b) CheckBankTransactionRef

Bei der Klasse CheckBankTransactionRef handelt es sich um eine UpdateFinalRule. Sie ist der Entität „Bankumsatz“ („Bank Transaction“) zugeordnet. D.h. sie wird im Anschluss an ein Update eines Objektes vom Typ „Bankumsatz“ aufgerufen.

Ihre Methode checkReferences() ist dafür vorgesehen, im Rahmen eines solchen Update-Events notwendige Änderungen an den zugeordneten Referenzobjeten des Bankumsatzes auszulösen. Denkbar wäre dies bspw. für die folgenden Anwendungsfälle:

  • einem zuvor nicht referenzierten Bankumsatz wird eine Referenz hinzugefügt

  • aus einem zuvor referenzierten Bankumsatz wird die Referenz wieder entfernt

  • in einem zuvor referenzierten Bankumsatz wird alte Referenz gegen eine neue Referenz ausgetauscht

Diese Beispiele beziehen sich auf die Variante, in der jedem Bankumsatz maximal eine Referenz zugewiesen werden kann (MT940_REFERENCE_TYPE = SINGLE). Für den Modus MULTIPLE (ein Bankumsatz mehrere Referenzen besitzen) sind analog vergleichbare Anwendungsfälle denkbar.

Möglicherweise passende Anweisungen wären an dieser Stelle bspw.

  • ein Markieren des Referenzobjekts als „zugeordnet“/“nicht zugeordnet“

  • ein Statuswechsel für das Referenzobjekt

  • das Auslösen von Berechnungsschritten, o.ä. auf dem Referenzobjekt

  • weitere Modifikationen auf dem Referenzobjekt oder auf Bezugsobjekten des Referenzobjekts (referenzierte Objekte, Unterformulareinträge, etc.)

Unter Umständen wäre es sinnvoll, die zu implementierende Logik mit der Logik aus Punkt b) (MT940Importer) von oben abzugleichen.

Empfehlenswert wäre der Ansatz, die Funktionalität dafür in die Klasse MT940Logic (oder einer eigenen Unterklasse der AbstractMT940Logic) einzugliedern.

 

Codeblock
languagejava
titleorg.nuclet.mt940.rule.CheckBankTransactionRef
/**
   * Check, if the changes done to the given bank transaction should result in further
   * changes and/or state changes of the references <code>BusinessObject</code>
   * 
   * @param context the current context
   * 
   * @throws BusinessException, in case an error or exception occurs
   */
  private void checkReferences(UpdateContext context) throws BusinessException
  {
      // @replace!
      //
      // This code segment needs to be filled with application specific behaviour.
      //
      //
  }

e) CurrencyWrapper

...

) erläutert.

 

Info

Bei einer Aktualisierung des MT940-Nuclets besteht die Gefahr, dass Ihre Anpassungen in den Java-Regeln überschrieben werden.

Um dies zu vermeiden berücksichtigen Sie bitte zusätzlich die Empfehlungen aus dem nächsten Abschnitt.

 

 

 

Codeblock
languagejava
titleorg.nuclet.mt940.wrapper
package org.nuclet.mt940.wrapper;


import org.nuclos.api.businessobject.BusinessObject;

// @replace
//
// mit eigenem Code zu ersetzen, Beispiel:
//
// import org.nuclet.currency.Currency;


/**
 * Konkrete Wrapper-Klasse für Währungsobjekte
 * 
 */
public class CurrencyWrapper extends AbstractCurrencyWrapper 
{
    public CurrencyWrapper(final BusinessObject currency)
    {
        // @replace Bitte bei Nuclet-Integration mit eigenem Code ersetzen!
        //
        // Beispiel:
        //
        // if (currency instanceof Currency) {
        //    this.businessObject = currency;
        // }
    }

    /**
     * Liefert die Datenbank-ID des Währungsobjektes.
     */
    public Long getId()
    {
        return this.businessObject.getId();
    }

    /**
     * Liefert den ISO-4217-Code des Währungsobjektes.
     * @see https://de.wikipedia.org/wiki/ISO_4217
     * @see https://en.wikipedia.org/wiki/ISO_4217
     */
    public String getIso4217Code()
    {
        // @replace Bitte bei Nuclet-Integration mit eigenem Code ersetzen!
        //
        // Beispiel:
        //
        // return ((Currency)this.businessObject).getIso4217Code();

        return null;
    }
}

f) CurrencyFacade

In der Klasse CurrencyFacade muss die Methode getCurrencyByIso4217Code() mit anwendungsspezifischem Verhalten gefüllt werden. Die Methode erwartet einen ISO-4217-Währungscode (siehe Wikipedia) als Parameter und sollte ein Objekt vom Typ CurrencyWrapper (siehe Punkt e), oben) zurückgeben. Ein Beispiel dazu ist in einem Kommentarblock angegeben, dieses Beispiel ist an die tatächlich genutzte Währungsentität (bzw. deren BusinessObject-Klasse) anzupassen.

...

languagejava
titleorg.nuclet.mt940.facade.CurrencyFacade

...