SAPUI5 调用有association的UPDATE_ENTITY方法,抛出/IWFND/CL_SODATA_ENTRY_PROV

问题描述:

通过下面的SAPUI5代码,想调用后端gateway的UPDATE_ENTITY方法,在UPDATE_ENTITY里打了外部断点,但是执行后,代码没有执行到断点位置,就抛出/iwfnd/cx_mgw_tech_exception了。

sPath = aSelectedProducts[i].getBindingContext().getPath();
oProductObject = aSelectedProducts[i].getBindingContext().getObject();
oProductObject.UnitsInStock += 10;
this.getModel().update(sPath, oProductObject, {
	success : this._handleReorderActionResult.bind(this, oProductObject.ProductID, true, i+1, aSelectedProducts.length),
	error : this._handleReorderActionResult.bind(this, oProductObject.ProductID, false, i+1, aSelectedProducts.length)
});

原因调查:

使用Trcd:/o/IWFND/ERROR_LOG查看log,log截图如下。

起初使用【Inline component is not defined or not allowed】错误信息,去搜索,没有结果。

在图片里发现了Exceptions的信息,而且有class的名字/IWFND/CL_SODATA_ENTRY_PROV。

使用se24,输入/IWFND/CL_SODATA_ENTRY_PROV,继续调查标准代码,发现进入了IF分支也就是执行到了62行,

进入到deserialize_inline_data方法后,在执行下图的27行代码后,

发现:lv_navi_name的值是SUPPLIER,但是构造ES_DATA里面并没有SUPPLIER字段,所以27行的执行后,sy-subrc是4,就执行到了32行,也就抛出了/iwfnd/cx_mgw_tech_exception,最终导致了Log里面的结果。

问题分析:

由于构造里没有SUPPLIER字段,导致了错误。

gateway后台有2个Entity Set,它们之间有association,SUPPLIER就是association的名字。

变量oProductObject里面确实有SUPPLIER属性。不知道如何解决。

oProductObject = aSelectedProducts[i].getBindingContext().getObject();

暂定对策:

把变量oProductObject的SUPPLIER属性删除掉。

通过delete oProductObject.Supplier;

然后执行发现,不进入if,就能够正常进入自己定义的UPDATE_ENTITY方法了。

posted @ 2022-05-03 21:33  小石王  阅读(282)  评论(0编辑  收藏  举报