我正在处理一个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在请求期间为方法提供的参数。
答案 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)