Versionen im Vergleich

Schlüssel

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

...

Alle notwendigen Anpassungen werden nun der Reihe nach, Klasse für Klasse, erläutert.

 

a) MT940ImportJob

Es ist notwendig, die beiden Konstanten MT940_DIRECTORY und MT940_REFERENCE_TYPE für den eigenen Anwendungszweck zu konfigurieren:

  • MT940_DIRECTORY: legt das Eingangsverzeichnis der MT940-Dateien fest

  • MT940_REFERENCE_TYPE: definiert, ob einem Bankumsatz genau eine (SINGLE) oder beliebig viele (MULTIPLE) Referenzen zugeordnet werden können.

 

Codeblock
languagejava
titleorg.nuclet.mt940.job.MT940ImportJob
 @Rule(name="MT940 Import Job", description="MT940 Import Job")
 public class MT940ImportJob implements JobRule 
 {
     // @replace!
     //
     // Configure the constants MT940_DIRECTORY, MT940_REFERENCE_TYPE with your own values:
     //
     private static final String MT940_DIRECTORY = "/opt/nuclets/data/mt940";
     private static final String MT940_REFERENCE_TYPE = "SINGLE"; // supported values are: { SINGLE, MULTIPLE }
  
    (...)
  }

Info

Anmerkung: Dieser Schritt wird in einer zukünfigen Version entfallen, d.h. sobald die neue Nuclos-API das Auslesen von System-Parametern unterstützt. Sobald dies der Fall ist, wird diese Anpasung über Schritt 7 geregelt (s.o.).

 

 

b) MT940Importer

Die Methode processReference() wird während des Importvorgangs für jede einem Bankumsatz zugeordnete Referenz aufgerufen.

Wenn es sich in Ihrer Anwendung bei den Referenzen also z.B. um Kundenrechnungen handelt, dann ginge es an dieser Stelle um die Ausführung von Java-Code auf einer Kundenrechnung, zu der ein Bankumsatz gefunden wurde.

Denkbare Anweisungen hier wären bspw.

  • ein Markieren des Referenzobjekts als „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.)

Codeblock
languagejava
titleorg.nuclet.mt940.MT940Importer

 /**
   * Process the reference, that has been linked to a bank transaction, accordingly
   * 
   * @note This method has to be filled with application specific behaviour, 
   * e.g. new calculations or further state changes on client billings, in case 
   * client billings were the objects to be referenced by bank transactions
   * 
   * @param reference a BusinessObject that has just been linked to a bank transaction
   * 
   * @throws BusinessException might be thrown by implementing classes in case of errors 
   * or other exceptions
   *
   */
  protected void processReference(final BusinessObject reference) throws BusinessException
  {
      // @replace!
      //
      // Insert your code segment here that is to be executed on the references business object, 
      // e.g. if your bank transactions are linked to client billings and the Nuclos-entity 
      // representing your client billings was named "Client Billing", you would go on operating 
      // an oject of type "ClientBilling" here:
      //
      // ClientBilling clientBilling = (ClientBilling)reference;
      // clientBilling.setIsReferenced(Boolean.TRUE);
      // clientBilling.setIncomingBankTransactionAt(new Date));
      // clientBilling.setAmountOpen(...);
      //
      // StatemodelProvider.changeState(clientBilling, ClientBillingSM.State_N);
      //
  }

 

c) 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.
      //
      // - A specific code example could look like this:
      //
      //   Query<ClientBilling> qryGetReferences = QueryProvider.create(ClientBilling.class);                        
      //
      //   qryGetReferences.where(ClientBilling.IsOpen.eq(Boolean.TRUE))
      //       .and(ClientBilling.HasReferencebeenSet.eq(Boolean.FALSE))
      //       .and(ClientBilling.Date.gte(new Date()));
      //
      //   List<ClientBilling> lstReferences = QueryProvider.execute(qryGetReferences);                
      //
      //   for (final ClientBilling billing : lstReferences) {
      //       mpReference.put(billing, billing.getBillingNumber();
      //   }
      //
      //   return references;
      //           
      final Query<MT940Reference> qryGetReferences = QueryProvider.create(MT940Reference.class);                        
      final List<MT940Reference> lstReferences = QueryProvider.execute(qryGetReferences);
        
      for (final MT940Reference reference : lstReferences) {
          mpReferences.put(reference, reference.getReferenceNumber());
      }

      return mpReferences;   
  
 }


d) 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.
      //
      //
  }


Nutzung

 

Einrichten des Eingangsverzeichnisses

  1. Das Verzeichnis, das in der Java-Klasse org.nuclet.mt940.MT940ImportJob als MT940_DIRECTORY angegeben wurde, muss auf dem Server existieren. Der Nuclos-Dienst benötigt für die Importvorgänge Lese- und Schreibrechte für dieses Verzeichnis und alle Unterverzeichnisse.

  2. Innerhalb des MT940_DIRECTORY ist es notwendig, dass zwei Unterverzeichnisse „success“ und „failure“ eingerichtet sind. In diese Unterverzeichnisse werden die Dateien vom Import-Job nach erfolgter Ausführung verschoben.

 

Info

Hinweis: Dateien, die vom Job verarbeitet werden konnten, werden im Verzeichnis „success“ abgelegt. Dateien, die nicht verarbeit werden konnten, findet man im Verzeichnis „failure“. Der jeweilige Dateiname wird um einen Zeitstempel ergänzt, so dass nachvollzogen werden kann, wann der Import-Job ausgeführt wurde.

 

Einrichten der Jobsteuerung

  1. Öffnen der Jobsteuerung „MT940 Import“ unter „Administration“ > „Jobsteuerung“

  2. Konfiguration von Startdatum, Startzeit, Intervall, E-Mail-Benachrichtigung und Optionen zum Löschen des Log-Infos.

  3. Jobsteuerung aktivieren, falls der Job im konfigurierten Rhythmus automasiert ausgeführt werden soll. Alternativ lässe sich der Job über die Jobsteuerung auch manuell ausführen.

 

Betrieb

  1. Die importierten Daten werden in den Entitäten für Kontoauszüge („Bank Statement“) und Bankumsätze („Bank Transaction“) gespeichert.

  2. Die Masken für Kontoauszüge und Bankumsätze sind unter dem Menüpunkt „MT940“ zu finden. Dies ist über den Entitäten-Wizard jederzeit zu ändern.

  3. Über den Menüpunkt „MT940“ > „Stammdaten“ sind die Stammdaten-Entitäten für Bankgeschäftssparten, Bankgeschäftsvorfälle und Soll-Haben-Kennung zu finden.

 

Einrichten von Benutzerrechten (optional)

Zugriffsrechte für existierende Benutzergruppen für Layouts, Entitäten, Attribute und Attributgruppen können in Nuclos wie üblich über drei Wege festgelegt werden (siehe dazu http://wiki.nuclos.de):

  1. allemeine Einstellungen für Entitäten unter „Administration“ > „Benutzergruppen“

  2. statusabhängige Einstellungen für Attribute/Attributgruppen unter „Konfiguration“ > „Statusmodell“

  3. datensatzspezifische Einstellungen unter „Konfiguration“ > „Datenquellen“ > „Datensatzfreigabe“

Info

Anmerkung: Sie sollten sich überlegen, inwieweit es Benutzern gestattet ist, Kontoauszüge und Bankumsätze manuell anzulegen oder zu löschen. Das MT940-Nuclet bietet dafür in der jetzigen Form noch keinerlei Unterstützung.

Beispiele

Die ZIP-Datei umfasst zwei MT940-Beispieldateien, diese sind im Unterverzeichnis „examples“ zu finden:

  • Kontoauszug_001.sta: ein Kontoauszug mit 5 Buchungen

  • Kontoauszug_002.sta:

Mit Hilfe dieser Dateien kann der Import-Prozess von Ihnen durchgespielt werden, selbst wenn Ihnen noch keine eigenen Dateien zur Verfügung stehen.

Codeblock
titleKontoauszug_001.sta
:20:STARTUMSE 
:25:10010010/1111111111 
:28C:00001/001 
:60F:C120131EUR8200,90 
:61:1202020102DR400,62N033NONREF 
:86:077?00Überweisung beleglos?109310?20RECHNUNGSNR. 1210815 ?21K 
UNDENNR. 01234 ?22DATUM 01.02.2012?3020020020?2222222222?32MARTHA  
MUELLER?34999 
:61:1202030103DR1210,00N012NONREF 
:86:008?00Dauerauftrag?107000?20MIETE GOETHESTR. 12?3030030030?31 
3333333333?32ABC IMMOBILIEN GMBH?34997 
:61:1202030103CR30,00N062NONREF 
:86:051?00Überweisungseingang?109265?20RECHNUNG 20120188?21STEFAN 
 SCHMIDT?23KUNDENR. 4711,?3040040040?4444444444?32STEFAN SCHMIDT 
:61:1202030103CR89,97N060NONREF//000000000001 
:86:052?00Überweisungseingang?109265?20RECHNUNG 20120165?21PETER 
 PETERSEN?3050050050?315555555555?32PETER PETERSEN  
:62F:C120203EUR6710,50 
-
Codeblock
titleKontoauszug_002.sta
:20:STARTUMSE 
:25:10050000/1111111111 
:28C:00002/001 
:60F:C120203EUR6710,50 
:61:1202040515CR125,00N062NONREF 
:86:051?00Überweisungseingang?109263?20RECHNUNG 20120171?305005 
0050?315555555555?32SUSANNE SCHNEIDER 
:61:1202040515CR389,45N061NONREF 
:86:051?00Überweisungseingang?109310?20FRITZ FISCHER?3060060060 
?316666666666?32FRITZ FISCHER 
:61:1202040515CR35,90N062NONREF 
:86:166?00Überweisungseingang?109249?20RECHNUNG 20120182 ?21AUF 
TRAGSNR. 1010?3070070070?317777777777?32WERNER WEBER?34888 
:61:1202040516CR1015,10N062NONREF 
:86:051?00Überweisungseingang?109255?20RECHNUNG 20120179 ?21BES 
TELLUNG VOM?2231.01.2012?3080080080?3188888888?32MARLENE MEYER 
:61:1202050516CR610,80N062NONREF//661505129024 
:86:051?00Überweisungseingang?109257?20RG. 20120164?3090090090? 
319999999999?32WILLY WAGNER 
:61:1202050518CR3300,21N062NONREF 
:86:051?00Überweisungseingang?109267?20RECHNUNG BEATE BECKER?30 
10110110?311212121212?32BEATE BECKER 
:62M:C120207EUR12186,96 
- 
:20:STARTUMSE 
:25:10010010/1111111111 
:28C:00002/002 
:60M:C120207EUR5569,67 
:61:1202050518CR61,00N060NONREF//000000000009 
:86:052?00Überweisungseingang?109265?20RECHNUNG 20120185 ?30202 
20220?312121212121?32SIEGFRID SCHULZ 
:61:1202080518DR99,80N011NONREF//013900139000 
:86:005?00Lastschrift?109244?20ZAHLUNGSBELEG 08128128128?21IHRE  
KONTONR.1111111111?2208128128128/01.02.2012?3030330330?31343434 
3434?32TELEKOMM GMBH 
:61:1202080518DR49,99N011NONREF//013900610875 
:86:005?00Lastschrift?109244?20ZAHLUNGSBELEG 08128128129?21IHRE  
KONTONR.1111111111?2208128128129/01.02.2012?3030330330?31343434 
3434?32TELEKOMM GMBH 
:61:1202090518DR99,80N011NONREF//013900238880 
:86:005?00Lastschrift?109244?20ZAHLUNGSBELEG 08128128130?21IHRE  
KONTONR.1111111111?2208128128130/01.02.2012?3030330330?31343434 
3434?32TELEKOMM GMBH 
:61:1202090518DR39,95N011NONREF//013900123445 
:86:005?00Lastschrift?109244?20ZAHLUNGSBELEG 08128128131?21IHRE  
KONTONR.1111111111?2208128128131/01.02.2012?3030330330?31343434 
3434?32TELEKOMM GMBH 
:61:1202100521CR560,60N062NONREF 
:86:051?00Überweisungseingang?109203?20RECHNUNG 20120186?304044 
0440?314343434343?32HARRY HOFFMANN 
:62M:C120210EUR12519,02 
- 
:20:STARTUMSE 
:25:10010010/1111111111 
:28C:00002/003 
:60M:C120210EUR12519,02 
:61:1202110521CR444,28N062NONREF//661805129024 
:86:051?00Überweisungseingang?109257?20RECHNUNG 20120178?3050550 
550?315656565656?32SABINE SCHAEFER 
:61:1202120521DR240,00N033NONREF 
:86:020?00Überweisung beleglos?109310?20AUSLAGENERSTATT.BEWIRTUN 
G?21VERSAMML. 15.1.12?22RE VOM 1.2.12?23DATUM 02.02.2012, 11.53  
UHR?3060660660?316565656565?32KARL KOCH?34997 
:61:1202120521DR1500,00N033NONREF 
:86:020?00Überweisung beleglos?109310?20ABSCHLAG BERATUNG I/2012 
?21DATUM 01.02.2012, 11.56 UHR?3070770770?317878787878?32CLAUS&C 
LAUSEN KANZLEI?34997 
:61:1202140522DR20,00N011NONREF//009879865431 
:86:005?00Lastschrift?109264?206116113999 ZBNR 9879865431?21BELEG 
-NR. 6000336000?22B0011A5D90 899900122 PORTOK?23ASSEAUFLADUNG?24B 
ETRAG 20,00?3080880880?318787878787?32POST AG 
:61:1202150523CR65,10N062NONREF 
:86:051?00Überweisungseingang?109263?20RG.NR 20120169?21KUNDENNR. 
9896?3090990990?319898989898?32BENNO BAUER 
:61:1202190523DR15,00N011NONREF//009879865431 
:86:005?00Lastschrift?109264?206116113999 ZBNR 9879865431?21BELEG 
-NR. 6000336000?22B0011A5D90 899900127 PORTOK?23ASSEAUFLADUNG?24B 
ETRAG 15,00?3080880880?318787878787?32POST AG 
:62M:C120221EUR11733,40 
-