HANA Express XSODATA更新操作错误

时间:2022-02-05 16:51:40

I have a SAP HANA Express Server with XSA, I create a MTA Application with a DB and NodeJS modules, in the NodeJS module I create a .xsodata connected to the DB module.

我有一个带有XSA的SAP HANA Express服务器,我创建了一个带有DB和NodeJS模块的MTA应用程序,在NodeJS模块中我创建了一个连接到DB模块的.xsodata。

XSOdata definition:

XSOdata定义:

service {
    //Definición de servicios
    "SISGASTOS"."CATEGORIA" as "Categoria"
        create events ( before "movilidad.rindegastos:Informe.xsjslib::crear_categoria");
    "SISGASTOS"."ESTADO" as "Estado"
        create events ( before "movilidad.rindegastos:Informe.xsjslib::crear_estado");
    "SISGASTOS"."PROYECTO" as "Proyecto"
        create events ( before "movilidad.rindegastos:Informe.xsjslib::crear_proyecto");
    "SISGASTOS"."TIPO_DOCUMENTO" as "TipoDoc"
        create events ( before "movilidad.rindegastos:Informe.xsjslib::crear_tipo_documento");
    "SISGASTOS"."INFORME" as "Informe" 
        navigates ("Informe_Comentario" as "Comentarios", "Informe_Proyecto" as "Proyecto", "Informe_Estado" as "Estado","Informe_Gasto" as "Gastos", "Informe_Hist" as "Info_Historial")
        create events ( before "movilidad.rindegastos:Informe.xsjslib::crear_informe");
    "SISGASTOS"."HIST_INFORME" as "Hist_Informe"
        navigates ("Hist_Informe_Estado" as "Estado")
        create events ( before "movilidad.rindegastos:Informe.xsjslib::crear_hist_informe");
    "SISGASTOS"."COMENTARIO_INFORME" as "ComentarioInforme";
//      create events ( before "movilidad.rindegastos:Informe.xsjslib::crear_comentario_informe");
    "SISGASTOS"."GASTO" as "Gasto" 
        navigates ("Gasto_Categoria" as "Categoria", "Gasto_TipoDoc" as "TipoDoc", "Gasto_Estado" as "Estado", "Gasto_Comentario" as "Comentarios", "Gasto_Anexo" as "Anexos", "Gasto_Hist" as "Gasto_Historial")  
        create events ( before "movilidad.rindegastos:Informe.xsjslib::crear_gasto");
    "SISGASTOS"."HIST_GASTO" as "Hist_Gasto"
        navigates ("Hist_Gasto_Estado" as "Estado")
        create events ( before "movilidad.rindegastos:Informe.xsjslib::crear_hist_gasto");
    "SISGASTOS"."COMENTARIO" as "Comentario"
        create events ( before "movilidad.rindegastos:Informe.xsjslib::crear_comentario");
    "SISGASTOS"."ANEXO" as "Anexo"
        create events ( before "movilidad.rindegastos:Informe.xsjslib::crear_anexo");

    //Asociacion Historiales
    association "Hist_Gasto_Estado"
        principal "Hist_Gasto"("ID_ESTADO") multiplicity "1"
        dependent "Estado"("ID_ESTADO") multiplicity "1";
    association "Hist_Informe_Estado"
        principal "Hist_Informe"("ID_ESTADO") multiplicity "1"
        dependent "Estado"("ID_ESTADO") multiplicity "1";

    //Asociacion Informe    
    association "Informe_Comentario"
        principal "Informe"("ID_INFORME") multiplicity "1"
        dependent "ComentarioInforme"("ID_INFORME") multiplicity "*";
    association "Informe_Proyecto" 
        principal "Informe"("ID_PROYECTO") multiplicity "1" 
        dependent "Proyecto"("ID_PROYECTO") multiplicity "1";
    association "Informe_Estado" 
        principal "Informe"("ID_ESTADO") multiplicity "1" 
        dependent "Estado"("ID_ESTADO") multiplicity "1";
    association "Informe_Gasto" 
        principal "Informe"("ID_INFORME") multiplicity "1" 
        dependent "Gasto"("ID_INFORME") multiplicity "*";
    association "Informe_Hist"
        principal "Informe"("ID_INFORME") multiplicity "1" 
        dependent "Hist_Informe"("ID_INFORME") multiplicity "*";

    //Asociación Gasto
    association "Gasto_Categoria" 
        principal "Gasto"("ID_CATEGORIA") multiplicity "1" 
        dependent "Categoria"("ID_CATEGORIA") multiplicity "1";
    association "Gasto_TipoDoc" 
        principal "Gasto"("ID_TIPO_DOCUMENTO") multiplicity "1" 
        dependent "TipoDoc"("ID_TIPO_DOCUMENTO") multiplicity "1";
    association "Gasto_Estado" 
        principal "Gasto"("ID_ESTADO") multiplicity "1" 
        dependent "Estado"("ID_ESTADO") multiplicity "1";   
    association "Gasto_Comentario" 
        principal "Gasto"("ID_GASTO") multiplicity "1" 
        dependent "Comentario"("ID_GASTO") multiplicity "*"; 
    association "Gasto_Anexo" 
        principal "Gasto"("ID_GASTO") multiplicity "1" 
        dependent "Anexo"("ID_GASTO") multiplicity "*";
    association "Gasto_Hist"
        principal "Gasto"("ID_GASTO") multiplicity "1" 
        dependent "Hist_Gasto"("ID_GASTO") multiplicity "*";
}

We call the service from a SAPUI5 application using an update operation.

我们使用更新操作从SAPUI5应用程序调用该服务。

        submitChanges: function() {
        this.getView().getModel("oModelDialogo").setProperty("/busy", true);
        this.getView().getModel().submitChanges({
            success: function(oResult) {
                this.getView().getModel("oModelDialogo").setProperty("/busy", false);
                console.log(oResult);
            }.bind(this),
            error: function(oError) {
                this.getView().getModel("oModelDialogo").setProperty("/busy", false);
                console.log(oError);
            }.bind(this)
        });
    },

But the response is Not Implemented 501:

但响应是未实现501:

--batch_1523471867867_0
Content-Type: application/http
Content-Transfer-Encoding: binary

HTTP/1.1 501 Not Implemented
Content-Type: application/json;charset=utf-8

{"error":{"code":501,"message":{"lang":"en-US","value":"Not implemented"}}}

The read, create and delete operations works fine, only the update operation have problems.

读取,创建和删除操作工作正常,只有更新操作有问题。

Edit:

编辑:

As 0x17 recomend I change the defaultUpdateMethod in manifest file as follow:

正如0x17推荐我更改清单文件中的defaultUpdateMethod,如下所示:

    "models": {
        "i18n": {
            "type": "sap.ui.model.resource.ResourceModel",
            "settings": {
                "bundleName": "Adjuntos.i18n.i18n"
            }
        },
        "": {
            "dataSource": "mainService",
            "preload": true,
            "settings": {
                "defaultBindingMode": "TwoWay",
                "defaultUpdateMethod": "sap.ui.model.odata.UpdateMethod.Put"
            }
        }
    },

With that the update request works! Thanks.

有了这个更新请求工作!谢谢。

1 个解决方案

#1


1  

Could you pl. check the complete request headers that were sent during the update operation? I guess this could happen if the request method is set to MERGE

你能来吗?检查在更新操作期间发送的完整请求标头?我想如果请求方法设置为MERGE,可能会发生这种情况

I'm assuming you are making use of OData V2 Model in the app. However, in the HANA version of (based out of Cloudfoundry) OData V2 API, MERGE is not supported by default.

我假设你在ui5 app中使用OData V2 Model。但是,在HANA xsa版本(基于Cloudfoundry)OData V2 API中,默认情况下不支持MERGE。

HANA Express XSODATA更新操作错误

Can you just set the defaultUpdateMethod to PUT (in manifest.json) and try again ? You can also change the same in the controller code like so

你能将defaultUpdateMethod设置为PUT(在manifest.json中)并再试一次吗?您也可以在控制器代码中更改相同的内容

HANA Express XSODATA更新操作错误

The OData v2 APIs in SCP Neo vs SAP XSA (based on cloudfoundry) have subtle differences. The latter is not as robust as the former when it comes to V2 APIs but it is slowly tilting towards the use of OData V4 APIs (which is good)

SCP Neo与SAP XSA(基于cloudfoundry)中的OData v2 API具有细微差别。当涉及到V2 API时,后者不像前者那样强大,但它正逐渐倾向于使用OData V4 API(这很好)

#1


1  

Could you pl. check the complete request headers that were sent during the update operation? I guess this could happen if the request method is set to MERGE

你能来吗?检查在更新操作期间发送的完整请求标头?我想如果请求方法设置为MERGE,可能会发生这种情况

I'm assuming you are making use of OData V2 Model in the app. However, in the HANA version of (based out of Cloudfoundry) OData V2 API, MERGE is not supported by default.

我假设你在ui5 app中使用OData V2 Model。但是,在HANA xsa版本(基于Cloudfoundry)OData V2 API中,默认情况下不支持MERGE。

HANA Express XSODATA更新操作错误

Can you just set the defaultUpdateMethod to PUT (in manifest.json) and try again ? You can also change the same in the controller code like so

你能将defaultUpdateMethod设置为PUT(在manifest.json中)并再试一次吗?您也可以在控制器代码中更改相同的内容

HANA Express XSODATA更新操作错误

The OData v2 APIs in SCP Neo vs SAP XSA (based on cloudfoundry) have subtle differences. The latter is not as robust as the former when it comes to V2 APIs but it is slowly tilting towards the use of OData V4 APIs (which is good)

SCP Neo与SAP XSA(基于cloudfoundry)中的OData v2 API具有细微差别。当涉及到V2 API时,后者不像前者那样强大,但它正逐渐倾向于使用OData V4 API(这很好)