SAP OData $batch processing
例として、1回の呼び出しで100個の新しい商品を作成したい場合、最も簡単な方法は、$ batch要求を使用して100個のPOST呼び出しすべてを単一のサービス呼び出しにまとめることです。
URIの末尾にsap-statistics = trueオプションを追加すると、所要時間についての詳細が表示されます。 SAPゲートウェイのパフォーマンストレースで結果を調べることができます。
(Transaction:/ n/iwfnd/traces or /niwbep/traces)
SAP Gateway Side
メソッドCHANGESET_BEGINを使用すると、新しい変更パラメータCV_DEFER_MODEが一度に処理できるゲートウェイフレームワークになります(遅延処理)。 この方法を実行するときの簡単な例を見てみましょう。
- Transaction /nsegw
- ランタイム成果物を展開します。
- dpc_extクラスをダブルクリックして
- / IWBEP / IF_MGW_APPL_SRV_RUNTIME〜CHANGESET_BEGINメソッドを見つけて、再定義してください。
その後、これを行うと、CHANGESET_BEGINメソッドは/ IWBEP / IF_MGW_APPL_SRV_RUNTIMEインターフェースから継承されます。
METHOD /iwbep/if_mgw_appl_srv_runtime~changeset_begin.
LOOP AT it_operation_info INTO DATA(ls_operation_info).
IF ( ls_operation_info-entity_set EQ 'YourEntitySet' AND
ls_operation_info-entity_type EQ 'YourEntity' ).
cv_defer_mode = abap_true.
EXIT.
ENDIF.
ENDLOOP.
ENDMETHOD.
/IWBEP/IF_MGW_APPL_SRV_RUNTIME~CHANGESET_PROCESS
METHOD /iwbep/if_mgw_appl_srv_runtime~changeset_process. DATA: ls_changeset_request TYPE /iwbep/if_mgw_appl_types=>ty_s_changeset_request,
ls_changeset_req_parent TYPE /iwbep/if_mgw_appl_types=>ty_s_changeset_request,
lo_create_context TYPE REF TO /iwbep/if_mgw_req_entity_c,
lv_entity_type TYPE string,
ls_changeset_response TYPE /iwbep/if_mgw_appl_types=>ty_s_changeset_response,
ls_changeset_resp_parent TYPE /iwbep/if_mgw_appl_types=>ty_s_changeset_response,
ls_item TYPE zcl_example_mpc=>ts_item,
lv_error_entity TYPE string,
lt_return TYPE STANDARD TABLE OF bapiret2. DATA lo_container TYPE REF TO /iwbep/if_message_container.
DATA lr_return TYPE REF TO bapiret2.
DATA lv_process_count TYPE i.
DATA lv_isapproved TYPE xfeld.
DATA lv_pending_status TYPE xfeld. **halilu 20.08.2018 16:50:56 ZCL_''_EXT==CM009 LOOP AT it_changeset_request INTO ls_changeset_request. ** You need to pass it if operation_type is 'PE', because
** $batch comes with unnecessary scenarios, you need to avoid it. IF ls_changeset_request-operation_type EQ 'PE'.
CONTINUE.
ENDIF. lo_create_context ?= ls_changeset_request-request_context.
lv_entity_type = lo_create_context->get_entity_type_name( ). REFRESH : lt_return. * Authority Control if you have a authority scenario, you can code in here. *--------------------------------------------------------------------* *--------------------------------------------------------------------* CASE lv_entity_type.
*--------------------------------------------------------------------*
WHEN 'YourEntity'. CLEAR ls_item. ls_changeset_request-entry_provider->read_entry_data( IMPORTING es_data = ls_item ). ** In here , you can implement your logic in a specific customers requirements. ** Your code have to return bapiret2_tt parameter as export,
** Because you need to handle errors in here like below. LOOP AT lt_return TRANSPORTING NO FIELDS WHERE type EQ 'E'. ENDLOOP. IF sy-subrc EQ 0. READ TABLE lt_return REFERENCE INTO lr_return INDEX 1. IF sy-subrc EQ 0 AND
lr_return IS BOUND. lo_container = me->mo_context->get_message_container( ). lo_container->add_message_from_bapi(
EXPORTING
is_bapi_message = lr_return->*
iv_message_target = ls_item-your_key && 'Where you receive errors'
). ENDIF. RAISE EXCEPTION TYPE /iwbep/cx_mgw_busi_exception
EXPORTING
textid = /iwbep/cx_mgw_busi_exception=>business_error
message_container = lo_container. ELSE. copy_data_to_ref(
EXPORTING
is_data = ls_item
CHANGING
cr_data = ls_changeset_response-entity_data ). ENDIF.
*--------------------------------------------------------------------* ENDCASE. ls_changeset_response-operation_no = ls_changeset_request-operation_no.
INSERT ls_changeset_response INTO TABLE ct_changeset_response. ** If you do something when batch operation finishes, do something like below. AT LAST. ** Your Logic ** ENDAT. ENDLOOP. ENDMETHOD.
/IWBEP/IF_MGW_APPL_SRV_RUNTIME~CHANGESET_END
METHOD /iwbep/if_mgw_appl_srv_runtime~changeset_end. COMMIT WORK AND WAIT. ENDMETHOD.
SAP Ui5 Side
最初に、以下のようにoDataModelを設定する必要があります。
var oConfig = {
metadataUrlParams: {},
json: true,
// loadMetadataAsync : true,
defaultBindingMode: "OneWay",
defaultCountMode: "None",
useBatch: true
};
// Create and set domain model to the component
var oModel = new sap.ui.model.odata.v2.ODataModel(sServiceUrl, oConfig);
this.setModel(oModel);
その後、必要に応じて$ batch処理を実装できます。 私はそれのすべてをsap.m.tableを書かなかった、あなたはこのリンクでそれをチェックすることができる。
In your view , you need to bind oViewModel that is a json Model like this.
<Table id="yourTableId" items="{ path: 'oViewModel>/yourArray' }" class="sapUiSizeCompact">
コントローラで、onInit関数でoViewModelをインスタンス化します。
this_oView = this.getView();
var oViewModel = new sap.ui.model.json.JSONModel({
yourArray: [{ "field1" : "data11",
"field2" : "data12",
"field3" : "data13"
},{ "field1" : "data21",
"field2" : "data22",
"field3" : "data23"
}]
}); this._oView.setModel(oViewModel, "oViewModel");
_getViewModel: function() {
var oViewModel = this._oView.getModel("oViewModel");
return oViewModel;
},
yourFunction: function() {
debugger;
var oModel = this.getView().getModel(),
oTable = this._oTable, // Your Table that you will get item's data.
iLength = oTable.getItems("items").length,
oItem,
sPath,
bError = false;
// Distinguish your request from other batch requests like below.
oModel.setDeferredBatchGroups(["myId"]);
for (var i = 0; i < iLength; i++) {
var oEntry = {},
oParams = {};
// You need to show your message that returns from backend the latest.
if (i === (iLength - 1)) {
oParams.success = function(oData, oResponse) {
sap.ui.core.BusyIndicator.hide();
MessageToast.show(this._oResourceBundle.getText("PROCESS_SUCCESS"));
// debugger;
}.bind(this);
oParams.error = function(oError) {
// debugger;
sap.ui.core.BusyIndicator.hide();
var oJson = JSON.parse(oError.responseText);
this._bIsError = true;
var oJson = JSON.parse(oError.responseText);
var oMsgBox = sap.ca.ui.message.showMessageBox({
type: sap.ca.ui.message.Type.ERROR,
message: oJson.error.message.value
});
if (!sap.ui.Device.support.touch) {
oMsgBox.addStyleClass("sapUiSizeCompact");
}
oModel.refresh();
}.bind(this);
}
oParams.async = false;
oParams.batchGroupId = "myId";
oItem = oTable.getItems("items")[i];
sPath = oItem.getBindingContextPath();
// needing to bind yourSpecific Json Model to Table's item aggregation.
// in this scenario,
oEntry = this._getViewModel().getProperty(oItem.getBindingContextPath());
sap.ui.core.BusyIndicator.show(0);
oModel.create("/YourEntitySet", oEntry, oParams);
}
if (bError === true) {
return;
}
oModel.submitChanges({
groupId: "myId"
});
}
参考文献
SAP OData $batch processing的更多相关文章
- RabbitMQ and batch processing 批提交
RabbitMQ - RabbitMQ and batch processinghttp://rabbitmq.1065348.n5.nabble.com/RabbitMQ-and-batch-pro ...
- (十三)Batch Processing
In addition to being able to index, update, and delete individual documents, Elasticsearch also prov ...
- 13 Stream Processing Patterns for building Streaming and Realtime Applications
原文:https://iwringer.wordpress.com/2015/08/03/patterns-for-streaming-realtime-analytics/ Introduction ...
- 【ABAP系列】SAP ABAP 的替代和校验
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP 的替代和校验 ...
- Spring Batch 中文参考文档 V3.0.6 - 1 Spring Batch介绍
1 Spring Batch介绍 企业领域中许多应用系统需要采用批处理的方式在特定环境中运行业务操作任务.这种业务作业包括自动化,大量信息的复杂操作,他们不需要人工干预,并能高效运行.这些典型作业包括 ...
- 腾讯大数据平台Oceanus: A one-stop platform for real time stream processing powered by Apache Flink
January 25, 2019Use Cases, Apache Flink The Big Data Team at Tencent In recent years, the increa ...
- An Overview of End-to-End Exactly-Once Processing in Apache Flink (with Apache Kafka, too!)
01 Mar 2018 Piotr Nowojski (@PiotrNowojski) & Mike Winters (@wints) This post is an adaptation o ...
- Coursera, Big Data 3, Integration and Processing (week 4)
Week 4 Big Data Precessing Pipeline 上图可以generalize 成下图,也就是Big data pipeline some high level processi ...
- Spring Batch 批量处理策略
为了帮助设计和实现批量处理系统,基本的批量应用是通过块和模式来构建的,同时也应该能够为程序开发人员和设计人员提供结构的样例和基础的批量处理程序. 当你开始设计一个批量作业任务的时候,商业逻辑应该被拆分 ...
随机推荐
- 安装kubernetes 环境
master: 10.6.2.170 #master节点兼做仓库 node-1: 10.6.2.171 node-2: 10.6.2.172 1.添加host解析 # cat << ...
- Windows 下安装Python包(Numpy)的错误:Unable to find vcvarsall.bat
情景简介: Windows 环境下安装Python2.7的Numpy扩展包时提示:error: Unable to find vcvarsall.bat 经过不懈的Google/Bing,发现不仅安装 ...
- Buffers与cached啥区别
A buffer is something that has yet to be “written” to disk. A cache is something that has been “read ...
- Jarsigner签名使用
转载请标明出处: http://www.cnblogs.com/why168888/p/6548544.html 本文出自:[Edwin博客园] 如何签名: jarsgner-verbose-keys ...
- Apache Jemeter 开发插件
为什么选择使用JMeter 当被问到这个问题的时候,也许你会在脑海里产生很多的理由,比如: Apache基金会下的开源项目,没有版权问题: 为数不多的还在持续更新的开源性能自动化测试工具: 支持协议丰 ...
- Codeforces Round #443 (Div. 2) 【A、B、C、D】
Codeforces Round #443 (Div. 2) codeforces 879 A. Borya's Diagnosis[水题] #include<cstdio> #inclu ...
- GPS-Graph Processing System Graph Coloring算法分析 (三)
HamaWhite 原创,转载请注明出处!欢迎大家增加Giraph 技术交流群: 228591158 Graph coloring is the problem of assignin ...
- Spring(一)之概括与架构
个人说明: 下面有一部分引用该链接:https://www.tutorialspoint.com/spring/spring_architecture.htm 另外一部分加上我个人的使用经验和体会 之 ...
- 新闻cms管理系统 (补)-----路由优化一
修改后台的入口文件,将访问后台页面的入口文件设为admin.php,并且访问该文件的模块默认为admin模块. 添加后台入口文件具体操作步骤: (1)项目目录下新建admin.php (2)实现入口文 ...
- 程序猿,你为什么须要一台mac?
用了Mac ,我再也回不去Windows. A:帅哥,我电脑坏了. B:重装系统吧.包好! 重装系统 windows系统解决全部系统问题的一剂神药.Mac 时代再也不须要做这种劳命伤財的事情了,没有什 ...