Google Scripts,在multipleChoiceItem上调用isRequired和setRequired失败

时间:2017-10-26 10:57:18

标签: c# google-apps-script google-drive-api google-form

我正在处理一个C#代码,该代码维护表单上的调查问卷并使其与本地数据库保持同步,例如:当用户使用该程序时,他们会同时更改表单和数据库中的数据。

由于没有Forms-API,我使用Google Scripts并使用几个辅助方法作为中间来执行对表单的更改。

该计划的一个选项是改变现有问题,特别是是否需要回答问题。我使用以下代码:

var questionItem = listOfItems[startOfSection + 1];

var currQues = questionItem.getTitle();
if(currQues !== questionString) {      
  Logger.log('Changed questionString from ' + currQues + ' to ' + questionString);
  questionItem.setTitle(questionString);
}

var currReq = questionItem.isRequired();
if(currReq !== isQuestionRequired) {
  questionItem.setRequired(isQuestionRequired);
}

通过调用getType() - 方法检查变量questionItem的类型时,它告诉我它是一个multipleChoiceItem,它有一个名为isRequired的方法来读取当前的bool,而setRequired来设置bool。但是,同时调用isRequired和setRequired失败,错误消息为

[Cannot find function isRequired in object Item.]

,错误类型为

[TypeError]

Logger显示我的questionItem var是一个MultipleChoiceItem,为什么我的代码失败了?为什么Scripts会向我的C#-code返回一个值,说该方法是在泛型" Item"上调用的?

设置新问题的另一种方法也是在创建一个MultipleChoiceItem之后调用setRequired,并且该方法没有问题。

FYI,startOfSection,questionString和isQuestionRequired是使用C#API的ScriptsService在请求期间为方法提供的参数。

2 个答案:

答案 0 :(得分:0)

setRequired需要布尔值作为参数。问题是isQuestionRequired不是布尔值。

如果isQuestionRequired是一个字符串,值为'true',则可以替换

questionItem.setRequired(isQuestionRequired)

通过

questionItem.setRequired(isQuestionRequired === 'true');

答案 1 :(得分:0)

var questionItem = listOfItems[startOfSection + 1];

上面的代码行告诉我们questionItem从数组中获取其值。问题很可能在于如何创建数组成员。

由于您已经发现在“通用项目”类型的对象上发生了错误,因此一种解决方案是使用asMultipleChoiceItem()进行到期望类型的转换。

更改

questionItem.setRequired(isQuestionRequired)

questionItem.asMultipleChoiceItem().setRequired(isQuestionRequired)