19. Juli 2022 09:32

// dotnet webclient Instanz erzeugen
webClient := webClient.WebClient();
// temporäre Datei erzeugen und den namen merken
locFile.CREATETEMPFILE;  
fileName := locFile.NAME;
locFile.CLOSE;
IF locReport.SAVEASPDF(fileName) THEN BEGIN
  // eigentliches uploaden
  WebResponse := webClient.UploadFile(url, 'POST', fileName);
  txt := WebResponse.ToString;  
  MESSAGE(txt);
  // nach dem upload Datei wieder löschen
  ERASE(fileName);
  EXIT(TRUE)
END ELSE
  EXIT(FALSE);
19. Juli 2022 13:00
19. Juli 2022 13:56
WebResponse := webClient.UploadFile(url, 'POST', fileName);
JsonObject := JsonObject.FromObject(WebResponse); 
19. Juli 2022 14:48
19. Juli 2022 15:03
 .
.20. Juli 2022 10:37
IF NOT f.OPEN('C:\Temp\Test.pdf') THEN
  EXIT;
 
CLEAR(HttpWebRequestMgt);
HttpWebRequestMgt.Initialize('http://myurl.com');
HttpWebRequestMgt.SetMethod('POST');
HttpWebRequestMgt.SetContentType('application/octet-stream');
HttpWebRequestMgt.SetContentLength(f.LEN());
HttpWebRequestMgt.SetUserAgent('Dynamics NAV 2018 Client');
 
f.CREATEINSTREAM(ins);
CLEAR(TempBlob);
TempBlob.Blob.CREATEOUTSTREAM(outs);
COPYSTREAM(outs, ins);
HttpWebRequestMgt.AddBodyBlob(TempBlob);
 
f.CLOSE();
CLEAR(ins);
 
IF NOT HttpWebRequestMgt.GetResponse(ins, HttpStatusCode, ResponseHeaders) THEN
  EXIT;
// TODO: StautsCode ggf. abfragen
CLEAR(ResponseJsonText);
WHILE NOT ins.EOS() DO BEGIN
  NumRead := ins.READTEXT(Txt, 100);
  IF NumRead > 0 THEN
    ResponseJsonText := ResponseJsonText + Txt;
END;
TempJSONBuffer.RESET();
TempJSONBuffer.DELETEALL();
TempJSONBuffer.ReadFromText(ResponseJsonText);
IF TempJSONBuffer.FINDSET() THEN 
  REPEAT
    // TODO ...
  UNTIL TempJSONBuffer.NEXT() = 0;21. Juli 2022 10:11
 .
.IF locReport.SAVEASPDF(fileName) THEN BEGIN
    // eigentliches uploaden
    IF NOT locFile2.OPEN(fileName) THEN
      ERROR('File could not be open');
    CLEAR(HttpWebRequestMgt);
    HttpWebRequestMgt.Initialize(url);
    HttpWebRequestMgt.SetMethod('POST');
    HttpWebRequestMgt.SetContentType('application/octet-stream');
    HttpWebRequestMgt.SetContentLength(locFile2.LEN);
    HttpWebRequestMgt.SetUserAgent('Dynamics NAV 2018 Client');
    HttpWebRequestMgt.SetReturnType('application/json'); //!
    HttpWebRequestMgt.AddSecurityProtocolTls12; //!
    locFile2.CREATEINSTREAM(InStr);
    CLEAR(TempBlob);
    TempBlob.Blob.CREATEOUTSTREAM(OutStr);
    COPYSTREAM(OutStr, InStr);
    HttpWebRequestMgt.AddBodyBlob(TempBlob);
 
    locFile2.CLOSE();
    CLEAR(InStr);
    
    IF NOT HttpWebRequestMgt.GetResponse(InStr, HttpStatusCode, ResponseHeaders) THEN
      ERROR('Cannot get response.');
    //CheckStatusCode
    //...
22. Juli 2022 11:47
[TryFunction] GetWebResponse(VAR HttpWebRequest : DotNet "System.Net.HttpWebRequest";VAR HttpWebResponse : DotNet "System.Net.HttpWebResponse";VAR ResponseInStream : InStream;VAR HttpStatusCode : DotNet "System.Net.HttpStatusCode";VAR ResponseHeaders 
IF ProgressDialogEnabled THEN
  ProcessingWindow.OPEN(ProcessingWindowMsg);
CLEARLASTERROR;
HttpWebResponse := HttpWebRequest.GetResponse;
HttpWebResponse.GetResponseStream.CopyTo(ResponseInStream); //fails <---!!!---
HttpStatusCode := HttpWebResponse.StatusCode;
ResponseHeaders := HttpWebResponse.Headers;
IF ProgressDialogEnabled THEN
  ProcessingWindow.CLOSE;
22. Juli 2022 13:41
22. Juli 2022 13:45
22. Juli 2022 14:08
22. Juli 2022 15:14
  IF locReport.SAVEASPDF(fileName) THEN BEGIN
    // eigentliches uploaden
    IF NOT locFile2.OPEN(fileName) THEN
      ERROR('File could not be opened');
    CLEAR(HttpWebRequestMgt);
    HttpWebRequestMgt.Initialize(url);
    HttpWebRequestMgt.SetMethod('POST');
    //HttpWebRequestMgt.SetContentType('multipart/form-data'); 
    HttpWebRequestMgt.SetContentType('application/octet-stream');
    HttpWebRequestMgt.SetContentLength(locFile2.LEN);
    HttpWebRequestMgt.SetUserAgent('Dynamics NAV 2018 Client');
    HttpWebRequestMgt.SetReturnType('application/json'); //!!!
    HttpWebRequestMgt.AddSecurityProtocolTls12; //!!!
    HttpWebRequestMgt.DisableUI; //!!!
    
    locFile2.CREATEINSTREAM(InStr);
    CLEAR(TempBlob);    
    TempBlob.Blob.CREATEOUTSTREAM(OutStr);
    COPYSTREAM(OutStr, InStr);
    HttpWebRequestMgt.AddBodyBlob(TempBlob);
    
    locFile2.CLOSE();
    
    CLEAR(InStr);
    
    HttpWebRequestMgt.CreateInstream(InStr);  //<--Initialisieren-->? 
    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);
    
    // nach dem upload Datei wieder löschen
    ERASE(fileName);
    EXIT(TRUE)
  END ELSE
    EXIT(FALSE);
22. Juli 2022 15:15
22. Juli 2022 15:31
 
			
		22. Juli 2022 19:42
25. Juli 2022 07:43
fips hat geschrieben:Hallo nochmal,
habe ich nun gemacht (glaube ich). Jetzt bekomme ich auch aus der Antwort "ERROR:MISSING_FILE". Das ist auch schon eine Antwort vom Server, den ich anspreche.
Mein Code sieht nun wie folgt aus:
- Code:
IF locReport.SAVEASPDF(fileName) THEN BEGIN
// eigentliches uploaden
IF NOT locFile2.OPEN(fileName) THEN
ERROR('File could not be opened');
CLEAR(HttpWebRequestMgt);
HttpWebRequestMgt.Initialize(url);
HttpWebRequestMgt.SetMethod('POST');
//HttpWebRequestMgt.SetContentType('multipart/form-data');
HttpWebRequestMgt.SetContentType('application/octet-stream');
HttpWebRequestMgt.SetContentLength(locFile2.LEN);
HttpWebRequestMgt.SetUserAgent('Dynamics NAV 2018 Client');
HttpWebRequestMgt.SetReturnType('application/json'); //!!!
HttpWebRequestMgt.AddSecurityProtocolTls12; //!!!
HttpWebRequestMgt.DisableUI; //!!!
locFile2.CREATEINSTREAM(InStr);
CLEAR(TempBlob);
TempBlob.Blob.CREATEOUTSTREAM(OutStr);
COPYSTREAM(OutStr, InStr);
HttpWebRequestMgt.AddBodyBlob(TempBlob);
locFile2.CLOSE();
CLEAR(InStr);
HttpWebRequestMgt.CreateInstream(InStr); //<--Initialisieren-->?
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);
// nach dem upload Datei wieder löschen
ERASE(fileName);
EXIT(TRUE)
END ELSE
EXIT(FALSE);
Nun geht es also noch darum, warum er die PDF nicht erkennt.
Ich hatte die Fehlermeldung schon einmal, als ich den Request über die Postman App versucht habe zu senden. Da war der Grund, dass ich die Datei versucht habe als binary mitzusenden statt als FormData. Damit hat es dann aber funktioniert.
Kann das der Grund sein? Ist die Initialisierung (im Code gekennzeichnet) richtig?
 
			
		26. Juli 2022 11:25
IF locReport.SAVEASPDF(fileName) THEN BEGIN
    // eigentliches uploaden
    IF NOT locFile2.OPEN(fileName) THEN
      ERROR('File could not be opened');
    CLEAR(HttpWebRequestMgt);
    HttpWebRequestMgt.Initialize(url);
    HttpWebRequestMgt.SetMethod('POST');
    //HttpWebRequestMgt.SetContentType('multipart/form-data'); 
    //HttpWebRequestMgt.SetContentType('application/octet-stream');
    HttpWebRequestMgt.SetContentType('application/x-www-form-urlencoded');
    //HttpWebRequestMgt.SetContentType('application/form-data'); 
    HttpWebRequestMgt.SetContentLength(locFile2.LEN);
    HttpWebRequestMgt.SetUserAgent('Dynamics NAV 2018 Client');
    HttpWebRequestMgt.SetReturnType('application/json');
    HttpWebRequestMgt.AddSecurityProtocolTls12; 
    HttpWebRequestMgt.DisableUI; 
    FileManagement.BLOBImportFromServerFile(TempBlob,fileName);
    HttpWebRequestMgt.AddBodyBlob(TempBlob); 
    
    locFile2.CLOSE();    
    
    CLEAR(TempBlob);
    
    HttpWebRequestMgt.CreateInstream(InStr);  //<--Initialisieren-->? 
    
    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); //<---Hier kommt "ERROR:MISSING_FILE 
    
    // nach dem upload Datei wieder löschen
    ERASE(fileName);
    EXIT(TRUE)
  END ELSE
    EXIT(FALSE)
27. Juli 2022 09:13
HttpWebRequestMgt.SendRequestAndReadResponse()27. Juli 2022 10:14
 ). Bei Postman z.Bb klicke ich ja auch irgendwann auf "Senden". Aber das machen andere - funktionierende - Code Beispiele auch nicht, weder in C# noch in C/AL. Es wird immer nur das BLOB eingefügt und dann die Anwort gefordert.
  ). Bei Postman z.Bb klicke ich ja auch irgendwann auf "Senden". Aber das machen andere - funktionierende - Code Beispiele auch nicht, weder in C# noch in C/AL. Es wird immer nur das BLOB eingefügt und dann die Anwort gefordert.2. August 2022 10:09
IF SalesShipmentHeader.FINDFIRST THEN BEGIN
  locReport.SETTABLEVIEW(SalesShipmentHeader);
  IF locReport.SAVEASPDF(fileName) THEN BEGIN
    // eigentliches uploaden
    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.SetContentType('multipart/form-data'); 
    //HttpWebRequestMgt.SetContentType('application/octet-stream);
    //HttpWebRequestMgt.SetContentType('application/x-www-form-urlencoded');
    //HttpWebRequestMgt.SetContentType('application/form-data'); 
    //HttpWebRequestMgt.SetContentType('application/binary')
    //HttpWebRequestMgt.SetContentType('application/pdf);
    HttpWebRequestMgt.SetContentLength(locFile2.LEN);   
    HttpWebRequestMgt.SetUserAgent('Dynamics NAV 2018 Client');
    HttpWebRequestMgt.SetReturnType('application/json');
    HttpWebRequestMgt.AddSecurityProtocolTls12; 
    HttpWebRequestMgt.AddHeader('Accept-Encoding','gzip, deflate, br');
    HttpWebRequestMgt.AddHeader('Content-Encoding','gzip, deflate, br');
    FileManagement.BLOBImportFromServerFile(TempBlob,fileName);
    HttpWebRequestMgt.AddBodyBlob(TempBlob);     
    
    locFile2.CLOSE();    
    
    CLEAR(TempBlob);
    
    HttpWebRequestMgt.CreateInstream(InStr);  
    
    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);
    
    // nach dem upload Datei wieder löschen
    ERASE(fileName);
    EXIT(TRUE)
  END ELSE
    EXIT(FALSE);
END;
EXIT(FALSE)
2. August 2022 12:37
2. August 2022 13:03
2. August 2022 13:42
2. August 2022 14:11
// dotnet webclient Instanz erzeugen
webClient := webClient.WebClient();
// temporäre Datei erzeugen und den namen merken
locFile.CREATETEMPFILE; 
fileName := locFile.NAME;
locFile.CLOSE;
IF locReport.SAVEASPDF(fileName) THEN BEGIN
  // eigentliches uploaden
  WebResponse := webClient.UploadFile(url, 'POST', fileName);
  txt := WebResponse.ToString; 
  MESSAGE(txt);
  // nach dem upload Datei wieder löschen
  ERASE(fileName);
  EXIT(TRUE)
END ELSE
  EXIT(FALSE);
2. August 2022 14:37
 WebResponse := webClient.UploadFile(url, 'POST', fileName);
 txtstring := txtstring.Default;
 Txt := txtstring.GetString(WebResponse);
 MESSAGE(Txt);