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.
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?
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
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
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,
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).
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).