2016-05-27 6 views
0

Ich verwende Code Sandy Good erneut, um eine ähnliche Frage zum E-Mail-Versand verschiedener Zellen aus einer Tabelle zu beantworten. Ich habe 2 Anruffunktionen wie folgt:Google-Skript Typedef-Fehler: Funktion kann nicht gefunden werden

function onFormSubmit() { 
    var sheet = getSpreadsheet().getSheetByName(RESPONSES_SHEET); 
    handler = SheetHandler(sheet); 
    handler.processSheet(); 
    writeToLog(); 

}; 

function prepForPayrollEntry() { 
    var sheet = getSpreadsheet().getSheetByName(RESPONSES_SHEET); 
    handler = SheetHandler(sheet); 
    handler.generateListForPaychex(); 
}; 

Die Funktionen sind sowohl in der Sheethandler() Funktion aufgerufen wird:

function SheetHandler(sheet) { 
    var _sheet = sheet; 
    var _data = getRowsData(_sheet); 

// Removed other functions not relevant to this code 

    var processSheet = function() { 
    _data.forEach(function(d) { 
     if(d.state == BLANK_STATE) { 
     _markPending(d); 
     } 
    }); 
    } 

    var generateListForPaychex = function() { 

    var allRowsData = ""; 
    var body = "", 
     payPeriod, 
     employeeName, 
     numberOfHours, 
     leaveType; 


    _data.forEach(function(d) { 

     if(d.state == APPROVED_STATE) { //Only list approved entries 
     payPeriod = d.payrollPeriod; 
     employeeName = d.yourName; 
     numberofHours = d.numberOfHoursRequested; 
     leaveType = d.typeOfLeave; 

     body = ""; //Reset on every loop 
     body = payPeriod + " " + 
       employeeName + " " + 
       numberOfHours + " " + 
       leaveType + 
       "\n"; 
     allRowsData = allRowsData + body; 
     } 
    }); 

    Logger.log(allRowsData); 

    MailApp.sendEmail(SETTINGS.APPROVAL_NOTICE_EMAIL_TO,SETTINGS.PAYCHEX_LIST_FOR_REVIEW,allRowsData); 

    } 

Die onFormSubmit() Funktion funktioniert gut, aber wenn ich die prepForPayrollEntry run() Funktion Ich bekomme einen Fehler, TypeError zu sagen: Funktion generateListForPaychex kann nicht im Objekt [Objekt Objekt] gefunden werden. (Zeile 542, Datei "Code").

Der Code, den ich Referenzierung kam von Google Sheets content to email (lay out)

schätzen würde Zeiger auf das, was ich falsch mache.

+0

I persönlich würde dies in einen Datentyp umwandeln und ihn initialisieren, indem Sie 'this' zu jeder Eigenschaft in der SheetHandler-Funktion anstelle von 'var' hinzufügen. Fügen Sie dann das neue Keyword hinzu, wenn Sie diese Funktion aufrufen. – Gerneio

+0

Ich bin neu in der JavaScript-Programmierung und verstehe daher nicht die "diese" und "neuen" Keywords. Können Sie, um Codeänderungen zu minimieren, sehen, warum eine Funktion gesehen wird, aber die andere nicht? –

+0

Das ist der Teil, den ich nicht verstehe. Ich habe persönlich noch nie eine JavaScript-Funktion wie Sie gerade verwendet. Ich habe nicht die Fähigkeit, es so zu testen, wie es gerade ist. Aber vielleicht später, wenn ich Zeit bekomme. Überprüfen Sie [diese] (https://medium.com/@benastontweet/user-defined-types-in-javascript-and-hoisting-6337c929a339#.d6d65cabz) aus. – Gerneio

Antwort

0

Am Ende der Funktionsdefinition für Sheethandler() ist die folgende:

return { 
    'processSheet': processSheet, 
    'approveByKey': approveByKey, 
    'denyByKey': denyByKey, 
    } 
}; 

fügte ich eine weitere Zeile die neu hinzugefügte Funktion zu definieren, und es funktioniert nun:

return { 
    'processSheet': processSheet, 
    'approveByKey': approveByKey, 
    'denyByKey': denyByKey, 
    'generateListForPaychex' : generateListForPaychex 

    } 
}; 
Verwandte Themen