Google表单API – 创建、更新项目时出现错误

huangapple go评论106阅读模式
英文:

Google Form API - Error when Create, Update Item

问题

我尝试使用Google表单API更新我的现有表单。我在请求中填写了位置字段,但仍然收到服务器的错误消息create_item.location.index is invalid or was not provided

创建请求代码

  1. func UpdateForm(formId string, form *forms.Form) *forms.Form {
  2. var requestElements []*forms.Request
  3. // 更新表单信息
  4. requestElements = append(requestElements, &forms.Request{
  5. UpdateFormInfo: &forms.UpdateFormInfoRequest{
  6. Info: form.Info,
  7. UpdateMask: "*",
  8. },
  9. })
  10. // 添加项目
  11. for i, item := range form.Items {
  12. element := &forms.Request{
  13. CreateItem: &forms.CreateItemRequest{
  14. Item: item,
  15. Location: &forms.Location{Index: int64(i)},
  16. },
  17. }
  18. requestElements = append(requestElements, element)
  19. }
  20. request := forms.BatchUpdateFormRequest{
  21. IncludeFormInResponse: true,
  22. Requests: requestElements,
  23. }
  24. response, err := formService.Forms.
  25. BatchUpdate(formId, &request).
  26. Context(context.TODO()).
  27. Do()
  28. if err != nil {
  29. panic(err)
  30. }
  31. return response.Form
  32. }

注意:我正在使用form api v1。

英文:

I try to update my existing form using google form API. I filled location field in request but still received error message from server create_item.location.index is invalid or was not provided

Create Request Code

  1. func UpdateForm(formId string, form *forms.Form) *forms.Form {
  2. var requestElements []*forms.Request
  3. // Update form info
  4. requestElements = append(requestElements, &forms.Request{
  5. UpdateFormInfo: &forms.UpdateFormInfoRequest{
  6. Info: form.Info,
  7. UpdateMask: "*",
  8. },
  9. })
  10. // Add items
  11. for i, item := range form.Items {
  12. element := &forms.Request{
  13. CreateItem: &forms.CreateItemRequest{
  14. Item: item,
  15. Location: &forms.Location{Index: int64(i)},
  16. },
  17. }
  18. requestElements = append(requestElements, element)
  19. }
  20. request := forms.BatchUpdateFormRequest{
  21. IncludeFormInResponse: true,
  22. Requests: requestElements,
  23. }
  24. response, err := formService.Forms.
  25. BatchUpdate(formId, &request).
  26. Context(context.TODO()).
  27. Do()
  28. if err != nil {
  29. panic(err)
  30. }
  31. return response.Form
  32. }

Note: I'm using form api v1

答案1

得分: 0

最后我找到了问题所在。当向表单中添加新项时,我们必须从索引0开始,但是在protobuf中,0int的默认值,所以当请求发送时会被忽略。
解决方案:强制发送字段Index

  1. // 添加项
  2. for i, item := range form.Items {
  3. element := &forms.Request{
  4. CreateItem: &forms.CreateItemRequest{
  5. Item: item,
  6. Location: &forms.Location{
  7. Index: int64(i),
  8. ForceSendFields: []string{"Index"},
  9. },
  10. },
  11. }
  12. requestElements = append(requestElements, element)
  13. }
英文:

Finally i found the issue. When add a new item into form we must start with index 0, but 0 is default value of int in protobuf so it will be ignore when request send.
Solution: Force send field Index

  1. // Add items
  2. for i, item := range form.Items {
  3. element := &forms.Request{
  4. CreateItem: &forms.CreateItemRequest{
  5. Item: item,
  6. Location: &forms.Location{
  7. Index: int64(i),
  8. ForceSendFields: []string{"Index"},
  9. },
  10. },
  11. }
  12. requestElements = append(requestElements, element)
  13. }

huangapple
  • 本文由 发表于 2022年11月19日 23:45:21
  • 转载请务必保留本文链接:https://go.coder-hub.com/74501410.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定