Ir al contenido principal

4GL will make a SOAP call directly into Syracuse classic SOAP web services

 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

Entradas populares de este blog

Valores de fstat

Fstat fstat  is a numeric status that is returned upon execution of a database operation, a sequential file operation, or a lock instruction. Syntax fstat Examples # MYTABLE is a table with a key called KEY1, that has a unique component called KEYVAL # Create a record in the table MYTABLE with they key value 1 if it doesn't exist Local File MYTABLE [MYT] Read [MYT]KEY1=1 If fstat [MYT]KEYVAL=1 : Write [MYT] If fstat MSG="The key was created in the mean time" Else MSG="Key created" Endif Else MSG="Key already exists" Endif Details fstat  is always set to '0' if the operation is successfully completed, and has a non-null value if there is an error: In a sequential read ( Getseq  and  Rdseq ),  fstat  is set to '1' at the end of the file. On  Lock ,  fstat  is set to '1' if the lock could not be performed. For a database operation ( Read ,  Look ,  Readlock ,  For ,  Write ,  ...

SAGE X3 SILENT IMPORT (IMPORTSIL) WITH ERROR CATCHING

FUENTE ORIGINAL: https://pluginx3.com/en/blog/post/sage-x3-silent-import-importsil-with-error-catching.html You already know how to manually generate a CSV file in order to import it threw a template in Sage X3. But If you wonder how to catch detailed errors after a silent import here is the solution. Sometimes you need to catch the incoming errors in order to alert the end-user regarding an issue. Closed period, wrong date etc …. Unfortunalty the standard Sage X3 silent import function doesn’t natively show the detailed errors during the import process. Call IMPORTSIL([M:IMP2]MODIMP,[M:IMP2]NOMIMP) From GIMPOBJ And the standard function ERR_IMPORT will only show the overall status of the importation and not the detailed errors. IMPORTSIL function is pushing all the log data into a tracefile in order to avoid any popup on end-user screen. So you have a log file available in order to search for errors in it. Sage X3 runtime is using the same principals standards as any shell for log...

Sage X3 Create a new CLOB Text

Here how to create a CLOB text Funprog F_CRELOB ( YABRFIC , YTEXTE ) Value Char YABRFIC Value Char YTEXTE Local Char XXRTFTXT ( 250 ) ( 3 ) XXRTFTXT ( 0 ) = "{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fswiss\fprq2\fcharset0 MS Sans Serif;}}\viewkind4\uc1\pard\f0\fs17 " XXRTFTXT ( 1 ) = YTEXTE XXRTFTXT ( 2 ) = "\par}" Local Char X_RET Local Integer XXOK Local Char XCHAMPLIEN : XCHAMPLIEN = "YYYY" Global Char YYYY : YYYY = YABRFIC Local Clbfile WWCLOB Local Mask ACLOB [ M :ACL ] Setlob WWCLOB With XXRTFTXT [ M :ACL ] CLOB = WWCLOB Call CRE_CLOB_ACL ( XCHAMPLIEN , XXOK ) From TRTX3TEX Close Local Mask [ M :ACL ] X_RET = YYYY Kill YYYY End X_RET