我嘗試使用 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 - 建立、更新專案時出錯的詳細內容。更多資訊請關注PHP中文網其他相關文章!