I have smartFilter with smart table and I am trying to exclude item from result. I have following code:
var oBindingParameters = oEvent.getParameter("bindingParams");
var currVal = this._aItemsForLink[0];
var filter = new Filter({filters:[
new sap.ui.model.Filter("RevisionNumber", sap.ui.model.FilterOperator.EQ, currVal.RevisionNumber),
new sap.ui.model.Filter("CompanyCode", sap.ui.model.FilterOperator.EQ, currVal.CompanyCode),
new sap.ui.model.Filter("FiscalYear", sap.ui.model.FilterOperator.EQ, currVal.FiscalYear),
new sap.ui.model.Filter("Invoice", sap.ui.model.FilterOperator.EQ, currVal.Invoice),
new sap.ui.model.Filter("InvoiceYear", sap.ui.model.FilterOperator.EQ, currVal.InvoiceYear)
],and : true});
oBindingParameters.filters = [filter];
Is there a way to implement logical negation for this filter? Something like:
WHERE NOT ( companycode = '...' and revisionnumber = '...' and accountingdocument = '...' and invoice = '...' and fiscalyear = '...' )
A logical expression of the form NOT ( V1 = C1 and V2 = C2 and ... Vn = Cn ) is identical to this: V1 ne C1 or V2 ne C2 or ... Vn ne Cn. So, in your case it would be:
var filter = new Filter({filters:[
new sap.ui.model.Filter("RevisionNumber", sap.ui.model.FilterOperator.NE, currVal.RevisionNumber),
new sap.ui.model.Filter("CompanyCode", sap.ui.model.FilterOperator.NE, currVal.CompanyCode),
new sap.ui.model.Filter("FiscalYear", sap.ui.model.FilterOperator.NE, currVal.FiscalYear),
new sap.ui.model.Filter("Invoice", sap.ui.model.FilterOperator.NE, currVal.Invoice),
new sap.ui.model.Filter("InvoiceYear", sap.ui.model.FilterOperator.NE, currVal.InvoiceYear)
],and : false});
Keep in mind though that NE (Not Equal) operator in SQL WHERE clause can be very expensive when applied to key fields.