2017-10-26 1 views
0

Forms에 대한 설문지를 관리하는 C# 코드를 작성하고이를 로컬 데이터베이스와 동기화 상태로 유지합니다. 사용자가 프로그램을 사용할 때 동시에 Forms와 데이터베이스에서 데이터를 변경합니다.multipleChoiceItem에서 isRequired 및 setRequired를 호출하는 Google 스크립트가 실패합니다.

Forms-API가 없으므로 Forms에서 변경 작업을 수행하기 위해 몇 가지 도우미 메소드가있는 inbetween로 Google Scripts를 사용하고 있습니다.

프로그램의 옵션 중 하나는 기존 질문을 변경하고 특히 질문에 대답해야하는지 여부를 변경하는 것입니다. 방법, 그것은 현재 부울을 읽을 애드 팍라는 방법이있는 multipleChoiceItem,, 그리고 나에게 말한다 -

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의 종류를 확인 : 나는 다음과 같은 코드를 사용 bool를 설정하려면 setRequired. 그러나

[Cannot find function isRequired in object Item.] 

되는 오류 메시지 및 오류 유형, 애드 팍과 setRequired 모두 실패

[TypeError] 

로거 내 questionItem var에가 MultipleChoiceItem입니다 보여줍니다 호출, 왜 내 코드가 실패 하는가? 그런데 스크립트가 C# 코드에 값을 반환하는 이유는 무엇입니까? 코드가 일반적인 "항목"에 대해 호출되었다고 말하면 어떻게됩니까?

새로운 질문을 설정하는 또 다른 방법은 MultipleChoiceItem을 만든 후에도 setRequired를 호출하고 문제없이 작동하는 것입니다.

FYI, startOfSection, questionString 및 isQuestionRequired는 C# API의 ScriptsService를 사용하여 요청하는 동안 메서드에 제공되는 매개 변수입니다.

+0

그것은 작동하지 않는 코드에 대한 질문은 [mcve (가 필요하다고 말한다 실제로이 가까운 이유를) 포함하는 것이 좋습니다합니다. –

답변

0

setRequired에는 매개 변수로 부울이 필요합니다. 문제는 isQuestionRequired가 부울이 아니라는 것입니다. isQuestionRequired 값이 'true' 인 문자열을 경우

, 당신은 대체 할 수있는 코드 위의 라인은 questionItem가에서 그 값을 얻을 수 있음을 알려

questionItem.setRequired(isQuestionRequired) 

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

괜찮 았던 스크립트에서 addSection 함수에 대해 동일한 매개 변수를 사용합니다. 가장 큰 차이점은 Form에 추가 할 MultipleChoiceItem을 만드는 반면, 여기에서 공유 한 코드는 Form에서 검색 한 기존의 것입니다.문제는 스크립트에서 getItem() 메서드를 사용하여 유형을 기록하더라도 MultipleChoiceItem이라는 변수를 호출하면 "questionItem"이라는 변수가 MultipleChoiceItem이 아니라 일반 "Item"이 아니라는 오류가 발생한다는 것입니다. – Yuregenu

+0

그냥 입력에 대한 추가 점검을했는데 isQuestionRequired 매개 변수는 내가 의도 한 것처럼 Google Scripts에서 부울로 받았습니다. 그것은 문자열이 아니므로 C# API의 ScriptsResource RunRequest 메서드는 parameterlist의 C# -boolean을 Google Scripts/Javascript 부울로 올바르게 변환합니다. 문제는 어딘가에있는 것 같습니다. – Yuregenu

+0

@Yuregenu : 죄송합니다. 질문을 잘못 읽고 isRequired 대신 setRequired를 사용하여 문제가 발생했음을 이해했습니다. 나중에이 대답을 삭제하겠습니다. –

0
var questionItem = listOfItems[startOfSection + 1]; 

에 의해 정렬. 배열 구성원이 어떻게 생성되었는지에 문제가있을 가능성이 큽니다.

"일반 항목"유형의 개체에서 오류가 발생 했으므로 한 가지 해결책은 asMultipleChoiceItem()을 사용하여 예상되는 형식으로 변환하는 것입니다.

변경

questionItem.setRequired(isQuestionRequired) 

questionItem.asMultipleChoiceItem().setRequired(isQuestionRequired) 
관련 문제