2015-04-21 5 views
7

Mein Skript, das ein PDF-Dokument aus einer Vorlage in Google Drive generiert und es an einen Empfänger basierend auf Spalten in einer Tabelle sendet, funktioniert heute aufgrund der Abschreibung von DocsList nicht mehr. Siehe hier: https://developers.google.com/google-apps/documents-list/So aktualisieren Sie DocsList auf DriveApp in meinem Code

Ich habe versucht, diese Anleitung https://developers.google.com/drive/web/migration zu aktualisieren, um alle Instanzen von DocsList mit DriveApp zu aktualisieren, aber ich kann es nicht zum Funktionieren bringen. Könnte jemand mir bitte helfen, dieses Skript zu aktualisieren, damit es richtig funktioniert? Ich habe 6 Instanzen von "DocsList" in diesem Skript, und ich konnte einige von ihnen richtig aktualisieren, aber andere wie "addFile" scheinen ein anderes Format zu erfordern. Auch nach einfach versuchen, zu finden und „DocsList“ mit „DriveApp“ ersetzen bekomme ich folgende Fehlermeldung:

„Typeerror:. Kann nicht funktionieren addFile in Objekt ProofOfCredit_CNZDTVR44N.pdf finden (Linie 45, Datei‚ProofOfCreditCode‘)“

Ich würde mich über jeden Rat und jede Hilfe freuen, da diese Abschreibung 5 meiner Skripte zerstörte, die mit dieser ziemlich identisch sind.

var docTemplate = "1JAPmsrPRrRwXCVAli229C5J7Kr4xaOnfO2rmGqvYyhU"; 
var docName  = "ProofOfCredit"; 

function onFormSubmit(e) { 
    var first_name = e.values[1]; 
    var last_name = e.values[2]; 
    var customer_email = e.values[3]; 
    var order_number = e.values[4]; 
    var brand = e.values[5]; 
    var amount = e.values[6]; 
    var date_of_credit = e.values[7]; 
    var auth_code = e.values[8]; 
    var last_4 = e.values[9]; 
    var request_id = e.values[10]; 
    var rep_name = e.values[11]; 
    var copyId = DocsList.getFileById(docTemplate) 
       .makeCopy(docName+'_'+order_number) 
       .getId(); 

    var copyDoc = DocumentApp.openById(copyId); 
    var copyBody = copyDoc.getActiveSection(); 

    copyBody.replaceText('keyFirst', first_name); 
    copyBody.replaceText('keyLast', last_name); 
    copyBody.replaceText('keyBrand', brand); 
    copyBody.replaceText('keyAmount', amount); 
    copyBody.replaceText('keyCreditdate', date_of_credit); 
    copyBody.replaceText('keyAuth', auth_code); 
    copyBody.replaceText('keyRep', rep_name); 
    copyBody.replaceText('keyOrder', order_number); 
    copyBody.replaceText('keyCClast4', last_4); 
    copyBody.replaceText('keyRequestID', request_id); 
    var todaysDate = Utilities.formatDate(new Date(), "GMT", "MM/dd/yyyy"); 
    copyBody.replaceText('keyTodaysDate', todaysDate); 

    copyDoc.saveAndClose(); 

    var pdf = DocsList.getFileById(copyId).getAs("application/pdf"); 
    var folder = DocsList.getFolder('Proof of Credit'); 
    var movefile = DocsList.createFile(pdf); 
    movefile.addToFolder(folder); 
    movefile.removeFromFolder(DocsList.getRootFolder()); 
    var subject = "Proof of Credit regarding Order Number: " + order_number; 
    var body = "Hello " + first_name + " " + last_name + "," + "<br /><br />" 
    + "Thank you for calling " + brand + " Support. The attached document contains information " 
    + "for you to reference related to the credits we have issued back to your original form of payment." + "<br /><br />" 
    + "If you have any further questions or require additional assistance please let us know." + "<br /><br />" 
    + "Regards," + "<br /><br />" 
    + rep_name + ", Payments Department" + "<br />" 
    + "[email protected]"; 
    var cc = "[email protected]"; 
    MailApp.sendEmail(customer_email, subject, body, {htmlBody: body, attachments: pdf, cc: cc}); 
    DocsList.getFileById(copyId).setTrashed(true); 
} 
+1

Dies ist der ursprüngliche Code ohne die Zeichenfolge "DocsList" durch "DriveApp" ersetzt zu haben, da dies nicht funktionierte (noch habe ich es erwartet, aber ich dachte, es war einen Versuch wert) – cwg83

Antwort

10

Viele der DriveApp Methoden sind identisch mit DocsList. In vielen Fällen können Sie einfach DocsList durch DriveApp ersetzen.

Probleme entstehen mit der alten getFolder() Methode.

var folder = DocsList.getFolder('Name of your folder'); 

In diesem Fall einfach DocsList mit DriveApp ersetzt werden Sie ein Problem geben. Es gibt keine getFolder() Methode für DriveApp. In Google Drive können Sie mehrere Dateien und Ordner mit identischen Namen (aber unterschiedlichen IDs) haben. Die alte Methode DocsList, getFolder() berücksichtigte diese Situation nicht. Mit DriveApp können Sie immer noch nach einem Ordner nach Name suchen, aber die Rückkehr ist ein Folder Iterator. Mit DriveApp ist der Methodenname für das Abrufen eines Ordners nach Name sehr unterschiedlich; es ist "Ordner", mit einem "s" am Ende. getFoldersByName(name) Plural, nicht Singular. Obwohl in 98% der Fälle das Ordnernamen nur in einem Ordner angezeigt wird, müssen Sie dennoch die Folder Iterator verarbeiten. Sie brauchen nicht zu durchlaufen durch den Ordner Iterator. Sie können nur den ersten Ordner bekommen. Verwenden Sie einfach die next() Methode, ohne eine Programmierschleife zu verwenden.

Folder Iterator

Also schlage ich vor, dass Sie tun nur ersetzen DocsList mit DriveApp außer im Falle eines Ordners mit Namen bekommen. Lesen Sie die Dokumentation und beheben Sie diese Codezeile, und führen Sie sie dann aus. Wenn Sie einen Fehler erhalten, VIEW die AUSFÜHRENDE TRANSKRIPT, und es wird Ihnen wahrscheinlich sagen, welche Codezeile fehlgeschlagen ist. Wenn Sie weiterhin Hilfe benötigen, geben Sie immer an, welche Codezeile fehlgeschlagen ist.

Außerdem gibt es keine addToFolder() Methode der neuen DriveApp Folder-Klasse.

Folder Class

Sie müssen das ändern:

folder.addFile(moveFile); 

addFile() Method

+0

Danke Sandy. Ich habe wie Sie vorgeschlagen und alle Zeichenfolgen von "DocsList" durch "DriveApp" ersetzt. Ich musste ändern var ordner = DocsList.getFolder ('Kreditnachweis'); zu var ordner = DriveApp.getFolderById ('0B3nrCN8N5OBceFQ5WGVVLWVoNjQ'); aber ich bekomme immer noch den folgenden Fehler: 21.04.15 01.12 Uhr \t onFormSubmit \t TypeError: Kann die Funktion addToFolder im Objekt ProofOfCredit_CNZDTVR44N.pdf nicht finden. (Zeile 45, Datei "ProofOfCreditCode") – cwg83

+0

Siehe aktualisierte Antwort. –

+0

Danke! Ich denke, ich konnte es herausfinden, gerade als Sie geantwortet haben. Ich ersetzte var pdf = DocsList.getFileById (copyId) .getAs ("application/pdf"); var ordner = DocsList.getFolder ('Kreditnachweis'); var movefile = DocsList.createDatei (pdf); movefile.addToFolder (Ordner); movefile.removeFromFolder (DocsList.getRootFolder()); mit var pdf = DriveApp.getFileById (copyId); var theblob = pdf.getBlob(). GetAs ('anwendung/pdf'); var folder = DriveApp.getFolderById ('0B3nrCN8N5OBceFQ5WGVVLWVoNjQ'); var movefile = folder.createFile (theblob); und es scheint zu funktionieren. – cwg83

-1

Es gibt keine Methode ist für "Hinzufügen zum Ordner" für ein File-Objekt in DriveApp. Stattdessen müssen Sie den Ordner abrufen (der aussieht, als würden Sie ihn im var-Ordner speichern) und dann das Objekt "Ordner" verwenden, um eine Datei hinzuzufügen. Es würde wie folgt aussehen:

var folder = DriveApp.getFolderById(string id); 
var movefile = DocsList.createFile(pdf); 
folder.addFile(moveFile); 

Sie Ordner-Objekte können Sie eine Datei in den Ordner hinzufügen, aber DriveApp hat keine Methode für File-Objekte selbst in einen Ordner hinzuzufügen.

+3

Hatten Sie in Ihrer Antwort noch einen veralteten Aufruf der Methode "DocsList"? – Mogsdad

Verwandte Themen