oData中的问题读取绑定到sap.m.Select

时间:2018-02-24 16:44:59

标签: odata sapui5

我有下一期:

我正在尝试将XML数据响应绑定到XML视图中的sap.m.Select,但我没有成功绑定。

我在视图中有两个选择选项,一个是直接从后端绑定,但是当我从第一个选择中选择一个时我需要对另一个服务进行oData读取以显示第一个选择中所选值的详细信息

我的代码看起来像这样:

    detalleSelect: function(oEvent) {
        var id = oEvent.getSource();
        var catalogo, codGrupo;
        switch (id.getId()) {
            case "__xmlview0--objeto_grupo":
                catalogo = "B";
                var codGrupo = this.getView().byId("objeto_grupo").getSelectedKey();
                break;
            case "__xmlview0--sintoma_grupo":
                catalogo = "C";
                var codGrupo = this.getView().byId("sintoma_grupo").getSelectedKey();
                break;
            case "__xmlview0--causa_grupo":
                catalogo = "5";
                var codGrupo = this.getView().byId("causa_grupo").getSelectedKey();
                break;
            default:

        }
        this.selectOdataFill(catalogo, codGrupo);
    },

    selectOdataFill: function(catalogo, codGrupo) {

        var comboDetalle;

        switch (catalogo) {
            case "B":
                comboDetalle = "objeto_detalle";
                break;
            case "C":
                comboDetalle = "sintoma_detalle";
                break;
            case "5":
                comboDetalle = "causa_detalle";
                break;
            default:
        }

        console.log(comboDetalle);

        var step = 2;
        var afilters = new Array();
        var filterByName = new sap.ui.model.Filter("IKatalogart", sap.ui.model.FilterOperator.EQ, catalogo);
        afilters.push(filterByName);
        var filterByName = new sap.ui.model.Filter("IStep", sap.ui.model.FilterOperator.EQ, step);
        afilters.push(filterByName);
        var filterByName = new sap.ui.model.Filter("ICodegruppe", sap.ui.model.FilterOperator.EQ, codGrupo);
        afilters.push(filterByName);

        var oListBox = this.byId(comboDetalle);
        var sServiceUrl = "/sap/opu/odata/sap/ZPMGW_ORDENPMRFC_SRV_02/";
        var oConfig = {
            metadataUrlParams: {},
            json: true,
            defaultBindingMode: "OneWay",
            defaultCountMode: "Inline",
            useBatch: true // defaultOperationMode: "Auto"
        };

        var oModel = new sap.ui.model.odata.v2.ODataModel(sServiceUrl, oConfig);
        oModel.read("/CatalogosComboDetalleSet", {
            filters: afilters,
            success: function(oData, response) {
                var oItem = new sap.ui.core.ListItem({
                    key: "{Codegruppe}",
                    text: "{Kurztext}"
                });
                var oJSModel = new sap.ui.model.json.JSONModel(oData);

                console.log(oJSModel);
                oListBox.setModel(oJSModel, "myModel");
                console.log(oListBox.getModel());

                oListBox.bindAggregation("items", {
                    path: "{/oData>results}",
                    template: oItem
                });
            },
            error: function(oError) {}
        });

在controller.js我有这个:

id

响应没问题,我有数据,但模板不起作用,我不知道我做错了什么,如果有人知道,我会非常感激。

1 个答案:

答案 0 :(得分:1)

以下答案假设您只有一个具有两个不同实体集的oData服务。

在这种情况下,您希望在每个sap.m.Select控件中绑定不同的实体集。

我还假设两个实体集之间存在某种关系,可以使用网关服务中的导航属性来实现。

https://github.com/fabiopagoti/so-q48965163

最重要的部分:

查看

<f:SimpleForm layout="ResponsiveGridLayout" title="StackOverflow - Question 48965163" >
    <f:content>
        <Label text="Category"/>
        <Select items="{/Categories}" change="onChangeCategory">
            <items>
                <core:Item text="{Name}" key="{Id}"></core:Item>
            </items>
        </Select>
        <Label text="SubCategory"/>
        <Select id="subcategory-select" items="{ToSubCategories}">
            <items>
                <core:Item text="{Name}" key="{Id}"></core:Item>
            </items>
        </Select>
    </f:content>
</f:SimpleForm>

控制器

onInit: function(){
    this._subcategorySelect = this.byId("subcategory-select");
},

onChangeCategory: function(oEvent){
    var oSelectedItem = oEvent.getParameters().selectedItem;
    var oContext = oSelectedItem.getBindingContext();
    // var oCategory = oContext.getObject();

    this._subcategorySelect.bindElement(oContext.getPath());
}

如果你真的有两种不同的服务,你的应用程序中需要两个OData模型。

您可以强制第二个sap.m.Select控件使用其上的setModel函数调用来使用其他服务。

然后,你必须使用{&#34; item&#34;中的bindAggregation方法在第二个Select中调整绑定。属性。