public abstract class HBCIJobImpl extends Object implements HBCIJob
Modifier and Type | Field and Description |
---|---|
protected HBCIJobResultImpl |
jobResult |
Modifier | Constructor and Description |
---|---|
protected |
HBCIJobImpl(HBCIHandler parentHandler,
String jobnameLL,
HBCIJobResultImpl jobResult) |
Modifier and Type | Method and Description |
---|---|
protected boolean |
acceptsParam(String hlParamName) |
protected void |
addConstraint(String frontendName,
String destinationName,
String defValue,
int logFilterLevel) |
protected void |
addConstraint(String frontendName,
String destinationName,
String defValue,
int logFilterLevel,
boolean indexed) |
void |
addSignaturePassport(HBCIPassport passport,
String role)
Hinzufügen eines Passports, welches für eine zusätzliche Signatur für
diesen Auftrag benutzt wird.
|
void |
addToQueue()
Hinzufügen dieses Jobs zu einem HBCI-Dialog.
|
void |
addToQueue(String customerId)
Hinzufügen dieses Jobs zu einem HBCI-Dialog.
|
void |
applyOffset()
Setzt den Offset-Parameter mit dem aktuellen Loop-Count.
|
protected boolean |
canNationalAcc(HBCIHandler handler)
Durchsucht das BPD-Segment "HISPAS" nach dem Property "cannationalacc"
um herauszufinden, ob beim Versand eines SEPA-Auftrages die nationale Bankverbindung
angegeben sein darf.
|
protected void |
checkAccountCRC(String frontendname) |
SEG |
createJobSegment() |
SEG |
createJobSegment(int segnum) |
protected void |
extractResults(HBCIMsgStatus msgstatus,
String header,
int idx) |
void |
fillJobResult(HBCIMsgStatus status,
int offset) |
String |
getChallengeParam(String path) |
String |
getExternalId()
Liefert eine optionalen Identifier, der von der Banking-Anwendung genutzt werden kann, um einen Bezug zum urspruenglichen
Auftrag herstellen zu koennen.
|
String |
getHBCICode() |
String |
getJobName() |
List<String> |
getJobParameterNames()
Gibt alle möglichen Job-Parameter für einen Lowlevel-Job zurück.
|
Properties |
getJobRestrictions()
Gibt für einen Job alle bekannten Einschränkungen zurück, die bei
der Ausführung des jeweiligen Jobs zu beachten sind.
|
HBCIJobResult |
getJobResult()
Gibt ein Objekt mit den Rückgabedaten für diesen Job zurück.
|
List<String> |
getJobResultNames()
Gibt alle möglichen Property-Namen für die Lowlevel-Rückgabedaten dieses
Jobs zurück.
|
String |
getLowlevelParam(String key) |
Properties |
getLowlevelParams()
Gibt alle für diesen Job gesetzten Parameter zurück.
|
HBCIPassportInternal |
getMainPassport() |
int |
getMaxNumberPerMsg() |
int |
getMinSigs()
Gibt zurück, wieviele Signaturen für diesen Job mindestens benötigt werden.
|
String |
getName()
Gibt den internen Namen für diesen Job zurück.
|
Konto |
getOrderAccount()
Liefert das Auftraggeber-Konto, wie es ab HKTAN5 erforderlich ist.
|
HBCIHandler |
getParentHandler() |
int |
getSecurityClass()
Gibt zurück, welche Sicherheitsklasse für diesen Job mindestens benötigt wird.
|
String |
getSegVersion()
Gibt die für diesen Job verwendete Segment-Versionsnummer zurück
|
HBCIPassportList |
getSignaturePassports() |
boolean |
haveTan()
Liefert true, wenn fuer den Auftrag ein HKTAN erzeugt wurde.
|
HBCIJobImpl |
redo()
Liefert den ggf erneut auszufuehrenden Job.
|
protected boolean |
redoAllowed()
Wir erlauben per Default erstmal kein Redo bei einem 3040-Code.
|
protected void |
saveReturnValues(HBCIMsgStatus status,
int sref) |
void |
setExternalId(String id)
Kann von der Banking-Anwendung genutzt werden, um einen eigenen Identifier im Job zu speichern, um im spaeteren
Verlauf des HBCI-Dialoges (z.Bsp. bei der TAN-Eingabe) einen Bezug zum urspruenglichen Auftrag wiederherstellen zu
koennen.
|
void |
setIdx(int idx) |
protected void |
setLowlevelParam(String key,
String value) |
void |
setParam(String paramName,
Date date)
Setzen eines Job-Parameters, bei dem ein Datums als Wert erwartet wird.
|
void |
setParam(String paramName,
int i)
Setzen eines Job-Parameters, bei dem ein Integer-Wert Da als Wert erwartet wird.
|
void |
setParam(String paramName,
Integer index,
Date date) |
void |
setParam(String paramname,
Integer index,
Konto acc) |
void |
setParam(String paramName,
Integer index,
String value)
Setzen eines Job-Parameters.
|
void |
setParam(String paramname,
Integer index,
Value v) |
void |
setParam(String paramname,
Konto acc)
Setzen eines komplexen Job-Parameters (Kontodaten).
|
void |
setParam(String paramName,
String value)
Setzen eines Job-Parameters.
|
void |
setParam(String paramname,
Value v)
Setzen eines komplexen Job-Parameters (Geldbetrag).
|
void |
setSegVersion(String version)
Legt die Versionsnummer des Segments manuell fest.
|
void |
skip()
Markiert den Auftrag als zu ueberspringend.
|
boolean |
skipped()
Prueft, ob der Auftrag uebersprungen werden soll.
|
void |
tanApplied()
Vermerkt den Auftrag als "HKTAN erzeugt".
|
protected boolean |
twoDigitValueInList(String value,
String list) |
void |
verifyConstraints() |
protected HBCIJobResultImpl jobResult
protected HBCIJobImpl(HBCIHandler parentHandler, String jobnameLL, HBCIJobResultImpl jobResult)
public String getJobName()
public String getHBCICode()
public void setSegVersion(String version)
version
- die neue Versionsnummer.public int getMaxNumberPerMsg()
public int getMinSigs()
HBCIJob
Gibt zurück, wieviele Signaturen für diesen Job mindestens benötigt werden. Diese Information wird den BPD entnommen. In einigen Fällen gibt es in den UPD aktuellere Informationen zu einem bestimmten Geschäftsvorfall, zur Zeit werden die UPD von dieser Methode aber nicht ausgewertet.
Wird für einen Job mehr als eine Signatur benötigt, so können mit der
Methode HBCIJob.addSignaturePassport(HBCIPassport, String)
Passports bestimmt werden, die für die Erzeugung der zusätzlichen
Signaturen verwendet werden sollen.
Es wird außerdem empfohlen, dass Aufträge, die mehrere Signaturen
benötigen, jeweils in einer separaten HBCI-Nachricht versandt werden. Um das
zu erzwingen, kann entweder ein HBCI-Dialog geführt werden, der definitiv
nur diesen einen Auftrag enthält (also nur ein
HBCIJob.addToQueue()
für diesen Dialog), oder es wird beim Zusammenstellen der Jobs für einen
Dialog sichergestellt, dass ein bestimmter Job in einer separaten Nachricht
gesandt wird
(HBCIHandler.newMsg()
).
getMinSigs
in interface HBCIJob
public int getSecurityClass()
HBCIJob
Gibt zurück, welche Sicherheitsklasse für diesen Job mindestens benötigt wird.
Diese Information wird den BPD entnommen. Sicherheitsklassen sind erst
ab FinTS-3.0 definiert. Falls keine Sicherheitsklassen unterstützt werden
(weil eine geringere HBCI-Version als FinTS-3.0 verwendet wird), wird
1
zurückgegeben. Die Sicherheitsklasse ist nur die
Sicherheitsmechanismen DDV und RDH relevant - bei Verwendung von PIN/TAN
hat die Sicherheitsklasse keine Bedeutung.
Folgende Sicherheitsklassen sind definiert:
0
: kein Sicherheitsdienst erforderlich1
: Authentication - es wird eine Signatur mit dem
Signaturschlüssel benötigt.2
: Authentication mit fortgeschrittener elektronischer
Signatur unter Verwendung des Signaturschlüssels.3
: Non-Repudiation mit fortgeschrittener elektronischer
Signatur und optionaler Zertifikatsprüfung unter Verwendung des DigiSig-Schlüssels4
: Non-Repudiation mit fortgeschrittener bzw. qualifizierter
elektronischer Signatur und zwingender Zertifikatsüberprüfung mit dem
DigiSig-SchlüsselgetSecurityClass
in interface HBCIJob
protected void addConstraint(String frontendName, String destinationName, String defValue, int logFilterLevel)
protected void addConstraint(String frontendName, String destinationName, String defValue, int logFilterLevel, boolean indexed)
public void verifyConstraints()
public SEG createJobSegment()
public SEG createJobSegment(int segnum)
public List<String> getJobParameterNames()
HBCIJob
HBCIHandler.newLowlevelJob(String)
).
Die zurückgegebenen Parameternamen können als erstes Argument der
Methode HBCIJob.setParam(String, String)
verwendet werden.getJobParameterNames
in interface HBCIJob
public List<String> getJobResultNames()
HBCIJob
HBCIJob.getJobResult()
und HBCIJobResult.getResultData()
ermittelt werden. Diese Methode verwendet intern
HBCIHandler.getLowlevelJobResultNames(String)
.getJobResultNames
in interface HBCIJob
public Properties getJobRestrictions()
HBCIJob
Gibt für einen Job alle bekannten Einschränkungen zurück, die bei der Ausführung des jeweiligen Jobs zu beachten sind. Diese Daten werden aus den Bankparameterdaten des aktuellen Passports extrahiert. Sie können von einer HBCI-Anwendung benutzt werden, um gleich entsprechende Restriktionen bei der Eingabe von Geschäftsvorfalldaten zu erzwingen (z.B. die maximale Anzahl von Verwendungszweckzeilen, ob das Ändern von terminierten Überweisungen erlaubt ist usw.).
Die einzelnen Einträge des zurückgegebenen Properties-Objektes enthalten als Key die
Bezeichnung einer Restriktion (z.B. "maxusage
"), als Value wird der
entsprechende Wert eingestellt. Die Bedeutung der einzelnen Restriktionen ist zur Zeit
nur der HBCI-Spezifikation zu entnehmen. In späteren Programmversionen werden entsprechende
Dokumentationen zur internen HBCI-Beschreibung hinzugefügt, so dass dafür eine Abfrageschnittstelle
implementiert werden kann.
Diese Methode verwendet intern
HBCIHandler.getLowlevelJobRestrictions(String)
getJobRestrictions
in interface HBCIJob
public void setParam(String paramname, Konto acc)
setParam(String,String)
erzeugt werden (je einer für
die Länderkennung, die Bankleitzahl und die Kontonummer). Durch Verwendung dieser
Methode wird dieser Weg abgekürzt. Es wird ein Kontoobjekt übergeben, für welches
die entsprechenden drei setParam(String,String)
-Aufrufe automatisch
erzeugt werden.public void setParam(String paramname, Integer index, Konto acc)
setParam
in interface HBCIJob
HBCIJob.setParam(java.lang.String, java.lang.Integer, org.kapott.hbci.structures.Konto)
public void setParam(String paramname, Value v)
setParam(String,String)
erzeugt werden (je einer für
den Wert und die Währung). Durch Verwendung dieser
Methode wird dieser Weg abgekürzt. Es wird ein Value-Objekt übergeben, für welches
die entsprechenden zwei setParam(String,String)
-Aufrufe automatisch
erzeugt werden.public void setParam(String paramName, Date date)
setParam(String,String)
, um das Datum in einen korrekt
formatierten String umzuwandeln. Das "richtige" Datumsformat ist dabei abhängig vom
aktuellen Locale.public void setParam(String paramName, int i)
setParam(String,String)
.protected boolean acceptsParam(String hlParamName)
public void setParam(String paramName, String value)
Setzen eines Job-Parameters. Für alle Highlevel-Jobs ist in der Package-Beschreibung zum
Package org.kapott.hbci.GV
eine Auflistung aller Jobs und deren Parameter zu finden.
Für alle Lowlevel-Jobs kann eine Liste aller Parameter entweder mit dem Tool
ShowLowlevelGVs
oder zur Laufzeit durch Aufruf
der Methode HBCIHandler.getLowlevelJobParameterNames(String)
ermittelt werden.
Bei Verwendung dieser oder einer der anderen setParam()
-Methoden werden zusätzlich
einige der Job-Restriktionen (siehe getJobRestrictions()
) analysiert. Beim Verletzen einer
der überprüften Einschränkungen wird eine Exception mit einer entsprechenden Meldung erzeugt.
Diese Überprüfung findet allerdings nur bei Highlevel-Jobs statt.
public void setParam(String paramName, Integer index, String value)
Setzen eines Job-Parameters. Für alle Highlevel-Jobs ist in der Package-Beschreibung zum
Package org.kapott.hbci.GV
eine Auflistung aller Jobs und deren Parameter zu finden.
Für alle Lowlevel-Jobs kann eine Liste aller Parameter entweder mit dem Tool
ShowLowlevelGVs
oder zur Laufzeit durch Aufruf
der Methode HBCIHandler.getLowlevelJobParameterNames(String)
ermittelt werden.
Bei Verwendung dieser oder einer der anderen setParam()
-Methoden werden zusätzlich
einige der Job-Restriktionen (siehe getJobRestrictions()
) analysiert. Beim Verletzen einer
der überprüften Einschränkungen wird eine Exception mit einer entsprechenden Meldung erzeugt.
Diese Überprüfung findet allerdings nur bei Highlevel-Jobs statt.
public void applyOffset()
public boolean haveTan()
public void tanApplied()
public void skip()
public boolean skipped()
public Properties getLowlevelParams()
HBCIJob
Properties
-Objekt sind werden die
Parameter als Lowlevel-Parameter abgelegt. Außerdem hat
jeder Lowlevel-Parametername zusätzlich ein Prefix, welches den
Lowlevel-Job angibt, für den der Parameter gilt (also z.B.
Ueb3.BTG.value
getLowlevelParams
in interface HBCIJob
public void setIdx(int idx)
public String getName()
HBCIJob
public String getSegVersion()
HBCIJob
getSegVersion
in interface HBCIJob
public HBCIJobImpl redo()
protected boolean redoAllowed()
public void fillJobResult(HBCIMsgStatus status, int offset)
protected void saveReturnValues(HBCIMsgStatus status, int sref)
protected void extractResults(HBCIMsgStatus msgstatus, String header, int idx)
public HBCIJobResult getJobResult()
HBCIJob
getJobResult
in interface HBCIJob
public HBCIPassportInternal getMainPassport()
protected void checkAccountCRC(String frontendname)
public void addSignaturePassport(HBCIPassport passport, String role)
HBCIJob
role
gibt dabei die Rolle an,
die der Eigentümer des zusätzlichen Passports in Bezug auf diesen
Job (bzw. die aktuelle Nachricht) einnimmt. Gültige Werte sind in
HBCIPassport
beschrieben.
Mit der Methode HBCIJob.getMinSigs()
kann ermittelt werden, wieviele
Signaturen für einen Job mindestens benötigt werden.addSignaturePassport
in interface HBCIJob
passport
- das hinzuzufügende Passport-Objekt, welches für eine
zusätzliche Signatur benutzt werden sollrole
- die Rolle, in der sich der Eigentümer des zusätzlichen
Passport-Objektes bezüglich dieses Jobs befindetpublic HBCIPassportList getSignaturePassports()
public Konto getOrderAccount()
public HBCIHandler getParentHandler()
public void addToQueue(String customerId)
HBCIJob
Hinzufügen dieses Jobs zu einem HBCI-Dialog. Nachdem alle
Jobparameter mit
HBCIJob.setParam(String,String)
gesetzt wurden, kann der komplett spezifizierte Job mit dieser Methode
zur Auftragsliste eines Dialoges hinzugefügt werden.
Die customerId
gibt an, unter welcher Kunden-ID dieser Job
ausgeführt werden soll. Existiert für eine HBCI-Nutzerkennung (ein Passport)
nur genau eine Kunden-ID (wie das i.d.R. der Fall ist), so kann der
customerId
-Parameter weggelassen werden - HBCI4Java
verwendet dann automatisch die richtige Kunden-ID (als Kunden-ID wird in diesem
Fall der Wert von HBCIPassport.getCustomerId()
verwendet). Gibt es aber mehrere
gültige Kunden-IDs für einen HBCI-Zugang, so muss die Kunden-ID,
die für diesen Job verwendet werden soll, mit angegeben werden.
Jeder Auftrag (=Job) ist i.d.R. an ein bestimmtes Konto des Auftraggebers gebunden (Überweisung: das Belastungskonto; Saldenabfrage: das abzufragende Konto usw.). Als Kunden-ID für einen Auftrag muss die Kunden-ID angegeben werden, die für dieses Konto verfügungsberechtigt ist.
I.d.R. liefert eine Bank Informationen über alle Konten, auf die
via HBCI zugegriffen werden kann. Ist das der Fall, so kann die Menge
dieser Konten mit HBCIPassport.getAccounts()
ermittelt werden.
In jedem zurückgemeldeten Konto
-Objekt
ist im Feld customerid
vermerkt, welche Kunden-ID für
dieses Konto verfügungsberechtigt ist. Diese Kunden-ID müsste dann also
beim Hinzufügen eines Auftrages angegeben werden, welcher das jeweilige
Konto betrifft.
Liefert eine Bank diese Informationen nicht, so hat die Anwendung selbst eine Kontenverwaltung zu implementieren, bei der jedem Nutzerkonto eine zu verwendende Kunden-ID zugeordnet ist.
Ein HBCI-Dialog kann aus beliebig vielen HBCI-Nachrichten bestehen. HBCI4Java versucht zunächst,
alle Jobs in einer einzigen Nachricht unterzubringen. Kann ein Job nicht mehr zur aktuellen
Nachricht hinzugefügt werden (weil sonst bestimmte vorgegebene Bedingungen nicht eingehalten
werden), so legt HBCI4Java automatisch eine neue Nachricht an, zu der der Job schließlich
hinzugefügt wird. Beim Ausführen des HBCI-Dialoges (siehe HBCIHandler.execute()
) werden dann
natürlich alle erzeugten Nachrichten zum HBCI-Server gesandt.
Der HBCI-Kernel bestimmt also automatisch, ob ein Auftrag noch mit in die aktuelle Nachricht
aufgenommen werden kann, oder ob eine separate Nachricht erzeugt werden muss. Der manuelle
Aufruf von HBCIHandler.newMsg()
ist
deshalb im Prinzip niemals notwendig, es sei denn,
es soll aus anderen Gründen eine neue Nachricht begonnen werden.
addToQueue
in interface HBCIJob
customerId
- die Kunden-ID, zu deren Dialog der Auftrag hinzugefügt werden sollpublic void addToQueue()
HBCIJob
Hinzufügen dieses Jobs zu einem HBCI-Dialog. Diese Methode arbeitet analog zu
HBCIJob.addToQueue(String)
, nur dass hier
die customerid
mit der Kunden-ID vorbelegt ist, wie sie
im aktuellen Passport gespeichert ist.
addToQueue
in interface HBCIJob
public String getExternalId()
HBCIJob
getExternalId
in interface HBCIJob
HBCIJob.getExternalId()
public void setExternalId(String id)
HBCIJob
setExternalId
in interface HBCIJob
id
- optionale ID.HBCIJob.setExternalId(java.lang.String)
protected boolean canNationalAcc(HBCIHandler handler)
handler
- Copyright © 2020. All rights reserved.