SAP Ui OData v2 setBindingContext не показывает данные - PullRequest
0 голосов
/ 28 июня 2018

Я настраиваю таблицу с подробным представлением при нажатии на элемент. Я хочу реализовать это следующим образом:

Настольный контроллер Это логика для отображения всех записей моей таблицы, которые загружаются из интерфейса oData.

onInit: function() {
    var serviceUrl = "/sap/opu/odata/sap/ZSS18_T4_UNIVERSITY_SRV";
    var oModel = new sap.ui.model.odata.v2.ODataModel(serviceUrl);
    this.getView().setModel(oModel);

},

handleLineItemPress : function(evt){
    // Create App object
    var app = new sap.m.App({
        initialPage : this.createId("idDetail1")
    }); 

    // create detail page
    var page = sap.ui.view({
        id : this.createId("idDetail1"),
        viewName: "zss18_t4.projectDetail",
        type : sap.ui.core.mvc.ViewType.XML
    }); 

    // Pass Data to detail page
    var context = evt.getSource().getBindingContext(); 
    console.log(context); 
    app.to(page, { ctx : context});


    // Show detail page in app
    app.addPage(page); 
    app.placeAt("content", "only"); 



        }

Подробная страница Теперь я хотел бы отобразить детали одного элемента на новой странице, контроллер которой находится здесь:

        onInit: function() {
        var serviceUrl = "/sap/opu/odata/sap/ZSS18_T4_UNIVERSITY_SRV";
        var oModel = new sap.ui.model.odata.v2.ODataModel(serviceUrl);
        var view = this.getView();
        this.getView().setModel(oModel);
        this.getView().addDelegate({
            onBeforeShow : function(evt) {
                view.setBindingContext(evt.data.ctx);

            }

        });
    },

И это соответствующий вид:

<core:View xmlns:core="sap.ui.core" xmlns:mvc="sap.ui.core.mvc" xmlns="sap.m"
    controllerName="zss18_t4.projectDetail" xmlns:html="http://www.w3.org/1999/xhtml" xmlns:f="sap.ui.layout.form">
<Page title="Details">
<VBox class="sapUiSmallMargin">
            <f:SimpleForm id="projectDetails" title="Project Details">
            <f:content>
                    <Label text="Project ID" />
                    <Text text="{projid}" />
                    <Label text="Title" />
                    <Text text="{title}" />
                    <Label text="Description" />
                    <Text text="{description}" />
                    <Label text="Type" />
                    <Text text="{type}" />
                    <Label text="Supervisor" />
                    <Text text="{supervisor}" />
                    <Label text="Lead" />
                    <Text text="{lead}" />
                    <Label text="Members" />
                    <Text text="{members}" />
                    <Label text="Status" />
                    <Text text="{status}" />
                    <Label text="Startdate" />
                    <Text text="{startdate}" />
                    <Label text="Enddate" />
                    <Text text="{enddate}" />
                    </f:content>
            </f:SimpleForm>
        </VBox>
</Page>

То, что я вижу, это: enter image description here

Я читал подобные посты, но пока не нашел правильного решения. Заранее спасибо за помощь!

Ответы [ 2 ]

0 голосов
/ 09 июля 2018

Я дважды проверил, как работает служба oData, и наткнулся на следующий блог (к сожалению, на немецком): http://fiori.acando -live.de / 2018/04/03 / odata-model-wie-kommen -die-daten-in-meine-anwendung / В нем говорится, что в некоторых случаях вам нужно сделать правильный oModel.read () для загрузки актуальных данных в интерфейс, который здесь отсутствует. Я добавил oModel.read () , чтобы получить фактический набор данных из серверной части. Контекст был корректным, но данных не было.

Вот моя реализация контроллера проектов, которая правильно отображает данные:

onInit: function() {
    var serviceUrl = "/sap/opu/odata/sap/ZSS18_T4_UNIVERSITY_SRV";
    var oModel = new sap.ui.model.odata.v2.ODataModel(serviceUrl);
    oModel.read("/ZSS18_T4_PROJSet")
    var view = this.getView();
    this.getView().setModel(oModel);
    this.getView().addDelegate({
        onBeforeShow : function(evt) {
            view.setBindingContext(evt.data.ctx);

        }

    });
},
0 голосов
/ 30 июня 2018

Вы можете использовать локальную модель, когда получаете данные от службы oData.

Вы можете позвонить в службу Odata следующим образом:

var modelTab    =   this.getView().getModel( "localModel" ),
this.getView().getModel( "MyOdataService" ).read( entitySet, {
            filters: [ filter ],
            success: function( oData ) {
                modelTab.setProperty("/", oData.results );
            },
            error: function( oError ) {
            }
        });

Таким образом, вы можете использовать модель, как вы хотите, в вашем представлении XML

Вот так:

<Label text="Project ID" />
<Text text="{localModel>/projid}" />

Таким образом, вы можете отлаживать результаты запроса odata.

Спасибо.

...