从 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>

编辑:您自己的上传器也意味着实现您自己的事件处理程序(uploadAborteduploadCompleteduploadProgresseduploadStarted)。有关事件的更多信息,请参阅 official documentation