使用 and:false 条件 SAPUI5 过滤日期范围的 Odata 服务值

Posted

技术标签:

【中文标题】使用 and:false 条件 SAPUI5 过滤日期范围的 Odata 服务值【英文标题】:Filtered the Odata service value for date range with and:false condition SAPUI5 【发布时间】:2020-05-07 14:25:30 【问题描述】:

enter image description here 我想实现 sap.ui.model.Filter 有新的 sap.ui.model.Filter(sPath, sap.ui.model.FilterOperator.BT, vValue1, vValue2); 像这样我有 8 个字段我只像这样过滤 但对于 2 个字段,我需要实现 and: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)
          
          
          );

现在我给了六个 过滤器.push(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 采用 and:true(您参考 https://sapui5.hana.ondemand.com/#/api/sap.ui.model.Filter此链接)

但是对于这个特定的过滤器,我需要给出 and:false 并将这个 and:false 给我的过滤器数组 filters

最终声明:总共 8 个值,其中 6 个是带有 and:true 的普通标准过滤器,并存储在 filters 数组中,另外 2 个带有 dat_type 的字段日期范围想要 和:假 并将其存储在 filters 数组中

在图像 2 中,我想要 and:falseand:true

中的其他值

【问题讨论】:

【参考方案1】:

据我了解您的问题,您共有 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

)

这表明您可以在过滤器中嵌套过滤器,这将是您解决问题的方法。在您的情况下,您需要三层嵌套。

【讨论】:

以上是关于使用 and:false 条件 SAPUI5 过滤日期范围的 Odata 服务值的主要内容,如果未能解决你的问题,请参考以下文章

SAPUI5 何时将初始过滤器绑定到控件

SAPUI5:是否可以在绑定过滤器中执行嵌套绑定

UI5-文档-2-开发环境

UI5-文档-1-前言

无法使用数据绑定设置过滤器值?

SAPUI5使用了哪些开源技术