前言

$ skiptokenは、アプリケーションに送信されるエントリ数を制限するために使用されます。 膨大な数のエントリが要求された場合、これはパフォーマンスの向上にも役立ちます。次のリンクがアプリケーションに戻って提供され、次の大量のデータを取得します。

構文

http://<server>:<port>/sap/opu/odata/sap/<service_name>/ProductsSet?$skiptoken=

使い方法

  • サーバーでページサイズ、つまりDPC_EXTクラスのGET_ENTITYSETメソッドを定義する必要があります。
  • エンティティセットのエントリがページサイズより大きい場合は、エントリをページサイズで割ります。
  • skiptoken値と、次のエントリセットへの次のリンクに基づいて、要求されたエントリセットをアプリケーションに送信します。 詳細は下の画像をご覧ください。

Step.1


Step.2

PRODUCTSSET_GET_ENTITYSET ソースコードは以下のようです。

DATA:      ls_order          TYPE /iwbep/s_mgw_sorting_order,
lt_products TYPE STANDARD TABLE OF bapi_epm_product_header,
ls_products TYPE bapi_epm_product_header,
ls_entityset TYPE zcl_zdemo_gw_srv_mpc=>ts_products,
lt_entityset TYPE zcl_zdemo_gw_srv_mpc=>tt_products,
lv_max_rows TYPE bapi_epm_max_rows,
ls_filter TYPE /iwbep/s_mgw_select_option,
lr_product_id TYPE TABLE OF bapi_epm_product_id_range,
ls_product_id TYPE bapi_epm_product_id_range,
ls_select_options TYPE /iwbep/s_cod_select_option. * >> Check if $filter option is available
* Get the filter option for product ID
READ TABLE it_filter_select_options
INTO ls_filter
WITH KEY property = 'ProductId'.
IF sy-subrc = 0.
LOOP AT ls_filter-select_options INTO ls_select_options.
MOVE-CORRESPONDING ls_select_options TO ls_product_id.
APPEND ls_product_id TO lr_product_id.
ENDLOOP.
ENDIF. * Call the BAPI by providing the filter options
* if no filter, BAPI will get the entire list of products
CALL FUNCTION 'BAPI_EPM_PRODUCT_GET_LIST'
TABLES
headerdata = lt_products
selparamproductid = lr_product_id.
IF lt_products IS NOT INITIAL.
LOOP AT lt_products INTO ls_products.
MOVE-CORRESPONDING ls_products TO ls_entityset.
APPEND ls_entityset TO et_entityset.
ENDLOOP.
ENDIF.

  上記のソースだとすべてデータを取得しますので、

$skiptoken オプションでページサイズを設定します。

Step.3

PRODUCTSSET_GET_ENTITYSETに以下のようにページサイズを設定します。

DATA:  ls_order          TYPE /iwbep/s_mgw_sorting_order,
lt_products TYPE STANDARD TABLE OF bapi_epm_product_header,
ls_products TYPE bapi_epm_product_header,
ls_entityset TYPE zcl_zdemo_gw_srv_mpc=>ts_products,
lt_entityset TYPE zcl_zdemo_gw_srv_mpc=>tt_products,
lv_max_rows TYPE bapi_epm_max_rows,
ls_filter TYPE /iwbep/s_mgw_select_option,
lr_product_id TYPE TABLE OF bapi_epm_product_id_range,
ls_product_id TYPE bapi_epm_product_id_range,
ls_select_options TYPE /iwbep/s_cod_select_option. * >> Check if $filter option is available
* Get the filter option for roduct ID
READ TABLE it_filter_select_options
INTO ls_filter
WITH KEY property = 'ProductId'.
IF sy-subrc = 0.
LOOP AT ls_filter-select_options INTO ls_select_options.
MOVE-CORRESPONDING ls_select_options TO ls_product_id.
APPEND ls_product_id TO lr_product_id.
ENDLOOP.
ENDIF. * Call the BAPI by providing the filter options
* if no filter, BAPI will get the entire list of products
CALL FUNCTION 'BAPI_EPM_PRODUCT_GET_LIST'
TABLES
headerdata = lt_products
selparamproductid = lr_product_id.
IF lt_products IS NOT INITIAL.
LOOP AT lt_products INTO ls_products.
MOVE-CORRESPONDING ls_products TO ls_entityset.
APPEND ls_entityset TO lt_entityset.
ENDLOOP.
ENDIF. DATA: lv_page_size TYPE i VALUE 50, " Define the Page Size/
lv_index_start TYPE i,
lv_skiptoken TYPE string,
lv_index_end TYPE i,
lv_table_size TYPE i. * Obtain the $skiptoken value if it exists in the URL
lv_skiptoken = io_tech_request_context->get_skiptoken( ). * Clear the skiptoken, if the result is empty
DESCRIBE TABLE lt_entityset LINES lv_table_size.
IF lv_table_size IS INITIAL.
CLEAR es_response_context-skiptoken.
EXIT.
ENDIF. * If the table size is less than the predefined page size,
* send all the data
IF lv_table_size < lv_page_size.
et_entityset = lt_entityset. * If the table size is beyond the predefined page size,
* cut the whole table into pieces with the page size
ELSE.
lv_index_start = lv_skiptoken.
lv_index_end = lv_skiptoken + lv_page_size.
ENDIF. LOOP AT lt_entityset INTO ls_entityset.
IF sy-tabix > lv_index_start AND
sy-tabix <= lv_index_end.
APPEND ls_entityset TO et_entityset.
ENDIF.
ENDLOOP. * Next Link
es_response_context-skiptoken = lv_index_end + 1.
CONDENSE es_response_context-skiptoken.

Step.4

上記の手順で行ったこと。最初にすべての商品を入手してから、$ skiptokenクエリオプションが要求されているかどうかを確認し、ページサイズに基づいて大量のデータのみを送信します。
 
Step.5
sap gateway client(トランザクションコード/IWFND/GW_CLIENT)テストを行います。
 
Step.6

/sap/opu/odata/sap/ZDEMO_GW_SRV_SRV/ProductsSet?$skiptoken=0′.

/sap/opu/odata/sap/ZDEMO_GW_SRV_SRV/ProductsSet?$skiptoken=10′.

※画像では$skiptoken=20書いてますが、正しくは$skiptoken=10です。  

SAP Odata実行命令(2)的更多相关文章

  1. SAP Odata実行命令(1)

    $count $Orderby:desc/asc ※$Orderby=ソートする項目 desc降順/asc昇順 を指定すること $Filter: $Skip,Top and Inline count: ...

  2. SAP OData $batch processing

    例として.1回の呼び出しで100個の新しい商品を作成したい場合.最も簡単な方法は.$ batch要求を使用して100個のPOST呼び出しすべてを単一のサービス呼び出しにまとめることです. URIの末尾 ...

  3. dat文件中如何编写DOS的多行命令

    dat文件中如何编写DOS的多行命令 2012-10-15 11:29 四海柔情108 分享到:   2012-10-16 23:36 提问者采纳   你问的应该是BAT文件吧?BAT是DOS命令的批 ...

  4. MySql命令行命令和SQL语句

    一.常用mysql命令行命令 1.启动MYSQL服务 net start mysql 停止MYSQL服务 net stop mysql 2.netstat -na|findstr 3306 查看被监听 ...

  5. Windows命令行命令集锦

    原文:Windows命令行命令集锦 转自:http://www.me2wg.com/bbs/forum.php?mod=viewthread&tid=15830 winver--------- ...

  6. iOS工程师常用的命令行命令总结

    感觉有点标题党了. 作为一个iOS工程师,没有做过服务端,主要用的是mac电脑,此篇博文是记录我在工作,学习的过程中用的命令行命令的记录和归纳总结 一. mac命令行 1. cd /Users/xxx ...

  7. WPF DataGrid 绑定行双击行命令

    WPF DataGrid 绑定行双击行命令 <DataGrid ...> <DataGrid.InputBindings> <MouseBinding MouseActi ...

  8. Windows与Linux的命令行命令对比

    Windows与Linux的命令行命令对比 * Windows不区分大小写,Linux区分大小写的. sn DOS Command UNIX Equivalent Effect 影响 1 ASSIGN ...

  9. [转载]Selenium実行中にJavaScriptのコードを実行する

    Selenium実行中にJavaScriptのコードを実行する JavaScriptで画面の値を取得/設定するコードをメモ. WebDriverEx.cs // JavaScriptを実行(戻り値なし ...

随机推荐

  1. Struts2学习-自动

    和ssh框架的基本一致. <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=" ...

  2. 在Windows 10上部署Apache PredictionIO开发环境

    Windows在初研究人员的探索下,研究出了一套更为精简的环境配置,极大的缩短了开发时间与效率,在此总结以供后来者参阅. 1.部署环境的配置 Windows10 64 home IntelliJ ID ...

  3. WAS8.5安装和部署

    刚研究WAS8.5的安装部署,写一些注意事项: 1.下载安装软件 安装器:agent.installer.linux.gtk.x86_64_1.7.2000.20140227_0303 WAS: WA ...

  4. Git 初始化全局user.name 和 user.email

    git config --global user.name "username" git config --global user.email "email"

  5. Linux学习总结(十六)系统用户及用户组管理

    先来认识两个文件 /etc/passwd/etc/shadow我们打印出首尾三行,来了解下:每行由:分割为7段,每段含义为:第一段:用户名,比如root 用户,普通用户test,lv,test1第二段 ...

  6. 显示mac电脑中隐藏的文件和文件夹

    显示mac电脑中隐藏的文件和文件夹的办法:打开电脑,cd到相应的文件夹,输入以下命令,为显示隐藏的文件和文件夹 defaults write com.apple.finder AppleShowAll ...

  7. master分支合并

    一.Sourcetree简单介绍 通过Git可以进行对项目的版本管理,但是如果直接使用Git的软件会比较麻烦,因为是通过一条一条命令进行操作的.  Sourcetree则可以与Git结合,提供图形界面 ...

  8. 使用QT开发GoogleMap瓦片显示和下载工具(2)——Google地图瓦片投影和获取网址解析

    这篇主要说的是Google地图采用的投影方式,瓦片划分方式以及如何从给定的经纬度获取瓦片的数据的网址.所有资料均来自于网络,并亲自试验可行. Google地图投影 首先是地图投影问题,因为地球本身是一 ...

  9. render 函数渲染表格的当前数据列使用

    columns7: [ { title: '编号', align: 'center', width: 90, key: 'No', render: (h, params) => { return ...

  10. 一点一点看JDK源码(五)java.util.ArrayList 后篇之Spliterator多线程遍历

    一点一点看JDK源码(五)java.util.ArrayList 后篇之Spliterator多线程遍历 liuyuhang原创,未经允许禁止转载 本文举例使用的是JDK8的API 目录:一点一点看J ...