How to prevent removing objects and fields from the query in ASP.NET Edition?
Last modified:
It is possible to deny removing datasources and uncheck fields from the query both server-side and client-side. Client-side checks allow for smoother user experience while server-side checks can be made for safety reasons and for checking manual changes to the query text.
Client-side:
var queryBuilder;
var required = {
table: 'Orders', field: { name: "OrderID", expression: "o.OrderID" }
};
AQB.Web.onQueryBuilderReady(function (qb) {
queryBuilder = qb;
qb.on(qb.Events.DataSourceDeleting, onDataSourceDeleting);
qb.on(qb.Events.DataSourceFieldRemoving, onDataSourceFieldRemoving);
});
function onDataSourceDeleting(dataSource, abort) {
if (isMainQuery() && dataSource.mdo.Name === required.table) {
abort.abort = true;
queryBuilder.StatusBarComponent.messageWarning('Removing the required table is locked.');
}
}
function onDataSourceFieldRemoving(field, abort) {
if (isMainQuery() &&
field.field &&
field.field.object.NameStr === required.field.name &&
field.table.Name === required.table) {
abort.abort = true;
queryBuilder.StatusBarComponent.messageWarning('Removing the required field is locked.');
}
}
function isMainQuery() {
return queryBuilder.ActiveSubQueryPath.length === 0;
}
The full list of client-side events can be found in the documentation: AQB ASP.NET 3 - JavaScript API Documentation.
You can perform much deeper checks by analyzing the query server-side. Server-side events are listed here: AQB ASP.NET 3 - Server-side Objects Reference
Please review the "Verifying Query Elements" and "Query Analysis" demos in the C# MVC demo project for .NET Framework and ASP.NET Core. These demos are included in the installation package and available on GitHub:
Demos for .NET Framework:
Demos for ASP.NET Core: