none
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     &URL

    SET &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


    10. december 2014 16:15

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

    11. december 2014 13:07
    Ejer
  • 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 ??

    Mvh

    Jan

    11. december 2014 13:23
  • 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     &URL

    SET &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=c5

    SET &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

    11. december 2014 13:48
    Ejer
  • Har sendt dig et svar på din direkte mail.

    Mvh

    Jan

    11. december 2014 14:16
  • 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 &DATASTR

    SET &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
        ENDIF

        SET COMRelease(&HDOC)
    ELSE
        PRINT "MSXML Create Error"
        PRINT COMCmd('', 'Result.COMCreate', 0, 0)
    ENDIF

    pause


    • Redigeret af P_Schødt 20. marts 2015 09:44
    20. marts 2015 09:42