Пример кода Bing Ads Java API BudgetSummaryReportRequest

Я пытаюсь запустить пример загрузки базового отчета из документации Bing Ads, и мне удалось изменить код примера, чтобы загрузить несколько других типов отчетов, изменив get<REPORT_TYPE>ReportRequest() метод.

Единственный тип отчета, с которым я борюсь, это сводный отчет по бюджету.

Я создаю запрос отчета следующим образом:

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;
    }

а затем использовать 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", о которых говорится в сообщении об ошибке)?

У кого-нибудь есть рабочий пример загрузки сводного отчета по бюджету?

РЕДАКТИРОВАТЬ: Ответ Эрик Урбан ниже решил мою проблему. Каждый тип запроса отчета имеет несколько столбцов, которые необходимо указать вручную и добавить в объект ReportRequest.

1 ответ

Решение

Несколько обновлений должны решить эту проблему. Во-первых, вам нужно добавить недостающие обязательные столбцы. Обязательные столбцы задокументированы для каждого набора значений в справочном руководстве по основным услугам, например, см. Набор значений BudgetSummaryReportColumn. Во-вторых, вам нужно добавить массив столбцов в запрос отчета.

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

Дополнительную информацию о том, как получить запрос и ответ SOAP, см. В разделе " Устранение неполадок в Bing Ads Java SDK". Например, в настоящее время я использую Spring Framework и Apache CXF.

Надеюсь, это поможет!

Другие вопросы по тегам