{"id":2726,"date":"2022-12-12T14:58:19","date_gmt":"2022-12-12T13:58:19","guid":{"rendered":"https:\/\/www.armonie.group\/ibm-i-dynamische-unterdateien\/"},"modified":"2023-10-04T10:30:08","modified_gmt":"2023-10-04T08:30:08","slug":"ibm-i-dynamische-unterdateien","status":"publish","type":"post","link":"https:\/\/www.armonie.group\/de\/ibm-i-dynamische-unterdateien\/","title":{"rendered":"IBM i : Dynamische Unterdateien"},"content":{"rendered":"[et_pb_section fb_built=&#8220;1&#8243; _builder_version=&#8220;4.14.8&#8243; background_color=&#8220;#0c8dc9&#8243; global_colors_info=&#8220;{}&#8220;][et_pb_row _builder_version=&#8220;3.25&#8243; background_size=&#8220;initial&#8220; background_position=&#8220;top_left&#8220; background_repeat=&#8220;repeat&#8220; global_colors_info=&#8220;{}&#8220;][et_pb_column type=&#8220;4_4&#8243; _builder_version=&#8220;3.25&#8243; custom_padding=&#8220;|||&#8220; global_colors_info=&#8220;{}&#8220; custom_padding__hover=&#8220;|||&#8220;][et_pb_text _builder_version=&#8220;4.14.8&#8243; text_font_size=&#8220;20px&#8220; header_font=&#8220;Poppins|700|||||||&#8220; header_text_align=&#8220;center&#8220; header_text_color=&#8220;#FFFFFF&#8220; header_font_size=&#8220;43px&#8220; header_2_font=&#8220;Poppins||||||||&#8220; header_2_text_align=&#8220;center&#8220; header_2_text_color=&#8220;#01013A&#8220; background_color=&#8220;RGBA(255,255,255,0)&#8220; background_size=&#8220;initial&#8220; background_position=&#8220;top_left&#8220; background_repeat=&#8220;repeat&#8220; custom_margin=&#8220;||-16px||false|false&#8220; custom_padding=&#8220;30px|30px||30px|false|false&#8220; global_colors_info=&#8220;{}&#8220;]<h2><b>ID-INFO-Blog<\/b><\/h2>\n<p><strong><\/strong><\/p>[\/et_pb_text][et_pb_text _builder_version=&#8220;4.14.8&#8243; text_font_size=&#8220;20px&#8220; header_font=&#8220;Poppins|700|||||||&#8220; header_text_align=&#8220;center&#8220; header_text_color=&#8220;#FFFFFF&#8220; header_font_size=&#8220;43px&#8220; background_color=&#8220;RGBA(255,255,255,0)&#8220; background_size=&#8220;initial&#8220; background_position=&#8220;top_left&#8220; background_repeat=&#8220;repeat&#8220; custom_padding=&#8220;30px|30px|30px|30px|false|false&#8220; global_colors_info=&#8220;{}&#8220;]<h2 class=\"post_link\">IBM i: Dynamische Unterdateien<\/h2>\n<p><strong><!-- \/wp:post-content --><\/strong><\/p>[\/et_pb_text][\/et_pb_column][\/et_pb_row][\/et_pb_section][et_pb_section fb_built=&#8220;1&#8243; _builder_version=&#8220;3.22&#8243; global_colors_info=&#8220;{}&#8220;][et_pb_row _builder_version=&#8220;3.25&#8243; background_size=&#8220;initial&#8220; background_position=&#8220;top_left&#8220; background_repeat=&#8220;repeat&#8220; global_colors_info=&#8220;{}&#8220;][et_pb_column type=&#8220;4_4&#8243; _builder_version=&#8220;3.25&#8243; custom_padding=&#8220;|||&#8220; global_colors_info=&#8220;{}&#8220; custom_padding__hover=&#8220;|||&#8220;][et_pb_text _builder_version=&#8220;4.14.8&#8243; text_text_color=&#8220;#000000&#8243; text_font_size=&#8220;13px&#8220; text_line_height=&#8220;1.4em&#8220; background_color=&#8220;rgba(13,189,224,0.39)&#8220; background_size=&#8220;initial&#8220; background_position=&#8220;top_left&#8220; background_repeat=&#8220;repeat&#8220; custom_padding=&#8220;30px|30px|30px|30px|false|false&#8220; global_colors_info=&#8220;{}&#8220;]<p class=\"wsc_post_summary\"><strong>Sie haben unseren vorherigen Artikel \u00fcber die statische Unterdatei gelesen. Sehen wir uns nun die sogenannte &#8222;Dynamische Version&#8220; an.<\/strong><\/p>\n<p><strong><!-- \/wp:paragraph --><\/strong><\/p>[\/et_pb_text][et_pb_text _builder_version=&#8220;4.14.8&#8243; _module_preset=&#8220;default&#8220; text_text_color=&#8220;#000000&#8243; header_2_font=&#8220;Poppins||||||||&#8220; header_2_text_color=&#8220;#000000&#8243; header_3_font=&#8220;Poppins|300|||||||&#8220; header_3_text_color=&#8220;#000000&#8243; global_colors_info=&#8220;{}&#8220;]<p>Heutzutage st\u00fctzen sich Webdienste auf das Hypertext Transfer Protocol (HTPP), um Informationen zu transportieren. Die Verwendung dieses Standards hat den enormen Vorteil, dass er enorm viele Probleme bei der Konnektivit\u00e4t zwischen unseren beiden Anwendungen vermeidet.<\/p>\n<p>Webdienste basieren auf einem Austausch vom Typ Client\/Server. In der Praxis bleibt die Anwendung, die den Dienst bereitstellt (h\u00e4ufig wird gesagt, dass sie den Dienst exponiert), auf m\u00f6gliche, von den Clients ausgel\u00f6ste Anfragen h\u00f6ren. Die Anfrage wird vom Server interpretiert, verarbeitet und die Antwort in einer f\u00fcr den Client verst\u00e4ndlichen Form an die Clientanwendung weitergeleitet.<\/p>\n<p>&nbsp;<\/p>\n<p>Es gibt 2 gro\u00dfe Familien von Webdiensten:<\/p>\n<ul>\n<li>Die Webdienste SOAP: Simple Object Access Protocol<\/li>\n<li>REST-Webdienste: Representational State Transfer<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>Die ersten, basieren auf dem gleichnamigen Protokoll. Die erste Version, die von Microsoft und iBM definiert wurde, ist 23 Jahre alt und wurde dann durch eine Empfehlung des W3C zum Standard. Das Protokoll st\u00fctzt sich vollst\u00e4ndig auf die XML-Sprache, um den Austausch zwischen Clients und Servern formal zu beschreiben. Dieser Formalismus (\u00fcber XML-Dokumente namens WSDL) hat den Vorteil, dass er eine implizite Dokumentation liefert, wenn man diese Art von Diensten nutzt. Leider hat die Familie einige Nachteile: Da die XML-Sprache besonders wortreich ist, kann die Nutzung dieser Art von Webdiensten schnell kompliziert werden. Andererseits impliziert der Formalismus, dass die Clients und der Server stark gekoppelt sind, was in einem SOA-Ansatz, in dem immer mehr Flexibilit\u00e4t angestrebt wird, nicht unbedingt w\u00fcnschenswert ist.<\/p>\n<p>&nbsp;<\/p>\n<p>Diese Nachteile haben die Entstehung der Familie der REST-Webdienste beg\u00fcnstigt. Diese basieren auf den architektonischen Konzepten, die im Web verwendet werden, um entfernte Ressourcen in Textform zu manipulieren. Im Gegensatz zu SOAP-Webdiensten beschr\u00e4nkt sich die Familie der REST-Webdienste nicht nur auf das XML-Format, um Informationen zwischen den beiden Anwendungsprogrammen Client \/ Server auszutauschen: Formate wie JSON werden heute allgemein verwendet. Um entfernte Ressourcen zu manipulieren, verwenden diese Webdienste die http-Methoden : POST, GET, PUT, DELETE, &#8230; die an das CRUD-Entwicklungsmodell ankn\u00fcpfen, weshalb diese Webdienste h\u00e4ufig verwendet werden, um vollst\u00e4ndige APIs (Application Programming Interface) zu erstellen, die mit den Elementen einer Anwendung interagieren.<\/p>\n<p>&nbsp;<\/p>\n<p>Aber was ist mit unserem IBM i? Kann auch sie sich in diese verteilten Umgebungen einf\u00fcgen?<\/p>\n<p>&nbsp;<\/p>\n<p>Ich kann Sie gleich beruhigen, unsere Lieblingsplattform verf\u00fcgt \u00fcber enorm viele Tools, um Webdienste auszustellen oder zu konsumieren. Wie viele andere Plattformen k\u00f6nnen wir diese Dienste auf unterschiedliche Weise implementieren und sie unseren verschiedenen Kunden zur Verf\u00fcgung stellen.<\/p>\n<p>&nbsp;<\/p>\n<p>Um dies zu veranschaulichen, wollen wir uns in die Situation einer bestehenden Anwendung versetzen, die in RPGIV entwickelt wurde.<\/p>\n<p>&nbsp;<\/p>\n<p>Dazu erstellen wir uns zun\u00e4chst eine Umgebung mit einigen Tabellen und Daten. Zu unserem Gl\u00fcck hat uns IBM daf\u00fcr eine SQL Stored Procedure in einer Zeile zur Verf\u00fcgung gestellt:<\/p>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td><strong>CALL QSYS.CREATE_SQL_SAMPLE(&#8218;RHDB&#8216;);<\/strong><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>\u00d6ffnen wir also unser Werkzeug zur Ausf\u00fchrung von SQL-Skripten in ACS und starten wir es.<\/p>\n<p><img decoding=\"async\" title=\"\" src=\"https:\/\/www.notos.fr\/Portals\/0\/1_1.jpg\" alt=\"\"><\/p>\n<p>&nbsp;<\/p>\n<p>Wie Sie vielleicht schon am Namen der erstellten Sammlung erraten haben, werden wir mit Daten aus dem Bereich der Humanressourcen arbeiten.<\/p>\n<p>&nbsp;<\/p>\n<p>Ein kurzer Blick in den Datenbank-Explorer, zeigt uns die erstellten Tabellen.<\/p>\n<p><img decoding=\"async\" title=\"\" src=\"https:\/\/www.notos.fr\/Portals\/0\/2_1.jpg\" alt=\"\"><\/p>\n<p>&nbsp;<\/p>\n<p>Werfen wir einen Blick auf die Tabelle EMPLOYEE und schreiben ein kleines Programm, um Informationen \u00fcber einen Mitarbeiter abzurufen.<\/p>\n<p><img decoding=\"async\" title=\"\" src=\"https:\/\/www.notos.fr\/Portals\/0\/3fff.jpg\" alt=\"\"><\/p>\n<p>&nbsp;<\/p>\n<p>Angenommen, wir haben ein Dienstprogramm, mit dem wir die Informationen \u00fcber einen Mitarbeiter abrufen k\u00f6nnen.<\/p>\n<pre><code>      \/if not defined(IMPORT_PROTOTYPES)<\/code> <code>        ctl-opt option ( *nodebugio : *srcstmt )<\/code> <code>          debug<\/code> <code>          nomain<\/code> <code>          pgminfo<\/code><code>(<\/code><code>*PCML<\/code><code> <\/code><code>:<\/code><code> <\/code><code>*MODULE<\/code><code>);<\/code> <code>      * Parametres SQL.<\/code> <code>        exec sql<\/code> <code>          set option commit <\/code><code>=<\/code><code> <\/code><code>*none,<\/code> <code>                     closqlcsr<\/code><code> =<\/code><code> *endmod<\/code><code>;<\/code><code>\n\n<\/code><code>      *======================================================================= *<\/code> <code>      *                                                                        *<\/code> <code>      * ATTENTION :                                                            *<\/code> <code>      *                                                                        *<\/code> <code>      * ---------------------------------------------------------------------- *<\/code> <code>      * FONCTION     : Module RH.                                              *<\/code> <code>      * DESCRIPTION  : Manipulation don\u00e9nes du personnel.                      *<\/code> <code>      *                                                                        *<\/code> <code>      * Creation ... : 25\/10\/2021   par  L. KIEFFER (Notos-Id Info)            *<\/code> <code>      * ---------------------------------------------------------------------- *<\/code> <code>      * Modification :                                                         *<\/code> <code>      * JJ\/MM\/AAAA - XXXXXX XXXXXXX - XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.     *<\/code> <code>      *                                                                        *\n      * ---------------------------------------------------------------------- *<\/code> <code>      \/endif<\/code> <code>      *----------------------------------------------------------------------<\/code> <code>      * Prototype verification sous systeme.<\/code> <code>      * ---------------------------------------------------------------------<\/code> <code>        \/\/ Information employ\u00e9.<\/code> <code>        dcl-ds MODULERH_employe template qualified;<\/code> <code>           prenom varchar(12);<\/code> <code>           nom varchar(15);<\/code> <code>           service varchar(36);<\/code> <code>        end-ds;<\/code> <code>        \/\/ Recherche d'un employ\u00e9.<\/code> <code>        dcl-pr MODULERH_rchEmp;<\/code> <code>          iNumEmp char( 6 ) const;<\/code> <code>          oInfEmp likeds ( MODULERH_employe );<\/code> <code>          oErrHTTP int(5);<\/code> <code>          oErrMsg varchar(40);<\/code> <code>        end-pr<\/code><code>;<\/code> <code>      * Fin des elements exportes.<\/code> <code>      \/if defined(IMPORT_PROTOTYPES)<\/code> <code>      \/eof<\/code> <code>      \/endif<\/code> <code>      *----------------------------------------------------------------------<\/code> <code>      * Declarations globales<\/code> <code>      * ---------------------------------------------------------------------<\/code> <code>      \/\/ ---------------------------------------------------------------------<\/code> <code>      \/\/ Recherche d'employ\u00e9.<\/code> <code>      \/\/ ---------------------------------------------------------------------<\/code> <code>        dcl-proc MODULERH_rchEmp export;<\/code> <code>          dcl-pi *n;<\/code> <code>            iNumEmp char( 6 ) const;<\/code> <code>            oInfEmp likeds ( MODULERH_employe );<\/code> <code>            oErrHTTP int(5);<\/code> <code>            oErrMsg varchar(40);<\/code> <code>          end-pi<\/code><code>;<\/code> <code>          \/\/ Recherche de l'employ\u00e9.<\/code> <code>          exec sql<\/code> <code>            Select FIRSTNME, LASTNAME, DEPTNAME<\/code> <code>            into :oInfEmp.prenom, :oInfEmp.nom, :oInfEmp.service<\/code> <code>            From EMPLOYEE<\/code> <code>            Join DEPARTMENT on DEPTNO = WORKDEPT<\/code> <code>            Where EMPNO = :iNumEmp;<\/code> <code>          if sqlCode &lt; 0;<\/code> <code>            oErrHTTP = 500;<\/code> <code>            oErrMsg = 'Erreur recherche de l''employ\u00e9.';<\/code> <code>            return;<\/code> <code>          endif;<\/code> <code>          if sqlCode = 100;<\/code> <code>            oErrHTTP = 404;<\/code> <code>            oErrMsg = 'Employ\u00e9 inconnu.';<\/code> <code>            return;<\/code> <code>          endif;<\/code> <code>          \/\/ Tout s'est bien pass\u00e9.<\/code> <code>          oErrHTTP = 200;<\/code> <code>          oErrMsg = *blanks;<\/code> <code>          return;<\/code> <code>        end-proc;<\/code><code>\n<\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>Beachten Sie die hervorgehobenen Anweisungen, wir kommen sp\u00e4ter darauf zur\u00fcck, wenn wir unseren Webdienst vorstellen.<\/p>\n<p>&nbsp;<\/p>\n<p>Um fortzufahren, werden wir einen Webservice-Server ben\u00f6tigen, auf dem unsere Dienste gehostet werden. Zu unserem Gl\u00fcck stellt uns IBM einen solchen auf der IBM i zur Verf\u00fcgung: IWS (Integrated Web Services server).<\/p>\n<p>Um darauf zuzugreifen, verwenden Sie die folgende URL: http: <a href=\"http:\/\/mon_ibm_i:2001\/HTTPAdmin\">\/\/mon_ibm_i:2001\/HTTPAdmin<\/a><\/p>\n<p>Dabei ist mein_ibm_i die IP-Adresse Ihrer Partition oder ihr DNS-Name.<\/p>\n<p>&nbsp;<\/p>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td>\n<p><strong>ACHTUNG <\/strong>: Wenn die Seite nicht angezeigt wird, ist die Webadministrationsanwendung wahrscheinlich nicht richtig gestartet.<\/p>\n<p>F\u00fchren Sie den folgenden Befehl auf einer 5250-Befehlszeile aus:<\/p>\n<p>&nbsp;<\/p>\n<p><strong>STRTCPSVR SERVER(*HTTP) HTTPSVR(*ADMIN)<\/strong><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>Identifizieren Sie sich mit einem Profil, das das Recht <strong>*IOSYSCFG<\/strong> hat.<\/p>\n<p><strong><img decoding=\"async\" title=\"\" src=\"https:\/\/www.notos.fr\/Portals\/0\/Image%2044.jpg\" alt=\"\"><\/strong><\/p>\n<p>Klicken Sie auf der neu angezeigten Seite auf den Link &#8222;Create Web Services Server&#8220; und lassen Sie sich durch den Assistenten f\u00fchren.<\/p>\n<p><img decoding=\"async\" title=\"\" src=\"https:\/\/www.notos.fr\/Portals\/0\/image%2055.png\" alt=\"\"><\/p>\n<p>&nbsp;<\/p>\n<p>Benennen Sie Ihren Server nach Belieben. Standardm\u00e4\u00dfig wird eine Apache-Instanz erstellt.<\/p>\n<p><img decoding=\"async\" title=\"\" src=\"https:\/\/www.notos.fr\/Portals\/0\/image%2066.png\" alt=\"\"><\/p>\n<p>&nbsp;<\/p>\n<p>W\u00e4hlen Sie die vom Server verwendeten Ports.<\/p>\n<p><img decoding=\"async\" title=\"\" src=\"https:\/\/www.notos.fr\/Portals\/0\/image%2077.png\" alt=\"\"><\/p>\n<p>&nbsp;<\/p>\n<p>Sie haben die M\u00f6glichkeit, den Serverjob anzupassen, indem Sie ihm einen eigenen Jobd geben.<\/p>\n<p><img decoding=\"async\" title=\"\" src=\"https:\/\/www.notos.fr\/Portals\/0\/image88.png\" alt=\"\"><\/p>\n<p>&nbsp;<\/p>\n<p>Ebenso k\u00f6nnen Sie das Benutzerprofil ausw\u00e4hlen, das f\u00fcr die Serverarbeit verwendet wird. Denken Sie daran, diesen genau zu definieren. Eine gute Idee ist es, dieses Profil auf das Eigent\u00fcmerprofil der Datenbank, mit der Sie arbeiten werden, zu setzen. Achtung, wenn Sie den Standardbenutzer QWSERVICE w\u00e4hlen, m\u00fcssen Sie diesem ein Passwort zuweisen.<\/p>\n<p><img decoding=\"async\" title=\"\" src=\"https:\/\/www.notos.fr\/Portals\/0\/image99.png\" alt=\"\"><\/p>\n<p>&nbsp;<\/p>\n<p>Best\u00e4tigen Sie schlie\u00dflich die Erstellung des Servers, indem Sie auf die Schaltfl\u00e4che &#8222;Finish&#8220; klicken.<\/p>\n<p><img decoding=\"async\" title=\"\" src=\"https:\/\/www.notos.fr\/Portals\/0\/image%20100.png\" alt=\"\"><\/p>\n<p>&nbsp;<\/p>\n<p>Da wir nun \u00fcber einen Server verf\u00fcgen, legen wir unseren ersten Dienst offen. W\u00e4hlen Sie dazu den zuvor erstellten Server aus und klicken Sie auf den Link &#8222;Manage Deployed Service&#8220;.<\/p>\n<p>Klicken Sie auf die Schaltfl\u00e4che &#8222;Manage Deployed Service&#8220;. Klicken Sie dann auf die Schaltfl\u00e4che &#8222;Deploy&#8220; (Verteilen).<\/p>\n<p><img decoding=\"async\" title=\"\" src=\"https:\/\/www.notos.fr\/Portals\/0\/111.png\" alt=\"\"><\/p>\n<p>&nbsp;<\/p>\n<p>Auf der ersten Seite des Assistenten k\u00f6nnen Sie die ausf\u00fchrbare Datei ausw\u00e4hlen, die Ihren Dienst implementiert. Seit V7.3 k\u00f6nnen Sie auch die Sprache sql verwenden, um den Dienst zu implementieren.<\/p>\n<p>Bei Implementierungen in RPG IV k\u00f6nnen nur ausf\u00fchrbare Komponenten ausgew\u00e4hlt werden (Programme und Serviceprogramme). In unserem Fall w\u00e4hlen wir unser Serviceprogramm MODULERH.<\/p>\n<p><img decoding=\"async\" title=\"\" src=\"https:\/\/www.notos.fr\/Portals\/0\/image222.png\" alt=\"\"><\/p>\n<p>&nbsp;<\/p>\n<p>Im n\u00e4chsten Bildschirm k\u00f6nnen wir einen Namen f\u00fcr die Ressource ausw\u00e4hlen. In unserem Fall nennen wir sie &#8222;Angestellte&#8220;, da wir mit Angestelltendaten umgehen.<\/p>\n<p><img decoding=\"async\" title=\"\" src=\"https:\/\/www.notos.fr\/Portals\/0\/333.png\" alt=\"\"><\/p>\n<p>&nbsp;<\/p>\n<p>Auf der folgenden Seite k\u00f6nnen wir den Zugriff auf den Webservice nur \u00fcber einen sicheren Port (\u00fcber SSL) beschr\u00e4nken. Da wir unseren http-Server nicht gesichert haben, antworten wir mit &#8222;No&#8220;.<\/p>\n<p>Ebenso k\u00f6nnen wir eine Authentifizierung f\u00fcr diesen Webdienst verlangen.<\/p>\n<p>In diesem Fall ist nur eine &#8222;grundlegende&#8220; Authentifizierung verf\u00fcgbar. In diesem Fall muss der Client im http-Header &#8222;Authorization&#8220; einen auf dem System g\u00fcltigen Benutzer und ein g\u00fcltiges Passwort angeben.<\/p>\n<p><img decoding=\"async\" title=\"\" src=\"https:\/\/www.notos.fr\/Portals\/0\/image444.png\" alt=\"\"><\/p>\n<p>&nbsp;<\/p>\n<p>Im n\u00e4chsten Schritt k\u00f6nnen Sie im Fall von Dienstprogrammen die exportierte Prozedur ausw\u00e4hlen, die den Dienst implementiert (hier modulerh_rchemp).<\/p>\n<p><img decoding=\"async\" title=\"\" src=\"https:\/\/www.notos.fr\/Portals\/0\/image555.png\" alt=\"\"><\/p>\n<p>&nbsp;<\/p>\n<p>Der Assistent wird Sie sp\u00e4ter fragen, wie er den Kunden benachrichtigen soll, dass die Ausf\u00fchrung der Dienstleistung wie geplant oder mit einem Fehler verlaufen ist. Hier k\u00f6nnen Sie auf die standardm\u00e4\u00dfigen R\u00fcckkehrcodes und Fehlermeldungen einwirken.<\/p>\n<p><img decoding=\"async\" title=\"\" src=\"https:\/\/www.notos.fr\/Portals\/0\/image666.png\" alt=\"\"><\/p>\n<p>&nbsp;<\/p>\n<p>Die n\u00e4chste Seite ist die wichtigste. Hier wird beschrieben, wie die Kunden auf Ihre Dienstleistung zugreifen werden.<\/p>\n<p>Wir k\u00f6nnen definieren:<\/p>\n<ul>\n<li>Das verwendete http-Verb (hier GET)<\/li>\n<li>Das f\u00fcr den Zugriff verwendete Url-Modell<\/li>\n<\/ul>\n<p>Dieser erm\u00f6glicht es insbesondere, festzulegen, wo unsere Parameter platziert werden, wenn sie direkt in der URL bereitgestellt werden. Die zu verwendende Syntax wird sein:<strong> \/{nom_parametre}<\/strong><\/p>\n<p>Bitte beachten Sie, dass Sie der Syntax auch einen regul\u00e4ren Ausdruck hinzuf\u00fcgen k\u00f6nnen, um die G\u00fcltigkeit des eingegebenen Parameters zu pr\u00fcfen (hier \\d+ f\u00fcr einen numerischen String mit mindestens einer Ziffer).<\/p>\n<ul>\n<li>Eine Ausgabevariable, die den http-R\u00fcckgabecode f\u00fcttert (muss in der RPG, die den Dienst implementiert, als Ganzzahl definiert werden).<\/li>\n<li>Eine alphanumerische Ausgabevariable, die die Standardfehlermeldung ersetzt.<\/li>\n<li>Die Datentypen, die als Eingabe akzeptiert werden (*Alle entsprechen allen verwalteten Typen: xml, json, Formulardaten, &#8230; =&gt; in diesem Fall muss der Client zwingend angeben, in welchem Informationstyp er liefert, damit der Server ihn versteht).<\/li>\n<li>Die zur\u00fcckgegebenen Datentypen: Das Tool erm\u00f6glicht die R\u00fcckgabe von Daten im xml- oder json-Format. Auch hier gilt: Wenn der Server beides bereitstellen kann, muss der Client angeben, welches er bevorzugt.<\/li>\n<li>Wie werden die Ein- und Ausgabedaten dargestellt: gekapselt oder Name.<\/li>\n<\/ul>\n<p>Schlie\u00dflich k\u00f6nnen Sie auf diesem Bildschirm angeben, von wo die Eingabeparameter abgerufen werden sollen. In unserem Fall der Url unter Verwendung der Kennung num (erinnern Sie sich an diese, die in der Url-Vorlage definiert ist).<\/p>\n<p><img decoding=\"async\" title=\"\" src=\"https:\/\/www.notos.fr\/Portals\/0\/777.png\" alt=\"\"><\/p>\n<p>&nbsp;<\/p>\n<p>Auf dem n\u00e4chsten Bildschirm k\u00f6nnen Sie einen bestimmten Benutzer f\u00fcr die Ausf\u00fchrung dieses Webdienstes festlegen. Das allgemeine Profil des Servers muss Zugriff auf dieses spezielle Profil des Webdienstes haben.<\/p>\n<p><img decoding=\"async\" title=\"\" src=\"https:\/\/www.notos.fr\/Portals\/0\/888.png\" alt=\"\"><\/p>\n<p>&nbsp;<\/p>\n<p>Im n\u00e4chsten Bildschirm k\u00f6nnen Sie festlegen, welche Bibliotheken der Laufzeitumgebung hinzugef\u00fcgt werden sollen.<\/p>\n<p><img decoding=\"async\" title=\"\" src=\"https:\/\/www.notos.fr\/Portals\/0\/999.png\" alt=\"\"><\/p>\n<p>&nbsp;<\/p>\n<p>Im vorletzten Bildschirm k\u00f6nnen Sie die Elemente konfigurieren, die an das Programm, das den Dienst implementiert, \u00fcbergeben werden sollen.<\/p>\n<p><img decoding=\"async\" title=\"\" src=\"https:\/\/www.notos.fr\/Portals\/0\/1000.png\" alt=\"\"><\/p>\n<p>&nbsp;<\/p>\n<p>Im letzten Bildschirm schlie\u00dflich werden die eingegebenen Elemente zusammengefasst. Wenn Sie auf die Schaltfl\u00e4che &#8222;Fertigstellen&#8220; klicken, wird der Webservice bereitgestellt und gestartet.<\/p>\n<p><img decoding=\"async\" title=\"\" src=\"https:\/\/www.notos.fr\/Portals\/0\/1010.png\" alt=\"\"><\/p>\n<p>&nbsp;<\/p>\n<p>Aber wie testet man unseren ber\u00fchmten Webservice, fragen Sie mich?<\/p>\n<p>Da der Webservice das Verb GET verwendet, wird ein einfacher Browser uns erlauben, diesen zu testen.<\/p>\n<p><img decoding=\"async\" title=\"\" src=\"https:\/\/www.notos.fr\/Portals\/0\/2020.png\" alt=\"\"><\/p>\n<p>&nbsp;<\/p>\n<p>F\u00fcr etwas komplexere F\u00e4lle haben Sie die M\u00f6glichkeit, sich an umfangreicheren Tools zu orientieren, wie :<\/p>\n<ul>\n<li>CURL (wenn Sie Befehlszeilen nicht abschrecken): Mit diesem k\u00f6nnen Sie Ihre Anfrage vollst\u00e4ndig parametrieren (Authentifizierung, Http-Header, &#8230;).<\/li>\n<li>PostMan: Ein grafisches Werkzeug, das genauso umfassend ist wie CURL.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>Ein kleines Beispiel mit PostMan: F\u00fcgen wir einen http-Header hinzu, der besagt, dass wir f\u00fcr die Antwort nur JSON w\u00fcnschen (denken Sie daran, dass unser Webservice xml oder json liefern kann).<\/p>\n<p><img decoding=\"async\" title=\"\" src=\"https:\/\/www.notos.fr\/Portals\/0\/3030.png\" alt=\"\"><\/p>\n<p>&nbsp;<\/p>\n<p>Und schon steht das &#8218;R&#8216; unserer CRUD-API, jetzt m\u00fcssen Sie &#8222;nur noch&#8220; die anderen Prozeduren erstellen, die die fehlenden Funktionen implementieren. Vergessen Sie nicht die Bedeutung der http-Verben, wenn Sie all dies einrichten :<\/p>\n<p>C =&gt; POST<\/p>\n<p>R =&gt; READ<\/p>\n<p>U =&gt; PUT<\/p>\n<p>Und D =&gt; DELETE.<\/p>\n<p>&nbsp;<\/p>\n<p>Ich hoffe, dass dieser Beitrag das Thema ein wenig kl\u00e4ren konnte. Wir sagen Ihnen bis zum n\u00e4chsten Mal Bescheid, wenn wir uns in die Rolle des Kunden und nicht des Kellners versetzen k\u00f6nnen.<\/p>\n<p>&nbsp;<\/p>\n<p><strong>Haben Sie Fragen zu Webservices oder Ihrer IBM i-Plattform? Dann kontaktieren Sie uns unter 01 88 32 12 34 oder \u00fcber das <a href=\"https:\/\/www.idinfo.eu\/CONTACT\" target=\"-blank\" rel=\"noopener\">Kontaktformular<\/a>.<\/strong><\/p>[\/et_pb_text][\/et_pb_column][\/et_pb_row][\/et_pb_section]<!-- \/wp:freeform -->","protected":false},"excerpt":{"rendered":"<p>ID-INFO-Blog IBM i: Dynamische Unterdateien Sie haben unseren vorherigen Artikel \u00fcber die statische Unterdatei gelesen. Sehen wir uns nun die sogenannte &#8222;Dynamische Version&#8220; an. Heutzutage st\u00fctzen sich Webdienste auf das Hypertext Transfer Protocol (HTPP), um Informationen zu transportieren. Die Verwendung dieses Standards hat den enormen Vorteil, dass er enorm viele Probleme bei der Konnektivit\u00e4t zwischen [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":2732,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_seopress_robots_primary_cat":"","_seopress_titles_title":"","_seopress_titles_desc":"","_seopress_robots_index":"","_et_pb_use_builder":"on","_et_pb_old_content":"","_et_gb_content_width":"","footnotes":""},"categories":[152,154],"tags":[172,176,157,155,171,156,159,158,174,169,173,175,170],"class_list":["post-2726","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-noticias-de","category-notos-de","tag-anwendung","tag-archivo-sotto-de","tag-as-400-de","tag-as400-de","tag-desarrollador-de","tag-ibmi-de","tag-ibm-power-de","tag-servidor-de-potencia-de","tag-programa-de","tag-servicio-web-de","tag-sistema-de-informacion-de","tag-sottofascicolo-dinamico-de","tag-sviluppo-de"],"_links":{"self":[{"href":"https:\/\/www.armonie.group\/de\/wp-json\/wp\/v2\/posts\/2726","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.armonie.group\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.armonie.group\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.armonie.group\/de\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.armonie.group\/de\/wp-json\/wp\/v2\/comments?post=2726"}],"version-history":[{"count":2,"href":"https:\/\/www.armonie.group\/de\/wp-json\/wp\/v2\/posts\/2726\/revisions"}],"predecessor-version":[{"id":2734,"href":"https:\/\/www.armonie.group\/de\/wp-json\/wp\/v2\/posts\/2726\/revisions\/2734"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.armonie.group\/de\/wp-json\/wp\/v2\/media\/2732"}],"wp:attachment":[{"href":"https:\/\/www.armonie.group\/de\/wp-json\/wp\/v2\/media?parent=2726"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.armonie.group\/de\/wp-json\/wp\/v2\/categories?post=2726"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.armonie.group\/de\/wp-json\/wp\/v2\/tags?post=2726"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}