Фильтрация модели в FIORI приводит к «f.forEach не является функцией» - PullRequest
0 голосов
/ 08 апреля 2020

Я пытаюсь прочитать модель с фильтром:

         var oFilter = new sap.ui.model.Filter({
            filters: [
                new sap.ui.model.Filter({
                    path: 'attr1',
                    operator: sap.ui.model.FilterOperator.EQ, 
                    value1: value
                }),
                new sap.ui.model.Filter({
                    path: 'attr2', 
                    operator: sap.ui.model.FilterOperator.EQ,
                    value1: value2
                })
            ], 
            and: true
        });

        model.read("/pathToEntitySet", 
            {
                success: function(oData, response) {
                    console.log("i am here");
                },
                error: function(oError){
                    console.log(oError);
                },
                filters: oFilter
            }
        );

Тем не менее, я всегда получаю «f.forEach не функция», когда я добавляю фильтры: oFilter в операцию model.read .

Я использую FF 68.5.

Есть идеи, откуда может возникнуть эта ошибка?

Ответы [ 2 ]

3 голосов
/ 09 апреля 2020

filters ожидает массив. Вы прошли один объект. Два варианта:

Опция A: отбросить оболочку

При применении нескольких фильтров с разными путями автоматически принимается AND. Таким образом, вы можете просто сделать

const aFilter = [
    new sap.ui.model.Filter({
        path: 'attr1',
        operator: sap.ui.model.FilterOperator.EQ, 
        value1: value
    }),
    new sap.ui.model.Filter({
        path: 'attr2', 
        operator: sap.ui.model.FilterOperator.EQ,
        value1: value2
    })
];

model.read("/pathToEntitySet", {
    success: ...
    error: ...
    filters: aFilter 
});

Вариант B: добавить еще одну оболочку

Оставьте свой фильтр как есть и просто поставьте скобки вокруг oFilter при передаче его filters:

model.read("/pathToEntitySet", {
    success: ...
    error: ...
    filters: [oFilter]
});
0 голосов
/ 09 апреля 2020

в операции чтения oData попробуйте поместить массив filters перед функцией обратного вызова, как упомянуто ниже:

  var oFilter = new sap.ui.model.Filter({
            filters: [
                new sap.ui.model.Filter({
                    path: 'attr1',
                    operator: sap.ui.model.FilterOperator.EQ, 
                    value1: value
                }),
                new sap.ui.model.Filter({
                    path: 'attr2', 
                    operator: sap.ui.model.FilterOperator.EQ,
                    value1: value2
                })
            ], 
            and: true
        });

        model.read("/pathToEntitySet", { 
                filters: oFilter,
                success: function(oData, response) {
                    console.log("i am here");
                },
                error: function(oError){
                    console.log(oError);
                }  
            });
...