关系查询 - 距离2度

时间:2018-01-02 01:08:44

标签: google-app-maker

我有三种模式:

  1. 时间表
  2. 员工
  3. 管理器
  4. 我正在寻找需要经理批准的所有时间表(每位员工多次使用,每位员工一位经理)。

    我尝试过创建数据源并预取Employee和Employee.Manager,但到目前为止我还没有成功。

    这有诀窍吗?我是否需要加载查询然后再加载?或者创建一个中间数据源,同时包含Timesheet和Employee数据或其他内容?

2 个答案:

答案 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();
}