レポート Service Manager
Bing Ads .NET、Java、Python SDK には、パフォーマンス レポート レコードをダウンロードするための生産性を向上させるためのクラスが用意されています。 たとえば、 ReportingServiceManager はダウンロード要求を Reporting サービスに送信し、完了するまでサービスをポーリングし、ファイルをローカル ディレクトリにダウンロードします。 ReportingServiceManager では、一般的な要求ヘッダー フィールドも処理されるため、AuthorizationData オブジェクトの Authentication、CustomerId、AccountId、DeveloperToken プロパティをサービスごとに 1 回指定できます。 詳細については、「 AuthorizationData の使用 」および 「レポート要求 のコード例」を参照してください。
注:
ReportingServiceManager は、Bing Ads .NET、Java、Python SDK でのみ使用できます。 SDK を使用するかどうかにかかわらず、 Reporting サービスを 直接使用できます。 詳細については、「 レポートの要求とダウンロード」を参照してください。
レポート ファイル リーダー
レポート ファイルを読み取るために独自のファイル パーサーを実装する必要はありません。 ReportFileReader オブジェクトを使用して、CSV ファイルをレポート コンテナーに読み込むことができます。
注:
ReportingServiceManager は、ファイルの代わりにエンティティをダウンロードするときに、バックグラウンドで ReportFileReader を使用します。 一時ファイルはバックグラウンドで使用されます。 詳細については、 作業ディレクトリと 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 は、最初の 5 回の試行に対して 1000 ミリ秒間隔で自動的にポーリングしますが、その動作は構成できません。 StatusPollIntervalInMilliseconds プロパティは、最初の 5 回の試行後の各ポーリング試行の時間間隔を決定します。 例については、上記の 「バックグラウンド補完 」を参照してください。 既定値は 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 Ads .NET と Java SDK を使用すると、 ReportingServiceManager が一時レポート ファイルを格納する作業ディレクトリを設定できます。 たとえば、レポート コンテナーをダウンロードする場合、レポート オブジェクトのみを操作しますが、レポート ファイルは作業ディレクトリにダウンロードされます。 別の作業ディレクトリーが指定されていない場合は、システム一時ディレクトリーが使用されます。
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();