Added example to show the options of getAccountData()

This commit is contained in:
dankito 2024-08-22 18:23:44 +02:00
parent 345f84c0b2
commit b35f1146a5
2 changed files with 53 additions and 5 deletions

View File

@ -32,11 +32,13 @@ dependencies {
## Usage
For the full example source code see [ShowUsage](SampleApp/src/main/kotlin/net/codinux/banking/client/fints4k/example/ShowUsage.kt).
### Get AccountData
Retrieves data like accounts, balance and booked transactions (Konten, Saldo und Kontoumsätze).
Basically:
Simple example:
```kotlin
class ShowUsage {
@ -52,7 +54,12 @@ class ShowUsage {
val client = FinTs4kBankingClientForCustomer(bankCode, loginName, password, SimpleBankingClientCallback())
val response = client.getAccountData()
printReceivedData(response)
}
private fun printReceivedData(response: Response<GetAccountDataResponse>) {
response.data?.let { data ->
val customer = data.customer
println("Kunde: ${customer.customerName} ${customer.accounts.size} Konten @ ${customer.bic} ${customer.bankName}")
@ -84,6 +91,19 @@ val client = FinTs4kBankingClientForCustomer(bankCode, loginName, password, Simp
})
```
You can also specify options e.g. which transactions should be retrieved:
```kotlin
val options = GetAccountDataOptions(
retrieveBalance = true, // retrieve balance (Saldo / Kontostand) yes or no
retrieveTransactions = RetrieveTransactions.AccordingToRetrieveFromAndTo, // so that fromDate and toDate below determine of which time period transactions (Umsätze) should be retrieved; defaults to OfLast90Days which in most cases doesn't require a TAN
retrieveTransactionsFrom = LocalDate(2023, 1, 1),
retrieveTransactionsTo = LocalDate(2023, 12, 31),
abortIfTanIsRequired = false // e.g. for command line application when entering TAN is either not possible or a TAN procedure is used that cannot be handled via a break point (e.g. showing a TAN image or flicker code)
)
val response = client.getAccountData(options)
```
Add some error handling by checking `response.error`:
```kotlin

View File

@ -1,12 +1,20 @@
package net.codinux.banking.client.fints4k.example
import kotlinx.datetime.LocalDate
import net.codinux.banking.client.SimpleBankingClientCallback
import net.codinux.banking.client.fints4k.FinTs4kBankingClientForCustomer
import net.codinux.banking.client.getAccountData
import net.codinux.banking.client.model.options.GetAccountDataOptions
import net.codinux.banking.client.model.options.RetrieveTransactions
import net.codinux.banking.client.model.response.GetAccountDataResponse
import net.codinux.banking.client.model.response.Response
import net.codinux.banking.client.model.tan.EnterTanResult
fun main() {
ShowUsage().getAccountData()
val showUsage = ShowUsage()
showUsage.getAccountDataSimpleExample()
// showUsage.getAccountDataFullExample()
}
class ShowUsage {
@ -18,18 +26,38 @@ class ShowUsage {
private val password = "" // Online-Banking Password mit dem du dich beim Online-Banking deiner Bank anmeldest
fun getAccountData() {
fun getAccountDataSimpleExample() {
val client = FinTs4kBankingClientForCustomer(bankCode, loginName, password, SimpleBankingClientCallback())
val response = client.getAccountData()
printReceivedData(response)
}
fun getAccountDataFullExample() {
val client = FinTs4kBankingClientForCustomer(bankCode, loginName, password, SimpleBankingClientCallback { tanChallenge, callback ->
val tan: String? = null // if a TAN is required, add a UI or ...
callback.invoke(EnterTanResult(tan)) // ... set a break point here, get TAN e.g. from your TAN app, set tan variable in debugger view and resume debugger
})
val response = client.getAccountData()
val options = GetAccountDataOptions(
retrieveBalance = true, // retrieve balance (Saldo / Kontostand) yes or no
retrieveTransactions = RetrieveTransactions.AccordingToRetrieveFromAndTo, // so that fromDate and toDate below determine of which time period transactions (Umsätze) should be retrieved; defaults to OfLast90Days which in most cases doesn't require a TAN
retrieveTransactionsFrom = LocalDate(2023, 1, 1),
retrieveTransactionsTo = LocalDate(2023, 12, 31),
abortIfTanIsRequired = false // e.g. for command line application when entering TAN is either not possible or a TAN procedure is used that cannot be handled via a break point (e.g. showing a TAN image or flicker code)
)
val response = client.getAccountData(options)
response.error?.let{ error ->
println("Could not fetch account data: ${error.internalError ?: error.errorMessagesFromBank.joinToString()}")
}
printReceivedData(response)
}
private fun printReceivedData(response: Response<GetAccountDataResponse>) {
response.data?.let { data ->
val customer = data.customer
println("Kunde: ${customer.customerName} ${customer.accounts.size} Konten @ ${customer.bic} ${customer.bankName}")