スクリプトでのエラーと警告の処理

Scripts がエラーを返すのは、無効な値を持つエンティティを追加するときだけです。 たとえば、無効な入札額を持つ キーワード (keyword) エンティティを追加しようとすると、ビルド操作は失敗し、1 つ以上のエラーが返されます。

        var operation = adGroup.newKeywordBuilder()
            .withText(keywordText)
            .withCpc(-5)
            .build();

        if (operation.isSuccessful()) {
            var keyword = operation.getResult();
            Logger.log(`Added keyword, ${keyword.getText()}.`);
        }
        else {
            // The bid amount is not valid, so this path executes
            for (var error of operation.getErrors()) {
                Logger.log(error);
            }
        }

ただし、エンティティのプロパティを無効な値で更新しようとすると、スクリプトはエラーを返しません。 代わりに、スクリプトによって変更ログにエラー メッセージが書き 込まれ、コードは引き続き実行されます。 たとえば、次のコードでは、広告グループの CPC 入札単価を設定しようとします。 金額が無効であるため、呼び出しはサイレントに失敗し、スクリプトは実行し続け、エラー メッセージが変更ログに書き込まれます。

function main() {
    var adGroup = AdsApp.adGroups().get().next();
    adGroup.bidding().setCpc(-5);
}

注:

更新が成功したことを確認するために、メソッドの値を設定した後に getCpc メソッドを呼び出したくなるかもしれませんが、呼び出さないでください。 set メソッドを呼び出した後に get メソッドを呼び出すと、バッチ更新機能が削除されるため、パフォーマンスが低下します。 詳細については、ベスト プラクティスの「更新のバッチ処理」を参照してください。

ランタイム エラーやエンティティ取得エラーなどの他のエラーにより、スクリプトの実行が停止します。 これが発生すると、エラー メッセージが テキスト ログに書き込まれます。 次のコードでは、 foo() 関数を呼び出そうとしますが、関数が定義されていないため、スクリプトは実行を終了します。

function main() {
    foo(); // The script stops because foo() is undefined and generates a reference error
    Logger.log('This line is never logged!');
}

変更ログとテキスト ログに記録されたすべてのメッセージを常に確認する必要があります。