问题内容
我尝试使用 google 表单 api 更新现有表单。我在请求中填写了位置字段,但仍然收到来自服务器 create_item.location.index 无效或未提供的错误消息
创建请求代码
func UpdateForm(formId string, form *forms.Form) *forms.Form {
var requestElements []*forms.Request
// Update form info
requestElements = append(requestElements, &forms.Request{
UpdateFormInfo: &forms.UpdateFormInfoRequest{
Info: form.Info,
UpdateMask: "*",
},
})
// Add items
for i, item := range form.Items {
element := &forms.Request{
CreateItem: &forms.CreateItemRequest{
Item: item,
Location: &forms.Location{Index: int64(i)},
},
}
requestElements = append(requestElements, element)
}
request := forms.BatchUpdateFormRequest{
IncludeFormInResponse: true,
Requests: requestElements,
}
response, err := formService.Forms.
BatchUpdate(formId, &request).
Context(context.TODO()).
Do()
if err != nil {
panic(err)
}
return response.Form
}
登录后复制
注意:我使用的是 form api
v1
正确答案
终于找到问题了。当添加一个新项目到表单中时,我们必须从索引 0
开始,但是 0
是 protobuf 中 int
的默认值,因此当请求发送时它将被忽略。
解决方案:强制发送字段index
// Add items
for i, item := range form.Items {
element := &forms.Request{
CreateItem: &forms.CreateItemRequest{
Item: item,
Location: &forms.Location{
Index: int64(i),
ForceSendFields: []string{"Index"},
},
},
}
requestElements = append(requestElements, element)
}
登录后复制
以上就是Google Form API - 创建、更新项目时出错的详细内容,更多请关注每日运维网(www.mryunwei.com)其它相关文章!