SAP資格過去問ならSAPnavi

NoteやStripe決済で安全にSAP過去問を購入することができます。
領収書発行可能 / 即時入手可能

SAP過去問 (SAP Exam)

Example program: Executing an HTTP Request

使用する

次のABAPプログラムは、HTTPリクエストを実行します。テストの目的では、コールの宛先は送信システム自体であるため、アプリケーションサーバABAPはクライアントロールとサーバロールの両方で使用されます。

                                        report HTTP_Test.                    * data declarations                    data: client type ref to if_http_client.                                                                

次のパラメータを入力する必要があります。

                                        data: host type string value = 'host.wdf.sap-ag.de',                    service type string value = '8080',                    path type string value = '/sap/public/ping',                    errortext type string. "used for error handling                                            

ステップ1

これで、タイプCL_HTTP_CLIENTのオブジェクトが作成されました。これを行うには、2つの可能な手順があります。

  • あるケースでは、作成メソッドが呼び出されます。ここでは、必要なホストとポートを入力する必要があります。また、プロキシ設定を入力することもできます。これは、トランザクションSICFで行われたすべての構成をオーバーライドします(プロキシの構成も参照)。

  • その他の場合、トランザクションSM59で維持された宛先が使用されます(方法create_by_destination)。ここで指定する必要があるのは、宛先とクライアントの名前だけです。どちらの場合も、例外(ここには表示されていません)を定義し、最後のエラーコードを照会する必要があります。

オブジェクトクライアントすべてのデータ(要求、応答、ヘッダーフィールドなど)にアクセスするために使用できます。

このスキームは、HTTPとHTTPSのどちらを使用するかを決定します。

* create HTTP client object(s)

                                            call method cl_http_client=>create                      exporting host = host_str                      service = service_str                      proxy_host = proxy_host                      proxy_service = proxy_service                      scheme = scheme                      importing client = client                      exceptions                      argument_not_found = 1                      internal_error = 2                      plugin_not_active = 3                      others = 4.                                                 

                                            call method cl_http_client=>create_by_destination                      exporting destination = dest                      importing client = client                      exceptions                      destination_not_found = 1                      internal_error = 2                      argument_not_found = 3                      destination_no_authority = 4                      plugin_not_active = 5                      others = 6.                                                 

                                            if sy-subrc <>0.                      write: / 'Create failed, subrc = ', sy-subrc.                      exit.                      endif.                                                 

次に、リクエストのヘッダーフィールドが設定されます。HTTPリクエストメソッドのGETへの設定はオプションです。

パス全体が宛先(SM59)を使用してパスプレフィックスとして指定されていない限り、リクエストURIを設定する必要がありますここではメソッドを使用しますset_request_uriクラスのcl_http_utility

                                            * set http method GET                      call method client-&gtrequest-;&gtset_method;(                      if_http_request=&gtco_request_method_get; ).                      * set protocol version                      if protocol = 'HTTP/1.0'.                      client-&gtrequest-;&gtset_version;(                      if_http_request=&gtco_protocol_version_1_0; ).                      else.                      client-&gtrequest-;&gtset_version;(                      if_http_request=&gtco_protocol_version_1_1; ).                      endif.                      * set request uri (/&ltpath;>[?&ltquerystring;>])                      cl_http_utility=&gtset_request_uri;( request = client-&gtrequest;                      uri = uri ).                                                 

ステップ2

次に、制御ブロック内の任意の数のフィールドに入力できます。

追加オプション

  • 属性を無効にすることができますPROPERTYTYPE_LOGON_POPUPPROPERTYTYPE_REDIRECTPROPERTYTYPE_ACCEPT_COMPRESSデフォルト値はCO_ENABLED(CO_DISABLEDに設定)です。

  • 設定できますPROPERTYTYPE_ACCEPT_COOKIE異なる値に。デフォルト値はCO_DISABLEDですが、値CO_ENABLED(常にCookieを受け入れる)、CO_PROMPT(Cookieを受信したときにダイアログボックスを送信してCookieを受け入れるかどうかを尋ねる)およびCO_EVENT(インターフェイスIF_HTTP_CLIENTのイベントEVENTKIND_HANDLE_COOKIEを使用したCookie処理)も使用できます。

  • PROPERTYTYPE_ACCEPT_COMPRESSを値CO_DISABLEDに設定して、パートナーがデータを非圧縮形式で送信できるようにすることができます。

  • リクエストを送信する前に、インターフェースIF_HTTP_CLIENTのAUTHENTICATE()メソッドを使用して必要なログオンデータを入力することもできます

ステップ3

これでリクエストが送信されます。

                                            * Send                      call method client-&flt;send                      exporting timeout = timeout                      exceptions http_communication_failure = 1                      http_invalid_state = 2                      http_processing_failed = 3                      others = 4.                      if sy-subrc <&flt; 0.                      call method client-&flt;get_last_error                      importing code = subrc                      message = errortext.                      write: / 'communication_error( send )',                      / 'code: ', subrc, 'message: ', dummy.                      exit.                      endif.                                                 

ここで、最後のエラーは、を使用して再度クエリする必要がありますclient-> get_last_error

ステップ4

これで応答が受信され、クライアントオブジェクトに応答データが入力されます。

                                            * receive                      call method client->receive                      exceptions http_communication_failure = 1                      http_invalid_state = 2                      http_processing_failed = 3                      others = 4.                      if sy-subrc <> 0.                      call method client->get_last_error                      importing code = subrc                      message = errortext.                      write: / 'communication_error( receive )',                      / 'code: ', subrc, 'message: ', dummy.                      exit.                      endif.                                                 

例外とエラークエリもここに挿入する必要があります。

接続が使用されなくなった場合は、次のようにクライアントオブジェクトと接続を閉じる必要があります。

                                            * close                      call method client->close                      exceptions http_invalid_state = 1                      others = 2.                                                 

成功したテストを文書化するために、この時点で出力ルーチンが呼び出されます。

                                            * output                      perform write_document.                                                 

タイトルとURLをコピーしました