我正在尝试使用C#dll和flatfile(而不是xml)来使SubmitFeed工作。该语言是名为Dynamics NAV的Microsoft ERP系统的C / AL。这是我的代码:
config := config.MarketplaceWebServiceConfig();
config.ServiceURL := 'https://mws.amazonservices.com';
service := service.MarketplaceWebServiceClient(MyAccessKey,MySecretKey,'NAV','1.0',config);
request := request.SubmitFeedRequest();
request.Merchant := 'mymerchant';
request.Marketplace := 'MyMarketPlaceID';
request.FeedContent := SystemIOFile.Open('C:\Test\Jason.txt',FileMode.Open,FileAccess.Read);
request.ContentMD5 := service.CalculateContentMD5(request.FeedContent);
request.FeedContent.Position := 0;
request.FeedType := '_POST_INVENTORY_AVAILABILITY_DATA_';
response := service.SubmitFeed(request);
request.FeedContentPosition:= 0行是错误所在的位置"无法访问已关闭的文件"
我的提交帐户和提交工作完全正常,我无法提交工作。
我跟随其他C#示例,他们似乎是一样的,有人有想法吗?
答案 0 :(得分:0)
想出来了。这一行是关闭文件的:
request.ContentMD5 := service.CalculateContentMD5(request.FeedContent);
我认为这是C / AL(NAV)中的一个错误,因为我可以在c#和它中编写类似的代码 完全有效。
我的工作是创建请求的第二个实例,并从第一个请求中获取MD5值。这样的事情有效:
request := request.SubmitFeedRequest();
request.Merchant := "Merchant No.";
request.FeedContent := SystemIOFIle.Open('C:\Test\Jason.txt',FileMode.Open,FileAccess.Read);
MD5Value := WSClient.CalculateContentMD5(request.FeedContent);
CLEAR(SystemIOFIle);
CLEAR(request);
request2 := request2.SubmitFeedRequest();
request2.Merchant := "Merchant No.";
request2.FeedContent := SystemIOFIle.Open('C:\Test\Jason.txt',FileMode.Open,FileAccess.Read);
request2.ContentMD5 := MD5Value;
request2.FeedContent.Position := 0;
request2.FeedType := '_POST_FLAT_FILE_PRICEANDQUANTITYONLY_UPDATE_DATA_';
response := service.SubmitFeed(request2);