SAP Odata実行命令(2)
前言
$ 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
/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)的更多相关文章
- SAP Odata実行命令(1)
$count $Orderby:desc/asc ※$Orderby=ソートする項目 desc降順/asc昇順 を指定すること $Filter: $Skip,Top and Inline count: ...
- SAP OData $batch processing
例として.1回の呼び出しで100個の新しい商品を作成したい場合.最も簡単な方法は.$ batch要求を使用して100個のPOST呼び出しすべてを単一のサービス呼び出しにまとめることです. URIの末尾 ...
- dat文件中如何编写DOS的多行命令
dat文件中如何编写DOS的多行命令 2012-10-15 11:29 四海柔情108 分享到: 2012-10-16 23:36 提问者采纳 你问的应该是BAT文件吧?BAT是DOS命令的批 ...
- MySql命令行命令和SQL语句
一.常用mysql命令行命令 1.启动MYSQL服务 net start mysql 停止MYSQL服务 net stop mysql 2.netstat -na|findstr 3306 查看被监听 ...
- Windows命令行命令集锦
原文:Windows命令行命令集锦 转自:http://www.me2wg.com/bbs/forum.php?mod=viewthread&tid=15830 winver--------- ...
- iOS工程师常用的命令行命令总结
感觉有点标题党了. 作为一个iOS工程师,没有做过服务端,主要用的是mac电脑,此篇博文是记录我在工作,学习的过程中用的命令行命令的记录和归纳总结 一. mac命令行 1. cd /Users/xxx ...
- WPF DataGrid 绑定行双击行命令
WPF DataGrid 绑定行双击行命令 <DataGrid ...> <DataGrid.InputBindings> <MouseBinding MouseActi ...
- Windows与Linux的命令行命令对比
Windows与Linux的命令行命令对比 * Windows不区分大小写,Linux区分大小写的. sn DOS Command UNIX Equivalent Effect 影响 1 ASSIGN ...
- [转载]Selenium実行中にJavaScriptのコードを実行する
Selenium実行中にJavaScriptのコードを実行する JavaScriptで画面の値を取得/設定するコードをメモ. WebDriverEx.cs // JavaScriptを実行(戻り値なし ...
随机推荐
- Struts2学习-自动
和ssh框架的基本一致. <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=" ...
- 在Windows 10上部署Apache PredictionIO开发环境
Windows在初研究人员的探索下,研究出了一套更为精简的环境配置,极大的缩短了开发时间与效率,在此总结以供后来者参阅. 1.部署环境的配置 Windows10 64 home IntelliJ ID ...
- WAS8.5安装和部署
刚研究WAS8.5的安装部署,写一些注意事项: 1.下载安装软件 安装器:agent.installer.linux.gtk.x86_64_1.7.2000.20140227_0303 WAS: WA ...
- Git 初始化全局user.name 和 user.email
git config --global user.name "username" git config --global user.email "email"
- Linux学习总结(十六)系统用户及用户组管理
先来认识两个文件 /etc/passwd/etc/shadow我们打印出首尾三行,来了解下:每行由:分割为7段,每段含义为:第一段:用户名,比如root 用户,普通用户test,lv,test1第二段 ...
- 显示mac电脑中隐藏的文件和文件夹
显示mac电脑中隐藏的文件和文件夹的办法:打开电脑,cd到相应的文件夹,输入以下命令,为显示隐藏的文件和文件夹 defaults write com.apple.finder AppleShowAll ...
- master分支合并
一.Sourcetree简单介绍 通过Git可以进行对项目的版本管理,但是如果直接使用Git的软件会比较麻烦,因为是通过一条一条命令进行操作的. Sourcetree则可以与Git结合,提供图形界面 ...
- 使用QT开发GoogleMap瓦片显示和下载工具(2)——Google地图瓦片投影和获取网址解析
这篇主要说的是Google地图采用的投影方式,瓦片划分方式以及如何从给定的经纬度获取瓦片的数据的网址.所有资料均来自于网络,并亲自试验可行. Google地图投影 首先是地图投影问题,因为地球本身是一 ...
- render 函数渲染表格的当前数据列使用
columns7: [ { title: '编号', align: 'center', width: 90, key: 'No', render: (h, params) => { return ...
- 一点一点看JDK源码(五)java.util.ArrayList 后篇之Spliterator多线程遍历
一点一点看JDK源码(五)java.util.ArrayList 后篇之Spliterator多线程遍历 liuyuhang原创,未经允许禁止转载 本文举例使用的是JDK8的API 目录:一点一点看J ...