Я пытаюсь использовать служебную учетную запись для заполнения электронной таблицы для конечных пользователей.
Я использую этот скрипт для получения устройств ChromeOS:
function listChromeOSDevices_(accessToken) {
var devices = [];
var pageToken;
do {
var params = {
method: 'get',
headers: {
Authorization: 'Bearer ' + accessToken
}
};
var url =
'https://www.googleapis.com/admin/directory/v1/customer/my_customer/devices/chromeos?projection=full&orderBy=status&sortOrder=ascending&maxResults=100';
if (pageToken) {
url += '&pageToken=' + pageToken;
}
var urlResponse = UrlFetchApp.fetch(url, params);
var jsonContent = JSON.parse(urlResponse.getContentText());
devices = devices.concat(jsonContent.chromeosdevices);
pageToken = jsonContent.nextPageToken;
} while (pageToken);
return devices;
}
Затем пытаюсь выполнитьэто с результатами:
function main() {
var userEmail = 'admin@email.com';
var accessToken = getOAuthToken(userEmail);
var chromeOSDevices = listChromeOSDevices_(accessToken);
var date = new Date().toLocaleDateString();
var outputTableHeaders = [
'Date and Duration of Usage',
'Asset ID',
'Location',
'User',
'Admin Notes',
'Firmware Version',
'Last Synchronised',
'MAC Address',
'Device Model',
'Serial Number',
'OS Version',
'Platform Version',
'Device Status',
'OU Path'
];
var deviceResults = [outputTableHeaders].concat(
chromeOSDevices.map(function(device) {
device = fillInMissing_(device);
device.activeTimeRanges = sortArrByDateElement_(
device.activeTimeRanges,
'asc'
);
return [
dateConv_(
device.activeTimeRanges[device.activeTimeRanges.length - 1].date
) +
' for ' +
msToReadable_(
device.activeTimeRanges[device.activeTimeRanges.length - 1]
.activeTime
),
device.annotatedAssetId,
device.annotatedLocation,
device.annotatedUser,
device.notes,
device.firmwareVersion,
device.lastSync,
device.macAddress,
device.model,
device.serialNumber,
device.osVersion,
device.platformVersion,
device.status,
device.orgUnitPath
];
})
);
}
Однако я получаю сообщение об ошибке TypeError: Cannot call method "hasOwnProperty" of undefined.
Функции dateConv_ и msToReadable_ являются вспомогательными функциями - но они не являются проблемой (удалили их и имеют ту же проблему).
При выходе из ChromeOSDevices в основном коде он возвращает устройства, как и ожидалось (насколько я могу судить).
Однако при попытке использовать карту это почти так, как если бырезультаты потеряли какие-либо дополнительные свойства.С некоторой растерянностью это выглядит для меня нормально!
Ранее я использовал тот же метод для вывода результатов AdminDirectory.Chromeosdevices.list
(поэтому я знаю, что карта работала), но разработалнеобходимо использовать служебную учетную запись для некоторых из наших пользователей, которые не имеют необходимого уровня доступа для запуска сценария, и вот где он упал.
Кто-нибудь может выяснить, почему?Поскольку я сижу и смотрю на это час или два, и у меня ничего нет ...
Редактировать
Удаление вспомогательных функций из скрипта, я все еще получаю ошибку: TypeError: Cannot read property "annotatedAssetId" from undefined.
Редактировать 2
Выйти из системы следующим образом:
for (var index in chromeOSDevices) {
Logger.log("INDEX: %s - The user is : %s",index,chromeOSDevices[index].annotatedUser)
}
Я получаю этот ответ: Response @ pastebin