我有三种模式:
我正在寻找需要经理批准的所有时间表(每位员工多次使用,每位员工一位经理)。
我尝试过创建数据源并预取Employee和Employee.Manager,但到目前为止我还没有成功。
这有诀窍吗?我是否需要加载查询然后再加载?或者创建一个中间数据源,同时包含Timesheet和Employee数据或其他内容?
答案 0 :(得分:0)
您可以通过将查询过滤器应用于数据源onDataLoad事件或其他事件来实现。例如,您可以将下拉列表的值与Managers绑定到: @ datasource.query.filters.Employee.Manager._equals - 假设窗口小部件的数据源设置为Timesheets。
如果您从其他页面链接到该页面,您也可以调用脚本而不是使用预设操作。在链接上单击,调用下面的脚本,从链接页面传递所需的管理器对象。
function loadPageTimesheets(manager){
app.showPage(app.pages.Timesheets);
app.pages.Timesheets.datasource.query.filters.Employee.Manager._equals = manager;
app.pages.Timesheets.datasource.load();
}

答案 1 :(得分:0)
我建议稍微重新设计你的应用程序以使用App Maker的全部功能。您可以使用Directory Model(经理 - >员工)以及一个包含数据的表(Timesheets)。在这种情况下,您的时间表查询可能类似于:
// Server side script
function getTimesheets(query) {
var managerEmail = query.parameters.ManagerEmail;
var dirQuery = app.models.Directory.newQuery();
dirQuery.filters.PrimaryEmail._equals = managerEmail;
dirQuery.prefetch.DirectReports._add();
var people = dirQuery.run();
if (people.length === 0) {
return [];
}
var manager = people[0];
// Subordinates lookup can look fancier if you need recursively
// include everybody down the hierarchy chart. In this case
// it also will make sense to update prefetch above to include
// reports of reports of reports...
var subortinatesEmails = manager.DirectReports.map(function(employee) {
return employee.PrimaryEmail;
});
var tsQuery = app.models.Timesheet.newQuery();
tsQuery.filters.EmployeeEmail._in = subortinatesEmails;
return tsQuery.run();
}