一个简单的设置:部门:员工,1:M和一个搜索表单,其中过滤了FirstName =,lastname =,电子邮件包含,年龄> =,加入日期<=和相关部门=。
然后,提交按钮将打开一个结果页面,并将数据源设置为适当的搜索方法。我在直接绑定到@ datasource,query.filters.FirstName_equals等的位置进行了直接过滤。我有一个基于查询buillder解决方案的数据源和一个基于查询脚本的第三个解决方案。适当的搜索结果页面会在“提交”上打开,结果页面的数据源将设置为适当的数据源:过滤器,查询生成器或查询脚本。
基于该数据源使用查询脚本和结果页面的解决方案如下:-
查询脚本
var params = query.parameters;
return getEmployeeRecords_(
params.param_FirstName,
params.param_LastName,
params.param_Email,
params.param_StartDate,
params.param_Age,
params.param_Department
);
和
function getEmployeeRecords_( firstName, lastName, email, startDate, age,
department) {
var ds = app.models.Employee.newQuery();
if ( firstName )
ds.filters.FirstName._equals = firstName;
if ( lastName )
ds.filters.LastName._equals = lastName;
if ( email )
ds.filters.Email._contains = email;
if ( startDate )
ds.filters.StartDate._greaterThanOrEquals = startDate;
if ( age )
ds.filters.Age._lessThanOrEquals = parseInt(age, 10);
if ( department )
ds.filters.Department.Department._equals = department;
var records = ds.run();
var recs = records.length;
// update calculated model with record count
var calculatedModelRecords = [];
var calculatedModelRecord = app.models.Employee_RecordCount.newRecord();
calculatedModelRecord.RecordCount = recs;
calculatedModelRecords.push(calculatedModelRecord);
return records;
}
在查询脚本的结果页面上,数据源分页刚刚中断。正确返回8条记录的查询(其中查询页面大小设置为5)使我可以根据需要将分页器转到页面1000,但是数据源始终位于记录的第一页上。将页面大小设置为例如100,可以清楚地显示正确的结果集。直接绑定和查询构建器数据源按预期工作。
进行这些不同搜索的原因是为了测试和评估每个选项,并且还能够返回记录计数,而这只能使用查询脚本来完成。
关于这种异常的App Maker行为的原因,有人知道吗?
当我查询计算的模型Employee_RecordCount以使用带有“记录数:” + @ datasources.Employee_RecordCount.item.RecordCount的文本的UI标签检索记录数时,这也显示为空。
使用计算出的模型Employee_RecordCount检索记录计数的最佳方法是什么?
答案 0 :(得分:0)
我不确定您的实际代码是否在每个if语句中省略了{},或者您是否只是未在问题中包括它们。但是,请在下面查看我对您的代码提出的建议更改:
function getEmployeeRecords_( firstName, lastName, email, startDate, age, department) {
var ds = app.models.Employee.newQuery();
if ( firstName !== null ) {
ds.filters.FirstName._equals = firstName;
}
if ( lastName !== null ) {
ds.filters.LastName._equals = lastName;
}
if ( email !== null) {
ds.filters.Email._contains = email;
}
if ( startDate !== null) {
ds.filters.StartDate._greaterThanOrEquals = startDate;
}
if ( age !== null) {
ds.filters.Age._lessThanOrEquals = parseInt(age, 10);
}
if ( department !== null) {
ds.filters.Department.Department._equals = department;
}
var records = ds.run();
var recs = records.length;
// update calculated model with record count
var calculatedModelRecord = app.models.Employee_RecordCount.newRecord();
calculatedModelRecord.RecordCount = recs;
return [calculatedModelRecord];
}
对于分页问题,由于某种原因,AM在计算模型方面一直存在该问题。他们的AM问题跟踪器中可能存在错误报告。