報告Service Manager
Bing Ads .NET、JAVA 和 Python SDK 提供類別,以加速下載效能報告記錄的生產力。 例如, ReportingServiceManager 會將您的下載要求提交至 Reporting 服務、輪詢服務直到完成,然後將檔案下載到本機目錄。 ReportingServiceManager也會為您處理一般要求標頭欄位,允許為每個服務指定AuthorizationData物件中的Authentication、CustomerId、AccountId和DeveloperToken屬性一次。 如需詳細資訊,請 參閱使用 AuthorizationData 和 報表要求 程式碼範例。
注意事項
ReportingServiceManager僅適用于 Bing Ads .NET、JAVA 和 Python SDK。 無論您是否使用 SDK,都可以直接使用 Reporting 服務 。 如需詳細資訊,請 參閱要求和下載報表。
報表檔案讀取器
您不需要實作自己的檔案剖析器即可讀取報表檔案。 您可以使用 ReportFileReader 物件,將 CSV 檔案讀入 報表 容器。
注意事項
當您下載實體而非檔案時, ReportingServiceManager 會在背景中使用 ReportFileReader 。 暫存檔會在背景中使用。 如需詳細資訊,請 參閱 Working Directory 和 ReportingServiceManager。
讓我們使用下列 CSV 檔案作為範例。 例如,假設您想要從檔案讀取下列報表。
"Report Name: My Keyword Performance Report"
"Report Time: 2/7/2020"
"Time Zone: (GMT-08:00) Pacific Time (US & Canada); Tijuana"
"Last Completed Available Day: 2/8/2020 10:15:00 PM (GMT)"
"Last Completed Available Hour: 2/8/2020 10:15:00 PM (GMT)"
"Report Aggregation: Summary"
"Report Filter: "
"Potential Incomplete Data: true"
"Rows: 5"
"AccountId","CampaignId","Keyword","KeywordId","DeviceType","Clicks"
"YourAccountId","YourCampaignId","red shoes","123","Computer","35"
"YourAccountId","YourCampaignId","red shoes","123","Smartphone","50"
"YourAccountId","YourCampaignId","shoes delivered","234","Computer","1"
"YourAccountId","YourCampaignId","shoe sale","345","Computer","80"
"YourAccountId","YourCampaignId","shoe sale","345","Smartphone","5"
"@2020 Microsoft Corporation. All rights reserved. "
只要提供 ReportFileReader 與檔案路徑和檔案名即可。 然後在完成讀取時關閉檔案。
ReportFileReader reportFileReader = new ReportFileReader(
ResultFileName,
ReportFormat.Csv
);
Report report = reportFileReader.GetReport();
IEnumerable<IReportRecord> reportRecordIterable = reportContainer.GetReportRecords();
report.Dispose();
ReportFileReader reportFileReader = new ReportFileReader(
ResultFileName,
ReportFormat.CSV
);
Report report = reportFileReader.getReport();
Iterable<ReportRecord> reportRecords = report.getReportRecords();
report.close();
report_file_reader = ReportFileReader(
file_path=result_file_name,
format='Csv'
)
report_container=report_file_reader.get_report()
report_record_iterable=report_container.report_records
report_container.close()
In-Memory 報表容器
報表是記憶體內部容器,可擷取下載之報表檔案的內容,包括標頭中繼資料、資料行名稱和報表記錄。 透過這些更新,您可以將更多心力放在應用程式的商務需求上,而不是剖析報表檔案。
您可以透過 ReportingServiceManager 來存取記憶體中的報表容器,方法是提交新的下載要求,或使用 ReportFileReader 從您已下載的報表檔案讀取。
例如,您可以透過 ReportingServiceManager 提交新的下載要求來取得 Report 物件。 雖然在此情況下,您不會直接使用檔案,但實際上會將要求提交至 Reporting 服務,並將報表檔案下載到本機目錄。 報告下載參數包括要求的報表類型、範圍、時間週期,以及本機下載檔案路徑。
// The ReportRequest is a ReportRequest object defined by the Reporting API.
var reportingDownloadParameters = new ReportingDownloadParameters
{
ReportRequest = reportRequest,
ResultFileDirectory = FileDirectory,
ResultFileName = ResultFileName,
OverwriteResultFile = true,
};
Report reportContainer = await ReportingServiceManager.DownloadReportAsync(
reportingDownloadParameters,
CancellationToken.None
);
// The ReportRequest is a ReportRequest object defined by the Reporting API.
ReportingDownloadParameters reportingDownloadParameters = new ReportingDownloadParameters();
reportingDownloadParameters.setReportRequest(reportRequest);
reportingDownloadParameters.setResultFileDirectory(new File(FileDirectory));
reportingDownloadParameters.setResultFileName(ResultFileName);
reportingDownloadParameters.setOverwriteResultFile(true);
Report reportContainer = ReportingServiceManager.downloadReportAsync(
reportingDownloadParameters,
null
).get();
# The report_request is a ReportRequest object defined by the Reporting API.
reporting_download_parameters = ReportingDownloadParameters(
report_request=report_request,
result_file_directory = FILE_DIRECTORY,
result_file_name = DOWNLOAD_FILE_NAME,
overwrite_result_file = True
)
report_container = reporting_service_manager.download_report(
reporting_download_parameters=reporting_download_parameters
)
否則,如果您已經有透過 API 下載的報表檔案,您可以透過 ReportFileReader 取得 Report 物件。
ReportFileReader reader = new ReportFileReader(
"c:\\reports\\result.csv",
ReportFormat.Csv
);
Report reportContainer = reader.GetReport();
ReportFileReader reader = new ReportFileReader(
reportingDownloadParameters.getResultFileDirectory() + "\\" + reportingDownloadParameters.getResultFileName(),
reportingDownloadParameters.getReportRequest().getFormat()
);
Report reportContainer = reader.getReport();
report_file_reader = ReportFileReader(
file_path=reporting_download_parameters.result_file_directory + reporting_download_parameters.result_file_name,
format=reporting_download_parameters.report_request.Format
)
report_container = report_file_reader.get_report()
一旦您透過上述任一工作流程擁有 Report 物件,就可以存取中繼資料和報表記錄。 如果您提交的活動和日期沒有報表資料,則下載結果會是 Null 或空白。
// Output the report metadata
long recordCount = reportContainer.ReportRecordCount;
Console.WriteLine(string.Format("ReportName: {0}", reportContainer.ReportName));
Console.WriteLine(string.Format("ReportTimeStart: {0}", reportContainer.ReportTimeStart));
Console.WriteLine(string.Format("ReportTimeEnd: {0}", reportContainer.ReportTimeEnd));
Console.WriteLine(string.Format("LastCompletedAvailableDate: {0}", reportContainer.LastCompletedAvailableDate.ToString()));
Console.WriteLine(string.Format("ReportAggregation: {0}", reportContainer.ReportAggregation.ToString()));
Console.WriteLine(string.Format("ReportColumns: {0}", string.Join("; ", reportContainer.ReportColumns)));
Console.WriteLine(string.Format("ReportRecordCount: {0}", recordCount));
// Analyze and output performance statistics
IEnumerable<IReportRecord> reportRecordIterable = reportContainer.GetReportRecords();
int totalImpressions = 0;
int totalClicks = 0;
HashSet<string> distinctDevices = new HashSet<string>();
HashSet<string> distinctNetworks = new HashSet<string>();
foreach (IReportRecord record in reportContainer.GetReportRecords())
{
totalImpressions += record.GetIntegerValue("Impressions");
totalClicks += record.GetIntegerValue("Clicks");
distinctDevices.Add(record.GetStringValue("DeviceType"));
distinctNetworks.Add(record.GetStringValue("Network"));
}
Console.WriteLine(string.Format("Total Impressions: {0}", totalImpressions));
Console.WriteLine(string.Format("Total Clicks: {0}", totalClicks));
Console.WriteLine(string.Format("Average Impressions: {0}", totalImpressions * 1.0 / recordCount));
Console.WriteLine(string.Format("Average Clicks: {0}", totalClicks * 1.0 / recordCount));
Console.WriteLine(string.Format("Distinct Devices: {0}", string.Join("; ", distinctDevices)));
Console.WriteLine(string.Format("Distinct Networks: {0}", string.Join("; ", distinctNetworks)));
// Be sure to close the report before you attempt to clean up files within the working directory.
reportContainer.Dispose();
// Output the reportRequest metadata
java.lang.Long recordCount = reportContainer.getReportRecordCount();
outputStatusMessage(String.format("ReportName: %s", reportContainer.getReportName()));
outputStatusMessage(String.format("ReportTimeStart: %s", reportContainer.getReportTimeStart()));
outputStatusMessage(String.format("ReportTimeEnd: %s", reportContainer.getReportTimeEnd()));
outputStatusMessage(String.format("LastCompletedAvailableDate: %s", reportContainer.getLastCompletedAvailableDate().toString()));
outputStatusMessage(String.format("ReportAggregation: %s", enumCaseToPascalCase(reportContainer.getReportAggregation().toString())));
outputStatusMessage(String.format("ReportColumns: %s", String.join("; ", reportContainer.getReportColumns())));
outputStatusMessage(String.format("ReportRecordCount: %s", recordCount));
// Analyze and output performance statistics
if(Arrays.asList(reportContainer.getReportColumns()).contains("Impressions")){
Iterable<ReportRecord> reportRecordIterable = reportContainer.getReportRecords();
int totalImpressions = 0;
int totalClicks = 0;
HashSet<String> distinctDevices = new HashSet<>();
HashSet<String> distinctNetworks = new HashSet<>();
for (ReportRecord record : reportRecordIterable)
{
totalImpressions += record.getIntegerValue("Impressions");
totalClicks += record.getIntegerValue("Clicks");
distinctDevices.add(record.getStringValue("DeviceType"));
distinctNetworks.add(record.getStringValue("Network"));
}
outputStatusMessage(String.format("Total Impressions: %s", totalImpressions));
outputStatusMessage(String.format("Total Clicks: %s", totalClicks));
outputStatusMessage(String.format("Average Impressions: %s", totalImpressions * 1.0 / recordCount));
outputStatusMessage(String.format("Average Clicks: %s", totalClicks * 1.0 / recordCount));
outputStatusMessage(String.format("Distinct Devices: %s", String.join("; ", distinctDevices)));
outputStatusMessage(String.format("Distinct Networks: %s", String.join("; ", distinctNetworks)));
}
// Be sure to close the reportRequest before you attempt to clean up files within the working directory.
reportContainer.close();
# Output the reportRequest metadata
record_count = report_container.record_count
output_status_message("ReportName: {0}".format(report_container.report_name))
output_status_message("ReportTimeStart: {0}".format(report_container.report_time_start))
output_status_message("ReportTimeEnd: {0}".format(report_container.report_time_end))
output_status_message("LastCompletedAvailableDate: {0}".format(report_container.last_completed_available_date))
output_status_message("ReportAggregation: {0}".format(report_container.report_aggregation))
output_status_message("ReportColumns: {0}".format("; ".join(str(column) for column in report_container.report_columns)))
output_status_message("ReportRecordCount: {0}".format(record_count))
#Analyze and output performance statistics
if "Impressions" in report_container.report_columns and \
"Clicks" in report_container.report_columns and \
"DeviceType" in report_container.report_columns and \
"Network" in report_container.report_columns:
report_record_iterable = report_container.report_records
total_impressions = 0
total_clicks = 0
distinct_devices = set()
distinct_networks = set()
for record in report_record_iterable:
total_impressions += record.int_value("Impressions")
total_clicks += record.int_value("Clicks")
distinct_devices.add(record.value("DeviceType"))
distinct_networks.add(record.value("Network"))
output_status_message("Total Impressions: {0}".format(total_impressions))
output_status_message("Total Clicks: {0}".format(total_clicks))
output_status_message("Average Impressions: {0}".format(total_impressions * 1.0 / record_count))
output_status_message("Average Clicks: {0}".format(total_clicks * 1.0 / record_count))
output_status_message("Distinct Devices: {0}".format("; ".join(str(device) for device in distinct_devices)))
output_status_message("Distinct Networks: {0}".format("; ".join(str(network) for network in distinct_networks)))
#Be sure to close the report.
report_container.close()
下載
ReportingServiceManager支援彈性的報表下載工作流程。
您可以建立下載要求, ReportingServiceManager 會將您的下載要求提交至 Reporting 服務、輪詢服務直到完成,然後將檔案下載到本機目錄。 例如,請參閱使用 ReportingServiceManager 的背景完成。
您可以提交下載要求,然後輪詢直到結果檔案準備好下載為止。 例如,請參閱 使用 ReportingServiceManager 提交和下載。
如果基於任何原因,您必須從先前的應用程式狀態繼續,您可以使用現有的下載要求識別碼,並使用它來下載結果檔案。 例如,請參閱 使用 ReportingServiceManager 下載結果。
使用 ReportingServiceManager 完成背景
您可以建立下載要求, ReportingServiceManager 會將您的下載要求提交至 Reporting 服務、輪詢服務直到完成,然後將檔案下載到本機目錄。
public async Task RunAsync(AuthorizationData authorizationData)
{
ReportingServiceManager reportingServiceManager = new ReportingServiceManager(authorizationData);
var reportRequest = GetCampaignPerformanceReportRequest(authorizationData.AccountId);
var reportingDownloadParameters = new ReportingDownloadParameters
{
ReportRequest = reportRequest,
ResultFileDirectory = FileDirectory,
ResultFileName = ResultFileName,
OverwriteResultFile = true,
};
// Sets the time interval in milliseconds between two status polling attempts. The default value is 5000 (5 seconds).
reportingServiceManager.StatusPollIntervalInMilliseconds = 5000;
// Sets the timeout of the HttpClient download operation. The default value is 100000 (100s).
reportingServiceManager.DownloadHttpTimeout = new TimeSpan(0, 0, 100);
// You may optionally cancel the DownloadFileAsync operation after a specified time interval.
// Pass this object to the DownloadFileAsync operation or specify CancellationToken.None.
var tokenSource = new CancellationTokenSource();
tokenSource.CancelAfter(3600000);
// The ReportingServiceManager will submit your download request to the Reporting service,
// poll the service until completed, and download the file to your local directory.
var resultFilePath = await reportingServiceManager.DownloadFileAsync(
parameters: reportingDownloadParameters,
cancellationToken: tokenSource.Token
);
Console.WriteLine(string.Format("Download result file: {0}\n", resultFilePath));
}
ReportingServiceManager reportingServiceManager = new ReportingServiceManager(authorizationData);
ReportRequest reportRequest = getCampaignPerformanceReportRequest();
ReportingDownloadParameters reportingDownloadParameters = new ReportingDownloadParameters();
reportingDownloadParameters.setReportRequest(reportRequest);
reportingDownloadParameters.setResultFileDirectory(new File(FileDirectory));
reportingDownloadParameters.setResultFileName(ResultFileName);
reportingDownloadParameters.setOverwriteResultFile(true);
// Sets the time interval in milliseconds between two status polling attempts. The default value is 5000 (5 seconds).
reportingServiceManager.setStatusPollIntervalInMilliseconds(5000);
// Sets the timeout of the HttpClient download operation. The default value is 100000 (100s).
reportingServiceManager.setDownloadHttpTimeoutInMilliseconds(100000);
// The ReportingServiceManager will submit your download request to the Reporting service,
// poll the service until completed, and download the file to your local directory.
// You may optionally cancel the downloadFileAsync operation after a specified time interval.
File resultFile = reportingServiceManager.downloadFileAsync(
reportingDownloadParameters,
null
).get(3600000, TimeUnit.MILLISECONDS);
System.out.println(String.format("Download result file: %s\n", resultFile.getName()));
reporting_service_manager=ReportingServiceManager(
authorization_data=authorization_data,
# Sets the time interval in milliseconds between two status polling attempts.
# The default value is 5000 (5 seconds).
poll_interval_in_milliseconds=5000,
environment=ENVIRONMENT,
)
report_request=get_keyword_report_request()
reporting_download_parameters = ReportingDownloadParameters(
report_request=report_request,
result_file_directory = FILE_DIRECTORY,
result_file_name = DOWNLOAD_FILE_NAME,
overwrite_result_file = True, # Set this value true if you want to overwrite the same file.
timeout_in_milliseconds=3600000 # You may optionally cancel the download after a specified time interval.
)
# The ReportingServiceManager will submit your download request to the Reporting service,
# poll the service until completed, and download the file to your local directory.
result_file_path = reporting_service_manager.download_file(
reporting_download_parameters=reporting_download_parameters
)
print("Download result file: {0}\n".format(result_file_path))
使用 ReportingServiceManager 提交和下載
提交下載要求,然後使用 ReportingDownloadOperation 結果,使用 GetStatusAsync 自行追蹤狀態。
public async Task RunAsync(AuthorizationData authorizationData)
{
ReportingService = new ReportingServiceManager(authorizationData);
var reportRequest = GetCampaignPerformanceReportRequest(authorizationData.AccountId);
var reportingDownloadOperation = await ReportingService.SubmitDownloadAsync(reportRequest);
// You may optionally cancel the TrackAsync operation after a specified time interval.
var tokenSource = new CancellationTokenSource();
tokenSource.CancelAfter(3600000);
var reportingDownloadOperation = await ReportingService.SubmitDownloadAsync(reportRequest);
ReportingOperationStatus reportingOperationStatus = await reportingDownloadOperation.TrackAsync(tokenSource.Token);
var resultFilePath = await reportingDownloadOperation.DownloadResultFileAsync(
FileDirectory,
ResultFileName,
decompress: true,
overwrite: true // Set this value true if you want to overwrite the same file.
);
Console.WriteLine(string.Format("Download result file: {0}\n", resultFilePath));
}
ReportingServiceManager = new ReportingServiceManager(authorizationData);
ReportRequest reportRequest = getCampaignPerformanceReportRequest();
ReportingDownloadOperation reportingDownloadOperation = ReportingServiceManager.submitDownloadAsync(
reportRequest,
null
).get();
// You may optionally cancel the trackAsync operation after a specified time interval.
ReportingOperationStatus reportingOperationStatus = reportingDownloadOperation.trackAsync(
null
).get(3600000, TimeUnit.MILLISECONDS);
File resultFile = reportingDownloadOperation.downloadResultFileAsync(
new File(FileDirectory),
ResultFileName,
true, // Set this value to true if you want to decompress the ZIP file.
true, // Set this value true if you want to overwrite the named file.
null
).get();
System.out.println(String.format("Download result file: %s\n", resultFile.getName()));
reporting_service_manager=ReportingServiceManager(
authorization_data=authorization_data,
poll_interval_in_milliseconds=5000,
environment=ENVIRONMENT,
)
# In addition to ReportingServiceManager, you will need a reporting ServiceClient
# to build the ReportRequest.
reporting_service=ServiceClient(
'ReportingService',
version=13,
authorization_data=authorization_data,
environment=ENVIRONMENT,
)
report_request=get_keyword_report_request()
reporting_download_operation = reporting_service_manager.submit_download(report_request)
# You may optionally cancel the track() operation after a specified time interval.
reporting_operation_status = reporting_download_operation.track(timeout_in_milliseconds=3600000)
result_file_path = reporting_download_operation.download_result_file(
result_file_directory = FILE_DIRECTORY,
result_file_name = DOWNLOAD_FILE_NAME,
decompress = True,
overwrite = True, # Set this value true if you want to overwrite the same file.
timeout_in_milliseconds=3600000 # You may optionally cancel the download after a specified time interval.
)
print("Download result file: {0}\n".format(result_file_path))
使用 ReportingServiceManager 下載結果
如果基於任何原因,您必須從先前的應用程式狀態繼續,您可以使用現有的下載要求識別碼,並使用它來下載結果檔案。 使用 TrackAsync 指出應用程式應該等候以確保下載狀態已完成。
public async Task RunAsync(AuthorizationData authorizationData)
{
ReportingService = new ReportingServiceManager(authorizationData);
// You may optionally cancel the TrackAsync operation after a specified time interval.
var tokenSource = new CancellationTokenSource();
tokenSource.CancelAfter(3600000);
var reportingDownloadOperation = new ReportingDownloadOperation(RequestIdGoesHere, authorizationData);
// Use TrackAsync to indicate that the application should wait to ensure that
// the download status is completed.
var reportingOperationStatus = await reportingDownloadOperation.TrackAsync(tokenSource.Token);
var resultFilePath = await reportingDownloadOperation.DownloadResultFileAsync(
FileDirectory,
ResultFileName,
decompress: true,
overwrite: true // Set this value true if you want to overwrite the same file.
);
Console.WriteLine(string.Format("Download result file: {0}", resultFilePath));
Console.WriteLine(string.Format("Status: {0}", reportingOperationStatus.Status));
Console.WriteLine(string.Format("TrackingId: {0}\n", reportingOperationStatus.TrackingId));
}
java.lang.String requestId = RequestIdGoesHere;
ReportingDownloadOperation reportingDownloadOperation = new ReportingDownloadOperation(
requestId,
authorizationData
);
reportingDownloadOperation.setStatusPollIntervalInMilliseconds(5000);
// You can use trackAsync to poll until complete as shown here,
// or use custom polling logic with getStatusAsync.
// You may optionally cancel the trackAsync operation after a specified time interval.
ReportingOperationStatus reportingOperationStatus = reportingDownloadOperation.trackAsync(
null
).get(3600000, TimeUnit.MILLISECONDS);
File resultFile = reportingDownloadOperation.downloadResultFileAsync(
new File(FileDirectory),
ResultFileName,
true, // Set this value to true if you want to decompress the ZIP file
true, // Set this value true if you want to overwrite the named file.
null
).get();
System.out.println(String.format("Download result file: %s", resultFile.getName()));
System.out.println(String.format("Status: %s", reportingOperationStatus.getStatus()));
System.out.println(String.format("TrackingId: %s\n", reportingOperationStatus.getTrackingId()));
reporting_download_operation = ReportingDownloadOperation(
request_id = RequestIdGoesHere,
authorization_data=authorization_data,
poll_interval_in_milliseconds=5000,
environment=ENVIRONMENT,
)
# Use track() to indicate that the application should wait to ensure that
# the download status is completed.
# You may optionally cancel the track() operation after a specified time interval.
reporting_operation_status = reporting_download_operation.track(timeout_in_milliseconds=3600000)
result_file_path = reporting_download_operation.download_result_file(
result_file_directory = FILE_DIRECTORY,
result_file_name = DOWNLOAD_FILE_NAME,
decompress = True,
overwrite = True, # Set this value true if you want to overwrite the same file.
timeout_in_milliseconds=3600000 # You may optionally cancel the download after a specified time interval.
)
print("Download result file: {0}".format(result_file_path))
print("Status: {0}\n".format(reporting_operation_status.status))
輪詢和重試
ReportingServiceManager會在前五次嘗試的 1000 毫秒間隔內自動輪詢,而且無法設定該行為。 StatusPollIntervalInMilliseconds屬性會決定在初始五次嘗試之後,每個輪詢嘗試之間的時間間隔。 如需範例,請參閱上方 的背景完成 。 預設值為 5000,因此如果您未設定此值, ReportingServiceManager 會依下列順序輪詢:1、2、3、4、5、10、15、20 等等。 如果您將此值設定為 10000,ReportingServiceManager 會依下列順序輪詢:1、2、3、4、5、15、25、35 等等。 最小輪詢間隔為 1000,如果您指定小於 1000 的值,則會擲回例外狀況。
ReportingServiceManager會自動重試下載和輪詢作業,最多可達您指定的逾時持續時間上限。 您可以設定重試逾時持續時間上限。 如果未指定逾時, ReportingServiceManager 會繼續重試,直到伺服器傳回逾時或內部錯誤為止。 另外,如果您要下載大型檔案,您應該考慮設定 DownloadHttpTimeout 屬性。
工作目錄和 ReportingServiceManager
使用 Bing 廣告 .NET 和 JAVA SDK,您可以設定 ReportingServiceManager 應該儲存暫存報表檔案的工作目錄。 例如,當您下載報表容器時,雖然您只會使用 Report 物件,但報表檔案會下載到工作目錄。 如果未指定另一個工作目錄,則會使用系統臨時目錄。
如果您使用如 Microsoft Azure 的託管服務,您會想要確保不會超過臨時目錄限制。 使用自訂工作目錄可能還有其他原因。 您可以藉由設定WorkingDirectory屬性,為每個ReportingServiceManager實例指定不同的工作目錄。 您也必須負責建立和移除任何目錄。
重要事項
反復查看報表記錄之後,您可以從工作目錄清除檔案。 CleanupTempFiles方法會移除工作目錄內 (的所有檔案,但不會移除任何子目錄) ,無論這些檔案是否由目前的ReportingServiceManager實例所建立。
ReportingServiceManager reportingServiceManager = new ReportingServiceManager(
authorizationData: authorizationData,
apiEnvironment: environment
);
var reportRequest = GetReportRequest(authorizationData.AccountId);
var reportingDownloadParameters = new ReportingDownloadParameters
{
ReportRequest = reportRequest,
ResultFileDirectory = FileDirectory,
ResultFileName = ResultFileName,
OverwriteResultFile = true,
};
// The system temp directory will be used if another working directory is not specified. If you are
// using a hosted service such as Microsoft Azure you'll want to ensure you do not exceed the file or directory limits.
// You can specify a different working directory for each ReportingServiceManager instance.
reportingServiceManager.WorkingDirectory = FileDirectory;
// You can get a Report object by submitting a new download request via ReportingServiceManager.
// Although in this case you won't work directly with the file, under the covers a request is
// submitted to the Reporting service and the report file is downloaded to a local directory.
Report reportContainer = await reportingServiceManager.DownloadReportAsync(
parameters: reportingDownloadParameters,
cancellationToken: CancellationToken.None
);
IEnumerable<IReportRecord> reportRecordIterable = reportContainer.GetReportRecords();
// Be sure to close the report before you attempt to clean up files within the working directory.
reportContainer.Dispose();
// The CleanupTempFiles method removes all files (but not sub-directories) within the working directory,
// whether or not the files were created by this ReportingServiceManager instance.
reportingServiceManager.CleanupTempFiles();
ReportingServiceManager reportingServiceManager = new ReportingServiceManager(authorizationData, API_ENVIRONMENT);
reportingServiceManager.setStatusPollIntervalInMilliseconds(5000);
ReportRequest reportRequest = getReportRequest(authorizationData.getAccountId());
ReportingDownloadParameters reportingDownloadParameters = new ReportingDownloadParameters();
reportingDownloadParameters.setReportRequest(reportRequest);
reportingDownloadParameters.setResultFileDirectory(new File(FileDirectory));
reportingDownloadParameters.setResultFileName(ResultFileName);
reportingDownloadParameters.setOverwriteResultFile(true);
// The system temp directory will be used if another working directory is not specified. If you are
// using a hosted service such as Microsoft Azure you'll want to ensure you do not exceed the file or directory limits.
// You can specify a different working directory for each ReportingServiceManager instance.
reportingServiceManager.setWorkingDirectory(new File(FileDirectory));
// You can get a Report object by submitting a new download request via ReportingServiceManager.
// Although in this case you won't work directly with the file, under the covers a request is
// submitted to the Reporting service and the report file is downloaded to a local directory.
Report reportContainer = reportingServiceManager.downloadReportAsync(
reportingDownloadParameters,
null
).get();
java.lang.Long recordCount = reportContainer.getReportRecordCount();
// Be sure to close the reportRequest before you attempt to clean up files within the working directory.
reportContainer.close();
// The cleanupTempFiles method removes all files (but not sub-directories) within the working directory,
// whether or not the files were created by this ReportingServiceManager instance.
reportingServiceManager.cleanupTempFiles();