Data Filters
Data filters define the record-level restrictions in Advanced Cloud Security. This guide explains how to create, configure, and manage data filters.
Creating Data Filters
Accessing Data Access
- Open Define Security Features
- Select a security feature
- In the Data Access Filters part (embedded on the Security Features page), add a new line
Adding a Filter
- Use the assist edit (...) in the Table Name column to select a table
- Use the assist edit (...) in the Field Name column to select a field
- Enter the filter expression in the Filter Value column
Filter Expression Syntax
Basic Equality
EUROPE
Field equals "EUROPE"
Multiple Values (OR)
DE|FR|IT|ES
Field equals any of these values (OR logic)
Range
1000..2000
Field is between 1000 and 2000
Not Equal
<>BLOCKED
Field is not equal to "BLOCKED"
Greater/Less Than
>0
Field is greater than 0
<100
Field is less than 100
Wildcards
SALES*
Field starts with "SALES"
*INC
Field ends with "INC"
*CORP*
Field contains "CORP"
Empty/Not Empty
''
Field is empty
<>''
Field is not empty
Dynamic Filters (Filter Codes)
User-Specific Values
ACS supports dynamic filters through filter codes. Filter codes are named placeholders (e.g., UF_23) that resolve to user-specific values at runtime. Values are configured per user in the User Security Filters page.
Built-in Filter Codes
Common built-in filter codes:
| Filter Code | Description |
|---|---|
UF_50 |
User ID Filter |
UF_2 |
User Name |
UF_21 |
Salespers./Purch. Code |
UF_22 |
Country/Region Code |
UF_23 |
Location Code |
UF_24 |
Global Dimension 1 Code |
UF_25 |
Global Dimension 2 Code |
See Filter Codes for the complete list.
Event-Supplied Filter Codes
You can also create custom filter codes of type "Event Supplied" that are resolved through AL events. These are configured in the Filter Codes page.
Filter Examples
Example 1: Regional Customer Filter
Goal: Salespeople see only their region's customers
Configuration:
| Table | Field | Filter |
|---|---|---|
| Customer | Country/Region Code | Filter code UF_22 |
User Security Filters values:
| User | Country/Region Code (UF_22) |
|---|---|
| JOHN | DE|;FR |
| JANE | US|;CA |
Example 2: Active Records Only
Goal: Users see only non-blocked customers
Configuration:
| Table | Field | Filter |
|---|---|---|
| Customer | Blocked | '' (empty) |
Example 3: High-Value Customers
Goal: Show customers with credit limit over 10,000
Configuration:
| Table | Field | Filter |
|---|---|---|
| Customer | Credit Limit (LCY) | >10000 |
Example 4: Own Documents
Goal: Users see only their assigned documents
Configuration:
| Table | Field | Filter |
|---|---|---|
| Sales Header | Assigned User ID | Filter code UF_50 |
Multiple Filters
Same Table, Multiple Fields
Multiple filters on the same table use AND logic:
Customer
├── Region Code = 'EUROPE'
└── Blocked = '' (not blocked)
User sees European customers who are not blocked.
Multiple Tables
A feature can filter multiple tables:
Feature: SALES-EUROPE
├── Customer: Country = 'DE|FR|IT'
├── Sales Header: Sell-to Country = 'DE|FR|IT'
├── Sales Line: (inherits from header)
└── Sales Invoice: Sell-to Country = 'DE|FR|IT'
Filter Inheritance
Document Headers and Lines
When filtering a header table:
- Lines typically filtered by relation to header
- But explicit line filters may be needed
- Test both header and line pages
Parent-Child Relationships
Consider filtering related tables consistently:
| Parent Table | Child Table |
|---|---|
| Customer | Customer Ledger Entry |
| Vendor | Vendor Ledger Entry |
| Item | Item Ledger Entry |
Testing Data Filters
Test Procedure
- Assign the feature to a test user
- Log in as the test user
- Open the filtered list page
- Verify correct records appear
Test Cases
- Only matching records appear
- No matching records = empty list (no error)
- Lookups show filtered data
- Related pages work correctly
- Creating new records works
Edge Cases
- What happens with zero matching records?
- What if user creates a non-matching record?
- Do lookups work correctly?
- Do related statistics work?
Filter Performance
Performance Considerations
Filters add to query WHERE clauses:
- Filter on indexed fields when possible
- Avoid complex wildcard patterns
- Test with realistic data volumes
- Monitor for performance issues
Indexing
Ensure filtered fields have appropriate indexes:
- Check table key structure
- Consider index impact
- Work with DBA if needed
Combining Static and Dynamic
You can combine static values and placeholders:
$UF_22$|INTERNATIONAL
User sees their Country/Region Code value plus all INTERNATIONAL customers.
Filter Troubleshooting
No Records Showing
- Check filter expression syntax
- Verify user's filter values are set
- Test filter manually in BC
- Check for AND logic issues
Too Many Records
- Verify filter is applied
- Check feature is assigned
- Confirm extension was regenerated
- Review Effective Security
Wrong Records Showing
- Check filter expression
- Verify user filter values
- Test with different user
- Check for multiple features
Best Practices
Use Meaningful Filter Codes
REGIONnotR1SALESPERSONnotSP- Document what each code means
Document Filter Logic
Record:
- Business purpose
- Filter expression
- Expected behavior
- Related tables to filter
Test with Production-Like Data
- Test with realistic data volumes
- Verify edge cases
- Check performance
Review Regularly
- Audit filter configurations
- Update as business changes
- Remove obsolete filters