Files
MBS/WEBSERVICES/testreqcompra.4gl

208 lines
5.6 KiB
Plaintext

IMPORT util
IMPORT com
IMPORT os
TYPE t_sync_cmd RECORD
oper STRING,
data STRING
END RECORD
MAIN
DEFINE k,kurl,kbodega STRING,
ktrue BOOLEAN
DEFINE ku RECORD
usuario VARCHAR(50),
clave VARCHAR(20),
sesion VARCHAR(10)
END RECORD
LET ku.usuario = 'jsoto'
LET ku.clave = 'lmmjvsd2014'
LET ku.sesion = 'ABRIR'
LET kurl = "https://ws.marmotech.com.do/gas320/ws/r/restserver"
CALL chequea_req(kurl)
END MAIN
FUNCTION chequea_req(xurl)
DEFINE xurl STRING
DEFINE generales RECORD
usuario VARCHAR(50),
clave VARCHAR(50),
requisicion SMALLINT
END RECORD
DEFINE data RECORD
detalle DYNAMIC ARRAY OF RECORD
inventario STRING,
codigo INT,
producto STRING,
cantidad FLOAT,
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_tipo SMALLINT,
cod_sec SMALLINT,
departamento VARCHAR(70),
num_oc INT,
num_req INT,
fecha DATE,
estado VARCHAR(20)
END RECORD,
r_out RECORD
mensaje_out STRING,
cod_msg INT
END RECORD
END RECORD,
i INT,
msg,cmd,ret,res STRING
DeFINE r_cmd t_sync_cmd
LET generales.usuario ='JSOTO'
LET generales.clave = 'lmmjvsd2014'
LET generales.requisicion = 9013
LET r_cmd.oper = "requisiciones_compra"
LET r_cmd.data = util.JSON.stringify(generales) -- aca se convierte a string los datos de la operacion
LET cmd = util.JSON.stringify(r_cmd)
DISPLAY cmd
CALL sync_send_command(xurl, cmd) RETURNING ret, res
IF ret == 0 THEN
CALL util.JSON.parse(res,data)
# OPEN WINDOW w1 WITH FORM "reqcompra"
# DISPLAY ARRAY data.detalle TO record1.*
# CLOSE WINDOW w1
# FOR i=1 TO data.detalle.getLength()
# DISPLAY data.detalle[i].*
# END FOR
IF data.r_out.cod_msg > 0 THEN
DISPLAY "ERR ",data.r_out.mensaje_out
END IF
ELSE
LET msg=SFMT(%"Connection '%1' failed",r_cmd.oper),"\n",xurl
CALL show_sync_err(msg)
END IF
END FUNCTION
FUNCTION valida_usuario(u,url)
DEFINE u RECORD
usuario VARCHAR(50),
clave VARCHAR(20),
sesion VARCHAR(10)
END RECORD
DEFINE r_cmd t_sync_cmd
DEFINE cmd, res, msg,url STRING,
ret INT
DEFINE r RECORD
perror STRING,
pbodega SMALLINT
END RECORD
LET r_cmd.oper = "v_usuarios"
LET r_cmd.data = util.JSON.stringify(u) -- aca se convierte a string los datos de la operacion
LET cmd = util.JSON.stringify(r_cmd) -- aca se convierte a string el comando/operacion a enviar al server
CALL sync_send_command(url, cmd) RETURNING ret, res
IF ret == 0 THEN
CALL util.JSON.parse(res,r)
IF r.perror = "VALIDO" THEN
RETURN TRUE,r.pbodega
ELSE
LET msg=SFMT(%"Connection '%1' failed",r_cmd.oper),"\n",url,"\n",res
CALL show_sync_err(msg)
RETURN FALSE,r.pbodega
END IF
ELSE
LET msg=SFMT(%"Connection '%1' failed",r_cmd.oper),"\n",url,"\n",res
CALL show_sync_err(msg)
RETURN FALSE,r.pbodega
END IF
END FUNCTION
FUNCTION chequea_rnc(url)
DEFINE r_cmd t_sync_cmd
DEFINE u CHAR(11),
url,cmd,res,msg STRING,
ret INT
DEFINE r RECORD
perror STRING,
pbodega SMALLINT
END RECORD
DEFINE prnc RECORD
nombre_cliente STRING,
direccion STRING,
existe INT
END RECORD
LET u ='130337391'
LET r_cmd.oper = "rnc"
LET r_cmd.data = util.JSON.stringify(u) -- aca se convierte a string los datos de la operacion
LET cmd = util.JSON.stringify(r_cmd)
CALL sync_send_command(url, cmd) RETURNING ret, res
DISPLAY "ret ",ret
IF ret == 0 THEN
CALL util.JSON.parse(res,prnc)
DISPLAY "datos ",prnc.nombre_cliente
IF r.perror = "VALIDO" THEN
RETURN TRUE,r.pbodega
ELSE
LET msg=SFMT(%"Connection '%1' failed",r_cmd.oper),"\n",url,"\n",res
CALL show_sync_err(msg)
RETURN FALSE,r.pbodega
END IF
ELSE
LET msg=SFMT(%"Connection '%1' failed",r_cmd.oper),"\n",url,"\n",res
CALL show_sync_err(msg)
RETURN FALSE,r.pbodega
END IF
END FUNCTION
#
## Communications library using com (http or https)
#
FUNCTION sync_send_command(url, cmd)
DEFINE url, cmd STRING
DEFINE result, tmp STRING
DEFINE http_req com.HTTPRequest
DEFINE http_resp com.HTTPResponse
TRY
LET http_req = com.HTTPRequest.Create(url)
CALL http_req.setConnectionTimeout(40)
CALL http_req.setTimeout(40)
CALL http_req.setMethod("POST")
CALL http_req.setCharset("UTF-8")
CALL http_req.setHeader("DBSync-Client","mbs")
CALL http_req.setHeader("Content-Type","dbsync/json")
CALL http_req.doTextRequest(cmd)
LET http_resp=http_req.getResponse()
IF http_resp.getStatusCode() != 200 THEN
RETURN http_resp.getStatusCode(), http_resp.getStatusDescription()
END IF
LET tmp = http_resp.getStatusDescription()
IF (tmp == "OK" || tmp == "no error" ) THEN
RETURN -1, SFMT("HTTP request status description: %1 ",tmp)
END IF
LET result = http_resp.getTextResponse()
CATCH
RETURN -2, SFMT("HTTP request error: STATUS=%1 (%2)",STATUS,SQLCA.SQLERRM)
END TRY
RETURN 0, result
END FUNCTION
FUNCTION show_sync_err(msg)
DEFINE msg STRING
CALL fgl_winmessage(%"ERROR", msg, "exclamation")
END FUNCTION