共用方式為


多帳戶存取

如果您有多個帳戶,或管理其他人的帳戶,一切都從 AccountsApp 物件開始。 AccountsApp 是您用來取得您有權存取之帳戶清單,以及選取要管理之帳戶的最上層物件。 取得並選取帳戶之後,您會切換至使用 AdsApp 物件來存取帳戶的實體。

注意事項

針對多帳戶腳本,請使用從 Microsoft Advertising Web 應用程式中的 帳戶摘要 存取的腳本編輯器。 如果您在 UI 中看不到 [帳戶摘要 ],則不會使用多重帳戶腳本編輯器。

若要從 [ 帳戶摘要] 存取 [腳本編輯器],請按下左窗格中的 [ 大量作業 ]。 然後,在 [ 腳本] 下 ,按兩下 [建立和管理腳本]

列出您有權存取的帳戶

若要列出您有權存取的所有帳戶,請呼叫 accounts 方法。 方法會傳回 BingAdsAccountSelector 物件,您可以用來篩選帳戶清單。 如需使用選取器篩選清單的相關信息,請參閱 使用選取器

下列範例會傳回您有權存取的所有帳戶。

function main() {
    var accounts = AccountsApp.accounts()
        .get();

    while (accounts.hasNext()) {
        var account = accounts.next();

        Logger.log(`Account ID: ${account.getAccountId()}
            Account name: ${account.getName()}
            Account number: ${account.getAccountNumber()}
            Customer ID: ${account.getCustomerId()}
            Currency code: ${account.getCurrencyCode()}
            Time zone: ${account.getTimeZone()}\n\n`);
    }
}

平行執行每個帳戶的函式

若要平行對多個帳戶執行工作,您可以呼叫 選取器的executeInParallel() 方法。 executeInParallel()以下是您可以呼叫的方法。

  • executeInParallel (string functionName, string optionalCallbackFunctionName)

    針對選取器傳回的每個帳戶,指定 Scripts 呼叫的函式名稱。 函式可能會以字串形式傳回值。 若要傳回複雜物件,請使用 JSON.stringify 方法將對象轉換成字串。 然後,您可以使用 JSON.parse 方法,將字串轉換回 物件。

    如果您的函式傳回值,您必須指定回調函式來擷取傳回值。 針對所有選取的帳戶執行函式之後,腳本會呼叫選擇性的回調函式。 傳回值會當做 ExecutionResult 物件的陣列傳遞。

  • executeInParallel (string functionName, string optionalCallbackFunctionName, string optionalInput)

    針對選取器傳回的每個帳戶,指定 Scripts 呼叫的函式名稱。 您可以指定文稿傳遞給函式的選擇性輸入字串。 若要傳遞複雜物件,請使用 JSON.stringify 方法將對象轉換成字串。 然後,您可以在函式內使用 JSON.parse 方法,將字串轉換回 物件。

    函式可能會以字串形式傳回值。 若要傳回複雜物件,請使用 JSON.stringify 方法將對象轉換成字串。 然後,您可以使用 JSON.parse 方法,將字串轉換回 物件。

    如果您的函式傳回值,您必須指定回調函式來擷取傳回值。 針對所有選取的帳戶執行函式之後,腳本會呼叫選擇性的回調函式。 傳回值會當做 ExecutionResult 物件的陣列傳遞。

您必須將帳戶數目限制為50,否則,如果選取器傳回超過50個,呼叫就會失敗。 若要限制帳戶數目,您可以使用 withLimit()withIds()withAccountNumbers() 方法。

下列範例示範的簡單範例會針對每個點擊率低於上周 5% 的帳戶執行函式。 此範例會使用 withLimit() 方法來確保呼叫不會超過50個帳戶的限制。

function main() {
    // Select the accounts to process.
    var accounts = AccountsApp.accounts()
        .withLimit(50) 
        .withCondition('Ctr < 0.05')
        .forDateRange('LAST_WEEK')
        .executeInParallel('bump', 'resultsHandler');
}

function bump() {
    var account = AdsApp.currentAccount();

    // Do something with the entities in the account.

    Logger.log(`Processing account: ${account.getAccountId()} (${account.getName()})`);

    // Return a value that's processed by resultsHandler(). If 
    // the function returns a value, it must be a string. To return
    // a complex object, use JSON.stringify(object) to return the 
    // object as a string.

    return account.getAccountId();
}

// Handles all return values from the bump() function after the 
// function completes for all accounts.

function resultsHandler(results) {
    
    for (var result of results) {
        if (result.getStatus() === 'OK') {
            value = result.getReturnValue();
        }
    }
}

變更腳本處理的帳戶

在您選取要處理的帳戶之前,您無法呼叫任何 AdsApp 方法來取得帳戶的實體數據。 若要選取帳戶,請使用 AccountsApp 的 select 方法。

但首先,您必須呼叫 accounts 方法,以選取您想要處理的帳戶。 如需使用 accounts() 篩選帳戶清單的相關信息,請參閱 列出您有權存取的帳戶

取得帳戶之後,請呼叫 select() 方法,將帳戶設為目前的帳戶。 下列範例顯示此程式。

function main() {
    // This call logs null. Before using any
    // of the AdsApp methods, you must first
    // select an account to process.

    Logger.log(AdsApp.currentAccount());

    // Select the accounts to process

    var accounts = AccountsApp.accounts()
        .withIds(['123', '456', '789'])
        .get();

    while (accounts.hasNext()) {
        AccountsApp.select(accounts.next());

        // AdsApp is now set to the current account.
        // Do something with the account's entities.
    }
}