HTTPRequest от NAV C/AL — добавленный BLOB не распознается URL-адресом файлового хранилища

Я пытаюсь отправить файл PDF, сгенерированный отчетом NAV (MS Dynamics NAV 2018), через httprequest, сделанный в C/AL. Ответ представляет собой JSON, содержащий UUID, который мне нужно прочитать для более поздних целей. Что бы я ни пытался при построении запроса, хранилище не находит мой прикрепленный файл и возвращает "ERROR:MISSING_FILE". К сожалению, я не очень хорошо разбираюсь ни в DotNet Automation, ни в Webrequests, так что до этого момента мне приходилось много проб и ошибок.

Это мой код:

переменные

      SalesShipmentHeader Record  Sales Shipment Header
    
locFile File
        
locFile2    File    
    
fileName    Text        200
    
txt Text
        
ResponseHeaders DotNet  System.Collections.Specialized.NameValueCollection.'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
    
HttpStatusCode  DotNet  System.Net.HttpStatusCode.'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
    
HttpWebRequestMgt   Codeunit    Http Web Request Mgt.
    
FileManagement  Codeunit    File Management
    
TempBlob    Record  TempBlob
    
TempJSONBuffer  Record  JSON Buffer

ResponseJsonText    Text
        
NumRead Integer 
    
InStr   InStream
        
OutStr  OutStream       

Код

      // make temp file and remember path
locFile.CREATETEMPFILE;  
fileName := locFile.NAME;
locFile.CLOSE;

SalesShipmentHeader.SETFILTER("No.",DocNo);
IF SalesShipmentHeader.FINDFIRST THEN BEGIN
  locReport.SETTABLEVIEW(SalesShipmentHeader);
  IF locReport.SAVEASPDF(fileName) THEN BEGIN
    // check file and build request
    IF NOT locFile2.OPEN(fileName) THEN
      ERROR('File could not be opened');

    CLEAR(HttpWebRequestMgt);
    HttpWebRequestMgt.Initialize(url);
    HttpWebRequestMgt.DisableUI;
    HttpWebRequestMgt.SetMethod('POST');
    HttpWebRequestMgt.SetContentType('multipart/form-data; boundary=--123456789');
    HttpWebRequestMgt.SetContentLength(locFile2.LEN);   
    HttpWebRequestMgt.SetUserAgent('Dynamics NAV 2018 Client');
    HttpWebRequestMgt.SetReturnType('application/json');
    HttpWebRequestMgt.AddSecurityProtocolTls12; 
    HttpWebRequestMgt.AddHeader('Accept-Encoding','gzip, deflate, br');

    FileManagement.BLOBImportFromServerFile(TempBlob,fileName);
    HttpWebRequestMgt.AddBodyBlob(TempBlob); 
    
    locFile2.CLOSE();    
    
    CLEAR(TempBlob);
    
    HttpWebRequestMgt.CreateInstream(InStr);  //Initialize
    
    IF NOT HttpWebRequestMgt.GetResponse(InStr, HttpStatusCode, ResponseHeaders) THEN
      ERROR(GETLASTERRORTEXT);

    //CheckStatusCode
    //...

    //process JSON
    CLEAR(ResponseJsonText);
    WHILE NOT InStr.EOS() DO BEGIN
      NumRead := InStr.READTEXT(txt, 100);
      IF NumRead > 0 THEN
        ResponseJsonText := ResponseJsonText + txt;
    END;

    MESSAGE(ResponseJsonText);
    
    // DELETE FILE AFTER UPLOAD
    ERASE(fileName);
    EXIT(TRUE)
  END ELSE
    EXIT(FALSE);
END;


EXIT(FALSE)

Я могу успешно сделать запрос через приложение почтальона:Почтальон Скриншот 1 Почтальон Скриншот 2

Что я упускаю?

1 ответ

Вы пытаетесь отправить пустой файл - это может быть причиной. Попробуйте отправить файл с содержимым.

Другие вопросы по тегам