Spørger
REST kald i C5 2008 til 2012

Spørgsmål
-
Er der nogen som har erfaring med REST kald i C5 (fra 2008 op til 2012).
Jeg prøver at lave et kald som ser ud som følgende :
#MACROLOAD(SERVICES)
#MacroLoad(FILE_UTIL)STR 254 &FileName = 'c:\\temp\\zipfile.zip'
STR 50 &COMStatus
STR 100 &URLSET &Err_Num = 0
SET &Err_Log[0] = ''SET &URL = 'https://xxxx.xxxx.dk:443/invoicews/rest/zip/invoice/55005'
SET &COMStatus = #ServicesHttpOpen(&URL)
#TestError(&COMStatus)SET &ComStatus = #ServicesHttpHeaderType('Content-Type')
#TestError(&COMStatus)
SET &ComStatus = #ServicesHttpHeaderValue('application/zip')
#TestError(&COMStatus)SET &ComStatus = #ServicesHttpHeaderType('Host')
#TestError(&COMStatus)SET &ComStatus = #ServicesHttpHeaderValue('xxxx.xxxx.dk')
#TestError(&COMStatus)SET &ComStatus = #ServicesHttpHeaderType('Authorization')
#TestError(&COMStatus)SET &ComStatus = #ServicesHttpHeaderValue('Basic c3RhbmRhcmQuZGs6amFucnVsZXo=')
#TestError(&COMStatus)SET &COMStatus = #ServicesHttpSend
#TestError(&COMStatus)SET &COMStatus = #ServicesXmlFileSave(&FileName)
#TestError(&COMStatus)SET &COMStatus = #ServicesDllClose
Men retursvaret i &Filename er tomt, der burde komme en zip-fil.
Hvis jeg tester kaldet i soapUi, virker det.
Sætter jeg wireshark på til at sniffe,
er mit kald til webservicen og svar fra webservicen ens både fra Soapui og C5,
altså svaret kommer retur fra servicen, men i selve C5 får jeg intet retur.
KALD FRA SOAPUI
POST /invoicews/rest/zip/invoice/55005 HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: application/json
Authorization: Basic c3RhbmRhcmQuZGs6amFucnVsZXo=
Content-Length: 0
Host: xxx.dk
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)KALD FRA C5
POST /invoicews/rest/zip/invoice/55005 HTTP/1.1
Accept: */*
Accept-Language: da
Authorization: Basic c3RhbmRhcmQuZGs6amFucnVsZXo=
Content-Type: application/zip
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3)
Host: xxx.dk
Content-Length: 0
Connection: Keep-Alive
Cache-Control: no-cache
Er der noget galt med mit kald ?
eller måde hvor på jeg vil gemme svaret ?
eller kan C5 ikke modtage det binære svar (altså zipfilen) ?HJÆLP :-)
PS. Det skal siges jeg får ingen COM fejl på kaldet.
mvh
Jan- Redigeret af Jan da Silva Nielsen 10. december 2014 16:18
Alle besvarelser
-
Hej Jan,
Prøv at checke svaret i:
https://social.microsoft.com/Forums/da-DK/3b4520f7-b548-4997-980c-e5e798ce427f/http-request-get-gennem-c5-2012?forum=c5
Venlig Hilsen Henrik Hansen Senior Program Manager Microsoft Dynamics C5
-
Hej Henrik,
Tak for svaret. Men den tråd har jeg kigget på.
Mit problem er ikke om der GET eller POST.Men at jeg ikke får noget resultat tilbage.
Men det er nok fordi, retursvaret er binært ?
Taget fra Microsoft Dynamics C5 2012 COMAPI Reference Manual
The only XAL data types used are STR and INT. COMAPI handles and HR return values
are a kind of data types in the sense that they are specific formatted STR.Er det korrekt ??
MvhJan
-
Hej Jan,
Jeg er ikke ekspert i dette her, men jeg har prøvet at efterligne din kode, men hvor jeg har tilføjet forslaget vedr. httpOpenGET fra ovennævnte indlæg.
Nedenstående kode fejler ikke, men testPOST.xml filen er tom, hvor imod testGET.xml indeholder valutakurserne fra Nationalbanken.
Konkakt mig evt. direkte for yderligere dialog.
#MACROLOAD(SERVICES)
#MacroLoad(FILE_UTIL)STR 254 &FileName1 = 'c:\\temp\\testPOST.xml'
STR 254 &FileName2 = 'c:\\temp\\testGET.xml'
STR 50 &COMStatus
STR 254 &URLSET &Err_Num = 0
SET &Err_Log[0] = ''SET &URL = 'https://www.nationalbanken.dk/_vti_bin/DN/DataService.svc/CurrencyRatesXML?lang=da'
SET &COMStatus = #ServicesHttpOpen(&URL)
#TestError(&COMStatus)SET &COMStatus = #ServicesHttpSend
#TestError(&COMStatus)SET &COMStatus = #ServicesXmlFileSave(&FileName1)
#TestError(&COMStatus)SET &COMStatus = #ServicesDllClose
//Test with #ServicesHttpOpenGET suggested in:
//https://social.microsoft.com/Forums/da-DK/3b4520f7-b548-4997-980c-e5e798ce427f/http-request-get-gennem-c5-2012?forum=c5SET &Err_Num = 0
SET &Err_Log[0] = ''SET &URL = 'https://www.nationalbanken.dk/_vti_bin/DN/DataService.svc/CurrencyRatesXML?lang=da'
SET &COMStatus = #ServicesHttpOpenGET(&URL)
#TestError(&COMStatus)SET &COMStatus = #ServicesHttpSend
#TestError(&COMStatus)SET &COMStatus = #ServicesXmlFileSave(&FileName2)
#TestError(&COMStatus)SET &COMStatus = #ServicesDllClose
Venlig Hilsen Henrik Hansen Senior Program Manager Microsoft Dynamics C5
-
-
Hej
Den har jeg også spørgsmål til.
Jeg har lavet vedlagte kode - for at sende REST kommandoer til en hjemmeside.
Men jeg evner tilsyneladende ikke at få noget kode sendt over til siden.
Hvad gør jeg galt?
Det skal siger at når jeg kalder den korrekte side får jeg et "Hello Palle" tilbage. :-)
MVH Palle
STR 12 &HDOC
STR 80 &HR
STR 12 &HXML
STR 12 &BYTES
STR 999 &DATASTRSET &HDOC = COMCreate(0, 'MSXML2.XMLHTTP', '', 0)
IF (&HDOC <> '') THEN
// Setup the HTTP
SET COMPush(&HDOC, &HDOC)
SET COMPushVariant(&HDOC, 'VT_BSTR', 'GET')
SET COMPushVariant(&HDOC, 'VT_BSTR', "http://test.XXXX.dk/echo.php")
SET COMPushVariant(&HDOC, 'VT_BOOL', '0')
SET &HR = COMInvoke(&HDOC, 'Open', 3, 0)SET COMPush(&HDOC, &HDOC)
SET COMPushVariant(&HDOC, 'VT_BSTR', '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>')
SET COMPushVariant(&HDOC, 'VT_BSTR', '<request>')
SET COMPushVariant(&HDOC, 'VT_BSTR', '<company>99999999<\/company>')
SET COMPushVariant(&HDOC, 'VT_BSTR', '<user>pas</user>')
SET COMPushVariant(&HDOC, 'VT_BSTR', '<password>9999999999</password>')
SET COMPushVariant(&HDOC, 'VT_BSTR', '</request>')
SET COMPushVariant(&HDOC, 'VT_BSTR', '}')
SET COMPushVariant(&HDOC, 'VT_BSTR', '}')// Send the request
SET COMPush(&HDOC, &HDOC)
SET &HR = COMInvoke(&HDOC, 'Send', 0, 0)
// Get the content
SET COMPush(&HDOC, &HDOC)
SET &HR = COMGet(&HDOC, 'responseText', 0)IF (&HR <> '') THEN
PRINT &HR
ELSE
SET &HXML = COMTop(&HDOC,1)
//Peek
// Get the length
PRINT "LEN="+COMCmd(&HDOC, 'BSTR.Length', 1, 1)
// Set the limit
SET COMPushVariant(&HDOC, 'VT_UI4', "500")
SET COMCmd(&HDOC, 'BSTR.SetLimit', 1, 1)
// Rewind to beginning
SET COMPush(&HDOC, &HXML)
SET COMPushVariant(&HDOC, 'VT_UI4', "0")
SET COMCmd(&HDOC, 'BSTR.SetOffset', 2, 0)
// Loop through the string
SET COMPush(&HDOC, &HXML)
SET &BYTES = COMCmd(&HDOC, 'BSTR.GetNext', 1, 1)
SET &DATASTR = COMTopVariant(&HDOC, 2)WHILE (&BYTES <> '0')
PRINT "BYTES="+&BYTES+" DATASTR=!"+&DATASTR+"!"
SET COMPush(&HDOC, &HXML)
SET &BYTES = COMCmd(&HDOC, 'BSTR.GetNext', 1, 1)
SET &DATASTR = COMTopVariant(&HDOC, 2)
END
ENDIFSET COMRelease(&HDOC)
ELSE
PRINT "MSXML Create Error"
PRINT COMCmd('', 'Result.COMCreate', 0, 0)
ENDIFpause
- Redigeret af P_Schødt 20. marts 2015 09:44