Origen: https://github.com/Delamater/X3/blob/master/4GL/ZEXEC_HTTP
#* Author: Bob Delamater | |
#* Desc: Inject a sales order document with a variable number of lines using | |
#* the developer.sage.com method. | |
#* Leverage EXEC_HTTP to perform this. 4GL will make a SOAP call directly | |
#* into Syracuse classic SOAP web services. | |
#* | |
#* If the result is good, return success. | |
#* | |
#*****************************************************************************! | |
#*! | |
Local Integer ASTATUS, CREATION_STATUS, TIMING_STATUS, RET_OPENLOG | |
Local Clbfile RESHEAD, RESBODY | |
Local Char SOMELOG | |
# Build the arguments for the call | |
Gosub BUILD_ARGUMENTS | |
# Optionally proile the code | |
#TIMING_STATUS = func ASYRTIMING.START("", 1) | |
RET_OPENLOG = openLog('TRA',12) | |
# Call EXEC_HTTP passing in the header, authorization and retrieve the result header and body | |
ASTATUS = func ASYRWEBSER.EXEC_HTTP(HEADERCOD, HEADERVAL, BODY, RESHEAD, RESBODY) | |
RET_OPENLOG = CloseLog() | |
#TIMING_STATUS = func ASYRTIMING.STOP(GACTX, "", 1, SOMELOG) | |
If ASTATUS <> 200 | |
Call ERREUR("HTTP Call failed. ASTATUS: " + num$(ASTATUS)) From GESECRAN | |
Else | |
CREATION_STATUS = instr(1,RESBODY, "Creation of NA01118SON") | |
If CREATION_STATUS | |
Call MESSAGE("Success") From GESECRAN | |
Else | |
Call ERREUR("Creation failed: " + num$(ASTATUS)) From GESECRAN | |
Endif | |
Endif | |
End | |
$BUILD_ARGUMENTS | |
#Infbox "Building args" # Used for halting for a breakpoint if necessary | |
Local Char HEADERCOD(64)(5) | |
Local Char HEADERVAL(255)(5) | |
HEADERCOD(0) = "url" | |
HEADERVAL(0) = "http://YourHostHere:8124/soap-generic/syracuse/collaboration/syracuse/CAdxWebServiceXmlCC" | |
HEADERCOD(1) = "method" | |
HEADERVAL(1) = "POST" | |
HEADERCOD(2) = "authorization" | |
HEADERVAL(2) = "Basic Qk9ERUw6Qk9ERUw=" # Find this from a trace in Firefox or your tool of choice | |
HEADERCOD(3) = "SOAPAction" | |
HEADERVAL(3) = "saveRequest" | |
Local Clbfile BODY(0), HEADER | |
Local Clbfile LINES(5) | |
HEADER = func GET_SOH_HEADER | |
LINES = func GET_SOH_LINES(295) | |
Append BODY, '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wss="http://www.adonix.com/WSS" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.o' | |
& + 'rg/2001/XMLSchema-instance">' | |
Append BODY, ' <soapenv:Header/>' | |
Append BODY, ' <soapenv:Body>' | |
Append BODY, ' <wss:run soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">' | |
Append BODY, ' <callContext xsi:type="wss:CAdxCallContext">' | |
Append BODY, ' <codeLang xsi:type="xsd:string">ENG</codeLang>' | |
Append BODY, ' <poolAlias xsi:type="xsd:string">BOB</poolAlias>' | |
Append BODY, ' <poolId xsi:type="xsd:string"/>' | |
Append BODY, ' <requestConfig xsi:type="xsd:string">' | |
Append BODY, ' <![CDATA[adxwss.optreturn=JSON&adxwss.beautify=true]]>' | |
Append BODY, ' </requestConfig>' | |
Append BODY, ' </callContext>' | |
Append BODY, ' <publicName xsi:type="xsd:string">AOWSIMPORT</publicName>' | |
Append BODY, ' <inputXml xsi:type="xsd:string">' | |
Append BODY, ' <![CDATA[{' | |
Append BODY, ' "GRP1": {' | |
Append BODY, ' "I_MODIMP": "SOH",' | |
Append BODY, ' "I_AOWSTA": "NO",' | |
Append BODY, ' "I_EXEC": "REALTIME",' | |
Append BODY, ' "I_RECORDSEP": "|",' | |
Append BODY, | |
& ' "I_FILE": "' + HEADER + LINES + '|END"' | |
Append BODY, ' }' | |
Append BODY, ' }]]>' | |
Append BODY, ' </inputXml>' | |
Append BODY, ' </wss:run>' | |
Append BODY, ' </soapenv:Body>' | |
Append BODY, '</soapenv:Envelope>' | |
Return | |
#** | |
#* Get Sales Order Header line | |
#*! | |
Funprog GET_SOH_HEADER | |
End "E;NA011;SON;;NA005;20180129;;NA011;USD;;;;;" | |
#** | |
#* Generate a number of sales order lines. Pass in the number of lines requested | |
#* | |
#* @param NUMBER_OF_LINES | |
#*! | |
Funprog GET_SOH_LINES(NUMBER_OF_LINES) | |
Value Integer NUMBER_OF_LINES | |
Local Clbfile LINES(5) | |
For I = 1 To NUMBER_OF_LINES | |
Append LINES, "|L;DIS001;Standard keyboard;UN;1;18.8212;0.75;0;0;;" | |
Next | |
End LINES |