通过 Appmaker 在 JSON 中添加空格和 LR
Added spaces and LRs in JSON via Appmaker
我正在使用 AppMaker 创建一个新的 employee/user 配置工作流程。我正在创建一个新的 G Suite 用户,我的 JSON 中的 spaces 有一个非常奇怪的问题。它导致错误:GoogleJsonResponseException:API 调用 directory.users.insert 失败,出现错误:
Invalid Input at provisionUser (AdminDirectory:5)
我已经解决这个问题一段时间了,似乎在 AppMaker 和 AdminDirectory 调用之间的某个地方,一些额外的 spaces 和硬 returns 被插入到我的用户数据中。下面我要展示:
- 收集用户信息的客户端代码
- 服务器端用户创建脚本
- 用户的控制台输出JSON
- 用户 JSON 来我的电子邮件进行故障排除的输出
- 在 Notepad++ 中看到的电子邮件输出
客户端代码
...a bunch of data gathering from a form, then...
var user = {
primaryEmail: email,
name: {
givenName: firstName,
familyName: lastName
},
addresses: [{
type: 'work',
formatted: address
}],
organizations: [{
title: title,
department: department,
fullTimeEquivalent: ftpt
}],
phones: [{
type: 'work',
value: phone
}],
locations: [{
buildingId: building,
type: 'desk',
area: 'desk'
}],
password: 'xxxxxxxx',
changePasswordAtNextLogin: true,
orgUnitPath: orgUnit,
relations: [{
type: 'manager',
value: supervisor
}],
customSchemas: {
sclsnj: {
startDate: effective,
mls: mls,
location: location
}
}
};
google.script.run.provisionUser(user, grouparray);
服务器端代码
function provisionUser(user, grouparray) {
user = JSON.stringify(user);
MailApp.sendEmail('lhoffman@xxxxxxxx.org', 'New Google User', user);
console.log(user);
user = AdminDirectory.Users.insert(user);
for (var g = 0; g < grouparray.length; g++) {
var groupEmail = grouparray[g] + '@xxxxxxxx.org';
var member = {
email: user,
role: 'MEMBER'
};
Logger.log(groupEmail);
AdminDirectory.Members.insert(member, groupEmail);
}
}
控制台输出
{"primaryEmail":"jsmith@xxxxxxxx.org","name":{"givenName":"John","familyName":"Smith"},"addresses":[{"type":"work","formatted":"Bound Brook branch\n402 E High Street, Bound Brook, NJ 08805"}],"organizations":[{"title":"Library Technician","department":"Adult Services","fullTimeEquivalent":100000}],"phones":[{"type":"work","value":"908-458-8410"}],"locations":[{"buildingId":"BBROOK","type":"desk","area":"desk"}],"password":"xxxxxxxx","changePasswordAtNextLogin":true,"orgUnitPath":"/Branches/Bound Brook branch","relations":[{"type":"manager","value":"msmith@xxxxxxxx.org"}],"customSchemas":{"sclsnj":{"startDate":"2019-05-20T04:00:00.000Z","mls":false,"location":"Bound Brook branch"}}}
电子邮件输出
{"primaryEmail":"jsmith@xxxxxxxx.org","name":{"givenName":"John","familyName":"Smith"},"addresses":[{"type":"work","formatted":"Bound
Brook
branch\n402 E High Street, Bound Brook, NJ
08805"}],"organizations":[{"title":"Library Technician","department":"Adult
Services","fullTimeEquivalent":100000}],"phones":[{"type":"work","value":"908-458-8410"}],"locations":[{"buildingId":"BBROOK","type":"desk","area":"desk"}],"password":"xxxxxxxx","changePasswordAtNextLogin":true,"orgUnitPath":"/Branches/Bound
Brook
branch","relations":[{"type":"manager","value":"msmith@xxxxxxxx.org"}],"customSchemas":{"sclsnj":{"startDate":"2019-05-20T04:00:00.000Z","mls":false,"location":"Bound
Brook branch"}}}
Notepad++ 中的电子邮件输出(带控制字符)
注意:我意识到 JSON 实际上在图像中出现了两次,但您肯定可以看到额外的 space 和左进纸字符。
我已经确认我可以通过使用 Google API 资源管理器并将其复制并粘贴到目录 API 的请求正文中来为用户提供控制台输出Users.insert.
我还确认输出的电子邮件版本不使用相同的方法工作。当我将该版本粘贴到 API Explorer 的请求正文中时,我收到错误警报,并且从正文字段中的颜色编码可以清楚地看出它是不正确的。即使我不将输出通过电子邮件发送给自己,我也会遇到相同的错误行为,所以我很确定发送电子邮件的行为不会把事情搞砸。
求助!!
如果你这样做会发生什么?
function provisionUser(user, grouparray) {
var user = JSON.stringify(user);
MailApp.sendEmail('lhoffman@xxxxxxxx.org', 'New Google User', user);
console.log(user);
AdminDirectory.Users.insert(user);
for (var g = 0; g < grouparray.length; g++) {
var groupEmail = grouparray[g] + '@xxxxxxxx.org';
var member = {
email: user,
role: 'MEMBER'
};
Logger.log(groupEmail);
AdminDirectory.Members.insert(member, groupEmail);
}
}
无效输入是特定字段格式不正确的结果。在您的情况下,我看到您正在使用自定义架构。自定义架构中有一个格式不正确的特定字段,即 startDate。不要提供 2019-05-20T04:00:00.000Z 的值,而只需使用 2019-05-20。
原因是该字段需要 完整日期 值而不是 完整日期加上小时和分钟 。正如您在 ISO-8601 date format 上看到的那样, 完整日期 格式为 YYYY-MM-DD.
参考:https://developers.google.com/admin-sdk/directory/v1/reference/schemas/insert
我正在使用 AppMaker 创建一个新的 employee/user 配置工作流程。我正在创建一个新的 G Suite 用户,我的 JSON 中的 spaces 有一个非常奇怪的问题。它导致错误:GoogleJsonResponseException:API 调用 directory.users.insert 失败,出现错误:
Invalid Input at provisionUser (AdminDirectory:5)
我已经解决这个问题一段时间了,似乎在 AppMaker 和 AdminDirectory 调用之间的某个地方,一些额外的 spaces 和硬 returns 被插入到我的用户数据中。下面我要展示:
- 收集用户信息的客户端代码
- 服务器端用户创建脚本
- 用户的控制台输出JSON
- 用户 JSON 来我的电子邮件进行故障排除的输出
- 在 Notepad++ 中看到的电子邮件输出
客户端代码
...a bunch of data gathering from a form, then...
var user = {
primaryEmail: email,
name: {
givenName: firstName,
familyName: lastName
},
addresses: [{
type: 'work',
formatted: address
}],
organizations: [{
title: title,
department: department,
fullTimeEquivalent: ftpt
}],
phones: [{
type: 'work',
value: phone
}],
locations: [{
buildingId: building,
type: 'desk',
area: 'desk'
}],
password: 'xxxxxxxx',
changePasswordAtNextLogin: true,
orgUnitPath: orgUnit,
relations: [{
type: 'manager',
value: supervisor
}],
customSchemas: {
sclsnj: {
startDate: effective,
mls: mls,
location: location
}
}
};
google.script.run.provisionUser(user, grouparray);
服务器端代码
function provisionUser(user, grouparray) {
user = JSON.stringify(user);
MailApp.sendEmail('lhoffman@xxxxxxxx.org', 'New Google User', user);
console.log(user);
user = AdminDirectory.Users.insert(user);
for (var g = 0; g < grouparray.length; g++) {
var groupEmail = grouparray[g] + '@xxxxxxxx.org';
var member = {
email: user,
role: 'MEMBER'
};
Logger.log(groupEmail);
AdminDirectory.Members.insert(member, groupEmail);
}
}
控制台输出
{"primaryEmail":"jsmith@xxxxxxxx.org","name":{"givenName":"John","familyName":"Smith"},"addresses":[{"type":"work","formatted":"Bound Brook branch\n402 E High Street, Bound Brook, NJ 08805"}],"organizations":[{"title":"Library Technician","department":"Adult Services","fullTimeEquivalent":100000}],"phones":[{"type":"work","value":"908-458-8410"}],"locations":[{"buildingId":"BBROOK","type":"desk","area":"desk"}],"password":"xxxxxxxx","changePasswordAtNextLogin":true,"orgUnitPath":"/Branches/Bound Brook branch","relations":[{"type":"manager","value":"msmith@xxxxxxxx.org"}],"customSchemas":{"sclsnj":{"startDate":"2019-05-20T04:00:00.000Z","mls":false,"location":"Bound Brook branch"}}}
电子邮件输出
{"primaryEmail":"jsmith@xxxxxxxx.org","name":{"givenName":"John","familyName":"Smith"},"addresses":[{"type":"work","formatted":"Bound
Brook
branch\n402 E High Street, Bound Brook, NJ
08805"}],"organizations":[{"title":"Library Technician","department":"Adult
Services","fullTimeEquivalent":100000}],"phones":[{"type":"work","value":"908-458-8410"}],"locations":[{"buildingId":"BBROOK","type":"desk","area":"desk"}],"password":"xxxxxxxx","changePasswordAtNextLogin":true,"orgUnitPath":"/Branches/Bound
Brook
branch","relations":[{"type":"manager","value":"msmith@xxxxxxxx.org"}],"customSchemas":{"sclsnj":{"startDate":"2019-05-20T04:00:00.000Z","mls":false,"location":"Bound
Brook branch"}}}
Notepad++ 中的电子邮件输出(带控制字符)
注意:我意识到 JSON 实际上在图像中出现了两次,但您肯定可以看到额外的 space 和左进纸字符。
我已经确认我可以通过使用 Google API 资源管理器并将其复制并粘贴到目录 API 的请求正文中来为用户提供控制台输出Users.insert.
我还确认输出的电子邮件版本不使用相同的方法工作。当我将该版本粘贴到 API Explorer 的请求正文中时,我收到错误警报,并且从正文字段中的颜色编码可以清楚地看出它是不正确的。即使我不将输出通过电子邮件发送给自己,我也会遇到相同的错误行为,所以我很确定发送电子邮件的行为不会把事情搞砸。
求助!!
如果你这样做会发生什么?
function provisionUser(user, grouparray) {
var user = JSON.stringify(user);
MailApp.sendEmail('lhoffman@xxxxxxxx.org', 'New Google User', user);
console.log(user);
AdminDirectory.Users.insert(user);
for (var g = 0; g < grouparray.length; g++) {
var groupEmail = grouparray[g] + '@xxxxxxxx.org';
var member = {
email: user,
role: 'MEMBER'
};
Logger.log(groupEmail);
AdminDirectory.Members.insert(member, groupEmail);
}
}
无效输入是特定字段格式不正确的结果。在您的情况下,我看到您正在使用自定义架构。自定义架构中有一个格式不正确的特定字段,即 startDate。不要提供 2019-05-20T04:00:00.000Z 的值,而只需使用 2019-05-20。
原因是该字段需要 完整日期 值而不是 完整日期加上小时和分钟 。正如您在 ISO-8601 date format 上看到的那样, 完整日期 格式为 YYYY-MM-DD.
参考:https://developers.google.com/admin-sdk/directory/v1/reference/schemas/insert