我正在开发一个具有高级搜索功能的应用程序,它可以帮助用户从下拉列表和文本框(下拉菜单中选择列和子句,用于输入搜索参数的文本框)中过滤数据,如下所示:
我试图将列的名称下拉列表绑定到@datasource.query.parameters.Parameter
,并像这样更改数据源的“查询”部分:
Datasource's Query Script and Parameters
但是,我不断收到
之类的错误在“ where”子句中使用参数“ Column”,但未在属性“ parameters”中定义
能否请您告诉我如何解决此问题? 预先感谢。
答案 0 :(得分:0)
在这种情况下,您实际上必须构造“ Where”子句,然后将where子句的参数设置为等于您的参数。因此,假设您的第一组参数是Column1:名称,Query1:包含,Parameter1:John,那么您的数据源需要具有以下参数Column1,Query1和Parameter1,并且您在dropdown1,dropdown2和textbox1上的绑定应为:
@datasource.query.parameters.Column1
@datasource.query.parameters.Query1
@datasource.query.parameters.Parameter1
分别。
然后您的查询脚本需要如下:
if (query.parameters.Field1 === null || query.parameters.Query1 === null) {
throw app.ManagedError('Cannot complete query without Parameters!');
}
switch (app.metadata.models.MaintenanceManagement.fields[query.parameters.Field1].type) {
case 'Number':
query.parameters.Parameter1 = Number(query.parameters.Parameter1);
break;
case 'Date':
query.parameters.Parameter1 = new Date(query.parameters.Parameter1);
break;
case 'Boolean':
if (query.parameters.Parameter1 === 'True' || query.parameters.Parameter1 === 'true') {
query.parameters.Parameter1 = true;
} else {
query.parameters.Parameter1 = false;
}
break;
default:
query.parameters.Parameter1 = query.parameters.Parameter1;
}
query.where = query.parameters.Column1 + " " + query.parameters.Query1 + "? :Parameter1";
return query.run();
因此,您的where语句从本质上变成了一个读取“名称包含? :Parameter1'(即John),然后成为您的查询。希望这有道理,请随时提出后续问题。