Filter product lists
One common requirement for product listings is to include a filtering function, which enables users to narrow down the list based on pre-defined criteria.
Norce satisfies this requirement through the use of Filters, and achieves this by using the ListProductFilters2 method. This method mirrors the ListProducts
method by utilizing the same input parameters, but returns filters based on the same result set that ListProducts
would return.
It's common to use ListProducts
and ListProductsFilter
simultaneously. While ListProducts
returns a batch of products, ListProductFilters
returns filtering information based on the full result. You can use this information to build a filtering mechanism in your app.
Norce Commerce provides several methods that are similar to ListProductFilters
but with some specific variations.
Name | Description |
---|---|
ListProductFiltersByCustomer | Corresponds to ListProductsByCustomer . |
ListProductFiltersByIds | Corresponds to ListProductsByIds |
ListProductFiltersByPricelist | Corresponds to ListProductsByPriceList |
A step-through example
Action | Implementation | Result |
---|---|---|
Clicks on a navigation listing (all Iphone's) | Calls ListProducts2 (with category smartphones and manufacturer apple) |
The first 10 apple phones are returned |
User chooses to further filter on “iPhone 11” | Calls ListProducts2 with same input parameters, except the variable “filter” that gets parf|L6360_13239 (where parameterid for model is 6360 and listid for iPhone11 is 13239) |
A new list of ProductItems is returned. Only Iphone 11 this time. (First 10 of 20) |
User chooses to further filter on “iPhone 11 Pro” | Calls ListProducts2 with same input parameters, and the variable “filter” has now parf|L6360_13239*L6360_13240 (where listid for iPhone11 pro is 13240) |
A new list of ProductItems is returned. Only Iphone 11 and 11 pro. (First 10 of 34) |
User chooses to further filter on “Internal Memory capacity” | Calls ListProducts2 with filter parf|L6360_13239*L6360_13240*L6361_13241 (where parameterid for memory is 6361 and listid for 128GB is 13241) |
A new list of ProductItems is returned, containing only product items with model Iphone 11 or 11 pro and internal memory at 128GB. (all product, 7 of 7 returned) |
User clicks out or into a product page. | GetProductById is called. |
See separate article about product presentation. |
The filter and filteritem
When using ListProductFilter
, you will receive a collection of filters that include a Name
, Type
, and a list of FilterItems
. The FilterItem
may contain different fields depending on the filter type and the parameter type.
See more about the filter schemas.
The Name
value is necessary if you need to add additional filtering to your subsequent calls to the Norce Commerce Product Service (for both ListProduct
and ListProductFilter
). The Type
value provides a more descriptive name.
Note
If all products in the result set belong to a specific filter, that filter will not be included in the response since it can no longer be used to narrow down the results.
For instance, if you list products belonging to a specific category, all products will have that category and no category filter will be included in the response.
All calls returns the following:
-
A
Filter
entity containing aName
attribute that is used for further filtering. The name ends with an "f" to indicate it is a filter. -
On the
FilterItem
level, each item has anId
that is used for further filtering, aCount
that indicates how many products have this filter, and aSortOrder
(if not null) that specifies how to sort the filters. If it exists,Uom
is the unit of measurement set on the parameter and can be used in conjunction with theName
.
How to further filter
To filter the product result based on user actions, you can create a filter string and pass it as an input parameter to both ListProduct
and ListProductFilter
. While ListProduct
will return a new result set, ListProductFilter
will return the same filters as before, but with updated count values.
The table below provides information on what the ListProductFilter
returns and how to use it for further filtering.
Note
Further filtering with many different types of filters implies a logical "and" operation between them. However, when dealing with multiple values of the same type, a logical "or" operation is applied except in the case of parametric filters. Please refer to the restrictions outlined in the table below.
Type (name) | Description | Restrictions | Further filtering |
---|---|---|---|
Category (catf ) |
Returns FilterItem. Id has the categoryId. Products can have one or more categories. |
Products can have 0, 1 or many. Filtering on more than one implies a logical “or” between them. |
catf|categoryId1,categoryId2; example: catf |11946,11947; |
Flag (flgf ) |
Returns FilterItem.Id has the flagId . |
Products can have 0, 1 or many. Filtering on more than one implies a logical “or” between them. |
flgf|flagId1,flagId2;flgf |42,46; |
Manufacturer (mfrf ) |
Returns FilterItem.Id has the manufacturerId . |
Products must have 1. Filtering on more than one implies a logical “or” between them. |
mfrf|manufacturerId1,manufacturerId2;mfrf |7276,7277; |
OnHand (ohf ) |
Returns FilterItem.Count has the number of products that has on-hand over 0. |
Products can have true or false. Multiple values are not allowed. |
ohf|[true or false];ohf |true; ohf|false; (or leave out) |
Price (prcf ) |
Returns FilterPriceItem. The fields From , To , FromIncVat , ToIncVat is returned. |
Products can have any decimal value. Multiple ranges are not allowed. |
prcf|[inc/excl vat]_[from]-[to]; prcf |true_12.50-25.00; prcf|false_10-20; |
Parametric (parf ) |
Returns a list of FilterItem's. | Products can have 0, 1 or many. ! or * separates the different parametric filters. Filtering on many different parametrics implies a logical “and” between them. Many filters between same parametric implies a logical “or”. |
parf|[list and multiplelist filters]*[range and bool filters]; parf|ListFilter*MultiFilter*RangeFilter*BoolFilter; |
Parametrics of type List | If returned, it is a FilterListItem Contains a list of FilterItem's representing the different parametric list values. |
- | L[ParameterId]_[ListValueId]*L6360_13239* |
Parametrics of type MultipleList | If returned, it is a FilterMultiItem | - | M[ParameterId]_[MultiListId]*M6355_3390* |
Parametrics of type Integer, Decimal or Date. | If returned, it is a FilterRangeItem | - | V[ParameterId]_[From]-[To]V60_256-1024 V123_1.4-2.5 |
Parametrics of type Boolean | If returned, it is a FilterBoolItemCount (number of Products that have the value true), FalseCount (number of Products that have the value false). |
- | V[ParameterId]_[0 or 1]-[0 or 1]V123_1-1 (123 is set to true)V123_0-0 (123 is set to false)V123_0-1 (123 is set to true or false) |
Note
Please note that all filter parameters are returned, however, the Text and Html parameters, despite being set as filters, will not be included.