Ошибка операции обновления HANA Express XSODATA

У меня есть сервер SAP HANA Express с XSA, я создаю приложение MTA с модулями БД и NodeJS, в модуле NodeJS я создаю .xsodata, подключенный к модулю БД.

Определение XSOданных:

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 "*";
}

Мы вызываем службу из приложения 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)
        });
    },

Но ответ Not Implemented 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"}}}

Операции чтения, создания и удаления работают нормально, проблемы возникают только с операцией обновления.

Редактировать:

Как рекомендуется 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"
            }
        }
    },

При этом запрос на обновление работает! Спасибо.


person Bryan Avila Araya    schedule 11.04.2018    source источник


Ответы (1)


Не могли бы вы пл. проверить полные заголовки запросов, которые были отправлены во время операции обновления? Я предполагаю, что это может произойти, если для метода запроса установлено значение MERGE.

Я предполагаю, что вы используете модель OData V2 в ui5 приложение. Однако в версии HANA xsa (на основе Cloudfoundry) API OData V2, MERGE по умолчанию не поддерживается.

введите здесь описание изображения

Можете ли вы просто установить для defaultUpdateMethod значение PUT (в manifest.json) и повторить попытку? Вы также можете изменить то же самое в коде контроллера, например, так

введите здесь описание изображения

API-интерфейсы OData v2 в SCP Neo и SAP XSA (на основе cloudfoundry) имеют небольшие различия. Последний не так надежен, как первый, когда речь идет об API-интерфейсах V2, но он постепенно склоняется к использованию API-интерфейсов OData V4 (что хорошо).

person hem    schedule 15.04.2018