WORKING-STORAGE SECTION.
*----------------------------------------------------------------------
* Variables para el Objeto WinHttpRequest
*----------------------------------------------------------------------
01 HttpJob pic x(128) value "WinHttp.WinHttpRequest.5.1".
01 WinHttpReq usage object reference OLE.
*> POST , GET , PUT
01 TipoEnvio pic x(4) value "POST".
* Verdero o falso dependiendo si la comunicacion es asyn - sync
01 OLE-TRUE PIC 1(1) BIT VALUE B"1".
01 OLE-FALSE PIC 1(1) BIT VALUE B"0".
01 ServerName pic x(256) value "http://contamen.com.ar/concursocobol/forerosdb.php".
01 JsonParametro pic x(256) value '[{"Action":"LeeAllForero"}]'. *> PHP Pide parametros json
01 status-resquest pic S9(9) COMP-5.
01 status-string pic x(256).
01 RespJson pic x(8192).
01 StringNull pic x value spaces.
*
* actualiza string que manda [{"fid":"5","fnombre":"emma","Action":"ActualizaForero","finfo":"estudiante","fcumple":"2006-12-06"}]
* insert string que manda [{"fnombre":"Lisi Urbano Moyano","Action":"InsertarForero","finfo":"Docente","fcumple":"1963-08-04"}]
*
*-------------------------------------------------
* variables para json - script.control
*-------------------------------------------------
01 jsCodigo pic X(8192).
01 jsonArray pic X(8192).
01 StringItemArray pic x(256).
01 scriptFuncion pic x(126) value "function js_arrayLength(a){if(a==null||a.length==null||a.length==undefined){return 0}else return a.length;}js_arrayLength(arr)".
01 CantidadArray pic s9(9) comp-5.
01 ResultadoArray pic X(8192).
01 StringFuncion-Inicio. *> respuesta inicial del json
02 pic x(4) value 'arr['.
02 Indice pic 9(6).
02 pic x(3) value ']["'.
01 StringFuncion-Final. *> respuesta final del json
02 pic x(2) value '"]'.
01 PropObjCodigo pic x(3) value 'fid'. *> 4 enteros
01 PropObjNombre pic x(7) value 'fnombre'. *> 50 string
01 PropObjCumple pic x(7) value 'fcumple'. *> date formato aaaa-mm-dd
01 PropObjInfo pic x(5) value 'finfo'. *> 200 string
01 ArmoJson-General-Inicio.
02 pic x(2) value '[{'.
01 ArmoJson-General-Final.
02 pic x(2) value '}]'.
*-------------------------------------------------------------
*--------------------------
* variables para la tabla
*---------------------------
01 CamposSalida-Codigo pic x(4).
01 CamposSalida-Nombre pic x(50).
01 CamposSalida-Cumple.
03 C-SG pic xx.
03 C-AA pic xx.
03 filler pic x value "-".
03 C-MM pic xx.
03 filler pic x value "-".
03 C-DD pic xx.
01 CamposSalida-Info pic x(200).
01 LINEA-FECHA-AUX.
03 L1-D PIC XX.
03 filler pic x value "/".
03 L1-M PIC XX.
03 filler pic x value "/".
03 L1-S PIC XX.
03 L1-A PIC XX.
*---------------------------
* indices
01 I pic 9(6).
01 W-ROW pic s9(9) comp-5.
*-----------------------------------------
01 LINEA PIC X(1024).
01 OLE-ERROR-METHOD PIC X(256).
01 OLE-ERROR-INFO.
03 OLE-ERROR-TYPE PIC X(001).
03 OLE-ERROR-WCODE PIC X(002).
03 ROLE-ERROR-WCODE REDEFINES OLE-ERROR-WCODE PIC S9(04) COMP-5.
03 OLE-ERROR-SCODE PIC X(004).
03 ROLE-ERROR-SCODE REDEFINES OLE-ERROR-SCODE PIC S9(09) COMP-5.
PROCEDURE DIVISION.
DECLARATIVES.
OLE-ERROR SECTION.
USE AFTER EXCEPTION OLEEXCEPTION.
INVOKE EXCEPTION-OBJECT "GET-ERROR-TYPE"
RETURNING OLE-ERROR-TYPE.
* display "OLE-ERROR-TYPE: " , OLE-ERROR-TYPE.
IF OLE-ERROR-TYPE = "1"
INVOKE EXCEPTION-OBJECT "GET-SCODE" RETURNING ROLE-ERROR-SCODE
INVOKE EXCEPTION-OBJECT "GET-SCODE-TEXT" RETURNING LINEA
MOVE LINEA TO OLE-ERROR-METHOD
GO TO ERROR-EXIT
ELSE
INVOKE EXCEPTION-OBJECT "GET-WCODE" RETURNING OLE-ERROR-WCODE
INVOKE EXCEPTION-OBJECT "GET-SCODE" RETURNING OLE-ERROR-SCODE
* display " OLE-ERR-WCODE: " , OLE-ERROR-WCODE
* display " OLE-ERR-SCODE: " , OLE-ERROR-SCODE
GO TO ERROR-EXIT.
OLE-ERROR-MANEJO.
EXIT.
END DECLARATIVES.
Programa Section.
Comienzo.
*---------------------------
* Limpio Pantalla
move spaces to "Text" OF RESP-JSON.
move spaces to "Text" OF campo-estado.
move spaces to "Text" OF campo-registros.
INVOKE table2 "ClearTable".
INVOKE table2 "Refresh".
*---------------------------
* vacio la respuesta
*
INITIALIZE RespJson.
move spaces to RespJson.
*---------------------------
* Establece como lenguaje "VBScript" or "JScript".
move "JScript" to "Language" OF ScriptControl1.
*-----------------
INICIO-Peticion.
*-----------------------------
* Crea el objeto WinHttpRequest
invoke OLE "CREATE-OBJECT" using HttpJob returning WinHttpReq.
*------------------------------
* Open la HTTP request.
invoke WinHttpReq "OPEN" using TipoEnvio , ServerName , ole-true.
*---------------------------------------------------------------------------
*------------------------------
* Envia HTTP request.
invoke WinHttpReq "send" using JsonParametro.
*---------------------------------------------------------------------------
*------------------------------
* Espera la respuesta completa
invoke WinHttpReq "WaitForResponse" using ole-true.
*-------------------------------
*--------------------------------------------
* Muesta Estado de comunicacion
invoke WinHttpReq "get-StatusText" returning status-string.
invoke WinHttpReq "get-Status" returning status-resquest.
move status-resquest to "Text" OF campo-estado.
INVOKE campo-estado "Refresh".
* display "status de solicitud: " , status-resquest
if status-resquest not = 200 then
/ display "error"
exit program
end-if.
*-------------------------------
* Recibe la respuesta Cabecera
invoke WinHttpReq "GetAllResponseHeaders" returning RespJson.
*Muestro la resp pura en el campo
move RespJson to "Text" OF campo-cabecera.
INVOKE campo-cabecera "Refresh".
*-------------------------------------------------------------------
* Recibe la respuesta en formato json segun lo solicitado
invoke WinHttpReq "get-ResponseText" returning RespJson.
*-------------------------------
* Libera el objeto creado
set WinHttpReq to null.
*-----------------------------------------------------------------
*Muestro la resp pura en el campo
*Analizamos el Json con scriptcontrol.
move RespJson to "Text" OF RESP-JSON.
INVOKE RESP-JSON "Refresh".
FIN-Peticion.
PROCESO-Json.
*----------------------------------------------------------------------------
* Verifico la cantidad de array en la RespJson
* CantidadArray
* devuelve la cantidad de registros en el json
move RespJson to jsonArray.
perform Funcion-getArrayLenght thru END-Funcion-getArrayLenght.
*----------------------------------------------
* Muestro la cantidad de registros devueltos
*----------------------------------------------
move CantidadArray to "Text" OF campo-registros.
INVOKE campo-registros "Refresh".
*----------------------------------------------------------------------------
*indice tabla2.
MOVE 1 TO W-ROW.
*----------------------------------------------------------------------------
* Leo los registros de array en la RespJson
* de acuerdo a la CantidadArray
move 0 to Indice.
PERFORM VARYING I FROM 1 BY 1 UNTIL I > CantidadArray
* *> Primer Obj Codigo
move spaces to StringItemArray
string StringFuncion-Inicio delimited by size
PropObjCodigo delimited by size
StringFuncion-Final delimited by size
into StringItemArray
perform Funcion-getArrayItem thru END-Funcion-getArrayItem
move ResultadoArray to CamposSalida-Codigo
* *> Segundo Obj Nombre
move spaces to StringItemArray
string StringFuncion-Inicio delimited by size
PropObjNombre delimited by size
StringFuncion-Final delimited by size
into StringItemArray
perform Funcion-getArrayItem thru END-Funcion-getArrayItem
move ResultadoArray to CamposSalida-Nombre
* *> Tercer Obj Fecha
move spaces to StringItemArray
string StringFuncion-Inicio delimited by size
PropObjCumple delimited by size
StringFuncion-Final delimited by size
into StringItemArray
perform Funcion-getArrayItem thru END-Funcion-getArrayItem
move ResultadoArray to CamposSalida-Cumple
move C-SG TO L1-S
MOVE C-AA TO L1-A
MOVE C-MM TO L1-M
MOVE C-DD TO L1-D
* *> Cuartto Obj Informacion
move spaces to StringItemArray
string StringFuncion-Inicio delimited by size
PropObjInfo delimited by size
StringFuncion-Final delimited by size
into StringItemArray
perform Funcion-getArrayItem thru END-Funcion-getArrayItem
move ResultadoArray to CamposSalida-Info
add 1 to Indice
*
MOVE CamposSalida-Codigo TO POW-TEXT(W-ROW 1) OF TABLE2
MOVE CamposSalida-Nombre TO POW-TEXT(W-ROW 2) OF TABLE2
MOVE LINEA-FECHA-AUX TO POW-TEXT(W-ROW 3) OF TABLE2
MOVE CamposSalida-Info TO POW-TEXT(W-ROW 4) OF TABLE2
ADD 1 TO W-ROW
END-PERFORM.
*
*
FIN-PROCESO-Json.
TERMINO.
exit program.
*------------------------------------------------------------------
Funcion-getArrayLenght. *> funcion devuelve la cantidad de arrays
*------------------------------------------------------------------
* determina la cantidad de array's
move zeros to CantidadArray.
move spaces to jsCodigo.
string "var arr = "
jsonArray delimited by size into jsCodigo.
INVOKE ScriptControl1 "ExecuteStatement" USING jsCodigo.
INVOKE ScriptControl1 "Eval" USING scriptFuncion RETURNING CantidadArray.
END-Funcion-getArrayLenght. EXIT.
*getSimpleArrayItem
*---------------------------------------------------------------------------------------
Funcion-getArrayItem. *> lee los datos del array de acuerdo a la propiedad solicitada
*---------------------------------------------------------------------------------------
move spaces to jsCodigo.
move spaces to ResultadoArray.
string "var arr = "
jsonArray delimited by size into jsCodigo
INVOKE ScriptControl1 "ExecuteStatement" USING jsCodigo
INVOKE ScriptControl1 "Eval" USING StringItemArray RETURNING ResultadoArray.
END-Funcion-getArrayItem. EXIT.
*------------------------------------------------------------------
ERROR-EXIT.
exit PROGRAM.