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

oData读取绑定到sap.m.Select中的问题,odata,sapui5,Odata,Sapui5,我有下一期: 我试图将oData响应绑定到XML视图中的sap.m.Select,但绑定失败 我在视图中有两个选择选项,一个直接从后端绑定,但当我从第一个选择中选择一个时,我需要将oData读取到另一个服务,以显示在第一个选择中选择的值的详细信息 我拥有的代码如下所示: <f:FormElement id="label17" label="Parte Objeto"> <f:fields&g

我有下一期:

我试图将oData响应绑定到XML视图中的sap.m.Select,但绑定失败

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

我拥有的代码如下所示:

            <f:FormElement id="label17" label="Parte Objeto">
                                <f:fields>
                                    <Select enabled="true" id="objeto_grupo"
                                        items="{path: '/CatalogosComboSet', filters : [ { path : 'IKatalogart', operator : 'EQ', value1 : 'B'}, { path : 'IStep', operator : 'EQ', value1 : '1'} ] }"
                                        name="" placeholder="Tecnico ejecutor" selectedKey="{Codegruppe}" change="detalleSelect">
                                        <items>
                                            <core:ListItem id="__item_objeto_1" key="{Codegruppe}" text="{Kurztext}"/>
                                        </items>
                                    </Select>
                                    <Select enabled="true" id="objeto_detalle" name="" placeholder="Objeto" selectedKey="0">
                                        <items>
                                        </items>
                                    </Select>
                                </f:fields>
                            </f:FormElement>

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

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

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

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

最重要的部分:

看法

如果您确实有两种不同的服务,那么您的应用程序中将需要两种OData模型

通过对第二个sap.m.Select控件使用函数调用,可以强制该控件使用不同的服务


然后,您必须使用其“items”属性中的方法调整第二个Select中的绑定。

您可以发布您的服务元数据吗?您有两个不同的oData服务,还是只想将第二个选项绑定到不同的EntitySet?是相同的oData服务,不同的网关。这是什么意思?您是否在两个不同的后端系统中部署了相同的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) {}
        });
<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());
}