10

ho creato una funzione che innescano ogni dopo 30 minuti, e voglio passare alcuni parametri. Ho una libreria che restituisce carHistory, e il mio foglio di calcolo da dove io chiamo funzione di libreria.Come passare parametri (s) per funzione trigger temporizzato nello script libreria

Library1.gs

function carHistory(number,maker) 
{ 
// code logic 
} 

function startEvery30mins_CarHistory(number,maker) 
{ 
    //This function works 
    carHistory(number,maker); 

    // how to trigger this with parameter. 
    ScriptApp.newTrigger("carHistory") 
    .timeBased() 
    .everyMinutes(30) 
    .create(); 
} 

nel mio foglio

Code.gs:

function startOnce(){ 
    Library1.carHistory("US-xxx","Honda"); 
} 

function startEvery30mins(){ 
    Library1.startEvery30mins_CarHistory("US-xxx","Honda"); 
} 

Modificato:

Code.gs: Ho provato ad utilizzare PropertiesService, ma ancora non funziona

function startOnce(){ 
    var uProps = PropertiesService.getUserProperties(); 
    uProps.setProperty('Maker', 'Honda'); 
    uProps.setProperty('Number', 'US-xxx'); 

    Library1.carHistory(); 
} 

libreria:

function carHistory() 
    { 
     // Fetch Parametr 
     var getProps=PropertiesService.getUserProperties(); 
     var c_Maker= getProps.getProperty('Maker'); 
     var c_Number=getProps.getProperty('Number'); 
     // code logic 

    } 

function startEvery30mins_CarHistory() 
{ 
     ScriptApp.newTrigger("carHistory") 
     .timeBased() 
     .everyMinutes(30) 
     .create(); 
} 
+0

Hai provato a usare le proprietà di script invece delle proprietà dell'utente? https://developers.google.com/apps-script/reference/properties/properties-service#getScriptProperties() – Gerardo

+0

sì, ho provato entrambi 'getScriptProperties()' e 'getUserProperties()' e non funzionano entrambi in library.js –

risposta

6

Pr le opere sono una risorsa non condivisa; ogni script ha il proprio set di proprietà che non sono condivise con altri script. Questo comportamento influisce su come è possibile gestire le proprietà in una libreria, come descritto in Resource Scoping.

Una risorsa non condivisa significa che sia la libreria che lo script incluso hanno accesso integrato solo alla loro istanza della risorsa. Tuttavia, una libreria può fornire accesso alle sue risorse non condivise avendo funzioni esplicite che operano su di esse.

In altre parole; proprietà non-condivise della biblioteca possono essere esposti allo script principaleda funzioni di libreria.

Questa funzione può essere utilizzata per impostare i parametri di funzionamento per la funzione di libreria di innesco:

/** 
* Set name,value pairs of parameters for library function. 
* 
* @param {Object} parameters Object with named properties to be 
*        used as library function parameters. 
*/ 
function setParameters(parameters) { 
    var props = PropertiesService.getUserProperties(); 
    for (var key in parameters) { 
    var value = parameters[key]; 
    props.setProperty(key, value); 
    } 
} 

usereste in questo modo:

function startOnce(){ 
    var uProps = { 
    'Maker':'Honda', 
    'Number':'US-xxx' 
    }); 

    Library1.setParameters(uProps); 
    Library1.carHistory(); 
} 
+0

grazie per la risposta, in modo sostanzialmente ogni script ha la sua proprietà, ma siamo in grado di inviare dei parametri e li prendere e impostare come PropertiesService. è come se ogni libreria avesse il proprio PropertiesService e gli abbiamo impostato gli stessi valori –