2015-02-03 2 views
0

Google 양식 응답 스프레드 시트에 저장된 함수를 만들었습니다. 양식이 제출되면 각 데이터 요소가 드라이브에 저장된 Google 워드 문서에 채워지고 문서의 PDF가 만들어져 양식을 제출 한 개인에게 전자 메일로 보냅니다.오류가 발생하는 경우 성공할 때까지 DriveApp.getFileById를 다시 시도하는 방법

약 5 %의 시간 동안 함수가 DriveApp.getFileById (docTemplate)를 호출하는 코드 단계에서 오류가 발생합니다. 오류는 항상 동일합니다. "죄송합니다. 서버 오류가 발생했습니다. 잠시 기다렸다가 다시 시도하십시오 (줄 186, 파일"코드 ")"

나는 이것이 네트워크 문제라고 생각하게되었습니다. 사용자가 인터넷에 연결되어 있지 않아 docTemplate 파일을 열 수 없으므로 오류가 발생합니다.

나는 함수를 성공적으로 완료 할 때까지 함수를 여러 번 시도하는 일종의 루프를 만들고 싶습니다. 오류가 발생하면 사용자가 적시에 영원한 저택에서 자신의 문서를 가져올 수 있도록 관리 상 큰 고통이됩니다!

코드 오히려 길다. 그런 다음, 다음 추가로 몇 가지 변수를 정의 할 수 있는지 몇 가지를 사용하여 변수를 설정하여 시작으로 직접 이동 : 그 다음 저장하고 문서를 닫이 후

var copyId = DriveApp.getFileById(docTemplate) //line 186 
 
.makeCopy(docName+' for '+ name)    //line 187 
 
.getId();          //line 188

에 임시 문서를 변환 PDF를 다운로드 한 다음 첨부 파일이있는 이메일을 보냅니다.

이 프로그램은 다시 95 %의 시간 동안 문제없이 실행됩니다. 아마도 인터넷 연결이 문제 일 수 있습니다.

답변

0

아마도이 부분을 try-catch 블록으로 랩핑 한 다음 복사가 완료 될 때까지 루프에서 호출 할 수 있습니다. main 함수 내부에서 반환 값이 null이 아닐 때까지 copyTemplate()을 호출 할 수 있습니다.

function copyTemplate(docTemplate, docName, name) { 
try { 
    var copyId = DriveApp.getFileById(docTemplate) //line 186 
        .makeCopy(docName+' for '+ name)    //line 187 
        .getId(); 
    return copyId; 
} catch (e) {return null;} 
} 
+0

나는이 코드를 구현했으며 지금까지 문제가 없습니다. 나는 무엇이 오면 이것을 표시하고 다시 동그라미를 칠 것이다. Try-catch 블록이 트릭을했습니다. 그라시아 스 아 미트. 빠른 질문 하나, "copyId 반환"은 무엇입니까? 부분합니까? –