多帐户访问

如果你有多个帐户或为其他人管理帐户,则一切都从 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)

    指定脚本为选择器返回的每个帐户调用的函数的名称。 函数可能以字符串的形式返回值。 若要返回复杂对象,请使用 JSON.stringify 方法将对象转换为字符串。 然后,可以使用 JSON.parse 方法将字符串转换回 对象。

    如果函数返回值,则必须指定回调函数来捕获返回值。 为所有选定的帐户执行函数后,脚本会调用可选的回调函数。 返回值作为 ExecutionResult 对象的数组传递。

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

    指定脚本为选择器返回的每个帐户调用的函数的名称。 可以指定脚本传递给函数的可选输入字符串。 若要传递复杂对象,请使用 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.
    }
}