WebSpeed Write-Json 2 tables

Posted by tribemax on 16-Mar-2018 08:41

Greetings friends, I am working with Write-Json from WebSpeed, and I would like to know if it is possible to send 2 tables or more tables.

Posted by Peter Judge on 16-Mar-2018 09:08

Yes :)
 
Depends on your version as to how you can do it.
 
But datasets have this capability , or you can use  the JsonObject classes with the Read(handle) methods.
 
 

All Replies

Posted by Peter Judge on 16-Mar-2018 09:08

Yes :)
 
Depends on your version as to how you can do it.
 
But datasets have this capability , or you can use  the JsonObject classes with the Read(handle) methods.
 

Posted by tribemax on 16-Mar-2018 13:05

I am currently using the following code after loading a temp-table:

/* WebSpeed */

/*------------------------------------------------------------------------------

 Purpose:    

 Parameters:  cia | indicador | dia | mes | ano | opc

 Notes:      

------------------------------------------------------------------------------*/

DEFINE VARIABLE httBar AS HANDLE NO-UNDO.

httBar = TEMP-TABLE wfinddetdat:HANDLE.

FIND FIRST indmaetip NO-LOCK WHERE indmaetip.indicador = wkIndicador NO-ERROR.

IF AVAILABLE indmaetip THEN DO:

   IF wkdia > 0 THEN DO:

       wkFchIni = DATE(wkmes, wkdia, wkano).

       wkFchFin = DATE(wkmes, wkdia, wkano).

   END.

   ELSE IF wkmes > 0 THEN DO:

       wkFchIni = DATE(wkmes, 1, wkano).

       wkFchFin = wkFchIni.

       DO WHILE wkmes = MONTH(wkFchFin).

           wkFchFin = wkFchFin + 1.

       END.

       wkFchFin = wkFchFin - 1.

   END.

   ELSE IF wkano > 0 THEN DO:

       wkFchIni = DATE(1, 1, wkano).

       wkFchFin = DATE(12, 31, wkano).

   END.

   FOR EACH inddetdat NO-LOCK WHERE inddetdat.cia = wkcia

       AND inddetdat.area = indmaetip.area AND inddetdat.ano = wkano

       AND inddetdat.estado BY inddetdat.CodigoDiv

       BY inddetdat.CodigoDep BY inddetdat.vendedor:

       CREATE wfinddetdat.

       wfinddetdat.cia = inddetdat.cia.

       wfinddetdat.indicador = indmaetip.indicador.

       wfinddetdat.indicadorTxt = indmaetip.titulo.

       wfinddetdat.area = indmaetip.area.

       wfinddetdat.areaTxt = areaTxt[indmaetip.area].

       wfinddetdat.periocidad = indmaetip.periocidad.

       wfinddetdat.periocidadTxt = periocidadTxt[indmaetip.periocidad].

       wfinddetdat.ano = inddetdat.ano.

       wfinddetdat.rangos[1] = (indmaetip.rangos[1] * 100).

       wfinddetdat.rangos[2] = (indmaetip.rangos[2] * 100).

       wfinddetdat.rangos[3] = (indmaetip.rangos[3] * 100).

       wfinddetdat.rangos[4] = (indmaetip.rangos[4] * 100).

       wfinddetdat.rangos[5] = (indmaetip.rangos[5] * 100).

       wfinddetdat.rangosTxt[1] = wkRangosTxt[1].

       wfinddetdat.rangosTxt[2] = wkRangosTxt[2].

       wfinddetdat.rangosTxt[3] = wkRangosTxt[3].

       wfinddetdat.rangosTxt[4] = wkRangosTxt[4].

       wfinddetdat.rangosTxt[5] = wkRangosTxt[5].

       IF wkdia > 0 THEN DO:

           wkMeta = inddetdat.MetaDiaE[wkmes].

       END.

       ELSE IF wkmes > 0 THEN DO:

           wkMeta = inddetdat.MetaMesE[wkmes].

       END.

       ELSE IF wkano > 0 THEN DO:

           cntMes = 0.

           DO WHILE cntMes < 12.

               cntMes = cntMes + 1.

               wkMeta = wfinddetdat.Meta + inddetdat.MetaMesE[cntMes].

           END.

       END.

       wfinddetdat.vendedor = inddetdat.vendedor.

       wfinddetdat.CodigoDiv = inddetdat.CodigoDiv.

       wfinddetdat.CodigoDep = inddetdat.CodigoDep.

       wkMonto = 0.

       FIND FIRST ccmaeven NO-LOCK WHERE ccmaeven.cia = inddetdat.cia

           AND ccmaeven.vendedor = inddetdat.vendedor NO-ERROR.

       IF AVAILABLE(ccmaeven) THEN DO:

           wfinddetdat.nom-ven = ccmaeven.nom-ven.

           FOR EACH estvendedia NO-LOCK WHERE estvendedia.Cia = inddetdat.cia

               AND estvendedia.FechaEst >= wkFchIni

               AND estvendedia.FechaEst <= wkFchFin

               AND estvendedia.Vendedor = inddetdat.vendedor

               BY estvendedia.FechaEst:

               wkMonto = wkMonto + (estvendedia.MontoVen - estvendedia.MontoDev).

           END.

       END.

       FIND FIRST inmaediv NO-LOCK WHERE inmaediv.CodigoDiv = inddetdat.CodigoDiv

           AND inmaediv.CodigoDep = inddetdat.CodigoDep NO-ERROR.

       IF AVAILABLE(inmaediv) THEN DO:

           wfinddetdat.NombreDiv = inmaediv.NombreDiv.

           FOR EACH estventadia NO-LOCK WHERE estventadia.Cia = inddetdat.cia

               AND estventadia.CodigoDiv = inddetdat.CodigoDiv

               AND estventadia.CodigoDep = inddetdat.CodigoDep

               AND estventadia.FechaEst >= wkFchIni

               AND estventadia.FechaEst <= wkFchFin

               BY estventadia.FechaEst:

               wkMonto = wkMonto + (estventadia.MontoVen - estventadia.MontoDev).

           END.

       END.

       wfinddetdat.Meta = wkMeta.

       wfinddetdat.Monto = ROUND(wkMonto, 0).

       IF wkMeta > 0 AND wkMonto > 0 THEN wkPorcentaje = ROUND((wkMonto / wkMeta) * 100,0).

       IF wkPorcentaje > 100 THEN wkPorcentaje = 100.

       wfinddetdat.porcentaje = wkPorcentaje.

   END.

END.

RELEASE wfinddetdat.

output-http-header("Access-Control-Allow-Origin":U, "*":U).

output-content-type ("application/json":U).

httBar:WRITE-JSON("STREAM", "WebStream").

DELETE wfinddetdat.

END PROCEDURE.

/*-----------------------------------------------------*/

resulting in the following

data.json:

/*-----------------------------------------------------*/

{"wfinddetdat":[{"cia":5,"indicador":5,"indicadorTxt":"ESTIMADO DE VENTAS DIARIA POR VENDEDOR","area":1,"areaTxt":"VENTAS","periocidad":1,"periocidadTxt":"DIARIA","ano":2017,"rangos":[0,60,70,80,85],"rangosTxt":["Ineficaz","PocoEficaz","Regular","Buena","Eficaz"],"Meta":1947493.0,"Monto":1099008.00,"porcentaje":56,"vendedor":100,"nom-ven":"FATIMA JIMENEZ","CodigoDiv":0,"CodigoDep":0,"NombreDiv":""},{"cia":5,"indicador":5,"indicadorTxt":"ESTIMADO DE VENTAS DIARIA POR VENDEDOR","area":1,"areaTxt":"VENTAS","periocidad":1,"periocidadTxt":"DIARIA","ano":2017,"rangos":[0,60,70,80,85],"rangosTxt":["Ineficaz","PocoEficaz","Regular","Buena","Eficaz"],"Meta":639023.0,"Monto":1022695.00,"porcentaje":100,"vendedor":102,"nom-ven":"JACKSON CHUELLO","CodigoDiv":0,"CodigoDep":0,"NombreDiv":""},{"cia":5,"indicador":5,"indicadorTxt":"ESTIMADO DE VENTAS DIARIA POR VENDEDOR","area":1,"areaTxt":"VENTAS","periocidad":1,"periocidadTxt":"DIARIA","ano":2017,"rangos":[0,60,70,80,85],"rangosTxt":["Ineficaz","PocoEficaz","Regular","Buena","Eficaz"],"Meta":6819285.0,"Monto":1015191.00,"porcentaje":15,"vendedor":104,"nom-ven":"YEILIANA RODRIGUEZ","CodigoDiv":0,"CodigoDep":0,"NombreDiv":""},{"cia":5,"indicador":5,"indicadorTxt":"ESTIMADO DE VENTAS DIARIA POR VENDEDOR","area":1,"areaTxt":"VENTAS","periocidad":1,"periocidadTxt":"DIARIA","ano":2017,"rangos":[0,60,70,80,85],"rangosTxt":["Ineficaz","PocoEficaz","Regular","Buena","Eficaz"],"Meta":2193042.0,"Monto":3496771.00,"porcentaje":100,"vendedor":107,"nom-ven":"DEYLA MORILLO","CodigoDiv":0,"CodigoDep":0,"NombreDiv":""},{"cia":5,"indicador":5,"indicadorTxt":"ESTIMADO DE VENTAS DIARIA POR VENDEDOR","area":1,"areaTxt":"VENTAS","periocidad":1,"periocidadTxt":"DIARIA","ano":2017,"rangos":[0,60,70,80,85],"rangosTxt":["Ineficaz","PocoEficaz","Regular","Buena","Eficaz"],"Meta":3701158.0,"Monto":2735921.00,"porcentaje":74,"vendedor":109,"nom-ven":"DIOBERLIN ARAUJO","CodigoDiv":0,"CodigoDep":0,"NombreDiv":""},{"cia":5,"indicador":5,"indicadorTxt":"ESTIMADO DE VENTAS DIARIA POR VENDEDOR","area":1,"areaTxt":"VENTAS","periocidad":1,"periocidadTxt":"DIARIA","ano":2017,"rangos":[0,60,70,80,85],"rangosTxt":["Ineficaz","PocoEficaz","Regular","Buena","Eficaz"],"Meta":8838493.0,"Monto":5190655.00,"porcentaje":59,"vendedor":0,"nom-ven":"","CodigoDiv":10,"CodigoDep":1,"NombreDiv":"CERAMICA Y BAÑOS"},{"cia":5,"indicador":5,"indicadorTxt":"ESTIMADO DE VENTAS DIARIA POR VENDEDOR","area":1,"areaTxt":"VENTAS","periocidad":1,"periocidadTxt":"DIARIA","ano":2017,"rangos":[0,60,70,80,85],"rangosTxt":["Ineficaz","PocoEficaz","Regular","Buena","Eficaz"],"Meta":2390308.0,"Monto":2563561.00,"porcentaje":100,"vendedor":0,"nom-ven":"","CodigoDiv":10,"CodigoDep":5,"NombreDiv":"FERRETERIA"},{"cia":5,"indicador":5,"indicadorTxt":"ESTIMADO DE VENTAS DIARIA POR VENDEDOR","area":1,"areaTxt":"VENTAS","periocidad":1,"periocidadTxt":"DIARIA","ano":2017,"rangos":[0,60,70,80,85],"rangosTxt":["Ineficaz","PocoEficaz","Regular","Buena","Eficaz"],"Meta":445602.0,"Monto":0.00,"porcentaje":100,"vendedor":0,"nom-ven":"","CodigoDiv":20,"CodigoDep":5,"NombreDiv":"DECORATIVOS HOGAR"},{"cia":5,"indicador":5,"indicadorTxt":"ESTIMADO DE VENTAS DIARIA POR VENDEDOR","area":1,"areaTxt":"VENTAS","periocidad":1,"periocidadTxt":"DIARIA","ano":2017,"rangos":[0,60,70,80,85],"rangosTxt":["Ineficaz","PocoEficaz","Regular","Buena","Eficaz"],"Meta":611571.0,"Monto":0.00,"porcentaje":100,"vendedor":0,"nom-ven":"","CodigoDiv":20,"CodigoDep":10,"NombreDiv":"MUEBLES Y EQUIPAMIENTO HOGAR"},{"cia":5,"indicador":5,"indicadorTxt":"ESTIMADO DE VENTAS DIARIA POR VENDEDOR","area":1,"areaTxt":"VENTAS","periocidad":1,"periocidadTxt":"DIARIA","ano":2017,"rangos":[0,60,70,80,85],"rangosTxt":["Ineficaz","PocoEficaz","Regular","Buena","Eficaz"],"Meta":2179387.0,"Monto":1615371.00,"porcentaje":74,"vendedor":0,"nom-ven":"","CodigoDiv":100,"CodigoDep":10,"NombreDiv":"MAQUINAS Y REPUESTOS"},{"cia":5,"indicador":5,"indicadorTxt":"ESTIMADO DE VENTAS DIARIA POR VENDEDOR","area":1,"areaTxt":"VENTAS","periocidad":1,"periocidadTxt":"DIARIA","ano":2017,"rangos":[0,60,70,80,85],"rangosTxt":["Ineficaz","PocoEficaz","Regular","Buena","Eficaz"],"Meta":834640.0,"Monto":0.00,"porcentaje":74,"vendedor":0,"nom-ven":"","CodigoDiv":999999,"CodigoDep":999999,"NombreDiv":"DEPARTAMENTO GENERAL DECORACION"}]}

/*-----------------------------------------------------*/

I would like to add another table to the Write-Json?

Posted by tribemax on 16-Mar-2018 13:14

I am currently using the following code: 

/*------------------------------------------------------------------------------
Purpose:
Parameters: cia | indicador | dia | mes | ano | opc
Notes:
------------------------------------------------------------------------------*/
DEFINE VARIABLE httBar AS HANDLE NO-UNDO.

httBar = TEMP-TABLE wfinddetdat:HANDLE.

FIND FIRST indmaetip NO-LOCK WHERE indmaetip.indicador = wkIndicador NO-ERROR.
IF AVAILABLE indmaetip THEN DO:

IF wkdia > 0 THEN DO:
wkFchIni = DATE(wkmes, wkdia, wkano).
wkFchFin = DATE(wkmes, wkdia, wkano).
END.
ELSE IF wkmes > 0 THEN DO:
wkFchIni = DATE(wkmes, 1, wkano).
wkFchFin = wkFchIni.
DO WHILE wkmes = MONTH(wkFchFin).
wkFchFin = wkFchFin + 1.
END.
wkFchFin = wkFchFin - 1.
END.
ELSE IF wkano > 0 THEN DO:
wkFchIni = DATE(1, 1, wkano).
wkFchFin = DATE(12, 31, wkano).
END.

FOR EACH inddetdat NO-LOCK WHERE inddetdat.cia = wkcia
AND inddetdat.area = indmaetip.area AND inddetdat.ano = wkano
AND inddetdat.estado BY inddetdat.CodigoDiv
BY inddetdat.CodigoDep BY inddetdat.vendedor:

CREATE wfinddetdat.
wfinddetdat.cia = inddetdat.cia.
wfinddetdat.indicador = indmaetip.indicador.
wfinddetdat.indicadorTxt = indmaetip.titulo.
wfinddetdat.area = indmaetip.area.
wfinddetdat.areaTxt = areaTxt[indmaetip.area].
wfinddetdat.periocidad = indmaetip.periocidad.
wfinddetdat.periocidadTxt = periocidadTxt[indmaetip.periocidad].
wfinddetdat.ano = inddetdat.ano.
wfinddetdat.rangos[1] = (indmaetip.rangos[1] * 100).
wfinddetdat.rangos[2] = (indmaetip.rangos[2] * 100).
wfinddetdat.rangos[3] = (indmaetip.rangos[3] * 100).
wfinddetdat.rangos[4] = (indmaetip.rangos[4] * 100).
wfinddetdat.rangos[5] = (indmaetip.rangos[5] * 100).
wfinddetdat.rangosTxt[1] = wkRangosTxt[1].
wfinddetdat.rangosTxt[2] = wkRangosTxt[2].
wfinddetdat.rangosTxt[3] = wkRangosTxt[3].
wfinddetdat.rangosTxt[4] = wkRangosTxt[4].
wfinddetdat.rangosTxt[5] = wkRangosTxt[5].

IF wkdia > 0 THEN DO:
wkMeta = inddetdat.MetaDiaE[wkmes].
END.
ELSE IF wkmes > 0 THEN DO:
wkMeta = inddetdat.MetaMesE[wkmes].
END.
ELSE IF wkano > 0 THEN DO:
cntMes = 0.
DO WHILE cntMes < 12.
cntMes = cntMes + 1.
wkMeta = wfinddetdat.Meta + inddetdat.MetaMesE[cntMes].
END.
END.

wfinddetdat.vendedor = inddetdat.vendedor.
wfinddetdat.CodigoDiv = inddetdat.CodigoDiv.
wfinddetdat.CodigoDep = inddetdat.CodigoDep.
wkMonto = 0.

FIND FIRST ccmaeven NO-LOCK WHERE ccmaeven.cia = inddetdat.cia
AND ccmaeven.vendedor = inddetdat.vendedor NO-ERROR.
IF AVAILABLE(ccmaeven) THEN DO:
wfinddetdat.nom-ven = ccmaeven.nom-ven.
FOR EACH estvendedia NO-LOCK WHERE estvendedia.Cia = inddetdat.cia
AND estvendedia.FechaEst >= wkFchIni
AND estvendedia.FechaEst <= wkFchFin
AND estvendedia.Vendedor = inddetdat.vendedor
BY estvendedia.FechaEst:
wkMonto = wkMonto + (estvendedia.MontoVen - estvendedia.MontoDev).
END.
END.

FIND FIRST inmaediv NO-LOCK WHERE inmaediv.CodigoDiv = inddetdat.CodigoDiv
AND inmaediv.CodigoDep = inddetdat.CodigoDep NO-ERROR.
IF AVAILABLE(inmaediv) THEN DO:
wfinddetdat.NombreDiv = inmaediv.NombreDiv.
FOR EACH estventadia NO-LOCK WHERE estventadia.Cia = inddetdat.cia
AND estventadia.CodigoDiv = inddetdat.CodigoDiv
AND estventadia.CodigoDep = inddetdat.CodigoDep
AND estventadia.FechaEst >= wkFchIni
AND estventadia.FechaEst <= wkFchFin
BY estventadia.FechaEst:
wkMonto = wkMonto + (estventadia.MontoVen - estventadia.MontoDev).
END.
END.
wfinddetdat.Meta = wkMeta.
wfinddetdat.Monto = ROUND(wkMonto, 0).
IF wkMeta > 0 AND wkMonto > 0 THEN wkPorcentaje = ROUND((wkMonto / wkMeta) * 100,0).
IF wkPorcentaje > 100 THEN wkPorcentaje = 100.
wfinddetdat.porcentaje = wkPorcentaje.
END.
END.
RELEASE wfinddetdat.

output-http-header("Access-Control-Allow-Origin":U, "*":U).
output-content-type ("application/json":U).
httBar:WRITE-JSON("STREAM", "WebStream").

DELETE wfinddetdat.
END PROCEDURE.



data.json:

{
"wfinddetdat":[
{"cia":5,"indicador":5,"indicadorTxt":"ESTIMADO DE VENTAS DIARIA POR VENDEDOR","area":1,"areaTxt":"VENTAS","periocidad":1,"periocidadTxt":"DIARIA","ano":2017,"rangos":[0,60,70,80,85],"rangosTxt":["Ineficaz","PocoEficaz","Regular","Buena","Eficaz"],"Meta":1947493.0,"Monto":1099008.00,"porcentaje":56,"vendedor":100,"nom-ven":"FATIMA JIMENEZ","CodigoDiv":0,"CodigoDep":0,"NombreDiv":""},
{"cia":5,"indicador":5,"indicadorTxt":"ESTIMADO DE VENTAS DIARIA POR VENDEDOR","area":1,"areaTxt":"VENTAS","periocidad":1,"periocidadTxt":"DIARIA","ano":2017,"rangos":[0,60,70,80,85],"rangosTxt":["Ineficaz","PocoEficaz","Regular","Buena","Eficaz"],"Meta":639023.0,"Monto":1022695.00,"porcentaje":100,"vendedor":102,"nom-ven":"JACKSON CHUELLO","CodigoDiv":0,"CodigoDep":0,"NombreDiv":""},
{"cia":5,"indicador":5,"indicadorTxt":"ESTIMADO DE VENTAS DIARIA POR VENDEDOR","area":1,"areaTxt":"VENTAS","periocidad":1,"periocidadTxt":"DIARIA","ano":2017,"rangos":[0,60,70,80,85],"rangosTxt":["Ineficaz","PocoEficaz","Regular","Buena","Eficaz"],"Meta":6819285.0,"Monto":1015191.00,"porcentaje":15,"vendedor":104,"nom-ven":"YEILIANA RODRIGUEZ","CodigoDiv":0,"CodigoDep":0,"NombreDiv":""},
{"cia":5,"indicador":5,"indicadorTxt":"ESTIMADO DE VENTAS DIARIA POR VENDEDOR","area":1,"areaTxt":"VENTAS","periocidad":1,"periocidadTxt":"DIARIA","ano":2017,"rangos":[0,60,70,80,85],"rangosTxt":["Ineficaz","PocoEficaz","Regular","Buena","Eficaz"],"Meta":2193042.0,"Monto":3496771.00,"porcentaje":100,"vendedor":107,"nom-ven":"DEYLA MORILLO","CodigoDiv":0,"CodigoDep":0,"NombreDiv":""},
{"cia":5,"indicador":5,"indicadorTxt":"ESTIMADO DE VENTAS DIARIA POR VENDEDOR","area":1,"areaTxt":"VENTAS","periocidad":1,"periocidadTxt":"DIARIA","ano":2017,"rangos":[0,60,70,80,85],"rangosTxt":["Ineficaz","PocoEficaz","Regular","Buena","Eficaz"],"Meta":3701158.0,"Monto":2735921.00,"porcentaje":74,"vendedor":109,"nom-ven":"DIOBERLIN ARAUJO","CodigoDiv":0,"CodigoDep":0,"NombreDiv":""},
{"cia":5,"indicador":5,"indicadorTxt":"ESTIMADO DE VENTAS DIARIA POR VENDEDOR","area":1,"areaTxt":"VENTAS","periocidad":1,"periocidadTxt":"DIARIA","ano":2017,"rangos":[0,60,70,80,85],"rangosTxt":["Ineficaz","PocoEficaz","Regular","Buena","Eficaz"],"Meta":8838493.0,"Monto":5190655.00,"porcentaje":59,"vendedor":0,"nom-ven":"","CodigoDiv":10,"CodigoDep":1,"NombreDiv":"CERAMICA Y BAÑOS"},
{"cia":5,"indicador":5,"indicadorTxt":"ESTIMADO DE VENTAS DIARIA POR VENDEDOR","area":1,"areaTxt":"VENTAS","periocidad":1,"periocidadTxt":"DIARIA","ano":2017,"rangos":[0,60,70,80,85],"rangosTxt":["Ineficaz","PocoEficaz","Regular","Buena","Eficaz"],"Meta":2390308.0,"Monto":2563561.00,"porcentaje":100,"vendedor":0,"nom-ven":"","CodigoDiv":10,"CodigoDep":5,"NombreDiv":"FERRETERIA"},
{"cia":5,"indicador":5,"indicadorTxt":"ESTIMADO DE VENTAS DIARIA POR VENDEDOR","area":1,"areaTxt":"VENTAS","periocidad":1,"periocidadTxt":"DIARIA","ano":2017,"rangos":[0,60,70,80,85],"rangosTxt":["Ineficaz","PocoEficaz","Regular","Buena","Eficaz"],"Meta":445602.0,"Monto":0.00,"porcentaje":100,"vendedor":0,"nom-ven":"","CodigoDiv":20,"CodigoDep":5,"NombreDiv":"DECORATIVOS HOGAR"},
{"cia":5,"indicador":5,"indicadorTxt":"ESTIMADO DE VENTAS DIARIA POR VENDEDOR","area":1,"areaTxt":"VENTAS","periocidad":1,"periocidadTxt":"DIARIA","ano":2017,"rangos":[0,60,70,80,85],"rangosTxt":["Ineficaz","PocoEficaz","Regular","Buena","Eficaz"],"Meta":611571.0,"Monto":0.00,"porcentaje":100,"vendedor":0,"nom-ven":"","CodigoDiv":20,"CodigoDep":10,"NombreDiv":"MUEBLES Y EQUIPAMIENTO HOGAR"},
{"cia":5,"indicador":5,"indicadorTxt":"ESTIMADO DE VENTAS DIARIA POR VENDEDOR","area":1,"areaTxt":"VENTAS","periocidad":1,"periocidadTxt":"DIARIA","ano":2017,"rangos":[0,60,70,80,85],"rangosTxt":["Ineficaz","PocoEficaz","Regular","Buena","Eficaz"],"Meta":2179387.0,"Monto":1615371.00,"porcentaje":74,"vendedor":0,"nom-ven":"","CodigoDiv":100,"CodigoDep":10,"NombreDiv":"MAQUINAS Y REPUESTOS"},
{"cia":5,"indicador":5,"indicadorTxt":"ESTIMADO DE VENTAS DIARIA POR VENDEDOR","area":1,"areaTxt":"VENTAS","periocidad":1,"periocidadTxt":"DIARIA","ano":2017,"rangos":[0,60,70,80,85],"rangosTxt":["Ineficaz","PocoEficaz","Regular","Buena","Eficaz"],"Meta":834640.0,"Monto":0.00,"porcentaje":74,"vendedor":0,"nom-ven":"","CodigoDiv":999999,"CodigoDep":999999,"NombreDiv":"DEPARTAMENTO GENERAL DECORACION"}
]
}

I would like to add another table to the Write-Json

Posted by tribemax on 16-Mar-2018 13:14

I am currently using the following code:

/*------------------------------------------------------------------------------

Purpose:

Parameters: cia | indicador | dia | mes | ano | opc

Notes:

------------------------------------------------------------------------------*/

DEFINE VARIABLE httBar AS HANDLE NO-UNDO.

httBar = TEMP-TABLE wfinddetdat:HANDLE.

FIND FIRST indmaetip NO-LOCK WHERE indmaetip.indicador = wkIndicador NO-ERROR.

IF AVAILABLE indmaetip THEN DO:

IF wkdia > 0 THEN DO:

wkFchIni = DATE(wkmes, wkdia, wkano).

wkFchFin = DATE(wkmes, wkdia, wkano).

END.

ELSE IF wkmes > 0 THEN DO:

wkFchIni = DATE(wkmes, 1, wkano).

wkFchFin = wkFchIni.

DO WHILE wkmes = MONTH(wkFchFin).

wkFchFin = wkFchFin + 1.

END.

wkFchFin = wkFchFin - 1.

END.

ELSE IF wkano > 0 THEN DO:

wkFchIni = DATE(1, 1, wkano).

wkFchFin = DATE(12, 31, wkano).

END.

FOR EACH inddetdat NO-LOCK WHERE inddetdat.cia = wkcia

AND inddetdat.area = indmaetip.area AND inddetdat.ano = wkano

AND inddetdat.estado BY inddetdat.CodigoDiv

BY inddetdat.CodigoDep BY inddetdat.vendedor:

CREATE wfinddetdat.

wfinddetdat.cia = inddetdat.cia.

wfinddetdat.indicador = indmaetip.indicador.

wfinddetdat.indicadorTxt = indmaetip.titulo.

wfinddetdat.area = indmaetip.area.

wfinddetdat.areaTxt = areaTxt[indmaetip.area].

wfinddetdat.periocidad = indmaetip.periocidad.

wfinddetdat.periocidadTxt = periocidadTxt[indmaetip.periocidad].

wfinddetdat.ano = inddetdat.ano.

wfinddetdat.rangos[1] = (indmaetip.rangos[1] * 100).

wfinddetdat.rangos[2] = (indmaetip.rangos[2] * 100).

wfinddetdat.rangos[3] = (indmaetip.rangos[3] * 100).

wfinddetdat.rangos[4] = (indmaetip.rangos[4] * 100).

wfinddetdat.rangos[5] = (indmaetip.rangos[5] * 100).

wfinddetdat.rangosTxt[1] = wkRangosTxt[1].

wfinddetdat.rangosTxt[2] = wkRangosTxt[2].

wfinddetdat.rangosTxt[3] = wkRangosTxt[3].

wfinddetdat.rangosTxt[4] = wkRangosTxt[4].

wfinddetdat.rangosTxt[5] = wkRangosTxt[5].

IF wkdia > 0 THEN DO:

wkMeta = inddetdat.MetaDiaE[wkmes].

END.

ELSE IF wkmes > 0 THEN DO:

wkMeta = inddetdat.MetaMesE[wkmes].

END.

ELSE IF wkano > 0 THEN DO:

cntMes = 0.

DO WHILE cntMes < 12.

cntMes = cntMes + 1.

wkMeta = wfinddetdat.Meta + inddetdat.MetaMesE[cntMes].

END.

END.

wfinddetdat.vendedor = inddetdat.vendedor.

wfinddetdat.CodigoDiv = inddetdat.CodigoDiv.

wfinddetdat.CodigoDep = inddetdat.CodigoDep.

wkMonto = 0.

FIND FIRST ccmaeven NO-LOCK WHERE ccmaeven.cia = inddetdat.cia

AND ccmaeven.vendedor = inddetdat.vendedor NO-ERROR.

IF AVAILABLE(ccmaeven) THEN DO:

wfinddetdat.nom-ven = ccmaeven.nom-ven.

FOR EACH estvendedia NO-LOCK WHERE estvendedia.Cia = inddetdat.cia

AND estvendedia.FechaEst >= wkFchIni

AND estvendedia.FechaEst <= wkFchFin

AND estvendedia.Vendedor = inddetdat.vendedor

BY estvendedia.FechaEst:

wkMonto = wkMonto + (estvendedia.MontoVen - estvendedia.MontoDev).

END.

END.

FIND FIRST inmaediv NO-LOCK WHERE inmaediv.CodigoDiv = inddetdat.CodigoDiv

AND inmaediv.CodigoDep = inddetdat.CodigoDep NO-ERROR.

IF AVAILABLE(inmaediv) THEN DO:

wfinddetdat.NombreDiv = inmaediv.NombreDiv.

FOR EACH estventadia NO-LOCK WHERE estventadia.Cia = inddetdat.cia

AND estventadia.CodigoDiv = inddetdat.CodigoDiv

AND estventadia.CodigoDep = inddetdat.CodigoDep

AND estventadia.FechaEst >= wkFchIni

AND estventadia.FechaEst <= wkFchFin

BY estventadia.FechaEst:

wkMonto = wkMonto + (estventadia.MontoVen - estventadia.MontoDev).

END.

END.

wfinddetdat.Meta = wkMeta.

wfinddetdat.Monto = ROUND(wkMonto, 0).

IF wkMeta > 0 AND wkMonto > 0 THEN wkPorcentaje = ROUND((wkMonto / wkMeta) * 100,0).

IF wkPorcentaje > 100 THEN wkPorcentaje = 100.

wfinddetdat.porcentaje = wkPorcentaje.

END.

END.

RELEASE wfinddetdat.

output-http-header("Access-Control-Allow-Origin":U, "*":U).

output-content-type ("application/json":U).

httBar:WRITE-JSON("STREAM", "WebStream").

DELETE wfinddetdat.

END PROCEDURE.

data.json:

{

    "wfinddetdat":[

         {"cia":5,"indicador":5,"indicadorTxt":"ESTIMADO DE VENTAS DIARIA POR VENDEDOR","area":1,"areaTxt":"VENTAS","periocidad":1,"periocidadTxt":"DIARIA","ano":2017,"rangos":[0,60,70,80,85],"rangosTxt":["Ineficaz","PocoEficaz","Regular","Buena","Eficaz"],"Meta":1947493.0,"Monto":1099008.00,"porcentaje":56,"vendedor":100,"nom-ven":"FATIMA JIMENEZ","CodigoDiv":0,"CodigoDep":0,"NombreDiv":""},

         {"cia":5,"indicador":5,"indicadorTxt":"ESTIMADO DE VENTAS DIARIA POR VENDEDOR","area":1,"areaTxt":"VENTAS","periocidad":1,"periocidadTxt":"DIARIA","ano":2017,"rangos":[0,60,70,80,85],"rangosTxt":["Ineficaz","PocoEficaz","Regular","Buena","Eficaz"],"Meta":639023.0,"Monto":1022695.00,"porcentaje":100,"vendedor":102,"nom-ven":"JACKSON CHUELLO","CodigoDiv":0,"CodigoDep":0,"NombreDiv":""},

         {"cia":5,"indicador":5,"indicadorTxt":"ESTIMADO DE VENTAS DIARIA POR VENDEDOR","area":1,"areaTxt":"VENTAS","periocidad":1,"periocidadTxt":"DIARIA","ano":2017,"rangos":[0,60,70,80,85],"rangosTxt":["Ineficaz","PocoEficaz","Regular","Buena","Eficaz"],"Meta":6819285.0,"Monto":1015191.00,"porcentaje":15,"vendedor":104,"nom-ven":"YEILIANA RODRIGUEZ","CodigoDiv":0,"CodigoDep":0,"NombreDiv":""},

         {"cia":5,"indicador":5,"indicadorTxt":"ESTIMADO DE VENTAS DIARIA POR VENDEDOR","area":1,"areaTxt":"VENTAS","periocidad":1,"periocidadTxt":"DIARIA","ano":2017,"rangos":[0,60,70,80,85],"rangosTxt":["Ineficaz","PocoEficaz","Regular","Buena","Eficaz"],"Meta":2193042.0,"Monto":3496771.00,"porcentaje":100,"vendedor":107,"nom-ven":"DEYLA MORILLO","CodigoDiv":0,"CodigoDep":0,"NombreDiv":""},

         {"cia":5,"indicador":5,"indicadorTxt":"ESTIMADO DE VENTAS DIARIA POR VENDEDOR","area":1,"areaTxt":"VENTAS","periocidad":1,"periocidadTxt":"DIARIA","ano":2017,"rangos":[0,60,70,80,85],"rangosTxt":["Ineficaz","PocoEficaz","Regular","Buena","Eficaz"],"Meta":3701158.0,"Monto":2735921.00,"porcentaje":74,"vendedor":109,"nom-ven":"DIOBERLIN ARAUJO","CodigoDiv":0,"CodigoDep":0,"NombreDiv":""},

         {"cia":5,"indicador":5,"indicadorTxt":"ESTIMADO DE VENTAS DIARIA POR VENDEDOR","area":1,"areaTxt":"VENTAS","periocidad":1,"periocidadTxt":"DIARIA","ano":2017,"rangos":[0,60,70,80,85],"rangosTxt":["Ineficaz","PocoEficaz","Regular","Buena","Eficaz"],"Meta":8838493.0,"Monto":5190655.00,"porcentaje":59,"vendedor":0,"nom-ven":"","CodigoDiv":10,"CodigoDep":1,"NombreDiv":"CERAMICA Y BAÑOS"},

         {"cia":5,"indicador":5,"indicadorTxt":"ESTIMADO DE VENTAS DIARIA POR VENDEDOR","area":1,"areaTxt":"VENTAS","periocidad":1,"periocidadTxt":"DIARIA","ano":2017,"rangos":[0,60,70,80,85],"rangosTxt":["Ineficaz","PocoEficaz","Regular","Buena","Eficaz"],"Meta":2390308.0,"Monto":2563561.00,"porcentaje":100,"vendedor":0,"nom-ven":"","CodigoDiv":10,"CodigoDep":5,"NombreDiv":"FERRETERIA"},

         {"cia":5,"indicador":5,"indicadorTxt":"ESTIMADO DE VENTAS DIARIA POR VENDEDOR","area":1,"areaTxt":"VENTAS","periocidad":1,"periocidadTxt":"DIARIA","ano":2017,"rangos":[0,60,70,80,85],"rangosTxt":["Ineficaz","PocoEficaz","Regular","Buena","Eficaz"],"Meta":445602.0,"Monto":0.00,"porcentaje":100,"vendedor":0,"nom-ven":"","CodigoDiv":20,"CodigoDep":5,"NombreDiv":"DECORATIVOS HOGAR"},

         {"cia":5,"indicador":5,"indicadorTxt":"ESTIMADO DE VENTAS DIARIA POR VENDEDOR","area":1,"areaTxt":"VENTAS","periocidad":1,"periocidadTxt":"DIARIA","ano":2017,"rangos":[0,60,70,80,85],"rangosTxt":["Ineficaz","PocoEficaz","Regular","Buena","Eficaz"],"Meta":611571.0,"Monto":0.00,"porcentaje":100,"vendedor":0,"nom-ven":"","CodigoDiv":20,"CodigoDep":10,"NombreDiv":"MUEBLES Y EQUIPAMIENTO HOGAR"},

         {"cia":5,"indicador":5,"indicadorTxt":"ESTIMADO DE VENTAS DIARIA POR VENDEDOR","area":1,"areaTxt":"VENTAS","periocidad":1,"periocidadTxt":"DIARIA","ano":2017,"rangos":[0,60,70,80,85],"rangosTxt":["Ineficaz","PocoEficaz","Regular","Buena","Eficaz"],"Meta":2179387.0,"Monto":1615371.00,"porcentaje":74,"vendedor":0,"nom-ven":"","CodigoDiv":100,"CodigoDep":10,"NombreDiv":"MAQUINAS Y REPUESTOS"},

         {"cia":5,"indicador":5,"indicadorTxt":"ESTIMADO DE VENTAS DIARIA POR VENDEDOR","area":1,"areaTxt":"VENTAS","periocidad":1,"periocidadTxt":"DIARIA","ano":2017,"rangos":[0,60,70,80,85],"rangosTxt":["Ineficaz","PocoEficaz","Regular","Buena","Eficaz"],"Meta":834640.0,"Monto":0.00,"porcentaje":74,"vendedor":0,"nom-ven":"","CodigoDiv":999999,"CodigoDep":999999,"NombreDiv":"DEPARTAMENTO GENERAL DECORACION"}

    ]

}

I would like to add another table to the Write-Json

Posted by christian.bryan@capita.co.uk on 11-Jun-2018 07:51

You probably want to use a Prodataset which includes all the temp-tables you require and their relationships you can then do a WRIT-JSON on the prodataset,

Posted by goo on 31-May-2019 08:45

You may also work with the json array/object itself. Then you can do whatever you want. Write to a longchar and add as many temp-tables you want.

def var lcJson as longchar no-undo.

httBar:WRITE-JSON("LONGCHAR", lcJson).

documentation.progress.com/.../index.html

Posted by goo on 31-May-2019 08:45

You may also work with the json array/object itself. Then you can do whatever you want. Write to a longchar and add as many temp-tables you want.

def var lcJson as longchar no-undo.

httBar:WRITE-JSON("LONGCHAR", lcJson).

documentation.progress.com/.../index.html

Posted by Peter Judge on 03-Jun-2019 13:18

Once you have a JsonObject, you can also use the Read() method to add another temp-table/dataset's data into that object.
 

This thread is closed