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
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);