2011-08-12 13 views
3

我試圖拉FBA貨運數據報告。我有一個正在運行的應用程序,它可以成功地從亞馬遜上取得無船承運人的訂單。所以基本上我拿了這些代碼,並將其改爲我需要爲FBA裝運訂單執行的操作。我幾乎沒有改變工作代碼來獲取報告,現在GetReport函數返回null,我不知道爲什麼。我正在傳遞來自亞馬遜系統的ReportId。報表API的MWS GetReport函數返回null?

如果有人可以仔細閱讀代碼,看看我是否傳遞一個null對象或其他東西。

RequestReportRequest reportRequestRequest = new RequestReportRequest(); 
reportRequestRequest.Merchant = merchantId; 
reportRequestRequest.Marketplace = marketplaceId; 
reportRequestRequest.ReportType = "_GET_AMAZON_FULFILLED_SHIPMENTS_DATA_"; 
reportRequestRequest.StartDate = DateTime.Now.AddDays(-2); 
reportRequestRequest.EndDate = DateTime.Now; 

RequestReportResponse requestResponse = service.RequestReport(reportRequestRequest); 
Thread.Sleep(15000); 
Console.WriteLine(requestResponse.RequestReportResult.ReportRequestInfo.ReportProcessingStatus); 
GetReportRequestListRequest reportRequestListRequest = new GetReportRequestListRequest(); 
reportRequestListRequest.Marketplace = marketplaceId; 
reportRequestListRequest.Merchant = merchantId; 
List<ReportRequestInfo> myListzz = new List<ReportRequestInfo>(); 

GetReportRequestListResponse reportRequestListResponse = new GetReportRequestListResponse(); 
reportRequestListResponse = service.GetReportRequestList(reportRequestListRequest); 
GetReportRequestListResult reportRequestListResult = new GetReportRequestListResult(); 
reportRequestListResult = reportRequestListResponse.GetReportRequestListResult; 
myListzz = reportRequestListResult.ReportRequestInfo; 
while (myListzz[0].ReportProcessingStatus.ToString() != "_DONE_") 
{ 
    Thread.Sleep(20000); 
    reportRequestListResponse = service.GetReportRequestList(reportRequestListRequest); 
    reportRequestListResult = reportRequestListResponse.GetReportRequestListResult; 
    myListzz = reportRequestListResult.ReportRequestInfo; 

} 
GetReportListRequest listRequest = new GetReportListRequest(); 
listRequest.Merchant = merchantId; 
listRequest.Marketplace = marketplaceId; 
listRequest.ReportRequestIdList = new IdList(); 
listRequest.ReportRequestIdList.Id.Add(requestResponse.RequestReportResult.ReportRequestInfo.ReportRequestId); 

GetReportListResponse listResponse = service.GetReportList(listRequest); 


//MessageBox.Show(listResponse.GetReportListResult.ReportInfo.ToString()); 
GetReportListResult getReportListResult = listResponse.GetReportListResult; 

GetReportRequest reportRequest = new GetReportRequest(); 
reportRequest.Merchant = merchantId; 
reportRequest.Marketplace = marketplaceId; 
reportRequest.WithReportId(getReportListResult.ReportInfo[0].ReportId); 


GetReportResponse reportResponse = new GetReportResponse(); 

{ 
    reportResponse = service.GetReport(reportRequest); // <=== ERROR!!!! 
} 
catch (MarketplaceWebServiceException e) 
{ 
    Console.WriteLine(e); 
} 
StreamReader sr = new StreamReader(reportRequest.Report); 
Console.WriteLine(sr.ReadToEnd()); 
sr.Close(); 

回答

6

這一行後:

GetReportResponse reportResponse = new GetReportResponse(); 

您必須指定一個報告文件,像這樣:

reportRequest.Report = File.Open("C:\\AmazonReport.csv", FileMode.OpenOrCreate, FileAccess.ReadWrite); 

然後,將寫入該文件的報告。 所以,你可以在那裏看到你的報告。

+0

謝謝,在java中遇到同樣的問題後,這對我有效 – Chris