我想一步将WebIDE的存储单元传递给SAP。在SAP的CREATE_ENTITY方法中,我一次需要所有存储单元(CREATE_ENTITY或CREATE_DEEP_ENTITY或...?),因为我必须对一些值进行比较。
我尝试了一个批处理请求。这是行不通的,因为为每个存储单元调用了CREATE_ENTITY方法。因此,每个呼叫我只能访问一个存储单元。
我还搜索了有关deep_entities的教程。但是我只发现一些具有深层结构(头项)的东西。但是我有一个扁平的结构(键:存储单元),并且希望将它作为表/数组传递给我的“ CREATE_ENTITY”方法。在SAPUI5中应该可以做到这一点。
作为解决方法,我可以将所有存储单元传递给字符串,然后将其传递给CREATE_ENTITY方法。但这对我来说似乎很业余。
非常感谢和问候
朱莉娅
更新31.07.20
这是我所谓的CREATE方法:
´´´
onStartVert: function () {
// TAs zum i-Punkt quittieren & Check ob bereits
// TA vom i-Punkt zum VKL angelegt ist, dann
// Meldung ausgeben, sonst TA anlegen
// oData Methode create aufrufen und Tabelle übergeben
// LenumIPunkt
// this.getModel().setUseBatch(true);
// var aDeferredGroup = this.getModel().getDeferredGroups();
// aDeferredGroup.push("lenum");
// this.getModel().setDeferredGroups(aDeferredGroup);
//Create Parameters
// var oParameters = {
// groupId: "lenum"
// };
// 31.07.20 this.getModel().setUseBatch(true);
this.oContext = this.getModel().createEntry("/LenumIPunktSet", {
success: this._successSave.bind(this),
error: this._errorSave.bind(this)
});
var oBindingPath = {
path: this.oContext.getPath()
};
this.getView().bindObject(oBindingPath);
var sLenum;
for (var i = 0; i < this._data.LePool.length; i++) {
sLenum = this._data.LePool[i].lenum;
// 31.07.20 this.getModel().create("/LenumIPunktSet", { lenum: sLenum } ,oParameters);
this.getModel().create("/LenumIPunktSet", {
lenum: sLenum
});
}
//Submit the Changes based on the groupId(doSomething)
this.getModel().submitChanges({
//groupId: "lenum"
});
// 31.07.20 this.getModel().setUseBatch(false);
// 2. View aufrufen
this.getRouter().navTo("iPunkt02");
},
The signature for the CHANGESET_PROCESS method is:
CT_CHANGESET_DATA TYPE /IWBEP/IF_MGW_CORE_SRV_RUNTIME=>TY_T_CHANGESET_DATA
/IWBEP/CX_MGW_BUSI_EXCEPTION Business Exception
/IWBEP/CX_MGW_TECH_EXCEPTION Technical Exception
So by now there is no table IT_CHANGESET_REQUEST available.
My entity type has only this one field (lenum) I need as key.
Many thanks again
答案 0 :(得分:1)
关键是实现变更集。
在您的DPC_EXT
中,重新定义以下三种方法:
方法 CHANGESET_BEGIN
将激活批处理。
METHOD /iwbep/if_mgw_appl_srv_runtime~changeset_begin.
cv_defer_mode = 'X'.
ENDMETHOD.
METHOD /iwbep/if_mgw_appl_srv_runtime~changeset_end.
* empty
ENDMETHOD.
方法 changeset_process
将包含逻辑。 it_changeset_request
包含此批处理请求中的所有实体。
METHOD /iwbep/if_mgw_appl_srv_runtime~changeset_process.
LOOP AT it_changeset_request ASSIGNING FIELD-SYMBOL(<fs_changeset_request>).
" <fs_changeset_request>-request_context->get_request_details( ) << which entity is it?
" <fs_changeset_request>-operation_type << is it CREATE, UPDATE or DELETE?
" <fs_changeset_request>-entry_provider->read_entry_data( ... ) << read entity into structure
ENDLOOP.
ENDMETHOD.
有关详细信息,请参见this blog。