マルチアカウント アクセス

複数のアカウントを持っている場合、または他のアカウントを管理する場合は、すべて 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.
    }
}