2014-09-03 1 views
0

Google Script에 문제가 있습니다. 실제로는 그대로 작동하지만 문제는 양식을 제출하고 다른 사람이 새 양식을 제출하면 제출 된 양식이 LastRow를 찾고 있기 때문에 더 이상 이메일을 보내지 않습니다. 이 문제가 제대로 작동하는 데 어려움을 겪고 있습니다. 누군가 도움을 줄 수 있습니까?수정 된 열에 따라 이전 Google 양식 제출으로 이메일 보내기

노란색으로 강조 표시된 열은 공급 업체가 오른쪽 (초록색)의 5 번째 열에 입력 한 내용을 '보낸 사람'으로 채워야 작성한 사람에게 전자 메일이 발송되었음을 알립니다. 형태. 여기

잘하면 더 나은 아이디어를 얻을 수있는 형태의 사진입니다 http://i57.tinypic.com/34tej4w.png

function sendNotification() { 
var doc = SpreadsheetApp.getActiveSpreadsheet(); 
var sheet = doc.getSheets()[0]; 
var startRow = sheet.getLastRow(); 
var dataRange = sheet.getRange(startRow, 1, 1, 21) ; 
var data = dataRange.getValues(); 
var row; 
for (i in data) { 
row = data[i]; 
var EMAIL_SENT = 'Sent'; 
var emailSent = row[19];  // Third column 
    if (emailSent != EMAIL_SENT) { // Prevents sending duplicates 

    //Define Notification Details 
    var subject = "Row 12 has been edited!"; 
    var body = 
      '<html><body><b><u>Product Check</u></b>' 
      + '<br><b>Time: </b>' 
      + row[0] 
      + '<br><b>Email requested: </b>' 
      + row[1] 
      + '<br><b>Request date: </b>' 
      + row[2] 
      + '<br><b>ISBN: </b>' 
      + row[4] 
      + '<br><b>Product Title: </b>' 
      + row[7] 
      + '<br><b>Supplier Name: </b>' 
      + row[8] 
      + '<br><b>PO Number: </b>' 
      + row[10] 
      + '<br><b>Comments: </b>' 
      + row[12] 
      + '<br>View the spreadsheet here: <a  href="#"><b>Click here</b></a> </html></body>'; 
if (row[13] != '' && row[0] != '' && row[18] == '') { 
    var recipients = row[1]; 
    var subject = "Column 'N' was edited!"; 
    sheet.getRange(startRow, 19, 1, 1).setValue(EMAIL_SENT) && sheet.getRange(startRow, 19, 1, 1).setBackgroundColor("#00ff00"); 
    SpreadsheetApp.flush(); 

    MailApp.sendEmail({ 
    to: recipients, 
    subject: subject, 
    htmlBody: body}); 
} 
+0

여러 명의 사용자가 같은 스프레드 시트에 동시에 액세스 할 때 문제가 발생합니까? –

+0

양식을 제출하는 사용자 그룹 1 명과 응답 양식 (N 열)을 편집하는 사용자 그룹 1 명이 있습니다. 열 N을 편집 한 후 마지막 행만 전자 메일을 보냅니다. –

답변

0

당신이 설명하는 동작은 정상이며 기원 이미 자신을 발견 ...

대신의 마지막 행을 사용하여 '[19] 행에 해당하는 열에'EMAIL_SENT '이없는 첫 번째 행을 참조로 사용하면이 행이 올바른 행이됩니다.

동시성의 경우 하나의 요청 만 처리되므로 타이머 트리거를 사용하여 몇 분마다이 코드를 실행하여 모든 제출이 모든 경우에 처리되도록하는 것이 좋습니다.

또 다른 해결책은 on Form Submit 트리거를 사용하는 것이지만 시트 (e.namedValues, see doc here) 대신 처리기 콜백 객체에서 값을 가져 오는 것이지만 코드에 변경 사항이 더 많음을 의미합니다. 후자의 경우, 모든 제출물은 독립적으로 처리되며 2 개 이상의 제출물도 함께 처리됩니다.

+0

답변 해 주셔서 감사합니다. 양식을 제출 한 사람에게 전자 메일을 보내는 양식이 제출 될 때 이미 기본 전자 메일을 보냈습니다. 문제는 양식을 제출 한 후 수동으로 응답 양식을 편집하는 또 다른 사용자 집합 (예 : 열 N)입니다. 그래서 다른 그룹 (열 N)이 편집 할 시간을 갖기 전에 여러 양식이 채워지고 제출 된 곳으로 이동했습니다. 이 경우 가장 마지막 행만 전자 메일을 보냅니다. 다른 전자 장치는 –

+0

입니다. 그러면 타이머 솔루션이 최상의 선택이됩니다. "email_sent"플래그가없는 행이 전송됩니다. –

+0

Serge, e.namedValues를 사용하거나 올바른 방향으로 나를 안내하는 방법에 대한 예제가 있습니까? 시간 내 주셔서 감사합니다 –

관련 문제