I have changed my program to receive the filter parameters in a JSON payload rather than passing the filters in the URI.
Now I am having trouble with the STDOUT process. I am not receiving everything that was loaded by the program.
Here is my program:
Code: Select all
**free
/copy qfunctdefn,@copyright
//**************************************************************************************************
// Program : getavlplug
// Description: Get Available Plug Inventory
// Author : Rodney L Gaylor
// Create Date: 07-08-2024
// Notes :
//**************************************************************************************************
// Modifications History
// Date Programmer Name Chg# Description
// ---------- ------------------------- ---- ----------------------------------------------------
// 07-08-2024 Rodney L Gaylor rg00 Program created
//**************************************************************************************************
// Set program control options
ctl-opt dftactgrp(*no)
option(*nodebugio:*srcstmt)
debug(*yes)
bnddir('YAJL');
// Include YAJL procedures
/include yajl_h
// JSON Document data structure for request
dcl-ds jsonrequestdoc qualified;
dcl-ds filters;
item varchar(13) inz('');
size varchar(3) inz('');
desc varchar(40) inz('');
hide ind;
end-ds;
end-ds;
// JSON Document data structure for results returned
dcl-ds jsonresultsdoc qualified;
num_weekdates int(10) inz(0);
dcl-ds weekDates dim(6);
weekdate like(ds_f53weeks.wk00);
end-ds;
num_items int (10) inz(0);
dcl-ds items dim(32767);
item varchar(13) inz('');
size varchar(3) inz('');
desc varchar(40) inz('');
num_weeks int(10) inz(0);
dcl-ds weeks dim(6);
week varchar(10) inz('');
end-ds;
end-ds;
end-ds;
// Program data structures
dcl-ds ds_f53weeks extname('F53WEEKS')
qualified
alias
end-ds;
// Program work fields
dcl-s w_quote char(1) inz('''');
dcl-s w_item varchar(13);
dcl-s w_size varchar(3);
dcl-s w_desc varchar(40);
dcl-s w_wk packed(10);
dcl-s w_wk01 packed(9:2);
dcl-s w_wk02 like(w_wk);
dcl-s w_wk03 like(w_wk);
dcl-s w_wk04 like(w_wk);
dcl-s w_wk05 like(w_wk);
dcl-s w_wk06 like(w_wk);
dcl-s w_pos int(10) inz(0);
dcl-s w_jsonresponse varchar(16000000);
// SQL work fields and constants
dcl-s sql_string varchar(5000);
dcl-c sqlsuccess '00000';
// Program indicators
dcl-s i_where ind inz(*off);
//**************************************************************************************************
// Main Procedure
//**************************************************************************************************
exec sql
set option commit = *none;
// Load week dates for six display columns
exec sql
select *
into :ds_f53weeks
from f53weeks
fetch first row only;
jsonresultsdoc.weekdates(1).weekdate = ds_f53weeks.wk00;
jsonresultsdoc.weekdates(2).weekdate = ds_f53weeks.wk01;
jsonresultsdoc.weekdates(3).weekdate = ds_f53weeks.wk02;
jsonresultsdoc.weekdates(4).weekdate = ds_f53weeks.wk03;
jsonresultsdoc.weekdates(5).weekdate = ds_f53weeks.wk04;
jsonresultsdoc.weekdates(6).weekdate = ds_f53weeks.wk05;
jsonresultsdoc.num_weekdates = 6;
// Retrieve JSON request parameters from *STDIN
monitor;
data-into jsonrequestdoc
%data( '*STDIN' :'case=convert allowmissing=yes')
%parser('YAJLINTO');
on-error;
endmon;
// Build SQL select string from JSON request parameters
sql_string = 'select item, size, description, rb, wk1, wk2, wk3, wk4, wk5 from inv_p00002';
if jsonrequestdoc.filters.item <> *blank;
sql_string += ' where item like '
+ w_quote
+ '%'
+ %trim(jsonrequestdoc.filters.item)
+ '%' + w_quote;
i_where = *on;
endif;
if jsonrequestdoc.filters.size <> *blank;
if not i_where;
sql_string += ' where size like '
+ w_quote
+ '%'
+ %trim(jsonrequestdoc.filters.size)
+ '%'
+ w_quote;
i_where = *on;
else;
sql_string += ' and size like '
+ w_quote
+ '%'
+ %trim(jsonrequestdoc.filters.size)
+ '%' + w_quote;
endif;
endif;
if jsonrequestdoc.filters.desc <> *blank;
if not i_where;
sql_string += ' where description like '
+ w_quote + '%'
+ %trim(jsonrequestdoc.filters.desc)
+ '%'
+ w_quote;
i_where = *on;
else;
sql_string += ' and description like '
+ w_quote
+ '%'
+ %trim(jsonrequestdoc.filters.desc)
+ '%' + w_quote;
endif;
endif;
if jsonrequestdoc.filters.hide = *on;
if not i_where;
sql_string += ' where item not like '
+ w_quote
+ '%P%'
+ w_quote;
i_where = *on;
else;
sql_string += ' and item not like '
+ w_quote
+ '%P%'
+ w_quote;
endif;
endif;
sql_string += ' order by sort, item, size';
// Prepare executable SQL statement p1 from sql_string
exec sql
prepare sql_statement from :sql_string;
// Create sql cursor c1 for items selection
exec sql
declare c1 cursor for sql_statement;
// Open sql cursor
exec sql
open c1;
// Fetch requested item rows from inv_p00002
exec sql
fetch from c1
into :w_item, :w_size, :w_desc, :w_wk01, :w_wk02, :w_wk03, :w_wk04, :w_wk05, :w_wk06;
// Perform jsonResultsDoc data structure load until last item row selected
dow sqlstate = sqlsuccess;
jsonresultsdoc.num_items += 1;
jsonresultsdoc.items(jsonresultsdoc.num_items).item = w_item;
jsonresultsdoc.items(jsonresultsdoc.num_items).size = w_size;
jsonresultsdoc.items(jsonresultsdoc.num_items).desc = w_desc;
jsonresultsdoc.items(jsonresultsdoc.num_items).num_weeks = 0;
w_pos = %scan('P' : jsonresultsdoc.items(jsonresultsdoc.num_items).item);
select;
when w_wk01 > 0
and w_pos > 0;
jsonresultsdoc.items(jsonresultsdoc.num_items).weeks(1).week = %trim(%char(%editc(w_wk01:'3')));
jsonresultsdoc.items(jsonresultsdoc.num_items).num_weeks = 1;
when w_wk01 > 0;
w_wk = w_wk01;
jsonresultsdoc.items(jsonresultsdoc.num_items).weeks(1).week = %trim(%char(%editc(w_wk:'Z')));
jsonresultsdoc.items(jsonresultsdoc.num_items).num_weeks = 1;
other;
jsonresultsdoc.items(jsonresultsdoc.num_items).weeks(1).week = *blank;
endsl;
if w_wk02 = 0;
jsonresultsdoc.items(jsonresultsdoc.num_items).weeks(2).week = *blank;
else;
jsonresultsdoc.items(jsonresultsdoc.num_items).weeks(2).week = %trim(%char(%editc(w_wk02:'Z')));
jsonresultsdoc.items(jsonresultsdoc.num_items).num_weeks = 2;
endif;
if w_wk03 = 0;
jsonresultsdoc.items(jsonresultsdoc.num_items).weeks(3).week = *blank;
else;
jsonresultsdoc.items(jsonresultsdoc.num_items).weeks(3).week = %trim(%char(%editc(w_wk03:'Z')));
jsonresultsdoc.items(jsonresultsdoc.num_items).num_weeks = 3;
endif;
if w_wk04 = 0;
jsonresultsdoc.items(jsonresultsdoc.num_items).weeks(4).week = *blank;
else;
jsonresultsdoc.items(jsonresultsdoc.num_items).weeks(4).week = %trim(%char(%editc(w_wk04:'Z')));
jsonresultsdoc.items(jsonresultsdoc.num_items).num_weeks = 4;
endif;
if w_wk05 = 0;
jsonresultsdoc.items(jsonresultsdoc.num_items).weeks(5).week = *blank;
else;
jsonresultsdoc.items(jsonresultsdoc.num_items).weeks(5).week = %trim(%char(%editc(w_wk05:'Z')));
jsonresultsdoc.items(jsonresultsdoc.num_items).num_weeks = 5;
endif;
if w_wk06 = 0;
jsonresultsdoc.items(jsonresultsdoc.num_items).weeks(6).week = *blank;
else;
jsonresultsdoc.items(jsonresultsdoc.num_items).weeks(6).week = %trim(%char(%editc(w_wk06:'Z')));
jsonresultsdoc.items(jsonresultsdoc.num_items).num_weeks = 6;
endif;
exec sql
fetch from c1
into :w_item, :w_size, :w_desc, :w_wk01, :w_wk02, :w_wk03, :w_wk04, :w_wk05, :w_wk06;
enddo;
// Close the c1 sql cursor
exec sql
close c1;
// WHEN I USE THIS CODE I GET THE EXPECTED RESULTS IN THE DOC FILE
//data-gen jsonresultsdoc %data( '/rodneyg/getavlplugresults.json'
// : 'doc=file countprefix=num_'
// ) %gen('YAJLDTAGEN');
// WHEN I USE THIS CODE I DO NOT GET ITEM DATA IN THE DOC FILE OR IN THE STDOUT TO THE BROWSER
// Return requested rows to caller
data-gen jsonresultsdoc %data( '/rodneyg/getavlplugresults.json'
: 'doc=file countprefix=num_'
) %gen('YAJLDTAGEN'
: '{"http status": 200, "write to stdout": true}'
);
*inlr = *on;
return;
WHen I run the program in DEBUG and manually set a filter for Item 2692, this is how the DS is loaded.
Code: Select all
EVAL jsonresultsdoc
JSONRESULTSDOC.NUM_WEEKDATES = 6
JSONRESULTSDOC.WEEKDATES.WEEKDATE(1) = '2024-07-15'
JSONRESULTSDOC.WEEKDATES.WEEKDATE(2) = '2024-07-22'
JSONRESULTSDOC.WEEKDATES.WEEKDATE(3) = '2024-07-29'
JSONRESULTSDOC.WEEKDATES.WEEKDATE(4) = '2024-08-05'
JSONRESULTSDOC.WEEKDATES.WEEKDATE(5) = '2024-08-12'
JSONRESULTSDOC.WEEKDATES.WEEKDATE(6) = '2024-08-19'
JSONRESULTSDOC.NUM_ITEMS = 1
JSONRESULTSDOC.ITEMS.ITEM(1) = '2692 '
JSONRESULTSDOC.ITEMS.SIZE(1) = '50 '
JSONRESULTSDOC.ITEMS.DESC(1) = 'MONTAUK DAISY RC '
JSONRESULTSDOC.ITEMS.NUM_WEEKS(1) = 1
JSONRESULTSDOC.ITEMS.WEEKS.WEEK(1,1) = '3 '
JSONRESULTSDOC.ITEMS.WEEKS.WEEK(1,2) = ' '
JSONRESULTSDOC.ITEMS.WEEKS.WEEK(1,3) = ' '
JSONRESULTSDOC.ITEMS.WEEKS.WEEK(1,4) = ' '
JSONRESULTSDOC.ITEMS.WEEKS.WEEK(1,5) = ' '
JSONRESULTSDOC.ITEMS.WEEKS.WEEK(1,6) = ' '
JSONRESULTSDOC.ITEMS.ITEM(2) = ' '
JSONRESULTSDOC.ITEMS.SIZE(2) = ' '
JSONRESULTSDOC.ITEMS.DESC(2) = ' '
JSONRESULTSDOC.ITEMS.NUM_WEEKS(2) = 0
JSONRESULTSDOC.ITEMS.WEEKS.WEEK(2,1) = ' '
JSONRESULTSDOC.ITEMS.WEEKS.WEEK(2,2) = ' '
JSONRESULTSDOC.ITEMS.WEEKS.WEEK(2,3) = ' '
JSONRESULTSDOC.ITEMS.WEEKS.WEEK(2,4) = ' '
JSONRESULTSDOC.ITEMS.WEEKS.WEEK(2,5) = ' '
JSONRESULTSDOC.ITEMS.WEEKS.WEEK(2,6) = ' '
When I run the program with this DATA-GEN setting...
Code: Select all
data-gen jsonresultsdoc %data( '/rodneyg/getavlplugresults.json'
: 'doc=file countprefix=num_'
) %gen('YAJLDTAGEN');
... this is what the document looks like, which is what I expected.
Code: Select all
{
"weekDates": [
{
"weekdate": "2024-07-15"
},
{
"weekdate": "2024-07-22"
},
{
"weekdate": "2024-07-29"
},
{
"weekdate": "2024-08-05"
},
{
"weekdate": "2024-08-12"
},
{
"weekdate": "2024-08-19"
}
],
"items": [
{
"item": "2692",
"size": "50",
"desc": "MONTAUK DAISY RC",
"weeks": [
{
"week": "3"
}
]
}
]
}
But when I run the DATA-GEN code to return the results via STDOUT like this...
Code: Select all
data-gen jsonresultsdoc %data( '/rodneyg/getavlplugresults.json'
: 'doc=file countprefix=num_'
) %gen('YAJLDTAGEN'
: '{"http status": 200, "write to stdout": true}'
);
My resulting doc file only includes these entries.
Code: Select all
{
"weekDates": [
{
"weekdate": "2024-07-15"
},
{
"weekdate": "2024-07-22"
},
{
"weekdate": "2024-07-29"
},
{
"weekdate": "2024-08-05"
},
{
"weekdate": "2024-08-12"
},
{
"weekdate": "2024-08-19"
}
]
}
And this is what is returned in a browser.
Code: Select all
{"weekDates":[{"weekdate":"2024-07-15"},{"weekdate":"2024-07-22"},{"weekdate":"2024-07-29"},{"weekdate":"2024-08-05"},{"weekdate":"2024-08-12"},{"weekdate":"2024-08-19"}]}
Why am I losing the selected Item data?