Question on passing variables between functions

2,566 views
Skip to first unread message

Patrick

unread,
Dec 1, 2016, 11:07:11 AM12/1/16
to AdWords Scripts Forum
Hi all,

Like the title says, I'm having an issue passing a variable from one function to another.
I know the variable is created properly because I can Log it within the function getCampaignThreshold, 
but if I try logging it within either the main function or the getKeywordReports function I get 
ReferenceError: "campaignThreshold" is not defined.

Here's the relevant codeblocks:

function main()

    getCampaignThreshold
();
    getKeywordReports
(campaignThreshold);
   
}


function getCampaignThreshold() {
 
var accountSelector = MccApp.accounts().withCondition("Impressions > 0").forDateRange(startDate, endDate);
 
var accountIterator = accountSelector.get();


 
while (accountIterator.hasNext()) {
 
     
var account = accountIterator.next();  
     
MccApp.select(account);
   
     
var campaignIterator = AdWordsApp.campaigns().withCondition('Name = "campaignName"').get();
   
   
if (campaignIterator.hasNext()) {
     
var campaign = campaignIterator.next();
     
     
var campaignStats = campaign.getStatsFor(startDate, endDate);
     
var campaignCvr = campaignStats.getConversionRate();
     
     
var campaignThreshold = (100/((campaignCvr)*100));
   
}
 
}
}


function getKeywordReports(campaignThreshold)  {
 
var accountSelector = MccApp.accounts().withCondition("Impressions > 0").forDateRange(startDate, endDate);
 
var accountIterator = accountSelector.get();


 
while (accountIterator.hasNext()) {
 
     
var account = accountIterator.next();  
     
MccApp.select(account); {
         
var report = AdWordsApp.report('SELECT CampaignId, AdGroupId, Id, CampaignName, Criteria, Impressions, Clicks, CpcBid, AveragePosition, Conversions, Cost ' +
             
'FROM KEYWORDS_PERFORMANCE_REPORT ' +
             
'WHERE  ' +
             
'Clicks > ' + campaignThreshold + ' ' +
             
'AND CampaignStatus IN [ENABLED] ' +
             
'AND AdGroupStatus IN [ENABLED] ' +                          
             
'AND Status IN [ENABLED] ' +
             
'AND AdNetworkType1 IN [SEARCH] ' +
             
'AND CampaignName CONTAINS_IGNORE_CASE campaignName ' +
             
'DURING ' + startDate + ',' + endDate);
     
         
var reportRows = report.rows();
         
         
for (var rowNum = 0; reportRows.hasNext(); rowNum++) {
             
var reportRow = reportRows.next();
             
var row = [];
             
for (var colNum = 0; colNum < fields.length; colNum++) {
                  row
.push(reportRow[fields[colNum]]);
             
}
              rows
.push(row);
         
}          
     
}
 
}      
}



Thanks in advance,
Patrick


Tyler Sidell (AdWords Scripts Team)

unread,
Dec 1, 2016, 12:53:21 PM12/1/16
to AdWords Scripts Forum
Hi Patrick,

First of all, you are missing an opening bracket for your main() function. If you want to pass variables between funcitons I would suggest in your getCampaignThreshold(); function to return the campaignTheshold value. In addition, you can call the getKeywordReports() method from within the getCampaignThreshold() function.

Thanks,
Tyler Sidell
AdWords Scripts Team

Patrick

unread,
Dec 2, 2016, 3:52:08 AM12/2/16
to AdWords Scripts Forum
Hi Tyler,

Tried that, get's me the same error - this is what the code looks like now (the missing "{" was just a copy/paste):

function main() {


getKeywordReports
();


}


function getCampaignThreshold() {
 
var accountSelector = MccApp.accounts().withCondition("Impressions > 0").forDateRange(startDate, endDate);
 
var accountIterator = accountSelector.get();


 
while (accountIterator.hasNext()) {
 
     
var account = accountIterator.next();  
     
MccApp.select(account);
   
     
var campaignIterator = AdWordsApp.campaigns().withCondition('Name = "campaignName"').get();
   
   
if (campaignIterator.hasNext()) {
     
var campaign = campaignIterator.next();
     
     
var campaignStats = campaign.getStatsFor(startDate, endDate);
     
var campaignCvr = campaignStats.getConversionRate();
     
     
var campaignThreshold = (100/((campaignCvr)*100));

     
return campaignThreshold;
   
}
 
}
}


function getKeywordReports()  {

   
  getCampaignThreshold
();
 
var accountSelector = MccApp.accounts().withCondition("Impressions > 0").forDateRange(startDate, endDate);
 
var accountIterator = accountSelector.get();


 
while (accountIterator.hasNext()) {
 
     
var account = accountIterator.next();  
     
     
MccApp.select(account); {

       
         
var report = AdWordsApp.report('SELECT CampaignId, AdGroupId, Id, CampaignName, Criteria, Impressions, Clicks, CpcBid, AveragePosition, Conversions, Cost ' +

             
'FROM KEYWORDS_PERFORMANCE_REPORT ' +
             
'WHERE  ' +
             
'Clicks > ' + campaignThreshold + ' ' +
             
'AND CampaignStatus IN [ENABLED] ' +
             
'AND AdGroupStatus IN [ENABLED] ' +                          
             
'AND Status IN [ENABLED] ' +
             
'AND AdNetworkType1 IN [SEARCH] ' +
             
'AND CampaignName CONTAINS_IGNORE_CASE campaignName' +
             
'DURING ' + startDate + ',' + endDate);
     
         
var reportRows = report.rows();
         
         
for (var rowNum = 0; reportRows.hasNext(); rowNum++) {
             
var reportRow = reportRows.next();
             
var row = [];
             
for (var colNum = 0; colNum < fields.length; colNum++) {
                  row
.push(reportRow[fields[colNum]]);
             
}
              rows
.push(row);
         
}          
     
}
 
}      
}


Any other idea's?

Thanks,
Patrick

Tyler Sidell (AdWords Scripts Team)

unread,
Dec 2, 2016, 11:02:24 AM12/2/16
to AdWords Scripts Forum
Hi Patrick,

You would still need to pass the variable into the function itself such as getCampaignThreshold(campaignThreshold).  As this is more of a Javascript question than AdWords Scripts, I can recommend searching Stack Overflow which outlines how to pass variables between functions.

Regards,
Tyler Sidell
AdWords Scripts Team

Reply all
Reply to author
Forward
0 new messages