2016-12-15 50 views
1

我試圖從Bing Ads文檔運行基本report download example,並且設法修改示例代碼以通過更改get<REPORT_TYPE>ReportRequest()方法來下載其他幾種報表類型。Bing Ads Java API BudgetSummaryReportRequest示例代碼

我正在努力的一種報告類型是預算總結報告。

我創建報告請求是這樣的:

private static ReportRequest getBudgetSummaryReportRequest(){ 
     BudgetSummaryReportRequest report = new BudgetSummaryReportRequest(); 

     report.setFormat(ReportFormat.CSV); 
     report.setReportName("My Budget Summary Report"); 
     report.setReturnOnlyCompleteData(false); 

     ArrayOflong accountIds = new ArrayOflong(); 
     accountIds.getLongs().add(authorizationData.getAccountId()); 


     report.setScope(new AccountThroughCampaignReportScope()); 
     report.getScope().setAccountIds(accountIds); 
     ArrayOfCampaignReportScope c = new ArrayOfCampaignReportScope(); 
     CampaignReportScope cc = new CampaignReportScope(); 
     cc.setAccountId(authorizationData.getAccountId()); 
     cc.setCampaignId(<MY_CAMPAIGN_ID>); 
     c.getCampaignReportScopes().add(cc); 
     report.getScope().setCampaigns(c); 

     report.setTime(new BudgetSummaryReportTime()); 
     report.getTime().setPredefinedTime(BudgetSummaryReportTimePeriod.TODAY); 

     ArrayOfBudgetSummaryReportColumn budgetSummaryReportColumns = new ArrayOfBudgetSummaryReportColumn(); 
     budgetSummaryReportColumns.getBudgetSummaryReportColumns().add(BudgetSummaryReportColumn.ACCOUNT_ID); 
     budgetSummaryReportColumns.getBudgetSummaryReportColumns().add(BudgetSummaryReportColumn.CAMPAIGN_ID); 
     budgetSummaryReportColumns.getBudgetSummaryReportColumns().add(BudgetSummaryReportColumn.DATE); 
     budgetSummaryReportColumns.getBudgetSummaryReportColumns().add(BudgetSummaryReportColumn.CURRENCY_CODE); 
     budgetSummaryReportColumns.getBudgetSummaryReportColumns().add(BudgetSummaryReportColumn.MONTHLY_BUDGET); 
     budgetSummaryReportColumns.getBudgetSummaryReportColumns().add(BudgetSummaryReportColumn.MONTH_TO_DATE_SPEND); 
     budgetSummaryReportColumns.getBudgetSummaryReportColumns().add(BudgetSummaryReportColumn.DAILY_SPEND); 

     return report; 
    } 

,然後使用在main方法的ReportRequest對象(參見例如reportRequest字段)。但無論我做什麼,當我嘗試運行它,我總是得到以下錯誤:

java.util.concurrent.ExecutionException: com.microsoft.bingads.reporting.CouldNotSubmitReportingDownloadException: java.util.concurrent.ExecutionException: com.microsoft.bingads.reporting.ApiFaultDetail_Exception: Invalid client data. Check the SOAP fault details for more information 
    at com.microsoft.bingads.internal.ResultFuture.get(ResultFuture.java:96) 
    at ads.ReportRequests.backgroundCompletion(ReportRequests.java:172) 
    at ads.ReportRequests.main(ReportRequests.java:90) 
Caused by: com.microsoft.bingads.reporting.CouldNotSubmitReportingDownloadException: java.util.concurrent.ExecutionException: com.microsoft.bingads.reporting.ApiFaultDetail_Exception: Invalid client data. Check the SOAP fault details for more information 
    at com.microsoft.bingads.reporting.ReportingServiceManager$3.handleResponse(ReportingServiceManager.java:216) 
    at org.apache.cxf.jaxws.JaxwsClientCallback.handleException(JaxwsClientCallback.java:87) 
    at org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:821) 
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1638) 
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream$1.run(HTTPConduit.java:1145) 
    at org.apache.cxf.workqueue.AutomaticWorkQueueImpl$3.run(AutomaticWorkQueueImpl.java:428) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at org.apache.cxf.workqueue.AutomaticWorkQueueImpl$AWQThreadFactory$1.run(AutomaticWorkQueueImpl.java:353) 
    at java.lang.Thread.run(Unknown Source) 
Caused by: java.util.concurrent.ExecutionException: com.microsoft.bingads.reporting.ApiFaultDetail_Exception: Invalid client data. Check the SOAP fault details for more information 
    at org.apache.cxf.jaxws.JaxwsClientCallback$2.get(JaxwsClientCallback.java:99) 
    at com.microsoft.bingads.reporting.ReportingServiceManager$3.handleResponse(ReportingServiceManager.java:202) 
    ... 9 more 
Caused by: com.microsoft.bingads.reporting.ApiFaultDetail_Exception: Invalid client data. Check the SOAP fault details for more information 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
    at java.lang.reflect.Constructor.newInstance(Unknown Source) 
    at org.apache.cxf.interceptor.ClientFaultConverter.processFaultDetail(ClientFaultConverter.java:182) 
    at org.apache.cxf.interceptor.ClientFaultConverter.handleMessage(ClientFaultConverter.java:82) 
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307) 
    at org.apache.cxf.interceptor.AbstractFaultChainInitiatorObserver.onMessage(AbstractFaultChainInitiatorObserver.java:113) 
    at org.apache.cxf.jaxws.handler.soap.SOAPHandlerInterceptor.handleMessage(SOAPHandlerInterceptor.java:140) 
    at org.apache.cxf.jaxws.handler.soap.SOAPHandlerInterceptor.handleMessage(SOAPHandlerInterceptor.java:71) 
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307) 
    at org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:780) 
    ... 7 more 

與其他報告類型這個錯誤通常意味着,我忘了設置一些必要的參數(例如範圍)。在這裏,我只是不知道。我該如何調試這個問題(例如,檢查錯誤消息提到的這個「SOAP數據」)?

有沒有人有預算總結報告下載的工作示例?

編輯: Eric Urban的回答下面解決了我的問題。每個報告請求類型都有一些列需要手動指定並添加到ReportRequest對象中。

回答

1

幾個更新應該可以解決此問題。首先,您需要添加缺少的必需列。核心服務參考指南中爲每個值設置了所需的列,例如請參閱BudgetSummaryReportColumn Value Set。其次,您需要將列數組添加到報告請求。

budgetSummaryReportColumns.getBudgetSummaryReportColumns().add(BudgetSummaryReportColumn.ACCOUNT_NAME); 
budgetSummaryReportColumns.getBudgetSummaryReportColumns().add(BudgetSummaryReportColumn.ACCOUNT_NUMBER); 
budgetSummaryReportColumns.getBudgetSummaryReportColumns().add(BudgetSummaryReportColumn.CAMPAIGN_NAME); 
report.setColumns(budgetSummaryReportColumns); 

有關如何捕捉SOAP請求和響應,請參閱Troubleshooting Bing Ads Java SDK更多信息。例如,我目前使用Spring Framework和Apache CXF。

我希望這有助於!

+0

謝謝,我沒有意識到我必須手動包含所需的列。儘管如此,添加列並沒有解決問題,我仍然有同樣的錯誤。我會嘗試捕獲SOAP流量,但我真的不知道我應該期望從那個... – grepe

+0

我發現我加入了一個錯誤的列數組......畢竟...再次感謝你,對不起這個問題有點情緒化的表述。 – grepe

+0

很高興聽到問題解決!這是很好的反饋,我們將再次看看如何使SDK更易於使用,以及如何使故障排除指南更易於發現。如果您有任何後續問題,請與我們聯繫。 –