Search code examples
c#bingbing-ads-api

Bing Ads API - Adding more than one CampaignStatusReportFilter while filtering Reports


I'm trying to filter the SearchQueryPerformanceReport in the Bing Ads Api, I can get the report back fine however I want to filter the report by multiple CampaignStatus

For Example

var report = new SearchQueryPerformanceReportRequest
            {
                Aggregation = aggregation,
                ExcludeColumnHeaders = excludeColumnHeaders,
                ExcludeReportFooter = excludeReportFooter,
                ExcludeReportHeader = excludeReportHeader,
                Format = ReportFileFormat,
                ReturnOnlyCompleteData = returnOnlyCompleteData,
                Time = time,
                ReportName = "My Search Query Performance Report",
                Scope = new AccountThroughAdGroupReportScope
                {
                    AccountIds = new[] { accountId }
                },
                Filter = new SearchQueryPerformanceReportFilter
                {    
                    CampaignStatus = CampaignStatusReportFilter.Active,
                    AdGroupStatus = AdGroupStatusReportFilter.Active
                },
                Columns = new[]
                {
                    SearchQueryPerformanceReportColumn.SearchQuery,
                    SearchQueryPerformanceReportColumn.Clicks,
                    SearchQueryPerformanceReportColumn.Spend,
                    SearchQueryPerformanceReportColumn.Conversions,
                    SearchQueryPerformanceReportColumn.Revenue,
                    SearchQueryPerformanceReportColumn.CampaignId,
                    SearchQueryPerformanceReportColumn.CampaignName,
                    SearchQueryPerformanceReportColumn.AdGroupId,
                    SearchQueryPerformanceReportColumn.AdGroupName
                },
            };

Now I want to get every CampaignStatus that isn't CampaignStatusReportFilter.Deleted. The documentation says I should be able to do this. In my mind it should look like this, but this is obviously incorrect.

 Filter = new SearchQueryPerformanceReportFilter
            {    
                CampaignStatus = CampaignStatusReportFilter.Active,
                CampaignStatus = CampaignStatusReportFilter.Paused,
                AdGroupStatus = AdGroupStatusReportFilter.Active
            },

Or

Filter = new SearchQueryPerformanceReportFilter
            {    
                CampaignStatus = !CampaignStatusReportFilter.Deleted,
                AdGroupS

Solution

  • For a list type you can include multiple values as flags. How you specify multiple flags depends on the programming language that you use. For example, C# treats these values as flag values and Java treats them as an array of strings. Here's a snippet in C#:

    CampaignStatus = CampaignStatusReportFilter.Active | CampaignStatusReportFilter.Paused
    

    The SOAP should include a string that contains a space-delimited list of values for example:

    <CampaignStatus>Active Paused</CampaignStatus>