Acceso a varias cuentas

Si tiene varias cuentas o administra cuentas para otras, todo comienza con el objeto AccountsApp . AccountsApp es el objeto de nivel superior que se usa para obtener la lista de cuentas a las que tiene acceso y para seleccionar la cuenta que se va a administrar. Después de obtener y seleccionar la cuenta, cambia a usar el objeto AdsApp para acceder a las entidades de la cuenta.

Nota:

Para scripts de varias cuentas, use el editor de scripts al que se accede desde Resumen de cuentas en la aplicación web microsoft Advertising. Si no ve Resumen de cuentas en la interfaz de usuario, no usará el editor de scripts de varias cuentas.

Para acceder al editor de scripts desde Resumen de cuentas, haga clic en Operaciones masivas en el panel izquierdo. A continuación, en Scripts , haga clic en Crear y administrar scripts.

Enumeración de las cuentas a las que tiene acceso

Para enumerar todas las cuentas a las que tiene acceso, llame al método accounts . El método devuelve un objeto BingAdsAccountSelector que puede usar para filtrar la lista de cuentas. Para obtener información sobre el uso de selectores para filtrar listas, consulte Uso de selectores.

En el ejemplo siguiente se devuelven todas las cuentas a las que tiene acceso.

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`);
    }
}

Ejecución de una función para cada cuenta en paralelo

Para realizar trabajo en varias cuentas en paralelo, llame al método delexecuteInParallel() selector. A continuación se muestran los métodos a los executeInParallel() que se puede llamar.

  • executeInParallel(string functionName, string optionalCallbackFunctionName)

    Especifique el nombre de la función a la que scripts llama para cada cuenta que devuelve el selector. La función puede devolver un valor como una cadena. Para devolver un objeto complejo, use el método JSON.stringify para convertir el objeto en una cadena. Después, puede usar el método JSON.parse para volver a convertir la cadena en un objeto .

    Si la función devuelve un valor, debe especificar una función de devolución de llamada para capturar los valores devueltos. Una vez ejecutada la función para todas las cuentas seleccionadas, Scripts llama a la función de devolución de llamada opcional. Los valores devueltos se pasan como una matriz de objetos ExecutionResult .

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

    Especifique el nombre de la función a la que scripts llama para cada cuenta que devuelve el selector. Puede especificar una cadena de entrada opcional que Scripts pasa a la función. Para pasar un objeto complejo, use el método JSON.stringify para convertir el objeto en una cadena. Después, puede usar el método JSON.parse dentro de la función para volver a convertir la cadena en un objeto .

    La función puede devolver un valor como una cadena. Para devolver un objeto complejo, use el método JSON.stringify para convertir el objeto en una cadena. Después, puede usar el método JSON.parse para volver a convertir la cadena en un objeto .

    Si la función devuelve un valor, debe especificar una función de devolución de llamada para capturar los valores devueltos. Una vez ejecutada la función para todas las cuentas seleccionadas, Scripts llama a la función de devolución de llamada opcional. Los valores devueltos se pasan como una matriz de objetos ExecutionResult .

Debe limitar el número de cuentas a 50; de lo contrario, se produce un error en la llamada si el selector devuelve más de 50. Para limitar el número de cuentas, puede usar los withLimit()métodos , withIds()y withAccountNumbers() .

En el ejemplo siguiente se muestra un ejemplo sencillo que ejecuta una función para cada cuenta que tenía una tasa de clics inferior al 5 % de la semana pasada. En el ejemplo se usa el withLimit() método para asegurarse de que la llamada no supera el límite de 50 cuentas.

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();
        }
    }
}

Cambio de la cuenta que procesa Scripts

Hasta que seleccione una cuenta que procesar, no podrá llamar a ninguno de los métodos AdsApp para obtener los datos de entidad de la cuenta. Para seleccionar una cuenta, use el método select de AccountsApp.

Pero primero debe llamar al método accounts para seleccionar las cuentas que desea procesar. Para obtener información sobre cómo usar accounts() para filtrar la lista de cuentas, consulte Enumeración de las cuentas a las que tiene acceso.

Después de obtener una cuenta, llame al select() método para que la cuenta sea la cuenta actual. En el ejemplo siguiente se muestra este proceso.

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.
    }
}