SAP資格過去問ならSAPnavi

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

SAP過去問 (SAP Exam)

Example: Conditional Handling

使用する

条件付き処理を使用するRESTサービスの説明については、条件付き処理のセクションで詳しく説明しています。このセクションでは、この例で使用される条件付き処理の実装についてのみ説明します。

プロセス

HTTP ETagに基づいて条件付き処理を提供するための処理クラスを有効にするには、インスタンス属性MV_CONDITIONAL_HANDLINGを値ABAP_TRUE(実際にはハンドラーの基本クラスCL_REST_RESOURCEのデフォルト値)に設定します。独自の条件付き処理を実装するには、メソッドGET_CONDIGIONAL_INFOをハンドラークラスで再定義する必要があります。そうしないと、ETagの読み取りのためにGETメソッドが暗黙的に呼び出されます。ただし、これにより、返されるデータが取得され、パフォーマンスが低下する可能性があります。

条件付き情報メソッドのシグネチャは、条件付きリクエストを処理するためにRESTライブラリに必要な値を提供します。

            * <SIGNATURE>---------------------------------------------------------------------------------------+* | Instance Protected Method CL_REST_SAMPLE_CAR->GET_CONDITIONAL_INFO* +-------------------------------------------------------------------------------------------------+* | [--->] IV_METHOD                      TYPE        STRING* | [<---] EV_EXISTING                    TYPE        ABAP_BOOL* | [<---] EV_STATUS                      TYPE        I* | [<---] ES_ETAG                        TYPE        REST_ETAG_S* | [<---] EV_MODIFICATION_DATE           TYPE        TIMESTAMP* | [<---] EV_GET_RESPONSE                TYPE        ABAP_BOOL* +--------------------------------------------------------------------------------------</SIGNATURE>         

メソッドのパラメーターは次のとおりです。

  • IV_METHOD:現在処理されているリクエストのHTTPメソッド。

  • EV_EXISTING:ABAP_TRUEが返される場合は、要求されたリソースが見つかったことを示します。POST呼び出しでは、このパラメータは常にABAP_FALSEに設定されます。

  • EV_STATUS:指定されたHTTPメソッドに基づくHTTP応答コードと、クライアント要求によって提供されたリソース識別情報。

  • ES_ETAG:読み取りが成功した場合の、要求されたリソースのETag値が含まれます。

  • EV_MODIFICATION_DATA:要求されたリソースの変更日が含まれます。

  • EV_GET_RESPONSE:ABAP_TRUEを使用して、ETag処理中に応答がすでに作成されていることを示します。つまり、RESTライブラリは、クラスの応答メンバーに応答がすでに設定されていることを想定しています。この処理の背後にある意図は、条件付き処理とデータ取得が強く結びついているため、後続のデータ読み取りまたは変更呼び出しをライブラリーによって保存できることです。ETag処理とリソースデータにこのような厳密な概念リンクがなく、データアクセスがより複雑な場合は、このパラメータの戻り値をABAP_FALSEに設定して、結果のデータが準備されていないことをRESTライブラリに示す必要があります。このメソッドでの条件付き処理。

このメソッドの詳細については、条件付き処理の実装を参照してください。

この例で使用される条件付き処理の実装は次のとおりです。

            method get_conditional_info.  data:        lt_etag type rest_etag_t,        lv_etag_in type string.* -1- set default return  ev_existing = abap_false.  ev_status = cl_rest_status_code=>gc_server_error_internal.  clear: es_etag, ev_modification_date.  ev_get_response = abap_false.* -2- conditional handling based on HTTP methods  case iv_method.    when if_rest_message=>gc_method_get or         if_rest_message=>gc_method_put or         if_rest_message=>gc_method_delete.      get_etag_for_request( importing es_etag = es_etag ev_modification_date = ev_modification_date ev_status = ev_status ).      if ev_status <> cl_rest_status_code=>gc_success_ok.        return.      endif.      ev_existing = abap_true.       " requested resource found      ev_get_response = abap_false.  " no response generated in this call    when others.      ev_status = cl_rest_status_code=>gc_client_error_meth_not_allwd.  endcase.endmethod.         

サポートされているHTTPメソッド(GET、PUT、DELETE)の場合、次のメソッドGET_ETAG_FOR_REQUESTは、要求されたリソースの現在のETagを返します。実際のETag計算は、要求された自動車リソースの変更日に基づいています。

            method get_etag_for_request.  data:        lv_etag_value type string,        lv_updated type tzntstmpl,        lv_id type i.* -1- get ID for requested resource from request;*     there is no need for checking for digits in the 'ID':*     the template matching already filtered out any non-integer values  lv_id = mo_request->get_uri_attribute( iv_name = 'ID' ).* -2- get 'updated' information for requested resource  select single update_timestamp from r_car    into lv_updated    where id = lv_id.* -3- set return  if sy-subrc <> 0.    clear es_etag.    ev_status = cl_rest_status_code=>gc_client_error_not_found.  else.    es_etag-tag = get_etag( lv_updated ).    es_etag-weak = abap_true.    ev_status = cl_rest_status_code=>gc_success_ok.    ev_modification_date = lv_updated.  endif.endmethod.         

メソッドGET_ETAGは、ETag値の単純なフォーマットを実行するため、ここではあまり重要ではありません。この例のすべてのETagには、弱いフラグが付けられています(条件付き処理を参照)。

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