Commit inicial: fuentes MBS ERP (Genero 6) + .gitignore + docs/SETUP_PC_MBS.md
This commit is contained in:
@@ -0,0 +1,201 @@
|
||||
IMPORT util
|
||||
IMPORT com
|
||||
IMPORT os
|
||||
IMPORT security
|
||||
IMPORT XML
|
||||
|
||||
|
||||
CONSTANT dpy_verb=TRUE -- send messages to standard output
|
||||
CONSTANT log_verb=TRUE -- send messages to the errorlog
|
||||
|
||||
TYPE t_sync_cmd RECORD
|
||||
oper STRING,
|
||||
data STRING
|
||||
END RECORD
|
||||
DEFINE req com.HTTPServiceRequest
|
||||
DEFINE url,msg,method,headers STRING,
|
||||
tout, n, x INTEGER,
|
||||
start_time DATETIME YEAR TO SECOND,
|
||||
b BYTE
|
||||
DEFINE d0 DATETIME YEAR TO SECOND
|
||||
MAIN
|
||||
DEFINE k,kurl,kbodega,resp STRING,
|
||||
ktrue BOOLEAN,retu INT
|
||||
|
||||
|
||||
CALL check_utf8() RETURNING x, msg
|
||||
IF x != 0 THEN
|
||||
DISPLAY "ERROR: ", msg
|
||||
EXIT PROGRAM 1
|
||||
END IF
|
||||
|
||||
CALL show_verb("Starting dbsync server: ...")
|
||||
|
||||
-- Normally, the port is set by the GAS for load balancing
|
||||
-- For standalone tests you can set FGLAPPSERVER environment variable
|
||||
CALL show_verb("Listening on port : "|| NVL(fgl_getenv("FGLAPPSERVER"),"GAS"))
|
||||
|
||||
CALL com.WebServiceEngine.Start()
|
||||
|
||||
LET start_time = CURRENT
|
||||
|
||||
--LET tout=-1 -- timeout: infinite wait
|
||||
--LET tout=5 -- timeout: 5 seconds
|
||||
LET tout=-1 -- timeout: 10 seconds
|
||||
IF tout=-1 THEN
|
||||
LET msg="The dbsync server is listening (timeout = infinite wait)."
|
||||
ELSE
|
||||
LET msg="The dbsync server is listening (timeout =",tout USING "-<<<<<<&"," seconds)."
|
||||
END IF
|
||||
CALL show_verb(msg)
|
||||
|
||||
LET n=0
|
||||
WHILE TRUE
|
||||
|
||||
|
||||
LET req = com.WebServiceEngine.getHTTPServiceRequest(tout)
|
||||
|
||||
IF req IS NULL THEN -- timeout
|
||||
CALL show_verb( SFMT("HTTP request timeout...: %1", CURRENT YEAR TO FRACTION))
|
||||
CONTINUE WHILE
|
||||
ELSE
|
||||
CALL show_verb( SFMT("HTTP request LLEGO AL SERVICIO...: %1", CURRENT YEAR TO FRACTION))
|
||||
|
||||
END IF
|
||||
|
||||
LET url = req.getURL()
|
||||
LET method = req.getMethod()
|
||||
IF method IS NULL OR method != "POST" THEN
|
||||
IF method = "GET" THEN
|
||||
CALL req.sendTextResponse(200,NULL,"Welcome to API server for MBS PRODUCCION --Validacion-, Debes envar METODO: POST...")
|
||||
END IF
|
||||
|
||||
EXIT WHILE
|
||||
END IF
|
||||
DISPLAY "URL1: ",url
|
||||
DISPLAY "METODO1: ",method
|
||||
|
||||
{ LET headers = req.getRequestHeader("DBSync-Client")
|
||||
DISPLAY "header: DBSync-Clent=> ",headers
|
||||
IF headers IS NULL OR headers!= "mbs" THEN
|
||||
CALL show_err(SFMT("Unexpected HTTP request header DBSync-Client: %1", headers))
|
||||
DISPLAY "HEADER: ",headers
|
||||
CALL req.sendTextResponse(400,NULL,"Bad request in Header DBSync-Client")
|
||||
CONTINUE WHILE
|
||||
END IF}
|
||||
|
||||
|
||||
LET headers = req.getRequestHeader("accept")
|
||||
DISPLAY "content: ",headers
|
||||
IF headers IS NULL OR headers NOT MATCHES "application/xml" THEN -- ;Charset=UTF-8
|
||||
CALL show_err(SFMT("Unexpected HTTP request header Content-Type: %1", headers))
|
||||
CALL req.sendTextResponse(400,NULL,"Bad request, in Header Accept")
|
||||
EXIT WHILE
|
||||
END IF
|
||||
|
||||
IF NOT(read_request(req)) THEN
|
||||
-- si el procesamiento del request da error vuelve al loop
|
||||
EXIT WHILE
|
||||
END IF
|
||||
|
||||
LET n = n + 1
|
||||
|
||||
LET d0 = CURRENT
|
||||
EXIT WHILE
|
||||
|
||||
|
||||
END WHILE
|
||||
|
||||
END MAIN
|
||||
|
||||
|
||||
FUNCTION show_sync_err(msg)
|
||||
DEFINE msg STRING
|
||||
CALL fgl_winmessage(%"ERROR", msg, "exclamation")
|
||||
END FUNCTION
|
||||
|
||||
FUNCTION b64_to_file(str_b64,f_sal)
|
||||
|
||||
DEFINE f_sal,str_b64,str_aux STRING
|
||||
|
||||
TRY
|
||||
CALL security.Base64.SaveBinary(f_sal,str_b64)
|
||||
CATCH
|
||||
DISPLAY " data ",str_b64
|
||||
LET str_aux="Unable to convert Base64 String to file :",STATUS
|
||||
DISPLAY "ERROR: ",msg
|
||||
# CALL fgl_winmessage("Error",str_aux,"stop")
|
||||
END TRY
|
||||
END FUNCTION
|
||||
|
||||
FUNCTION check_utf8()
|
||||
IF ORD("€") == 8364 AND LENGTH("€") == 1 THEN
|
||||
RETURN 0, NULL
|
||||
ELSE
|
||||
RETURN -1, "Application locale must be UTF-8, with char length semantics"
|
||||
END IF
|
||||
END FUNCTION
|
||||
|
||||
FUNCTION show_verb(msg)
|
||||
DEFINE msg STRING
|
||||
IF dpy_verb THEN
|
||||
DISPLAY msg
|
||||
END IF
|
||||
# IF log_verb THEN
|
||||
# CALL errorlog(msg CLIPPED)
|
||||
# END IF
|
||||
END FUNCTION
|
||||
|
||||
FUNCTION read_request(req)
|
||||
DEFINE doc xml.DomDocument
|
||||
DEFINE req com.HttpServiceRequest
|
||||
DEFINE cmd STRING,
|
||||
p RECORD
|
||||
oper STRING,
|
||||
data RECORD
|
||||
usuario STRING,
|
||||
clave STRING,
|
||||
codigo STRING
|
||||
END RECORD
|
||||
END RECORD,
|
||||
bfile BYTE
|
||||
|
||||
INITIALIZE cmd TO NULL
|
||||
|
||||
TRY
|
||||
LET doc = req.readXmlRequest()
|
||||
CALL doc.save("./recibidos/recibido.xml")
|
||||
|
||||
CATCH
|
||||
|
||||
CALL show_err(SFMT("Unexpected HTTP request read exception: %1", STATUS))
|
||||
RETURN FALSE
|
||||
END TRY
|
||||
|
||||
|
||||
IF LENGTH(cmd) == 0 THEN
|
||||
-- la operacion va a estar vacia y va dar error por invalida
|
||||
RETURN TRUE
|
||||
END IF
|
||||
|
||||
DISPLAY "request: ",cmd
|
||||
{
|
||||
TRY
|
||||
|
||||
CALL util.JSON.parse(cmd, r_cmd)
|
||||
|
||||
CATCH
|
||||
|
||||
CALL show_err(SFMT("JSON parse error: %1", STATUS))
|
||||
RETURN FALSE
|
||||
END TRY
|
||||
}
|
||||
RETURN TRUE
|
||||
|
||||
END FUNCTION
|
||||
|
||||
FUNCTION show_err(msg)
|
||||
DEFINE msg STRING
|
||||
DISPLAY "ERROR:",msg
|
||||
# CALL errorlog(msg CLIPPED)
|
||||
END FUNCTION
|
||||
Reference in New Issue
Block a user