(Solved) Filter Quick Filter Values

I have quick filter and i wanna set dynamically filters for each quick filter (related Filter).
Do you have solutions for my case? try to bind the value but not worked.
 
{
                    "operation": "insert",
                    "name": "QuickFilter_kp8pw59",
                    "values": {
                        "layoutConfig": {
                            "column": 9,
                            "colSpan": 2,
                            "rowSpan": 1,
                            "row": 1
                        },
                        "type": "crt.QuickFilter",
                        "config": {
                            "caption": "#ResourceString(QuickFilter_kp8pw59_config_caption)#",
                            "hint": "",
                            "icon": "filter-column-icon",
                            "iconPosition": "left-icon",
                            "defaultValue": [],
                            "entitySchemaName": "BsiArea",
                            "recordsFilter": {
                                "filterType": 6,
                                "items": {
                                    "byRegion": {
                                        "filterType": 1,
                                        "comparisonType": 3,
                                        "isEnabled": true,
                                        "leftExpression": {
                                            "expressionType": 0,
                                            "columnPath": "BsiRegion"
                                        },
                                        "rightExpression": {
                                            "expressionType": 2,
                                            "parameter": {
                                                "dataValueType": 10,
                                                "value": "SelectedRegionId"   // bind ke attribute
                                            }
                                        }
                                    }
                                }
                            }
                        },
 
Updated :
 
handlers: /**SCHEMA_HANDLERS*/[
			{
				request: "crt.HandleViewModelAttributeChangeRequest",
				handler: async (request, next) => {
					const regionQFAttrName = "QuickFilter_Region_Value"; // Region
					const areaQFAttrName = "QuickFilter_Area_Value"; // Area
					const outletQFAttrName = "QuickFilter_Cabang_Value"; // Outlet
 
					if (request.attributeName !== regionQFAttrName && request.attributeName !== areaQFAttrName) {
						return next?.handle(request);
					}
 
					const areaQFFilterAttrName = "QuickFilter_Area_ComboBox_List_Filter";
					const outletQFFilterAttrName = "QuickFilter_Cabang_ComboBox_List_Filter";
					const areaRegionColumnName = "BsiRegion";
					const outletRegionColumnName = "BsiRegion";
					const outletAreaColumnName = "BsiArea";
 
					const areaFilter = new sdk.FilterGroup();
					areaFilter.logicalOperation = sdk.LogicalOperatorType.Or;
					const outletFilter = new sdk.FilterGroup();
					outletFilter.logicalOperation = sdk.LogicalOperatorType.And;
					const outletFilterByRegion = new sdk.FilterGroup();
					outletFilterByRegion.logicalOperation = sdk.LogicalOperatorType.Or;
					const outletFilterByArea = new sdk.FilterGroup();
					outletFilterByArea.logicalOperation = sdk.LogicalOperatorType.Or;
 
					if (request.attributeName === regionQFAttrName) {
						let currentAreaValue = await request.$context[areaQFAttrName];
						const needAdditionalConfigurateoutletFilter = Array.isArray(currentAreaValue) && currentAreaValue.length > 0;
 
						if (Array.isArray(request.oldValue) && Array.isArray(request.value) && request.value.length > request.oldValue.length) {
							currentAreaValue = [];
							request.$context[areaQFAttrName] = [];
							request.$context[outletQFAttrName] = [];
						}
 
						if (Array.isArray(request.value) && request.value.length > 0) {
							for (var i = 0; i < request.value.length; i++) {
								await areaFilter.addSchemaColumnFilterWithParameter(sdk.ComparisonType.Equal, areaRegionColumnName, request.value[i].value);
								await outletFilterByRegion.addSchemaColumnFilterWithParameter(sdk.ComparisonType.Equal, outletRegionColumnName, request.value[i].value);
							}
							outletFilter.add(outletFilterByRegion);
						}
 
						request.$context[areaQFFilterAttrName] = areaFilter;
 
						if (needAdditionalConfigurateoutletFilter) {
							for (var i = 0; i < currentAreaValue.length; i++) {
								await outletFilterByArea.addSchemaColumnFilterWithParameter(sdk.ComparisonType.Equal, outletAreaColumnName, currentAreaValue[i].value);
							}
							outletFilter.add(outletFilterByArea);
						}
 
						request.$context[outletQFFilterAttrName] = outletFilter;
					}
 
					if (request.attributeName === areaQFAttrName) {
						const currentRegionValue = await request.$context[regionQFAttrName];
						const needAdditionalConfigurateoutletFilter = Array.isArray(currentRegionValue) && currentRegionValue.length > 0;
 
						if (Array.isArray(request.value) && request.value.length > 0) {
							for (var i = 0; i < request.value.length; i++) {
								await outletFilterByArea.addSchemaColumnFilterWithParameter(sdk.ComparisonType.Equal, outletAreaColumnName, request.value[i].value);
							}
							outletFilter.add(outletFilterByArea);
						}
 
						if (needAdditionalConfigurateoutletFilter) {
							for (var i = 0; i < currentRegionValue.length; i++) {
								await outletFilterByRegion.addSchemaColumnFilterWithParameter(sdk.ComparisonType.Equal, outletRegionColumnName, currentRegionValue[i].value);
							}
							outletFilter.add(outletFilterByRegion);
						}
 
						request.$context[outletQFFilterAttrName] = outletFilter;
					}
 
					return next?.handle(request);
				}
			},
			{
				request: "crt.HandleViewModelInitRequest",
				handler: async (request, next) => {
					const regionQFAttrName = "QuickFilter_Region_Value";
					const areaQFAttrName = "QuickFilter_Area_Value";
					const currentRegionValue = await request.$context[regionQFAttrName];
					const currentAreaValue = await request.$context[areaQFAttrName];
					const hasRegionValue = Array.isArray(currentRegionValue) && currentRegionValue.length > 0;
					const hasAreaValue = Array.isArray(currentAreaValue) && currentAreaValue.length > 0;
 
					if (!hasRegionValue && !hasAreaValue) {
						return next?.handle(request);
					}
 
					const areaQFFilterAttrName = "QuickFilter_Area_ComboBox_List_Filter";
					const outletQFFilterAttrName = "QuickFilter_Cabang_ComboBox_List_Filter";
					const areaModelColumnName = "BsiRegion";
					const outletRegionColumnName = "BsiRegion";
					const outletAreaColumnName = "BsiArea";
 
					const areaFilter = new sdk.FilterGroup();
					areaFilter.logicalOperation = sdk.LogicalOperatorType.Or;
					const outletFilter = new sdk.FilterGroup();
					outletFilter.logicalOperation = sdk.LogicalOperatorType.And;
					const outletFilterByRegion = new sdk.FilterGroup();
					outletFilterByRegion.logicalOperation = sdk.LogicalOperatorType.Or;
					const outletFilterByArea = new sdk.FilterGroup();
					outletFilterByArea.logicalOperation = sdk.LogicalOperatorType.Or;
 
					if (hasRegionValue) {
						for (var i = 0; i < currentRegionValue.length; i++) {
							await areaFilter.addSchemaColumnFilterWithParameter(sdk.ComparisonType.Equal, areaModelColumnName, currentRegionValue[i].value);
							await outletFilterByRegion.addSchemaColumnFilterWithParameter(sdk.ComparisonType.Equal, outletRegionColumnName, currentRegionValue[i].value);
						}
						outletFilter.add(outletFilterByRegion);
 
						request.$context[areaQFFilterAttrName] = areaFilter;
					}
 
					if (hasAreaValue) {
						for (var i = 0; i < currentAreaValue.length; i++) {
							await outletFilterByArea.addSchemaColumnFilterWithParameter(sdk.ComparisonType.Equal, outletAreaColumnName, currentAreaValue[i].value);
						}
 
						outletFilter.add(outletFilterByArea);
					}
 
					request.$context[outletQFFilterAttrName] = outletFilter;
 
					return next?.handle(request);
				}
			}
		]/**SCHEMA_HANDLERS*/,
Like 1

Like

3 comments

any one have idea?

Hi Fransetya Alfi Syahrin,

If I understand you correctly you are trying to dynamically change the filter value (SelectedRegionId).
Although there is no OOTB solution, you can try the following approach:

const quickFilter = await request.$context.QuickFilter_kp8pw59_Items_0_Arg_0;
quickFilter.target.customFilter.items.byLanguage.rightExpressions[0].parameter.value.value = SelectedRegionId; // assuming that SelectedRegionId is a variable that stores the Id

Hi Eduard Dovydovskyi,

Do I just add this _Items_0_Arg_0?

Show all comments