从 CREATE_STREAM 获得回复
Get Response from CREATE_STREAM
我们使用 ABAP 中 oData 服务的 CREATE_STREAM 方法将文档从 SAPUI5 上传到我们的 SAP 系统。文档的创建工作正常。
我们想要实现的是将响应返回给 SAPUI5。尤其是后台创建文档出错的时候。
在前端我们使用 uploadSet 控件。
...oUploadSet.uploadItem(oItem);
在后台,我们用
创建一条消息
...lo_message_container->add_message( iv_msg_type = /iwbep/cl_cos_logger=>error
iv_msg_number = '018'
iv_msg_id = lv_msg_id
iv_add_to_response_header = abap_true
)....
我们可以在网关服务器的错误协议中找到创建的消息 (/IWFND/ERROR_LOG)。但是如何在 SAPUI5 中检索此消息并在 MessageManger 控件中使用?
我们尝试了 onUploadCompleted 控件,但在那里找不到任何响应数据。
有人可以解释如何在 SAPUI5 中使用来自 CREAT_STREAM 方法的响应或消息头吗?
“新”UploadSet 控件在我看来有点不成熟。响应将在某些内部方法中丢失。然后,此内部方法将触发 onUploadCompleted
,您只会得到无用的信息。
幸运的是,我们可以轻松地覆盖这些内部内容。 UploadSet 有一个聚合 Uploader。我们必须提供我们自己的上传器。问题解决了。 Here is the line 需要修改。
sap.ui.define([
"sap/m/upload/Uploader",
...
], function (Uploader, ...) {
return Uploader.extend("my.custom.control.Uploader", {
uploadItem: function (oItem, aHeaders) {
// beginning of the method. take it from the official sources
oXhr.onreadystatechange = function () {
const oHandler = that._mRequestHandlers[oItem.getId()];
if (this.readyState === window.XMLHttpRequest.DONE && !oHandler.aborted) {
// we need to return the xhr object. it contains the response!
that.fireUploadCompleted({ item: oItem, xhr: oXhr });
}
};
// .. rest of the method
}
});
});
这样使用
<mvc:View xmlns:custom="my.custom.control" ....>
<UploadSet items="....">
.....
<uploader>
<custom:Uploader uploadUrl="......"
uploadCompleted=".onUploadCompleted"
uploadStarted=".onUploadStarted" />
</uploader>
</UploadSet>
编辑:您自己的上传器也意味着实现您自己的事件处理程序(uploadAborted
、uploadCompleted
、uploadProgressed
、uploadStarted
)。有关事件的更多信息,请参阅 official documentation。
我们使用 ABAP 中 oData 服务的 CREATE_STREAM 方法将文档从 SAPUI5 上传到我们的 SAP 系统。文档的创建工作正常。 我们想要实现的是将响应返回给 SAPUI5。尤其是后台创建文档出错的时候。
在前端我们使用 uploadSet 控件。
...oUploadSet.uploadItem(oItem);
在后台,我们用
创建一条消息...lo_message_container->add_message( iv_msg_type = /iwbep/cl_cos_logger=>error
iv_msg_number = '018'
iv_msg_id = lv_msg_id
iv_add_to_response_header = abap_true
)....
我们可以在网关服务器的错误协议中找到创建的消息 (/IWFND/ERROR_LOG)。但是如何在 SAPUI5 中检索此消息并在 MessageManger 控件中使用?
我们尝试了 onUploadCompleted 控件,但在那里找不到任何响应数据。
有人可以解释如何在 SAPUI5 中使用来自 CREAT_STREAM 方法的响应或消息头吗?
“新”UploadSet 控件在我看来有点不成熟。响应将在某些内部方法中丢失。然后,此内部方法将触发 onUploadCompleted
,您只会得到无用的信息。
幸运的是,我们可以轻松地覆盖这些内部内容。 UploadSet 有一个聚合 Uploader。我们必须提供我们自己的上传器。问题解决了。 Here is the line 需要修改。
sap.ui.define([
"sap/m/upload/Uploader",
...
], function (Uploader, ...) {
return Uploader.extend("my.custom.control.Uploader", {
uploadItem: function (oItem, aHeaders) {
// beginning of the method. take it from the official sources
oXhr.onreadystatechange = function () {
const oHandler = that._mRequestHandlers[oItem.getId()];
if (this.readyState === window.XMLHttpRequest.DONE && !oHandler.aborted) {
// we need to return the xhr object. it contains the response!
that.fireUploadCompleted({ item: oItem, xhr: oXhr });
}
};
// .. rest of the method
}
});
});
这样使用
<mvc:View xmlns:custom="my.custom.control" ....>
<UploadSet items="....">
.....
<uploader>
<custom:Uploader uploadUrl="......"
uploadCompleted=".onUploadCompleted"
uploadStarted=".onUploadStarted" />
</uploader>
</UploadSet>
编辑:您自己的上传器也意味着实现您自己的事件处理程序(uploadAborted
、uploadCompleted
、uploadProgressed
、uploadStarted
)。有关事件的更多信息,请参阅 official documentation。