Durch die Teilnahme am Adventskalender als IT-Mitglied des Unternehmens, das den Arbeitsplatz gewechselt hat, Ich werde zum ersten Mal einen Artikel über Qiita veröffentlichen! Seit ich meinen Job gewechselt habe, habe ich Apps mit Outsystems entwickelt. Ich möchte mitteilen, was ich im Entwicklungsprozess nicht finden konnte.
Dieses Mal werde ich vorstellen, wie die asynchrone Verarbeitung in Outsystems implementiert wird.
Ich werde zum ersten Mal posten, also werde ich mich vorstellen. Zuvor arbeitete ich ungefähr 7 Jahre als SE, die in verschiedenen Projekten mit ungefähr 30 SIern ansässig ist. Zu dieser Zeit entwickelte ich in Java und C # und führte auch vorgelagerte Prozesse wie Anforderungsdefinition und Design durch. Von dort wechselte ich den Job zu einem mit dem Ausland verbundenen Personalunternehmen und wurde eine interne SE. Derzeit entwickeln wir hauptsächlich Apps zur Verbesserung der internen Geschäftseffizienz mit Outsystems.
--Was ist asynchrone Verarbeitung?
Was ist überhaupt asynchrone Verarbeitung? Ich werde es denen erklären, die sagen. Ich dachte, aber es gab einen Artikel, der es erklärte, also beziehen Sie sich bitte darauf. https://qiita.com/kiyodori/items/da434d169755cbb20447
Wenn Sie beispielsweise eine Schaltfläche auf einer Webseite drücken und es lange dauert, bis der Bildschirm angezeigt wird Die Benutzerfreundlichkeit ist also nicht gut Dies bedeutet, dass die Verarbeitung, die nicht auf das Verarbeitungsergebnis warten muss, asynchron ausgeführt wird!
In Java neu eine Klasse, die Thread erbt, oder eine Klasse, die Runnable implementiert Es scheint durch Aufrufen der Startmethode realisiert zu werden, Ich konnte nicht herausfinden, wie ich es mit Outsystems erreichen kann, also wollte ich es teilen.
Gehen wir zum Hauptthema!
Für die Client-Verarbeitung können Sie Javascript setTimeout verwenden. Zum Beispiel so.
Was das obige Bild tut Überprüfen Sie den Akkustatus Ihres Smartphones oder Tablets und senden Sie eine Warn-E-Mail, wenn der Akku fast leer ist Ich erstelle eine Client-Aktion namens NotifyBatteryStatus Ich rufe es mit setTimeout auf.
setTimeout($actions.NotifyBatteryStatus($parameters.Level, $parameters.IsPlugged), 0);
Das erste Argument von setTimeout ist die Aktion (mit Argument), die Sie asynchron verarbeiten möchten.
Das zweite Argument ist, wie viele Millisekunden ausgeführt werden sollen. Dieses Mal möchte ich es sofort ausführen, also setze ich es auf 0.
Da das Senden von E-Mails keine andere Wahl hat, als eine Serveraktion aufzurufen, dauert es einige Zeit, sie über das Netzwerk zu verarbeiten. Ich musste mir also das Verarbeitungsergebnis nicht ansehen Ich versuche es asynchron auszuführen, einschließlich des Teils, der bestimmt, ob eine E-Mail gesendet werden soll.
Wenn Sie es also in der Client-Verarbeitung asynchron machen möchten, können Sie setTimeout verwenden! Dies scheint bald herauszukommen, wenn Sie Erfahrung mit Javascript haben.
Es ist übrigens leicht zu erreichen, dass die Client-Verarbeitung mit Javascript erfolgen kann. Die Implementierungsmethode in der Serververarbeitung ist für Outsystems einzigartig und die Untersuchung hat lange gedauert. Zusammenfassend gibt es also zwei Möglichkeiten!
Timer ist ein Batch-Prozess, der gestartet oder manuell ausgeführt werden soll, nicht wahr? Ich fühle mich. Sie können diesen Timer über eine Serveraktion aufrufen.
So was Sie können den Timer-Prozess aufrufen, indem Sie Wake ~ unter dem Timer in die Serveraktion ziehen und dort ablegen. Es funktioniert also asynchron mit der Serveraktion, die Sie ausführen. Wenn Sie Wake ~ aufrufen, wird es nicht sofort ausgeführt, sondern nach einigen Sekunden.
Die Schwierigkeit bei der asynchronen Verarbeitung im Timer besteht jedoch darin, dass Parameter nicht übergeben werden können. Die nächste Lösung besteht darin, es zu lösen.
Haben Sie jemals Process verwendet? Ich war nicht .. Ich hatte das Gefühl, ich könnte es so gebrauchen.
Sie können Launch ~ of Process über die Serveraktion aufrufen und das Argument angeben. Entität ist nicht möglich, aber BasicType wie Text and Integer und EntityIdentifier können als Argumente verwendet werden. Übergeben Sie also den EntityIdentifier als Argument und Es ist möglich, Daten von Entity abzurufen und in Process zu verarbeiten.
Aus diesem Grund habe ich die Implementierung der asynchronen Verarbeitung in Outsystems vorgestellt. Vor kurzem hat Saas verschiedene APIs veröffentlicht, aber es braucht Zeit, um sie mit REST oder SOAP aufzurufen, also braucht es Zeit. Ich denke, es ist üblich, solche Prozesse asynchron aufzurufen Ich hoffe, Sie können sich darauf beziehen!
Recommended Posts