Aktivieren Sie Ihre Webanwendungen mit der OutgoingMessage-Klasse

In der heutigen digitalen Welt ist eine reibungslose und intuitive Benutzererfahrung der Schlüssel zum Erfolg jeder Webanwendung. Ein entscheidender Teil dieses Erlebnisses besteht darin, den Benutzern einen einfachen Zugang zu verschiedenen Ressourcen zu ermöglichen – seien es Dokumente, Bilder oder andere Datentypen. Um dies zu ermöglichen, muss Ihr Server verschiedene Content-Formate effizient verwalten und bereitstellen.

 

Mit der neuen REST-Server-Funktion von 4D ist die Verwaltung verschiedener Inhalte jetzt einfacher denn je. Bisher konnte der REST-Server nur Skalar-, Entitäts- oder Entitätsauswahldaten zurückliefern. Jetzt kann er direkt vollständige Webinhalte liefern – Inhalte, die ein Browser verarbeiten kann.

 

Das Herunterladen von Dateien oder der Empfang von Binärdaten vom REST-Server ist jetzt dank der neuen Klasse OutgoingMessage ganz einfach. Mit ihr können Sie die Antworten leicht an Ihre Bedürfnisse anpassen.

 

Lesen Sie weiter, um zu erfahren, wie die OutgoingMessage-Klasse Ihre Anwendung verbessern kann!

 

 

HDI_OutGoingMessageClass

 

Aufruf einer exponierten Funktion auf dem REST-Server

 

Kurze Erinnerung: ORDA-Datenmodellfunktionen und Singleton-Funktionen sind als REST-APIs aufrufbar. Um Ihr Gedächtnis aufzufrischen, lesen Sie diesen Blogbeitrag und diesen.

 

Bisher konnte der REST-Server verschiedene Ergebnistypen – Skalare, Entitäten oder Entitätsauswahlen – innerhalb eines Objekts zurückgeben, das die Eigenschaft result verwendet.

 

Beispiel

 

Dies ist die Funktion getSomeInfo() für die Klasse Datastore.

 

exposed Function getSomeInfo() : Text
	return "This is the info"

 

Und hier ist das Ergebnis, wenn sie mit der Anfrage /rest/$catalog/getSomeInfo aufgerufen wird:

 

{
    "result": "This is the info"
}

 

4D Web Befehle können in solchen Funktionen nicht verwendet werden, daher ist die neue OutgoingMessage Klasse einen großen Vorteil mit sich bringt.

 

Die neue OutgoingMessage Klasse

 

Die ORDA-Datenmodell- und Singletons-Funktionen können nun eine Objektinstanz dieser neuen OutgoingMessage Klasse zurückgeben.

 

Solche Objekte werden von jedem Browser direkt als Webinhalt behandelt.

 

So können Sie Ihren Endbenutzern Funktionen wie das Herunterladen von Dateien und Bildern und den Empfang beliebiger Inhaltstypen über einen Browser vorschlagen.

 

Dies ist die JSON-Darstellung einer solchen Objektinstanz der OutgoingMessage Klasse.

 

 

Beispiel

 

In diesem Beispiel wird die Funktion getFile() in der Klasse Datastore implementiert. Der Zweck ist die Rückgabe der Datei testFile.pdf als Antwort auf die Anfrage.

 

Es wird eine Objektinstanz der OutgoingMessage Klasse wird erzeugt.

 

Der Body enthält den binären Inhalt der Datei testFile.pdf und eine Kopfzeile, die angibt, dass der Inhaltstyp festgelegt ist.

 

exposed onHTTPGet Function getFile() : 4D.OutgoingMessage
	
var $result:=4D.OutgoingMessage.new()
var $file:=File("/RESOURCES/testFile.pdf")
	
$result.setBody($file.getContent())  // This is binary content
$result.setHeader("Content-Type"; "application/pdf")
return $result

 

Die Klasse OutgoingMessage Klasse enthält drei Eigenschaften, die Sie je nach Bedarf füllen können:

 

    • header: Setzen Sie einen beliebigen HTTP-Header, den der Client verarbeiten muss(z. B. content-type, um den Typ des Body-Inhalts anzugeben)

 

    • body: Legen Sie den Inhalt fest, den Sie als Antwort auf die Anfrage senden möchten. Es kann ein String oder ein Blob sein(z. B. eine Datei, ein Dokument oder ein Bild als binärer Inhalt).

 

    • Status: Setzen Sie einen beliebigen HTTP-Statuscode entsprechend dem Ergebnis der erfolgten Anfrage. Dadurch erhält der Client Informationen darüber, wie die Anfrage verlaufen ist (z. B. Status 403, wenn die Anfrage abgelehnt wurde). Der Standardwert ist 200.

 

 

 

N.B. Die Eigenschaften body und status können mit dem Operator := oder mit dem entsprechenden setBody() / setStatus() Funktion beeinflusst werden.

 

Erleichterung des Aufrufs von Funktionen auf dem Restserver

 

das neue onHTTPGet-Schlüsselwort für Funktionen

 

Bislang mussten die Funktionsaufrufe (von ORDA-Datenmodellklassen und Singletons) über den REST-Server mit einem POST-Verb erfolgen. Dies geschah aus Sicherheitsgründen, um zu vermeiden, dass sensibler Code durch eine so einfache Aktion wie das Klicken auf einen Link ausgeführt wird.

 

Da POST nicht immer der gewünschten Benutzererfahrung entspricht, können diese Funktionen auch mit einem GET-Verb aufgerufen werden, d . h. durch Eingabe einer URL in einem Browser.

 

Verwenden Sie dazu das neue onHTTPGet Schlüsselwort für diese Funktion. Wenn dieses Schlüsselwort auf eine Funktion angewendet wird, ist diese Funktion auch mit einem GET-Verb aufrufbar!

 

Beispiel

 

exposed onHTTPGet Function getSomeInfo() : 4D.OutgoingMessage

 

N.B. Da diese Art des Aufrufs eine leicht angebotene Aktion ist, muss der Entwickler sicherstellen, dass in solchen Funktionen keine sensiblen Aktionen durchgeführt werden.

 

Übergabe von Parametern

 

Parameter können mit dem Parameter $params an die Funktion übergeben werden (muss in eine Sammlung eingeschlossen sein).

 

Beispiel

 

In diesem Beispiel wird die Funktion getThumbnail() der Datenklasse Products aufgerufen (um ein Miniaturfoto eines bestimmten Produkts zu erhalten).

 

Sie erhält den Produktnamen und die erforderliche Breite und Länge.

 

IP:port/rest/Products/getThumbnail?$params='["Yellow Pack",200,200]'

 

Weitere Informationen zur Übergabe von Parametern beim Aufruf einer Funktion finden Sie in der Dokumentation.

 

Ein vollständiges Beispiel

 

Hier ist der Anwendungsfall dieses Beispiels: Einem Endbenutzer wird ein Link zum Herunterladen des Benutzerhandbuchs eines ausgewählten Produkts vorgeschlagen, wobei mehrere Formate verfügbar sind.

 

Die Anfrage hinter dem Link lautet: IP:port/rest/Products/getUserManual?$params='[1, „pdf“]‘

 

Die ausgewählte Produkt-ID (1) wird als Parameter übergeben und das gewünschte Format (pdf).

 

Die Funktion getUserManual() der Datenklasse Products wird aufgerufen. Sie erhält die Produkt-ID und das Format als Parameter.

 

Das entsprechende Dokument wird abgerufen. Sein binärer Inhalt wird als Body in die Antwort mit dem entsprechenden Inhaltstyp eingefügt.

 

exposed onHTTPGet Function getUserManual($productId : Integer; $type : Text) : 4D.OutgoingMessage
	
var $file : 4D.File
var $response:=4D.OutgoingMessage.new()
var $doc:="/RESOURCES/User manuals/product_"+String($productId)

Case of 
	: ($type="pdf")
		$file:=File($doc+".pdf")
                $response.setBody($file.getContent()) // This is binary content 
		$response.setHeader("Content-Type"; "application/pdf")
			
	: ($type="jpeg")
		$file:=File($doc+".jpeg")
                $response.setBody($file.getContent()) // This is binary content 
		$response.setHeader("Content-Type"; "image/jpeg")
End case 
	
return $response

 

 

 

Hier ist das Szenario in einem Browser wiedergegeben:

 

blank

 

 

 

Probieren Sie es selbst aus

 

Laden Sie den HDI herunter, um diese neue Funktion zu erforschen, und lesen Sie die Dokumentation, um weitere Einzelheiten über die Verwendung der OutgoingMessage Klasse in Ihren Webanwendungen.

Avatar
- Product Owner - Marie-Sophie Landrieu-Yvert ist seit 2017 als Product Owner im 4D Produktteam tätig. Als Product Owner ist sie für das Schreiben der User Stories und deren Umsetzung in funktionale Spezifikationen zuständig. Ihre Aufgabe ist es auch, sicherzustellen, dass die Implementierung der Funktionen den Anforderungen des Kunden entspricht. Marie-Sophie ist Absolventin der ESIGELEC Ingenieurschule und begann ihre Karriere als Ingenieurin bei IBM im Jahr 1995. Sie nahm an verschiedenen Projekten teil (Wartungs- oder Build-Projekte) und arbeitete als Cobol-Entwicklerin. Dann arbeitete sie als UML-Designerin und Java-Entwicklerin. In letzter Zeit bestand ihre Hauptaufgabe darin, funktionale Anforderungen zu analysieren und zu schreiben sowie Geschäfts- und Entwicklungsteams zu koordinieren.