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

Unterschiede anzeigen Seitenhistorie anzeigen

« Vorherige Version anzeigen Version 4 Nächste Version anzeigen »

Das SEPA-Nuclet arbeitet mit Wrapper-Objekte anstelle der nur dem Zielnuclet bekannten BusinessObjects (siehe Abschnitt 4.8.1). Daher muss bei der Integration des SEPA-Nuclets dafür gesorgt werden, dass gewisse Datenbankzugriffe auf den tatsächlich genutzten Businessobjekte operieren können. D.h. die verwendeten Klassen und Attributnamen müssen bekannt sein. Die Bereitstellung erfolgt über businessobjektbezogene Fassaden.

Außerdem stellen die Fassaden Wrapper-Methoden bereit, die die tatsächlich verwendeten Businessobjekte auf die in Abschnitt 4.8.1. definierten Wrapper-Objekte umwandeln.

Bei der Anbindung des SEPA-Nuclets sind die folgende Fassadenklassen für Debitoren, Referenzen und Zahlungsreferenzen anzupassen:

Fassaden-KlasseFunktionJava-PackageAnzupassende Methoden
DebitorFacade
  • Definition der tatsächlichen Debitorenklasse
  • Wrapper-Methoden
org.nuclet.sepa.facade
  • getDebitorWrapper(UpdateContext)
  • getDebitorWrapper(Modifiable)
  • getWrappedClass()
ReferenceFacade
  • Definition der tatsächlichen Klasse für Referenzobjekte
  • Wrapper-Methoden
org.nuclet.sepa.facade
  • getReferenceWrapper(Modifiable)
  • getWrappedClass()
PaymentReferenceFacade
  • Definition der tatsächlichen Zahlungsreferenzklasse
  • Definition von Attributen
  • Wrapper-Methoden
org.nuclet.sepa.facade
  • getPaymentReferenceWrapper(Modifiable)
  • getWrappedClass()
  • getSEPAPaymentInformationAttribute()

Tabelle 4.8.2: Übersicht, Anpassungen in Fassaden-Klassen

 

 

4.7.2.1 DebitorFacade

In der Klasse DebitorFacade müssen drei Methoden implementiert werden:

  • getDebitorWrapper(UpdateContext) wandelt das Debitoren-Businessobjekt aus dem UpdateContext in ein Objekt vom Typ AbstractDebitorWrapper
  • getDebitorWrapper(Modifiable) wandelt ein Debitoren-Businessobjekt in ein Objekt vom Typ AbstractDebitorWrapper
  • getWrappedClass() sollte die Java-Klasse des verwendeten Debitorenobjektes zurückgeben

Ein Beispiel dazu ist jeweils in einem Kommentarblock angegeben, dieses Beispiel ist an das tatsächlich genutzte Währungsbusinessobjekt (bzw. dessen BusinessObject-Klasse) anzupassen.

org.nuclet.sepa.facade.DebitorFacade
package org.nuclet.sepa.facade;


import java.util.ArrayList;
import java.util.List;

import org.nuclos.api.businessobject.BusinessObject;
import org.nuclos.api.businessobject.facade.Modifiable;
import org.nuclos.api.context.UpdateContext;
import org.nuclos.api.exception.BusinessException;

import org.nuclet.sepa.wrapper.AbstractDebitorWrapper;
import org.nuclet.sepa.wrapper.DebitorWrapper;


// @replace! Bitte bei Nuclet-Integration mit eigenem Code ersetzen!
//
// Beispiel:
// 
// import org.nuclet.businesstemplate.Client;

import de.bffs.Person;

/**
 * Facade for Business Objects of type "Debitor"
 * 
 * @version 1.0
 * @date 21.03.2014
 * @nuclet org.nuclet.SEPA
 * @nucletversion 1.0.0
 * @sincenucletversion 1.0.0
 * @since 21.03.2014
 * 
 * @author frank.lehmann@nuclos.de
 * 
 */
public class DebitorFacade<T extends BusinessObject & Modifiable> extends AbstractDebitorFacade<Person>
{
 private static final DebitorFacade instance = new DebitorFacade(); 
 
 
 /**
 * Liefert die Singleton-Instanz dieser Klasse
 *
 */
 public static DebitorFacade getInstance()
 {
 return instance;
 } 
 
 /**
 * Wrap the context's actual reference objects inside an <code>AbstractReferenceWrapper</code>
 * 
 * @param context A given <code>UpdateContext</code>
 * 
 * @return the context's actual reference object, wrapped inside an <code>AbstractReferenceWrapper</code>
 *
 */
 public AbstractDebitorWrapper getDebitorWrapper(final UpdateContext context)
 {
 // @replace! 
 //
 // return new DebitorWrapper(context.getBusinessObject(getWrappedClass()));
 
 return new DebitorWrapper(context.getBusinessObject(getWrappedClass())); 
 }
 
 
 /**
 * Wrap the actual reference object inside an <code>AbstractReferenceWrapper</code>
 * 
 * @param boDebitor The actual reference object
 * 
 * @return the actual reference object, wrapped inside an <code>AbstractReferenceWrapper</code>
 *
 */
 public AbstractDebitorWrapper getDebitorWrapper(final Modifiable boDebitor)
 {
 // @replace! 
 //
 // return new DebitorWrapper(boDebitor);
 
 return new DebitorWrapper(boDebitor);
 }
 
 /**
 * Get the class of the actual reference objects, i.e. the class wrapped by <code>DebitorWrapper</code>
 * 
 * @return the class of the actual reference objects, i.e. the class wrapped by <code>DebitorWrapper</code>
 *
 */
 public Class<Person> getWrappedClass()
 {
 // @replace! 
 //
 // return Client.class;
 
 return Person.class;
 } 
 
}
4.7.2.2 ReferenceFacade

In der Klasse ReferenceFacade müssen die Methode getWrappedClass() und getNuclosStateAttribute() implementiert werden:

  • getWrappedClass() sollte die Java-Klasse des verwendeten Referenzobjektes (bspw. org.nuclet.businessobject.ClientBilling) zurückgeben
  • getNuclosStateAttribute() sollte dasjenige Attribut des verwendeten Referenzobjektes zurückliefern, dass den Nuclos-Status repräsentiert

Ein Beispiel dazu ist jeweils in einem Kommentarblock angegeben, dieses Beispiel ist an das tatsächlich genutzte Währungsbusinessobjekt (bzw. dessen BusinessObject-Klasse) anzupassen.

Die Beschreibung zur Anpassung der beiden Methoden getSourceStates() und getDestinationStates() finden Sie im nächsten Abschnitt (4.7.3).

org.nuclet.mt940.facade.ReferenceFacade
package org.nuclet.mt940.facade;


import java.util.ArrayList;
import java.util.List;

import org.nuclos.api.businessobject.BusinessObject;
import org.nuclos.api.businessobject.Query;
import org.nuclos.api.businessobject.QueryOperation;
import org.nuclos.api.businessobject.SearchExpression;
import org.nuclos.api.businessobject.attribute.PrimaryKeyAttribute;
import org.nuclos.api.businessobject.facade.Stateful;
import org.nuclos.api.context.JobContext;
import org.nuclos.api.context.RuleContext;
import org.nuclos.api.exception.BusinessException; 
import org.nuclos.api.provider.QueryProvider;
import org.nuclos.api.provider.BusinessObjectProvider;
import org.nuclos.api.statemodel.State;

import org.nuclet.common.facade.AbstractFacade;

import org.nuclet.mt940.statemodel.ReferenceStatemodel;
import org.nuclet.mt940.wrapper.AbstractReferenceWrapper;
import org.nuclet.mt940.wrapper.ReferenceWrapper;

// @replace! Bitte bei Nuclet-Integration mit eigenem Code ersetzen!
//
// Beispiel:
// 
// import org.nuclet.businesstemplate.ClientBilling;


/**
 * Facade for Business Objects of type "Reference"
 * 
 * 
 * @version 1.1
 * @date 20.02.2014
 * @nuclet org.nuclet.MT940
 * @nucletversion 1.4.0
 * @sincenucletversion 1.2.0
 * @since 20.09.2013
 * @author frank.lehmann@nuclos.de 
 * 
 */
public class ReferenceFacade<T extends BusinessObject & Stateful> extends AbstractReferenceFacade<T>
{
    private static final ReferenceFacade instance = new ReferenceFacade();            
    
    
    /**
     * Liefert die Singleton-Instanz dieser Klasse
     *
     */
    public static ReferenceFacade getInstance()
    {
        return instance;
    } 
                
    
    /**
     * Liefert eine Liste von Quellzuständen zum gegebenen Statuswechsel.
     * 
     * @param stateChange Der Statuswechsel, repräsentiert durch ein Objekt vom Typ <code>StateChange</code>.
     * 
     * @return eine Liste von Quellzuständen zum gegebenen Statuswechsel
     * 
     */
    public List<State> getSourceStates(final ReferenceStatemodel.StateChange stateChange)
    {
        final List<State> lstSourceStates = new ArrayList<State>();
        
        switch (stateChange) {        
            case PaymentReceived:
                // @replace Bitte bei Nuclet-Integration mit eigenem Code ersetzen!
                //
                // Beispiel:
                //
                // lstSourceStateIds.add(ProcessClientBillingSM.State_AB);
                // lstSourceStateIds.add(ProcessClientBillingSM.State_XY);
            
                break;
            default:
                break;
        }
        
        return lstSourceStates;
    }
    
    /**
     * Liefert den Zielzustand zum gegebenen Statuswechsel.
     * 
     * @param stateChange Der Statuswechsel, repräsentiert durch ein Objekt vom Typ <code>StateChange</code>.
     * 
     * @return der Zielzustand von Quellzuständen zum gegebenen Statuswechsel
     * 
     */
    public State getDestinationState(final ReferenceStatemodel.StateChange stateChange)
    {
        switch (stateChange) {        
            case PaymentReceived:
                // @replace Bitte bei Nuclet-Integration mit eigenem Code ersetzen!
                //
                // Beispiel:
                //
                // return ProcessClientBillingSM.State_ZZ;
                //
                
                return null;                
            default:
                return null;
        }
        
    }
    
    /**
     * Wrap the actual reference objects inside an <code>AbstractReferenceWrapper</code>
     * 
     * @return the actual reference objects, wrapped inside an <code>AbstractReferenceWrapper</code>
     *
     */
    public AbstractReferenceWrapper getReferenceWrapper(final BusinessObject boReference)
    {
        // @replace! 
        //
        // return new ReferenceWrapper(boReference);
        
        return new ReferenceWrapper(boReference);
    }
    
    /**
     * Get the class of the actual reference objects, i.e. the class wrapped by <code>ReferenceWrapper</code>
     * 
     * @return the class of the actual reference objects, i.e. the class wrapped by <code>ReferenceWrapper</code>
     *
     */
    public Class<T> getWrappedClass()
    {
        // @replace! 
        //
        // return ClientBilling.class;
        
        return null;
    }
    
    /**
     * Get the attribute <code>NuclosState</code> of the actual reference objects
     * 
     * @return the attribute <code>NuclosState</code> of the actual reference objects
     *
     */
    public PrimaryKeyAttribute<State> getNuclosStateAttribute()
    {
        // @replace! Bitte bei Nuclet-Integration mit eigenem Code ersetzen!
        //
        // Beispiel:
        //
        // ClientBilling.NuclosState;
        
        return null;
    }
        
}
  • Keine Stichwörter