IMPORT util IMPORT security FUNCTION gestion_gastos(pdata) DEFINE i SMALLINT DEFINE pdata STRING DEFINE data RECORD generales RECORD usuario, clave VARCHAR(50) END RECORD, detalle DYNAMIC ARRAY OF RECORD tipo_gasto VARCHAR(100), fecha DATE, ncf STRING, rnc STRING, nombreproveedor VARCHAR(100), valor NUMERIC(18,2), itbis NUMERIC(18,2), documento BYTE, fech_crea DATE END RECORD, mensajes RECORD cod_msg INT, descripcion STRING END RECORD END RECORD DEFINE raw_data RECORD generales RECORD usuario, clave VARCHAR(50) END RECORD, detalle DYNAMIC ARRAY OF RECORD tipo_gasto VARCHAR(100), fecha DATE, ncf STRING, rnc STRING, nombreproveedor VARCHAR(100), valor NUMERIC(18,2), itbis NUMERIC(18,2), documento STRING, -- base64 aquí fech_crea DATE END RECORD, mensajes RECORD cod_msg INT, descripcion STRING END RECORD END RECORD DEFINE r_out RECORD orden INT, mensaje_out STRING, cod_msg INT END RECORD DEFINE numemp INT, query STRING DISPLAY "VERSION #", 8 -- ? Parseamos el JSON en raw_data (con documento en base64 como STRING) CALL util.JSON.parse(pdata, raw_data) DISPLAY 'usuario: ', raw_data.generales.usuario # DISPLAY 'clave: ', raw_data.generales.clave CONNECT TO "marmotech" USER raw_data.generales.usuario USING raw_data.generales.clave IF STATUS < 0 THEN LET r_out.cod_msg = STATUS LET r_out.orden = 0 LET r_out.mensaje_out = 'ERROR EN USUARIO CONECTANDOSE A LA BASE DE DATOS' DISCONNECT CURRENT RETURN util.JSON.stringify(r_out) END IF --Convertir de raw_data a data (conversión de base64 incluida) FOR i = 1 TO raw_data.detalle.getLength() LET data.detalle[i].tipo_gasto = raw_data.detalle[i].tipo_gasto LET data.detalle[i].fecha = raw_data.detalle[i].fecha LET data.detalle[i].ncf = raw_data.detalle[i].ncf LET data.detalle[i].rnc = raw_data.detalle[i].rnc LET data.detalle[i].nombreproveedor = raw_data.detalle[i].nombreproveedor LET data.detalle[i].valor = raw_data.detalle[i].valor LET data.detalle[i].itbis = raw_data.detalle[i].itbis LET data.detalle[i].fech_crea = raw_data.detalle[i].fech_crea IF raw_data.detalle[i].documento IS NOT NULL THEN LOCATE data.detalle[i].documento IN MEMORY CALL security.Base64.ToByte(raw_data.detalle[i].documento, data.detalle[i].documento) END IF END FOR LET query = "SELECT num_emp FROM marmotech.dbo.seg0001 WHERE usuario = ? AND status_t IS NULL" PREPARE buscaEmpleado FROM query EXECUTE buscaEmpleado INTO numemp USING raw_data.generales.usuario IF data.detalle.getLength() > 0 THEN FOR i = 1 TO data.detalle.getLength() # DISPLAY "Bytes cargados de registro: ", LENGTH(data.detalle[i].documento) INSERT INTO cptb00014 ( ficha_emp, tipo_gasto, fecha, rnc, nombreproveedor, ncf, itbis, valor, documento, fech_crea ) VALUES ( numemp, data.detalle[i].tipo_gasto, data.detalle[i].fecha, data.detalle[i].rnc, data.detalle[i].nombreproveedor, data.detalle[i].ncf, data.detalle[i].itbis, data.detalle[i].valor, data.detalle[i].documento, data.detalle[i].fech_crea ) END FOR END IF LET r_out.cod_msg = 13 LET r_out.mensaje_out = 'SINCRONIZACION EXITOSA' DISCONNECT CURRENT RETURN util.JSON.stringify(r_out) END FUNCTION { FUNCTION b64_to_file(str_64, f_sal) DEFINE str_64, f_sal, str_aux STRING TRY CALL security.Base64.SaveBinary(f_sal, str_64) CATCH LET str_aux = "No pude convertir el file Base64: " || STATUS CALL fgl_winmessage("ERROR", str_aux, "stop") END TRY END FUNCTION }