Hello,

The Adwords API does not have the ability to roll back successful 
operations or create nested operations. However, the AdWords API does 
support a feature called Partial Failure 
<https://developers.google.com/adwords/api/docs/guides/partial-failure> where 
you can submit a collection of operations and do error handling on only the 
failed operations. The successful operations will commit, but the failed 
operations will come back to you with an explanation. You can then 
determine what to do. For example, if one of your campaigns operations 
fail, you can avoid any operations that rely on that campaign operation. 
Here's a snippet of the Java code example 
<https://github.com/googleads/googleads-java-lib/blob/master/examples/adwords_axis/src/main/java/adwords/axis/v201502/errorhandling/HandlePartialFailures.java>
:

    // Enable partial failure.
    session 
<https://codesearch.corp.google.com/#piper///depot/google3/third_party/java_src/adsapi/opensource/examples/adwords_axis/src/main/java/adwords/axis/v201502/errorhandling/HandlePartialFailures.java&ct=xref_jump_to_def&cl=GROK&l=75&gsn=session>.setPartialFailure
 
<https://codesearch.corp.google.com/#piper///depot/google3/third_party/java_src/adsapi/java/com/google/api/ads/adwords/lib/client/AdWordsSession.java&ct=xref_jump_to_def&cl=GROK&l=170&gsn=setPartialFailure>(true);


    // Do some operations here.

    // Iterate through the result to see if any of the operations failed.

    for (ApiError 
<https://codesearch.corp.google.com/#piper///depot/google3/blaze-out/gcc-4.X.Y-crosstool-v18-hybrid-grtev4-k8-fastbuild/genfiles/third_party/java_src/adsapi/java/com/google/api/ads/adwords/axis/libadwords_axis_generated.srcjar.files/com/google/api/ads/adwords/axis/v201502/cm/ApiError.java&ct=xref_jump_to_def&cl=GROK&l=20&gsn=ApiError>
 apiError 
<https://codesearch.corp.google.com/#piper///depot/google3/third_party/java_src/adsapi/opensource/examples/adwords_axis/src/main/java/adwords/axis/v201502/errorhandling/HandlePartialFailures.java&ct=xref_usages&gs=java:adwords.axis.v201502.errorhandling.HandlePartialFailures.runExample(com.google.api.ads.adwords.axis.factory.AdWordsServices,com.google.api.ads.adwords.lib.client.AdWordsSession,java.lang.Long).%257B%257D4%23apiError&l=121&gsn=apiError>
 : result 
<https://codesearch.corp.google.com/#piper///depot/google3/third_party/java_src/adsapi/opensource/examples/adwords_axis/src/main/java/adwords/axis/v201502/errorhandling/HandlePartialFailures.java&ct=xref_jump_to_def&cl=GROK&l=108&gsn=result>.getPartialFailureErrors
 
<https://codesearch.corp.google.com/#piper///depot/google3/blaze-out/gcc-4.X.Y-crosstool-v18-hybrid-grtev4-k8-fastbuild/genfiles/third_party/java_src/adsapi/java/com/google/api/ads/adwords/axis/libadwords_axis_generated.srcjar.files/com/google/api/ads/adwords/axis/v201502/cm/AdGroupCriterionReturnValue.java&ct=xref_jump_to_def&cl=GROK&l=68&gsn=getPartialFailureErrors>())
 {
      Matcher 
<https://codesearch.corp.google.com/#piper///depot/depot2/google_vendor_src_branch/openjdk7/releases/v6/trunk/jdk/src/share/classes/java/util/regex/Matcher.java&ct=xref_jump_to_def&cl=GROK&l=105&gsn=Matcher>
 matcher 
<https://codesearch.corp.google.com/#piper///depot/google3/third_party/java_src/adsapi/opensource/examples/adwords_axis/src/main/java/adwords/axis/v201502/errorhandling/HandlePartialFailures.java&ct=xref_usages&gs=java:adwords.axis.v201502.errorhandling.HandlePartialFailures.runExample(com.google.api.ads.adwords.axis.factory.AdWordsServices,com.google.api.ads.adwords.lib.client.AdWordsSession,java.lang.Long).%257B%257D4%23matcher&l=122&gsn=matcher>
 = operationIndexPattern 
<https://codesearch.corp.google.com/#piper///depot/google3/third_party/java_src/adsapi/opensource/examples/adwords_axis/src/main/java/adwords/axis/v201502/errorhandling/HandlePartialFailures.java&ct=xref_jump_to_def&cl=GROK&l=51&gsn=operationIndexPattern>.matcher
 
<https://codesearch.corp.google.com/#piper///depot/depot2/google_vendor_src_branch/openjdk7/releases/v6/trunk/jdk/src/share/classes/java/util/regex/Pattern.java&ct=xref_jump_to_def&cl=GROK&l=1081&gsn=matcher>(apiError
 
<https://codesearch.corp.google.com/#piper///depot/google3/third_party/java_src/adsapi/opensource/examples/adwords_axis/src/main/java/adwords/axis/v201502/errorhandling/HandlePartialFailures.java&ct=xref_jump_to_def&cl=GROK&l=121&gsn=apiError>.getFieldPath
 
<https://codesearch.corp.google.com/#piper///depot/google3/blaze-out/gcc-4.X.Y-crosstool-v18-hybrid-grtev4-k8-fastbuild/genfiles/third_party/java_src/adsapi/java/com/google/api/ads/adwords/axis/libadwords_axis_generated.srcjar.files/com/google/api/ads/adwords/axis/v201502/cm/ApiError.java&ct=xref_jump_to_def&cl=GROK&l=56&gsn=getFieldPath>());
      if (matcher 
<https://codesearch.corp.google.com/#piper///depot/google3/third_party/java_src/adsapi/opensource/examples/adwords_axis/src/main/java/adwords/axis/v201502/errorhandling/HandlePartialFailures.java&ct=xref_jump_to_def&cl=GROK&l=122&gsn=matcher>.matches
 
<https://codesearch.corp.google.com/#piper///depot/depot2/google_vendor_src_branch/openjdk7/releases/v6/trunk/jdk/src/share/classes/java/util/regex/Matcher.java&ct=xref_jump_to_def&cl=GROK&l=559&gsn=matches>())
 {
        int operationIndex 
<https://codesearch.corp.google.com/#piper///depot/google3/third_party/java_src/adsapi/opensource/examples/adwords_axis/src/main/java/adwords/axis/v201502/errorhandling/HandlePartialFailures.java&ct=xref_usages&gs=java:adwords.axis.v201502.errorhandling.HandlePartialFailures.runExample(com.google.api.ads.adwords.axis.factory.AdWordsServices,com.google.api.ads.adwords.lib.client.AdWordsSession,java.lang.Long).%257B%257D5%23operationIndex&l=124&gsn=operationIndex>
 = Integer 
<https://codesearch.corp.google.com/#piper///depot/depot2/google_vendor_src_branch/openjdk7/releases/v6/trunk/jdk/src/share/classes/java/lang/Integer.java&ct=xref_jump_to_def&cl=GROK&l=52&gsn=Integer>.parseInt
 
<https://codesearch.corp.google.com/#piper///depot/depot2/google_vendor_src_branch/openjdk7/releases/v6/trunk/jdk/src/share/classes/java/lang/Integer.java&ct=xref_jump_to_def&cl=GROK&l=526&gsn=parseInt>(matcher
 
<https://codesearch.corp.google.com/#piper///depot/google3/third_party/java_src/adsapi/opensource/examples/adwords_axis/src/main/java/adwords/axis/v201502/errorhandling/HandlePartialFailures.java&ct=xref_jump_to_def&cl=GROK&l=122&gsn=matcher>.group
 
<https://codesearch.corp.google.com/#piper///depot/depot2/google_vendor_src_branch/openjdk7/releases/v6/trunk/jdk/src/share/classes/java/util/regex/Matcher.java&ct=xref_jump_to_def&cl=GROK&l=484&gsn=group>(1));
        AdGroupCriterion 
<https://codesearch.corp.google.com/#piper///depot/google3/blaze-out/gcc-4.X.Y-crosstool-v18-hybrid-grtev4-k8-fastbuild/genfiles/third_party/java_src/adsapi/java/com/google/api/ads/adwords/axis/libadwords_axis_generated.srcjar.files/com/google/api/ads/adwords/axis/v201502/cm/AdGroupCriterion.java&ct=xref_jump_to_def&cl=GROK&l=14&gsn=AdGroupCriterion>
 adGroupCriterion 
<https://codesearch.corp.google.com/#piper///depot/google3/third_party/java_src/adsapi/opensource/examples/adwords_axis/src/main/java/adwords/axis/v201502/errorhandling/HandlePartialFailures.java&ct=xref_usages&gs=java:adwords.axis.v201502.errorhandling.HandlePartialFailures.runExample(com.google.api.ads.adwords.axis.factory.AdWordsServices,com.google.api.ads.adwords.lib.client.AdWordsSession,java.lang.Long).%257B%257D5%23adGroupCriterion&l=125&gsn=adGroupCriterion>
 = operations 
<https://codesearch.corp.google.com/#piper///depot/google3/third_party/java_src/adsapi/opensource/examples/adwords_axis/src/main/java/adwords/axis/v201502/errorhandling/HandlePartialFailures.java&ct=xref_jump_to_def&cl=GROK&l=83&gsn=operations>.get
 
<https://codesearch.corp.google.com/#piper///depot/depot2/google_vendor_src_branch/openjdk7/releases/v6/trunk/jdk/src/share/classes/java/util/List.java&ct=xref_jump_to_def&cl=GROK&l=435&gsn=get>(operationIndex
 
<https://codesearch.corp.google.com/#piper///depot/google3/third_party/java_src/adsapi/opensource/examples/adwords_axis/src/main/java/adwords/axis/v201502/errorhandling/HandlePartialFailures.java&ct=xref_jump_to_def&cl=GROK&l=124&gsn=operationIndex>).getOperand
 
<https://codesearch.corp.google.com/#piper///depot/google3/blaze-out/gcc-4.X.Y-crosstool-v18-hybrid-grtev4-k8-fastbuild/genfiles/third_party/java_src/adsapi/java/com/google/api/ads/adwords/axis/libadwords_axis_generated.srcjar.files/com/google/api/ads/adwords/axis/v201502/cm/AdGroupCriterionOperation.java&ct=xref_jump_to_def&cl=GROK&l=51&gsn=getOperand>();
        System 
<https://codesearch.corp.google.com/#piper///depot/depot2/google_vendor_src_branch/openjdk7/releases/v6/trunk/jdk/src/share/classes/java/lang/System.java&ct=xref_jump_to_def&cl=GROK&l=56&gsn=System>.out
 
<https://codesearch.corp.google.com/#piper///depot/depot2/google_vendor_src_branch/openjdk7/releases/v6/trunk/jdk/src/share/classes/java/lang/System.java&ct=xref_jump_to_def&cl=GROK&l=107&gsn=out>.printf
 
<https://codesearch.corp.google.com/#piper///depot/depot2/google_vendor_src_branch/openjdk7/releases/v6/trunk/jdk/src/share/classes/java/io/PrintStream.java&ct=xref_jump_to_def&cl=GROK&l=870&gsn=printf>("Ad
 group criterion with ad group id '%d 
<https://codesearch.corp.google.com/#piper///depot/google3/third_party/java_src/adsapi/opensource/examples/adwords_axis/src/main/java/adwords/axis/v201502/errorhandling/HandlePartialFailures.java&ct=xref_usages&gs=java:third_party/java_src/adsapi/opensource/examples/adwords_axis/src/main/java/adwords/axis/v201502/errorhandling/HandlePartialFailures.java:(%2525d):5356&l=126&gsn=%25d>'
 and keyword '%s 
<https://codesearch.corp.google.com/#piper///depot/google3/third_party/java_src/adsapi/opensource/examples/adwords_axis/src/main/java/adwords/axis/v201502/errorhandling/HandlePartialFailures.java&ct=xref_usages&gs=java:third_party/java_src/adsapi/opensource/examples/adwords_axis/src/main/java/adwords/axis/v201502/errorhandling/HandlePartialFailures.java:(%2525s):5373&l=126&gsn=%25s>'
 "
            + "triggered a failure for the foll 
<https://codesearch.corp.google.com/#piper///depot/google3/third_party/java_src/adsapi/opensource/examples/adwords_axis/src/main/java/adwords/axis/v201502/errorhandling/HandlePartialFailures.java&ct=xref_usages&gs=java:third_party/java_src/adsapi/opensource/examples/adwords_axis/src/main/java/adwords/axis/v201502/errorhandling/HandlePartialFailures.java:(%2525s):5424&l=127&gsn=ll>owing
 reason: '%s'.\n",
            adGroupCriterion 
<https://codesearch.corp.google.com/#piper///depot/google3/third_party/java_src/adsapi/opensource/examples/adwords_axis/src/main/java/adwords/axis/v201502/errorhandling/HandlePartialFailures.java&ct=xref_jump_to_def&cl=GROK&l=125&gsn=adGroupCriterion>.getAdGroupId
 
<https://codesearch.corp.google.com/#piper///depot/google3/blaze-out/gcc-4.X.Y-crosstool-v18-hybrid-grtev4-k8-fastbuild/genfiles/third_party/java_src/adsapi/java/com/google/api/ads/adwords/axis/libadwords_axis_generated.srcjar.files/com/google/api/ads/adwords/axis/v201502/cm/AdGroupCriterion.java&ct=xref_jump_to_def&cl=GROK&l=87&gsn=getAdGroupId>(),
            ((Keyword 
<https://codesearch.corp.google.com/#piper///depot/google3/blaze-out/gcc-4.X.Y-crosstool-v18-hybrid-grtev4-k8-fastbuild/genfiles/third_party/java_src/adsapi/java/com/google/api/ads/adwords/axis/libadwords_axis_generated.srcjar.files/com/google/api/ads/adwords/axis/v201502/cm/Keyword.java&ct=xref_jump_to_def&cl=GROK&l=16&gsn=Keyword>)
 adGroupCriterion 
<https://codesearch.corp.google.com/#piper///depot/google3/third_party/java_src/adsapi/opensource/examples/adwords_axis/src/main/java/adwords/axis/v201502/errorhandling/HandlePartialFailures.java&ct=xref_jump_to_def&cl=GROK&l=125&gsn=adGroupCriterion>.getCriterion
 
<https://codesearch.corp.google.com/#piper///depot/google3/blaze-out/gcc-4.X.Y-crosstool-v18-hybrid-grtev4-k8-fastbuild/genfiles/third_party/java_src/adsapi/java/com/google/api/ads/adwords/axis/libadwords_axis_generated.srcjar.files/com/google/api/ads/adwords/axis/v201502/cm/AdGroupCriterion.java&ct=xref_jump_to_def&cl=GROK&l=133&gsn=getCriterion>()).getText
 
<https://codesearch.corp.google.com/#piper///depot/google3/blaze-out/gcc-4.X.Y-crosstool-v18-hybrid-grtev4-k8-fastbuild/genfiles/third_party/java_src/adsapi/java/com/google/api/ads/adwords/axis/libadwords_axis_generated.srcjar.files/com/google/api/ads/adwords/axis/v201502/cm/Keyword.java&ct=xref_jump_to_def&cl=GROK&l=70&gsn=getText>(),
 apiError 
<https://codesearch.corp.google.com/#piper///depot/google3/third_party/java_src/adsapi/opensource/examples/adwords_axis/src/main/java/adwords/axis/v201502/errorhandling/HandlePartialFailures.java&ct=xref_jump_to_def&cl=GROK&l=121&gsn=apiError>.getErrorString
 
<https://codesearch.corp.google.com/#piper///depot/google3/blaze-out/gcc-4.X.Y-crosstool-v18-hybrid-grtev4-k8-fastbuild/genfiles/third_party/java_src/adsapi/java/com/google/api/ads/adwords/axis/libadwords_axis_generated.srcjar.files/com/google/api/ads/adwords/axis/v201502/cm/ApiError.java&ct=xref_jump_to_def&cl=GROK&l=96&gsn=getErrorString>());
      } else {
        System 
<https://codesearch.corp.google.com/#piper///depot/depot2/google_vendor_src_branch/openjdk7/releases/v6/trunk/jdk/src/share/classes/java/lang/System.java&ct=xref_jump_to_def&cl=GROK&l=56&gsn=System>.out
 
<https://codesearch.corp.google.com/#piper///depot/depot2/google_vendor_src_branch/openjdk7/releases/v6/trunk/jdk/src/share/classes/java/lang/System.java&ct=xref_jump_to_def&cl=GROK&l=107&gsn=out>.printf
 
<https://codesearch.corp.google.com/#piper///depot/depot2/google_vendor_src_branch/openjdk7/releases/v6/trunk/jdk/src/share/classes/java/io/PrintStream.java&ct=xref_jump_to_def&cl=GROK&l=870&gsn=printf>("A
 failure for the following reason: '%s 
<https://codesearch.corp.google.com/#piper///depot/google3/third_party/java_src/adsapi/opensource/examples/adwords_axis/src/main/java/adwords/axis/v201502/errorhandling/HandlePartialFailures.java&ct=xref_usages&gs=java:third_party/java_src/adsapi/opensource/examples/adwords_axis/src/main/java/adwords/axis/v201502/errorhandling/HandlePartialFailures.java:(%2525s):5669&l=131&gsn=%25s>'
 has occurred.\n",
            apiError 
<https://codesearch.corp.google.com/#piper///depot/google3/third_party/java_src/adsapi/opensource/examples/adwords_axis/src/main/java/adwords/axis/v201502/errorhandling/HandlePartialFailures.java&ct=xref_jump_to_def&cl=GROK&l=121&gsn=apiError>.getErrorString
 
<https://codesearch.corp.google.com/#piper///depot/google3/blaze-out/gcc-4.X.Y-crosstool-v18-hybrid-grtev4-k8-fastbuild/genfiles/third_party/java_src/adsapi/java/com/google/api/ads/adwords/axis/libadwords_axis_generated.srcjar.files/com/google/api/ads/adwords/axis/v201502/cm/ApiError.java&ct=xref_jump_to_def&cl=GROK&l=96&gsn=getErrorString>());
      }
    }


Happy coding!
Nadine, AdWords API Team



On Thursday, April 2, 2015 at 10:11:47 AM UTC-4, pcj wrote:
>
> Hi 
>
>   I am developing app in java where I need to Add Campaigns within those 
> Campaigns AdGroups, and for those AdGroups their repesctive keywords. So fo 
> adding Ad Group we need Campaign ID, and for adding keywords need AdGroup 
> ID.
>
> So for now I am doing like this : 
>
>   First Adding Batch of Campiagns like below :
>    CampaignOperation[] campaignOperations = new CampaignOperation[ ] { 
> cOp1, cOp2, cOp3};
>     // Add campaigns.
>    CampaignReturnValue addResult = 
> campaignService.mutate(campaignOperations);
>
>    // Retriving IDs for added campians
>
>   Then I Add AdGroups To Respective Campaigns using Campaign IDs I got, as 
> below :
>
>     AdGroupOperation[] adAdGroupsOperations = new AdGroupOperation[] { 
> cOp1AdGrp1, cOp1AdGrp2, cOp1AdGrp3,                 cOp2AdGrp1, cOp2AdGrp2, 
> cOp3AdGrp1,};
>
>     // Add ad groups.
>     AdGroupReturnValue result = 
> adGroupService.mutate(adAdGroupsOperations);
>
>     // I retriev Group IDs here 
>
>   Then I Add Keywords To Respective AdGroups using AdGroup IDs I got, as 
> below :
>
>   AdGroupCriterionOperation[] keywordsOperations = new 
> AdGroupCriterionOperation[ cOp1AdGrp1KeywrdOp1,                     
> cOp1AdGrp1KeywrdOp1, .................., cOp[N]AdGrp[N]KeywrdOp[N];
>
>   // Add keywords.
>    AdGroupCriterionReturnValue result = adGroupCriterionService
> .mutate(keywordsOperations);
>
> Above code will do like : 
>
> 1] Adds Campaigns,
> 2] Adds AdGroups to respective Campaigns,
> 3] Adds Keywords to Respective AdGroups,
>
> Now my problem is that if any of these fails I need to roll back,
> Is there any way to rollback changes made by perticular session 
>
>
> OR
>
> Is there any way that I can do like this :
> 1] Create nested operations
>
> mainOperation {
>  CampaignOperation1 {
>     AdGroupOperation1, {
>       KeywordOperation1,
>       KeywordOperation2, 
>     }
>     AdGroupOperation2, {
>       KeywordOperation1,
>       KeywordOperation2,
>     } 
>     AdGroupOperation3, {
>       KeywordOperation1,
>       KeywordOperation2,
>     } 
>     AdGroupOperation4, {
>       KeywordOperation1,
>       KeywordOperation2,
>     } 
>  },
>  CampaignOperation1 {
>     AdGroupOperation1, {
>       KeywordOperation1,
>       KeywordOperation2, 
>     }
>     AdGroupOperation2, {
>       KeywordOperation1,
>       KeywordOperation2,
>     } 
>     AdGroupOperation3, {
>       KeywordOperation1,
>       KeywordOperation2,
>     } 
>     AdGroupOperation4, {
>       KeywordOperation1,
>       KeywordOperation2,
>     } 
>  }
> }
>
> 2] And then add these operations in single batch.
>
>
> Is this possible, and how ? 
>
>
>

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
Also find us on our blog and Google+:
https://googleadsdeveloper.blogspot.com/
https://plus.google.com/+GoogleAdsDevelopers/posts
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~

You received this message because you are subscribed to the Google
Groups "AdWords API Forum" group.
To post to this group, send email to adwords-api@googlegroups.com
To unsubscribe from this group, send email to
adwords-api+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/adwords-api?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adwords-api+unsubscr...@googlegroups.com.
Visit this group at http://groups.google.com/group/adwords-api.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/adwords-api/0670870a-cef7-4b12-b638-ef88c7324773%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to