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
3 comments
19:43 Sep 30, 2025
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
06:40 Oct 02, 2025
Hi Eduard Dovydovskyi,
Do I just add this _Items_0_Arg_0?
Show all comments