Zum Hauptinhalt springen

.NET-SDK

Empfänger implementieren

Ein empfangendes System mit .NET-SDK entwickeln

Empfangende Systeme erhalten Einreichungen von Antragsteller:innen über FIT-Connect. Der Empfang von Einreichungen ist hier im Detail beschrieben. Wenn Sie das .NET-SDK nutzen, dann können Sie sich auf den Aufruf der Schnittstelle zum SDK konzentrieren, weil das SDK viele Details intern automatisch umsetzt.

Voraussetzung für empfangende Systeme

  • Credentials: Um einen Antrag zu empfangen, benötigen Empfänger (Subscriber) eine ClientId und ein ClientSecret. Hier ist beschrieben, wie Sie diese Credentials erhalten.
  • Schlüssel zum Entschlüsseln und Signieren: Empfangende Systeme benötigen ein Zertifikat der Verwaltungs-PKI. Dazu finden Sie hier eine Beschreibung. Aus diesem Zertifikat generieren Sie dann JSON Web Keys (JWKs) für den Zugriff auf FIT-Connect. Eine Beschreibung dazu ist auch hier. Die JWKs benötigen Sie beim Aufruf der Methode GetSubscriberClient(...) der Klasse ClientFactory des .NET-SDKs, siehe folgendes Beispiel.

Beispiel für einen Empfänger (Subscriber)

Das folgende Beispiel zeigt, wie Sie das .NET-SDK nutzen, um Einreichung (Submissions) vom Zustellpunkt zu laden.

1. Schritt: Subscriber erstellen

Sie erstellen einen Subscriber mit der Methode GetSubscriberClient(...) der SDK-Klasse ClientFactory:

string clientId = "YOUR CLIENT ID";
string clientSecret = "YOUR CLIENT SECRET";

var subscriber = ClientFactory.GetSubscriberClient(
FitConnectEnvironment.Test,
clientId,
clientSecret,
privateKeyDecryption,
privateKeySigning,
logger);

Parameter der Methode ClientFactory.GetSubscriberClient()

  • FitConnectEnvironment
    Das Beispiel oben verwendet die Umgebung Test der FIT-Connect-Infrastruktur. Deshalb wird der Methode ClientFactory.GetSubscriberClient(...) das Feld FitConnectEnvironment.Test des .NET-SDKs übergeben.
  • ClientId, ClientSecret
    Das Beispiel enthält Platzhalter für die Werte in clientId und clientSecret. Hier ist beschrieben, wie Sie eine ClientId und ein ClientSecret erhalten.
  • PrivateKeyDecryption
    Dieser Parameter erhält den JSON Web Key (JWK) für den privaten Schlüssel zum Entschlüsseln (im Beispiel ist kein Wert angegeben). Hier ist beschrieben, wie Sie aus einem Zertifikat die erforderlichen Schlüssel zum Entschlüsseln und Signieren im Format JWK erzeugen.
  • PrivateKeySigning
    Dieser Parameter erhält den JWK des privaten Schlüssels zum Signieren (im Beispiel ist kein Wert eingetragen). Hier ist beschrieben, wie Sie aus einem Zertifikat die erforderlichen Schlüssel zum Entschlüsseln und Signieren im Format JWK erzeugen.
  • Logger
    Der Parameter logger ist optional. Wird ein Logger übergeben, dann muss er das Interface Microsoft.Extensions.Logging.ILogger implementieren.

2. Schritt: Abholbereite Einreichungen erfragen

Stehen Einreichungen zur Abholung bereit?

Wenn Sie das Polling-Verfahren nutzen, dann rufen Sie jetzt am Subscriber die Methode GetAvailableSubmissionsAsync() auf, um zu erfahren, ob der Zustelldienst abholbereite Einreichungen zur Abholung bereithält:

var submissionsForPickup = await subscriber.GetAvailableSubmissionsAsync();

Falls Sie nicht das Polling-Verfahren nutzen, sondern einen Callback-Endpunkt, dann informiert Sie der Zustellpunkt, sobald eine abholbereite Einreichung vorliegt, indem er den Callback-Endpunkt aufruft. Damit entfällt für Sie dieser Schritt.

3. Schritt: Abrufen und Auswerten von Einreichungen

Rufen Sie am Subscriber die Methode RequestSubmissionAsync(...) auf für jede Einreichung in der Liste submissionsForPickup (siehe Schritt 2):

foreach (var submissionForPickup in submissionsForPickup) {
var receivedSubmission = await subscriber.RequestSubmissionAsync(submissionForPickup.SubmissionId);
var attachments = await receivedSubmission.GetAttachmentsAsync();
var data = receivedSubmission.GetData(); // Abruf der Daten
var mimeType = receivedSubmission.GetDataMimeType(); // Abrufen des MimeTypes der Daten

// Additional custom checks
var ok = AdditionalCustomChecksOutsideSDK(receivedSubmission, attachments, data);

if (ok){
// Submission accept
await receivedSubmission.AcceptSubmissionAsync();
} else {
// or submission reject
await receivedSubmission.RejectSubmissionAsync();
}
}

Um die Anhänge zu einer Einreichung zu erhalten, ruft das Beispiel oben die Methode receivedSubmission.GetAttachmentsAsync() auf. Die Methode receivedSubmission.GetData() gibt die Daten der Einreichung als String zurück. Mit der Methode receivedSubmission.AcceptSubmissionAsync() setzt das Beispiel den Status der Einreichung im Zustelldienst auf accepted, wenn zusätzliche Tests, die über die internen Tests des SDKs hinausgehen, keine Fehler gefunden haben.

Zusammenfassung

Der folgende Quellcode zeigt nochmals im Zusammenhang, wie Sie Einreichungen abrufen und verarbeiten können.
Die einzelnen Schritte sind:

  • Subscriber erstellen
  • Abholbereite Einreichungen erfragen
  • Abrufen und Auswerten von Einreichungen
        var subscriber = ClientFactory.GetSubscriberClient(
FitConnectEnvironment.Test,
clientId,
clientSecret,
privateKeyDecryption,
privateKeySigning,
publicKeyEncryption,
publicKeySignatureVerification,
logger);

var submissionsForPickup = await subscriber.GetAvailableSubmissionsAsync();

// Alle verfügbaren Submissions laden
foreach (var submissionForPickup in submissionsForPickup) {
var receivedSubmission = await subscriber.RequestSubmissionAsync(submissionForPickup.SubmissionId);

// Laden der Anhänge
var attachments = await receivedSubmission.GetAttachmentsAsync();

// Ausgabe der Fachdaten auf der Konsole
logger.LogInformation("Fachdaten: {Data}", receivedSubmission.GetData());

// Submission akzeptieren und abschließen
await receivedSubmission.AcceptSubmissionAsync();
}

Bidirektionale Kommunikation

FIT-Connect ermöglicht einen Dialog zwischen Sender und Empfänger, sodass Sender und Empfänger direkt Übermittlungen miteinander austauschen können. Dieser Dialog wird Bidirektionale Kommunikation (BiDiKo) genannt.

Die Seite Sender beschreibt die bidirektionale Kommunikation und definiert wichtige Begriffe, wie Replys (Antworten des Empfängers auf Einreichungen von einem Sender).

Empfänger sendet Antwort über FIT-Connect

FIT-Connect ermöglicht einem Empfänger, eine Antwort (Reply) zu einer Einreichung an den Sender zurückzusenden. Der Sender kann auf die Antwort reagieren, indem er eine neue Einreichung an den Empfänger über FIT-Connect sendet.

Auf eine Submission antworten

Sie senden eine Antwort zu einer Einreichung (Submission) zurück, indem Sie ein SendableReply von dieser ReceivedSubmission erzeugen (siehe folgendes Beispiel). Alle Daten der erhaltenen Submission werden übernommen. Die Fachdaten und Attachments können im Reply jedoch neu gesetzt werden.

Anschließend senden Sie die Antwort (Reply) mit der Methode Subscriber.SendReplyAsync(...) an den Sender über FIT-Connect zurück:

var receivedSubmission = Subscriber.RequestSubmissionAsync(_submission.SubmissionId).Result;

var replySubmission = SendableReply.From(receivedSubmission)
.SetJsonData("{ \"replyData\" : \"Bitte Anhang xy nachreichen\"}", new Uri("https://schema.fitko.de/fim/s00000114_1.1.schema.json"))
.AddAttachment(Attachment.FromPath("Test.pdf", "application/pdf", description: "Attachment #1", fileName: "Test.pdf"))
.Build();

var sentReply = Subscriber.SendReplyAsync(replySubmission).Result;
Voraussetzung

Das Zurücksenden einer Antwort über FIT-Connect ist nur dann möglich, wenn für die Submission, auf die geantwortet werden soll, FIT-Connect als Rückkanal gesetzt ist.

Hinweis zur aktuellsten Submission

Um sicherzustellen das der neueste Verschlüsselungsschlüssel eines Case abgerufen wird, sollten zunächst alle Submissions eines Case geladen werden und nach dem submittedtAt Zeitstempel der ReceivedSubmisssion sortiert werden.

Status einer Antwort abrufen

Sie erfragen den Status einer gesendeten Antwort (sentReply), indem Sie die Methode getReplyStatus der Klasse SubscriberClient aufrufen:

var status = Sender.GetStatusForReplyAsync(_submission).Result;
status.SubmissionState.Should().Be(EventType.Submit);

Methoden der Klassen ClientFactory und Subscriber

Das folgende Flussdiagramm zeigt die Schritte, die erforderlich sind, um vom Zustelldienst eine Einreichung zu laden. Die Einreichung wird in einem Objekt des Typs IReceivedSubmission.

ClientFactory.GetSubscriberClient(...)

Die Beschreibung zu dieser Methode finden Sie hier.

GetAvailableSubmissionsAsync()

Liefert eine Liste der verfügbaren Submissions zurück.

RequestSubmissionAsync(submissionId)

Hiermit wird die Submission abgerufen und im Subscriber gespeichert. Der Rückgabewert der Methode ist IReceivedSubmission.

Methoden der Klasse Submission

Das folgende Flussdiagramm zeigt die Schritte, die erforderlich sind, um eine Einreichung mit ihren Anhängen aus einem Objekt des Typs IReceivedSubmission zu lesen.

GetData()

Liefert die Fachdaten als String zurück.

GetAttachmentsAsync()

Gibt eine Liste mit den Attachments der Submission zurück. Die Attachments können so geprüft werden.

AcceptSubmissionAsync()

Akzeptiert die Submission und löscht die Submission, die auf dem Server (im Zustelldienst von FIT-Connect) gespeichert ist.

RejectSubmissionAsync()

Weist die Submission zurück.

Methoden des Interfaces IReceivedSubmission

GetDataMimeType()

Gibt den MimeType der Daten zurück.

GetData()

Liefert die Daten der Einreichung.

Fachausdrücke erklärt

Sie finden hier eine Übersicht über wichtige Fachausdrücke mit Erklärungen.