无法从对 AdminDirectory 的用户列表请求构建计算数据源

Unable to build a calculated datasource from a user list request to AdminDirectory

我一直在尝试满足一个要求,我使用 App Maker 制作了一个应用程序,它是一个目录应用程序,用户将打开该应用程序的主页,并且应该能够在他在 G Suite 中所在的同一组织单位。

我了解到默认的人员或目录模型不显示 orgUnitPath 属性,所以我直接使用了 AdminDirectory。

在应用程序设置中,我启用了 AdminDirectory API。 我创建了一个名为 Test 的新计算数据源。 然后我向数据源添加了 3 个字段:primaryEmail、fllName 和 orgUnitPath。 然后在事件中我添加了以下脚本:

var usersArr = [];
var pageToken, page;
var conditions = {
    customer: 'my_customer',
    query: 'orgUnitPath=\'/OU_NAME\'',
    pageToken: pageToken 
}

do {
    page = AdminDirectory.Users.list(conditions);

    for (var i=0;i<page.users.length;i++)
    {
        console.log(page.users[i].orgUnitPath);
        usersArr.push(page.users[i].primaryEmail,page.users[i].name.fullName,page.users[i].orgUnitPath);

    }

    //page.users.forEach(function(user) {
        //usersArr.push(user.primaryEmail, user.name.fullName, user.orgUnitPath);
    //});

    if (page.nextPageToken) {
        conditions.pageToken = page.nextPageToken;
    }
} while (page.pageToken);

console.log(usersArr.length);
console.log(usersArr);
return usersArr;

当我尝试预览应用程序时,我在控制台中收到以下错误:

E - Tue Oct 16 11:36:43 GMT+300 2018 - The function queryRecords must return an array of records, but the array contained an element that was not a record. Error: The function queryRecords must return an array of records, but the array contained an element that was not a record.

E - Tue Oct 16 11:36:43 GMT+300 2018 - Executing query for datasource Test: (Error) : The function queryRecords must return an array of records, but the array contained an element that was not a record.

E - Tue Oct 16 11:36:43 GMT+300 2018 - Executing query for datasource Test failed.

我想我没有明白我需要将返回的数组转换为数据源可接受的正确格式,以便我可以使用它。

不确定我是否提供了所有必需的详细信息。请让我知道任何遗漏的信息,我会把它们放在这里!

我非常感谢对此的任何帮助或指导...

此致

App Maker 期望您为您正在定义的数据源(在本例中为 "Test" 条记录)return 一个 Record 对象数组。

您可以将此脚本放在数据源服务器脚本中,或者按照 Markus 的建议将其作为从数据源服务器脚本调用的函数。

var usersArr = [];
var pageToken, page;
var conditions = {
    customer: 'my_customer',
    query: 'orgUnitPath=\'/OU_NAME\'',
    pageToken: pageToken 
}

do {
    page = AdminDirectory.Users.list(conditions);

    for (var i = 0; i < page.users.length; i++) {
        var userRecord = app.models.Test.newRecord();

        userRecord.primaryEmail = page.users[i].primaryEmail;
        userRecord.fullName = page.users[i].name.fullName;
        userRecord.orgUnitPath = page.users[i].orgUnitPath;

        usersArr.push(userRecord);
    }

    if (page.nextPageToken) {
        conditions.pageToken = page.nextPageToken;
    }
} while (page.pageToken);

return usersArr;