Accès multi-comptes

Si vous avez plusieurs comptes ou gérez des comptes pour d’autres personnes, tout commence par l’objet AccountsApp . AccountsApp est l’objet de niveau supérieur que vous utilisez pour obtenir la liste des comptes auxquels vous avez accès et pour sélectionner le compte à gérer. Après avoir obtenu et sélectionné le compte, vous passez à l’utilisation de l’objet AdsApp pour accéder aux entités du compte.

Remarque

Pour les scripts multi-comptes, utilisez l’éditeur de scripts accessible à partir du résumé des comptes dans l’application web Microsoft Advertising. Si vous ne voyez pas le Résumé des comptes dans l’interface utilisateur, vous n’utiliserez pas l’éditeur de scripts multi-comptes.

Pour accéder à l’éditeur de scripts à partir du résumé des comptes, cliquez sur Opérations en bloc dans le volet gauche. Ensuite, sous Scripts , cliquez sur Créer et gérer des scripts.

Liste des comptes auxquels vous avez accès

Pour répertorier tous les comptes auxquels vous avez accès, appelez la méthode comptes . La méthode retourne un objet BingAdsAccountSelector que vous pouvez utiliser pour filtrer la liste des comptes. Pour plus d’informations sur l’utilisation de sélecteurs pour filtrer des listes, consultez Utilisation de sélecteurs.

L’exemple suivant renvoie tous les comptes auxquels vous avez accès.

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

Exécution parallèle d’une fonction pour chaque compte

Pour effectuer un travail sur plusieurs comptes en parallèle, vous appelez la méthode du executeInParallel()sélecteur. Voici les executeInParallel() méthodes que vous pouvez appeler.

  • executeInParallel(string functionName, string optionalCallbackFunctionName)

    Spécifiez le nom de la fonction que Scripts appelle pour chaque compte renvoyé par le sélecteur. La fonction peut renvoyer une valeur sous forme de chaîne. Pour retourner un objet complexe, utilisez la méthode JSON.stringify pour convertir l’objet en chaîne. Vous pouvez ensuite utiliser la méthode JSON.parse pour reconvertir la chaîne en objet.

    Si votre fonction renvoie une valeur, vous devez spécifier une fonction de rappel pour capturer les valeurs de retour. Une fois la fonction exécutée pour tous les comptes sélectionnés, Scripts appelle la fonction de rappel facultative. Les valeurs de retour sont transmises sous la forme d’un tableau d’objets ExecutionResult .

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

    Spécifiez le nom de la fonction que Scripts appelle pour chaque compte renvoyé par le sélecteur. Vous pouvez spécifier une chaîne d’entrée facultative que Scripts transmet à la fonction. Pour transmettre un objet complexe, utilisez la méthode JSON.stringify pour convertir l’objet en chaîne. Vous pouvez ensuite utiliser la méthode JSON.parse à l’intérieur de la fonction pour reconvertir la chaîne en objet.

    La fonction peut renvoyer une valeur sous forme de chaîne. Pour retourner un objet complexe, utilisez la méthode JSON.stringify pour convertir l’objet en chaîne. Vous pouvez ensuite utiliser la méthode JSON.parse pour reconvertir la chaîne en objet.

    Si votre fonction renvoie une valeur, vous devez spécifier une fonction de rappel pour capturer les valeurs de retour. Une fois la fonction exécutée pour tous les comptes sélectionnés, Scripts appelle la fonction de rappel facultative. Les valeurs de retour sont transmises sous la forme d’un tableau d’objets ExecutionResult .

Vous devez limiter le nombre de comptes à 50, sinon l’appel échoue si le sélecteur renvoie plus de 50. Pour limiter le nombre de comptes, vous pouvez utiliser les withLimit()méthodes , withIds()et withAccountNumbers() .

L’exemple suivant montre un exemple simple qui exécute une fonction pour chaque compte dont le taux de clics était inférieur à 5 % la semaine dernière. L’exemple utilise la withLimit() méthode pour s’assurer que l’appel ne dépasse pas la limite de 50 comptes.

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

Modification du compte que Scripts traite

Tant que vous n’avez pas sélectionné un compte à traiter, vous ne pouvez appeler aucune des méthodes AdsApp pour obtenir les données d’entité du compte. Pour sélectionner un compte, utilisez la méthode de sélection de AccountsApp.

Mais vous devez d’abord appeler la méthode des comptes pour sélectionner les comptes que vous souhaitez traiter. Pour plus d’informations sur l’utilisation accounts() pour filtrer la liste des comptes, consultez Liste des comptes auxquels vous avez accès.

Après avoir obtenu un compte, appelez la select() méthode pour faire du compte le compte courant. L’exemple suivant illustre ce processus.

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