Tutorial: Erste Submission in 15 Minuten
Typ C · Onlinedienst Dauer: ca. 15 Minuten
Was Sie hier bauen: Ein Programm, das als Onlinedienst eine verschlüsselte Submission an einen
FIT-Connect-Zustellpunkt sendet und submissionId und caseId ausgibt — die beiden IDs, mit denen
in Tutorial 2 die Verwaltungsseite weitermacht.
Dieses Tutorial ist darauf ausgelegt, dass Sie etwas zum Laufen bringen und verstehen, was passiert. Für vollständige Produktivintegrationen lesen Sie danach das Rezept Antrag senden.
Voraussetzungen
- Java
- .NET (C#)
- JDK 21+ —
java --version - Maven 3.6+ —
mvn --version - Test-Credentials aus dem Self-Service-Portal —
clientIdundclientSecreteines Onlinedienst-Clients (Sender) - Die Destination-ID Ihres eigenen Onlinedienstes (Typ C) — jede Partei in FIT-Connect ist selbst eine Destination, auch ein reiner Sender
- Eine bekannte Ziel-Destination-ID (Typ A/B) aus dem Self-Service-Portal, an die Sie senden
- .NET 10 SDK —
dotnet --version - Test-Credentials aus dem Self-Service-Portal —
clientIdundclientSecreteines Onlinedienst-Clients (Sender) - Die Destination-ID Ihres eigenen Onlinedienstes (Typ C) — das .NET-SDK prüft sie beim Start
- Eine bekannte Ziel-Destination-ID (Typ A/B) aus dem Self-Service-Portal, an die Sie senden
Schritt 1: Projekt anlegen
- Java
- .NET (C#)
mvn archetype:generate \
-DgroupId=de.example \
-DartifactId=fit-connect-demo \
-DarchetypeArtifactId=maven-archetype-quickstart \
-DinteractiveMode=false
cd fit-connect-demo
dotnet new console -n fit-connect-demo
cd fit-connect-demo
Schritt 2: SDK-Dependency eintragen
- Java
- .NET (C#)
Öffnen Sie pom.xml und ergänzen Sie innerhalb von <dependencies>:
<dependency>
<groupId>dev.fitko.fitconnect</groupId>
<artifactId>sdk-client</artifactId>
<version>4.0.0-rc.1</version>
</dependency>
Dann:
mvn dependency:resolve
Erwartete Ausgabe: BUILD SUCCESS. Schlägt der Download fehl, prüfen Sie die
Maven-Central-Erreichbarkeit.
dotnet add package Fitko.FitConnect.Client --prerelease
dotnet add package Microsoft.Extensions.DependencyInjection
dotnet add package Microsoft.Extensions.Configuration.Json
Dann:
dotnet restore
Erwartete Ausgabe: Restore succeeded.
Schritt 3: Konfigurationsdatei erstellen
- Java
- .NET (C#)
Legen Sie config.yml im Projektverzeichnis an:
# config.yml — niemals committen!
credentials:
clientId: "ihre-client-id"
clientSecret: "ihr-client-secret"
environment: TEST
Private Schlüssel (Entschlüsselung, Signatur) gehören nicht in diese Datei — sie werden dem
SDK erst beim Erzeugen von Organisation/OnlineService als Argument übergeben (Schritt 5).
Die Datei ist optional. Kommen die Credentials z. B. aus einem Vault, bauen Sie das SDK direkt:
FitConnectSdk.fromConfigBuilder().credentials(id, secret).environment(FitConnectEnvironment.TEST).build()
— alle weiteren Optionen (SdkSettings) gehen ebenfalls über den Builder, siehe
Konfiguration.
Legen Sie appsettings.json im Projektverzeichnis an:
{
"FitConnect": {
"EnvironmentTag": "TEST",
"Client": {
"ClientId": "ihre-client-id",
"ClientSecret": "ihr-client-secret",
"DestinationId": "IHRE-EIGENE-DESTINATION-ID-HIER"
}
}
}
Client.DestinationId ist die UUID Ihres eigenen Onlinedienstes (Typ C). Das SDK schlägt
sie beim Start nach und merkt sich den Typ — deshalb weiß es später, dass AsOnlineService() die
passende Rolle ist. Schlüssel braucht ein reiner Sender nicht.
Stellen Sie sicher, dass die Datei ins Ausgabeverzeichnis kopiert wird. Fügen Sie in
fit-connect-demo.csproj hinzu:
<ItemGroup>
<None Update="appsettings.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
Fügen Sie config.yml bzw. appsettings.json zu .gitignore hinzu. Credentials
gehören nicht in die Versionskontrolle.
Schritt 4: SDK initialisieren
- Java
- .NET (C#)
Ersetzen Sie den Inhalt von src/main/java/de/example/App.java:
package de.example;
import dev.fitko.fitconnect.sdk.FitConnectSdk;
import dev.fitko.fitconnect.sdk.clients.OnlineService;
import dev.fitko.fitconnect.sdk.api.Addressing;
import dev.fitko.fitconnect.sdk.api.OutgoingSubmission;
import dev.fitko.fitconnect.sdk.api.Participant;
import dev.fitko.fitconnect.sdk.api.SubmissionData;
import dev.fitko.fitconnect.rest.model.submission.SentSubmission;
import java.net.URI;
import java.nio.file.Path;
import java.util.UUID;
public class App {
public static void main(String[] args) throws Exception {
FitConnectSdk sdk = FitConnectSdk.fromConfigYaml(Path.of("config.yml"));
System.out.println("SDK initialisiert. Sende Submission…");
}
}
Ersetzen Sie den Inhalt von Program.cs:
using Fitko.FitConnect.Client.Client;
using Fitko.FitConnect.Client.Client.Roles;
using Fitko.FitConnect.Client.DependencyInjection;
using Fitko.FitConnect.Client.Models.Attachments;
using Fitko.FitConnect.Client.Services.Submissions;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
var configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.Build();
IFitConnectClient client = new ServiceCollection()
.AddSingleton<IConfiguration>(configuration)
.AddFitConnect()
.BuildServiceProvider()
.GetRequiredService<IFitConnectClient>();
IOnlineServiceClient onlineService = client.AsOnlineService(); // Ihre Rolle: Typ C
Console.WriteLine("SDK initialisiert. Sende Submission…");
Das .NET-SDK lebt im DI-Container: Sie melden dem Container Ihre Konfiguration und das SDK an und
holen sich am Ende den fertigen IFitConnectClient ab. In einer ASP.NET-Core-Anwendung entfällt
sogar das — Sie lassen sich IFitConnectClient einfach injizieren. AsOnlineService() gibt Ihnen
den Client mit genau den Methoden, die ein Onlinedienst aufrufen darf.
Schritt 5: Submission bauen
Ein Antrag braucht immer einen Empfänger und Fachdaten. Der Empfänger wird als
Participant adressiert – Destination-ID plus Addressing (hier: eine Verwaltungsleistung nach
LeiKa-Schlüssel). Empfänger und Fachdaten reichen Sie an den OutgoingSubmission-Builder weiter;
build() liefert das fertige, aber noch nicht gesendete Objekt zurück.
- Java
- .NET (C#)
Ergänzen Sie innerhalb von main() vor der schließenden Klammer:
UUID myDestinationId = UUID.fromString("IHRE-EIGENE-DESTINATION-ID-HIER"); // Typ C
UUID recipientId = UUID.fromString("EMPFAENGER-DESTINATION-ID-HIER"); // Typ A/B
OnlineService onlineService = sdk.onlineService(myDestinationId);
Participant recipient = Participant.of(
recipientId,
Addressing.toService(
"urn:de:fim:leika:leistung:99400048079000",
"FIT-Connect Tutorial"));
OutgoingSubmission submission = OutgoingSubmission.to(recipient)
.setData(SubmissionData.json(
"{\"message\": \"Hallo aus dem Tutorial!\"}",
URI.create("https://schema.fitko.de/fit-connect/fitconnect_demo_0.1.schema.json")))
.build();
Ergänzen Sie unterhalb der SDK-Initialisierung:
var recipientId = Guid.Parse("EMPFAENGER-DESTINATION-ID-HIER"); // Typ A/B
OutgoingSubmission submission = OutgoingSubmissionBuilder.Builder()
.WithDestinationId(recipientId)
.WithServiceType(
"urn:de:fim:leika:leistung:99400048079000",
"FIT-Connect Tutorial")
.WithMetadataVersion(new Version(1, 5, 0))
.WithJsonData(
"{\"message\": \"Hallo aus dem Tutorial!\"}",
new Uri("https://schema.fitko.de/fit-connect/fitconnect_demo_0.1.schema.json"))
.Build();
Was hier passiert:
sdk.onlineService(myDestinationId)/client.AsOnlineService()— Ihr eigener Onlinedienst als handelnde Destination (Typ C); jede Partei in FIT-Connect ist selbst eine Destination, auch ein reiner SenderParticipant.of(recipientId, Addressing.toService(...))/WithDestinationId+WithServiceType— wer empfängt und welche Verwaltungsleistung (Leika-Schlüssel)SubmissionData.json(...)/WithJsonData— Antragsdaten als JSON + Schema-URI zur ValidierungWithMetadataVersion(new Version(1, 5, 0))— nur .NET: die Metadaten-Version ist dort ein expliziter Pflichtschritt, Java leitet sie aus den gesetzten Feldern ab
Schritt 6: Submission senden
- Java
- .NET (C#)
SentSubmission sent = onlineService.send(submission);
System.out.println("✓ Submission gesendet!");
System.out.println(" submissionId: " + sent.submissionId());
System.out.println(" caseId: " + sent.caseId());
SentSubmission sent = await onlineService.SendSubmission(submission);
Console.WriteLine("✓ Submission gesendet!");
Console.WriteLine($" submissionId: {sent.SubmissionId}");
Console.WriteLine($" caseId: {sent.CaseId}");
Schritt 7: Ausführen
- Java
- .NET (C#)
mvn compile exec:java -Dexec.mainClass="de.example.App"
dotnet run
Erwartete Ausgabe:
SDK initialisiert. Sende Submission…
✓ Submission gesendet!
submissionId: 3fa85f64-5717-4562-b3fc-2c963f66afa6
caseId: a1b2c3d4-e5f6-7890-abcd-ef1234567890
Wenn Sie die submissionId sehen, hat alles geklappt: Das SDK hat die Submission verschlüsselt,
FIT-Connect hat sie entgegengenommen und für den Zustellpunkt bereitgelegt. Notieren Sie
submissionId und caseId — Tutorial 2 holt genau diesen
Antrag auf der Verwaltungsseite ab.
Was Sie gelernt haben
- SDK installieren und konfigurieren (Java: YAML, .NET: DI + JSON) — ein Sender braucht keine Schlüssel
- Die Rolle (
OnlineService/AsOnlineService()) entscheidet, welche Methoden es gibt - Eine Submission mit Fachdaten bauen und senden; das SDK erledigt Verschlüsselung, Hashes und Upload
- Was
submissionIdundcaseIdbedeuten
Was als Nächstes?
- Die andere Seite: Tutorial 2: Empfangen und antworten
- Empfänger nicht mehr von Hand eintragen: Empfänger finden
- Status verfolgen: Status verfolgen
- Anhänge mitsenden:
.addAttachment()/.WithAttachment()— Details in Submission senden - Vorverschlüsselung aus dem Frontend: JavaScript-SDK