Отфильтровано значение службы Odata для диапазона дат с условием and: false SAPUI5 - PullRequest
0 голосов
/ 07 мая 2020

введите здесь описание изображения Я хотел бы реализовать sap.ui.model.Filter, у которого есть новый sap.ui.model.Filter (sPath, sap.ui.model.FilterOperator.BT, vValue1, vValue2); у меня есть 8 полей, которые я фильтрую только так, но для 2 полей мне нужно реализовать условие и: False .

https://sapui5.hana.ondemand.com/# / api / sap.ui .model.Filter

			var product = comboBoxValue.products;
			product.forEach(function (allproduct) {
				allproduct = allproduct.toUpperCase();
				 var productValue1 = new sap.ui.model.Filter("PRODUCT", sap.ui.model.FilterOperator.Contains, allproduct);
				 
				filters.push(productValue1);
			});
	
// filter the Country values 
			var country = comboBoxValue.locations;
			country.forEach(function (allcountry) {
				// allcountry = allcountry.toUpperCase();
				 var countryValue = new sap.ui.model.Filter("COUNTRY", sap.ui.model.FilterOperator.Contains, allcountry);
				
				 
				// filters.push(countryValue);
			});
	
			// filter the Status value 
			var status = comboBoxValue.status1;
			status.forEach(function (allstatus) {
				// allcountry = allcountry.toUpperCase();
				 var statusValue = new sap.ui.model.Filter("SUB_STATUS1", sap.ui.model.FilterOperator.Contains, allstatus);
			
				filters.push(statusValue);
			});

			// filter the Change type values
			var change_type = comboBoxValue.changes;
			change_type.forEach(function (allchanges) {
				// allcountry = allcountry.toUpperCase();
				 var changeValue = new sap.ui.model.Filter("CHANGE_TYPE", sap.ui.model.FilterOperator.Contains, allchanges);
			
				 
				filters.push(changeValue);
			});

			// filter the Submission type values
			var sub_type = comboBoxValue.Submissions1;
			sub_type.forEach(function (allsub) {
				allsub = allsub.toUpperCase();
				 subValue = new sap.ui.model.Filter("SUB_TYPE", sap.ui.model.FilterOperator.Contains, allsub);
				 	
				filters.push(subValue);
			});

			// filter the Manufacturing Stage
			var manu_stage = comboBoxValue.stages1;
			manu_stage.forEach(function (allstage) {
				allstage = allstage.toUpperCase();
				 var stageValue = new sap.ui.model.Filter("MANUFACTURING_STAGE", sap.ui.model.FilterOperator.Contains, allstage);
				
				filters.push(stageValue);
			});
			

			

filters - это массив, который я передаю в службу oData, например

	oModel6.read("/gantt", {
				filters: filters,
				success: function (oData, oResponse) {
					// checking if its region Gantt Chart view
					console.log("filtered data will come in oData ");
          }
          error: function(e){
          
          }
          });

теперь у меня есть шесть фильтров .pu sh (productValue1); передача после var productValue1 = new sap.ui.model.Filter ("PRODUCT", sap.ui.model.FilterOperator.Contains, allproduct); фильтруя его с помощью контрольного фильтра Sapui5. объединить фильтры. Теперь мне нужно еще 2 фильтра для диапазона дат как

for (var g = 0; g < comboBoxValue.date_type.length; g++) {
				
				var range = new sap.ui.model.Filter(comboBoxValue.date_type[g], sap.ui.model.FilterOperator.BT, sFrom, sTo);
		oFilter.push(range);
  	
			}

в этом я передаю несколько значений comboBoxValue.date_type и дату начала, дату окончания для него
Для другого фильтра его стандартный sapui5 принимает и: true (вы ссылаетесь на https://sapui5.hana.ondemand.com/# / api / sap.ui.model.Filter на эту ссылку)

, но для этого конкретного фильтра мне нужно указать and: false и дать это и : false в мой массив фильтров, называемый filters

final statement: total 8 value, где 6 - обычный стандартный фильтр с и: true и сохранение в фильтрах массив и еще 2 диапазона дат поля с dat_type want и: false и сохраните это в фильтрах array

На изображении 2 значения, которые я хочу в и: false и другие в и: true

1 Ответ

0 голосов
/ 08 мая 2020

Насколько я понимаю вашу проблему, у вас всего 8 условий, для которых вы хотите, чтобы 6 из них были объединены с «или», а два из них - с «и». Это поведение объясняется в docs с образцом № 3.

new Filter({
filters: [
  ...
  new Filter({
    path: 'Quantity',
    operator: FilterOperator.LT,
    value1: 20
  }),
  new Filter({
    path: 'Price',
    operator: FilterOperator.GT,
    value1: 14.0
  })
  ...
],
and: true|false

})

Это показывает, что вы можете вкладывать фильтры в фильтры, которые будут способ решить вашу проблему. В вашем случае вам понадобится три слоя вложения.

...