Advanced Features
Group Intervals
DevExtreme supports grouping fields by various intervals for dates, numbers, and strings.
Date Grouping
{
"group": [
{
"selector": "orderDate",
"groupInterval": "month"
}
]
}Supported Date Intervals:
- year - Group by year (2024, 2025, etc.)
- quarter - Group by quarter (Q1, Q2, Q3, Q4)
- month - Group by month (2024-01, 2024-02, etc.)
- day - Group by day (2024-01-15)
- dayOfWeek - Group by day of week (0-6)
- hour - Group by hour
- minute - Group by minute
Numeric Grouping
{
"group": [
{
"selector": "price",
"groupInterval": 1000
}
]
}Results in ranges: 0-999, 1000-1999, 2000-2999, etc.
String Grouping
{
"group": [
{
"selector": "productName",
"groupInterval": 3
}
]
}Groups by first 3 characters: “App” (Apple, Application), “Ban” (Banana, Band), etc.
UUID Support
DEV1.0 Picnic provides native UUID support across all databases.
import java.util.UUID;
@Table("users")
public class User {
@Id
@Column("user_id")
private UUID id; // Native UUID support
@Column("external_id")
private UUID externalId;
// PostgreSQL: UUID array support
@ArrayColumn(type = ArrayType.POSTGRESQL_ARRAY)
private List<UUID> relatedUserIds;
}
// Filtering by UUID
// {"filter": ["id", "=", "550e8400-e29b-41d4-a716-446655440000"]}Export Mode
Optimize queries for full data exports without pagination:
{
"isLoadingAll": true,
"filter": ["active", "=", true],
"sort": [{"selector": "lastName", "desc": false}]
}DevExtremeLoadOptions options = DevExtremeLoadOptionsParser.fromJson(jsonRequest);
// Check if exporting
if (Boolean.TRUE.equals(options.getIsLoadingAll())) {
gridDataProvider.setQueryTimeout(300); // 5 minutes for large exports
}
DevExtremeResult<Employee> result = gridDataProvider
.query(Employee.class)
.loadOptions(options)
.executeDevExtreme();
// Returns all matching records without pagination
List<Employee> allEmployees = (List<Employee>) result.getData();Multi-Level Grouping
{
"group": [
{ "selector": "departmentId", "isExpanded": true },
{ "selector": "managerId", "isExpanded": true },
{ "selector": "active", "isExpanded": false }
],
"groupSummary": [
{"selector": "salary", "summaryType": "sum"},
{"selector": "id", "summaryType": "count"}
]
}Count Semantics:
- Single-level collapsed groups:
count= number of items - Multi-level expanded parent groups:
count= number of immediate child groups - Summary counts: Always reflect actual item counts
Testing
Unit Tests
mvn testIntegration Tests
Integration tests use TestContainers for real database testing:
mvn verifyCode Coverage
Generate JaCoCo coverage report:
mvn test jacoco:reportReport location: target/site/jacoco/index.html
Last updated on