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!');
}
変更ログとテキスト ログに記録されたすべてのメッセージを常に確認する必要があります。