-
Aditya Kabir
- PowerBuilder
- Thursday, 3 April 2025 02:02 AM UTC
Hi this function was created before Powerbuilder supports Jsons and http requests, it's about calling a http webservice and return values. I have tried debugged it, what I found that it worked fine until that function was compeleted within VC++. here's my code on PB
I have declared it on external function section
function long querytraccodg( &
general_struct gs,&
querytrackcode qd, &
ref long recordscount,&
ref querytrackcoderet tcr[],&
ref general_ret_struct grs) &
LIBRARY "dgnewsbsapi.dll" Alias for 'querytraccodg;Ansi'
long ll_net,li_daysDifference
date ld_rq,ld_js
datetime ldt_ksrq, ldt_jsrq, ldt_syyjrq
ld_rq = date(em_5.text)
ldt_ksrq = datetime(ld_rq)
ld_js = date(em_6.text)
ldt_jsrq = datetime(ld_js,time('23:59:59'))
li_daysDifference = DaysAfter(date(ldt_jsrq), date(ldt_ksrq))
if li_daysDifference>31 then
uf_ok(" Don't query date duration is over 31 days, programe may crashed due to too much datas")
return
end if
ll_net=messagebox("query","are you sure need to query?",question!,yesno!)
if ll_net=2 then return
querytrackcode qd
querytrackcoderet qtcrt[]
qd.fixmedins_code=gs_fixmedins_code
qd.medins_list_codg=trim(sle_medins_list_codg.text)
if isnull(qd.medins_list_codg) then qd.medins_list_codg=""
qd.fixmedins_bchno=trim(sle_fixmedins_bchno.text)
if isnull(qd.fixmedins_bchno) then qd.fixmedins_bchno=""
qd.begndate=em_5.text
qd.enddate=em_6.text
qd.med_list_codg=trim(sle_med_list_codg.text)
if isnull(qd.med_list_codg) then qd.med_list_codg=""
qd.mdtrt_id=trim(sle_mdtrt_id.text)
if isnull(qd.mdtrt_id) then qd.mdtrt_id=""
qd.psn_no=""
qd.psn_cert_type=""
qd.certno=trim(sle_certno.text)
if isnull(qd.certno) then qd.certno=""
qd.psn_name=""
qd.drug_trac_codg=""
long ll_row,ll_result,ll_recordscount
for ll_row=1 to 5000
qtcrt[ll_row].fixmedinsCode=space(50)
qtcrt[ll_row].medListCodg=space(26)
qtcrt[ll_row].medinsListCodg=space(60)
qtcrt[ll_row].medinsListName=space(200)
qtcrt[ll_row].fixmedinsBchno=space(150)
qtcrt[ll_row].mdtrtId=space(60)
qtcrt[ll_row].mdtrtSetlType=space(60)
qtcrt[ll_row].bkkpSn=space(150)
qtcrt[ll_row].drugTracCodg=space(60)
qtcrt[ll_row].psnNo=space(60)
qtcrt[ll_row].psnCertType=space(60)
qtcrt[ll_row].certno=space(60)
qtcrt[ll_row].psnName=space(90)
qtcrt[ll_row].memo=space(500)
qtcrt[ll_row].trdnFlag=space(50)
qtcrt[ll_row].updtTime=space(50)
qtcrt[ll_row].opterName=space(100)
qtcrt[ll_row].rid=space(60)
qtcrt[ll_row].crteTime=space(50)
qtcrt[ll_row].optTime=space(50)
qtcrt[ll_row].opterId=space(50)
qtcrt[ll_row].crterName=space(100)
qtcrt[ll_row].crterId=space(50)
qtcrt[ll_row].optinsNo=space(50)
next
general_struct gs1
gs1.accesskey=gs_accesskey
gs1.secrekey=gs_secrekey
gs1.sbid=gs_fixmedins_code
gs1.insuplc_admdvs=gs_insuplc_admdvs
gs1.mdtrtarea_admvs=gs_mdtrtarea_admvs
gs1.opter_type="1"
gs1.opter=cur_no
gs1.opter_name=cur_Name
if isnull(gs1.opter_name) then gs1.opter_name=""
gs1.inf_time= String(datetime(today(),now()),"yyyy-mm-dd hh:mm:ss")
gs1.fixmedins_code=gs_fixmedins_code
gs1.fixmedins_name=gs_fixmedins_name
gs1.sign_no=gs_newsb_signo
gs1.returncode=0
gs1.iftest=gb_iftest
general_ret_struct grs1;
ll_recordscount=0
ll_result= querytraccodg( &
gs1, &
qd ,&
ll_recordscount,&
qtcrt,&
grs1)
if ll_result=0 then
for ll_row=1 to ll_recordscount
dw_3.insertrow(0)
dw_3.setitem(dw_3.rowcount(),"fixmedinsCode",qtcrt[ll_row].fixmedinsCode)
dw_3.setitem(dw_3.rowcount(),"medListCodg",qtcrt[ll_row].medListCodg)
dw_3.setitem(dw_3.rowcount(),"medinsListCodg",qtcrt[ll_row].medinsListCodg)
dw_3.setitem(dw_3.rowcount(),"medinsListName",qtcrt[ll_row].medinsListName)
dw_3.setitem(dw_3.rowcount(),"fixmedinsBchno",qtcrt[ll_row].fixmedinsBchno)
dw_3.setitem(dw_3.rowcount(),"mdtrtId",qtcrt[ll_row].mdtrtId)
dw_3.setitem(dw_3.rowcount(),"mdtrtSetlType",qtcrt[ll_row].mdtrtSetlType)
dw_3.setitem(dw_3.rowcount(),"bkkpSn",qtcrt[ll_row].bkkpSn)
dw_3.setitem(dw_3.rowcount(),"drugTracCodg",qtcrt[ll_row].drugTracCodg)
dw_3.setitem(dw_3.rowcount(),"psnNo",qtcrt[ll_row].psnNo)
dw_3.setitem(dw_3.rowcount(),"psnCertType",qtcrt[ll_row].psnCertType)
dw_3.setitem(dw_3.rowcount(),"certno",qtcrt[ll_row].certno)
dw_3.setitem(dw_3.rowcount(),"psnName",qtcrt[ll_row].psnName)
dw_3.setitem(dw_3.rowcount(),"memo",qtcrt[ll_row].memo)
dw_3.setitem(dw_3.rowcount(),"trdnFlag",qtcrt[ll_row].trdnFlag)
dw_3.setitem(dw_3.rowcount(),"updtTime",qtcrt[ll_row].updtTime)
dw_3.setitem(dw_3.rowcount(),"opterName",qtcrt[ll_row].opterName)
dw_3.setitem(dw_3.rowcount(),"rid",qtcrt[ll_row].rid)
dw_3.setitem(dw_3.rowcount(),"crteTime",qtcrt[ll_row].crteTime)
dw_3.setitem(dw_3.rowcount(),"optTime",qtcrt[ll_row].optTime)
dw_3.setitem(dw_3.rowcount(),"opterId",qtcrt[ll_row].opterId)
dw_3.setitem(dw_3.rowcount(),"crterName",qtcrt[ll_row].crterName)
dw_3.setitem(dw_3.rowcount(),"crterId",qtcrt[ll_row].crterId)
dw_3.setitem(dw_3.rowcount(),"optinsNo",qtcrt[ll_row].optinsNo)
next
if ll_recordscount=9 then
uf_ok("sorry no results found")
end if
else
uf_ok("Error occured:"+ grs1.err_msg)
end if
here is code on VC++ side:
int _stdcall querytraccodg(
general_struct & gs,
querytrackcode & qd,
int & recordscount,
querytrackcoderet * tcr,
general_ret_struct & grs)
{
setlocale(LC_ALL, "");
string infno, msgid;
infno = "3513";
msgid = gs.sbid;
std::time_t rawtime;
std::tm timeinfo;
char buffer[80];
std::time(&rawtime);
localtime_s(&timeinfo, &rawtime);
std::strftime(buffer, 80, "%Y%m%d%H%M%S", &timeinfo);
string datetimestr = buffer;
msgid = msgid + datetimestr;
int mynum = rand() % 10000;
string mynumorgstr = to_string(mynum);
string mynumstr = std::string(4 - mynumorgstr.length(), '0') + mynumorgstr;
msgid = msgid + mynumstr;
json::value obj, dataitem, inputitem;
wstring fields = L"fixmedins_code";
assigncstring2json(dataitem, fields, qd.fixmedins_code);
fields = L"medins_list_codg";
assigncstring2json(dataitem, fields, qd.medins_list_codg);
fields = L"fixmedins_bchno";
assigncstring2json(dataitem, fields, qd.fixmedins_bchno);
fields = L"begndate";
assigncstring2json(dataitem, fields, qd.begndate);
fields = L"enddate";
assigncstring2json(dataitem, fields, qd.enddate);
fields = L"med_list_codg";
assigncstring2json(dataitem, fields, qd.med_list_codg);
fields = L"mdtrt_id";
assigncstring2json(dataitem, fields, qd.mdtrt_id);
fields = L"psn_no";
assigncstring2json(dataitem, fields, qd.psn_no);
fields = L"psn_cert_type";
assigncstring2json(dataitem, fields, qd.psn_cert_type);
fields = L"certno";
assigncstring2json(dataitem, fields, qd.certno);
fields = L"psn_name";
assigncstring2json(dataitem, fields, qd.psn_name);
fields = L"drug_trac_codg";
assigncstring2json(dataitem, fields, qd.drug_trac_codg);
inputitem[L"data"] = dataitem;
gs.returncode = 0;
int result = buildrequestjson(infno, msgid, gs.insuplc_admdvs,
gs.mdtrtarea_admvs, gs.opter_type, gs.opter, gs.opter_name, gs.inf_time,
gs.fixmedins_code, gs.fixmedins_name, gs.sign_no,
inputitem, obj, gs.returncode);
if (result != 0)
{
gs.returncode = result;
return gs.returncode;
}
wstring webaddress=L"http://10.33.56.12/myquery";
json::value jv;
string accessKeystr = gs.accessKey;
string secreKeystr = gs.secreKey;
json::value outputwstr;
int mymethod = 0;
std::string txtfile;
result = postoweb(webaddress, obj, jv,
accessKeystr, secreKeystr, grs.inf_refmsgid, grs.refmsg_time,
grs.respond_time, grs.err_msg, outputwstr, gs.returncode, mymethod, txtfile, true);
if (result != 0)
{
gs.returncode = result;
return gs.returncode;
}
try
{
json::value retjv = outputwstr;
if (retjv.has_field(L"output"))
{
if (!retjv.at(L"output").is_null())
{
json::value setldetailjson = retjv.at(L"output");
json::array setldetailarray = setldetailjson.as_array();
recordscount = 0;
for (auto const & e : setldetailarray)
{
wstring field = L"fixmedinsCode";
obtaincstringfromjson2(e, field, tcr[recordscount].fixmedinsCode);
field = L"medListCodg";
obtaincstringfromjson2(e, field, tcr[recordscount].medListCodg);
field = L"medinsListCodg";
obtaincstringfromjson2(e, field, tcr[recordscount].medinsListCodg);
field = L"medinsListName";
obtaincstringfromjson2(e, field, tcr[recordscount].medinsListName);
field = L"fixmedinsBchno";
obtaincstringfromjson2(e, field, tcr[recordscount].fixmedinsBchno);
field = L"mdtrtId";
obtaincstringfromjson2(e, field, tcr[recordscount].mdtrtId);
field = L"mdtrtSetlType";
obtaincstringfromjson2(e, field, tcr[recordscount].mdtrtSetlType);
field = L"bkkpSn";
obtaincstringfromjson2(e, field, tcr[recordscount].bkkpSn);
field = L"drugTracCodg";
obtaincstringfromjson2(e, field, tcr[recordscount].drugTracCodg);
field = L"psnNo";
obtaincstringfromjson2(e, field, tcr[recordscount].psnNo);
field = L"psnCertType";
obtaincstringfromjson2(e, field, tcr[recordscount].psnCertType);
field = L"certno";
obtaincstringfromjson2(e, field, tcr[recordscount].certno);
field = L"psnName";
obtaincstringfromjson2(e, field, tcr[recordscount].psnName);
field = L"memo";
obtaincstringfromjson2(e, field, tcr[recordscount].memo);
field = L"trdnFlag";
obtaincstringfromjson2(e, field, tcr[recordscount].trdnFlag);
field = L"updtTime";
obtaincstringfromjson2(e, field, tcr[recordscount].updtTime);
field = L"opterName";
obtaincstringfromjson2(e, field, tcr[recordscount].opterName);
field = L"rid";
obtaincstringfromjson2(e, field, tcr[recordscount].rid);
field = L"crteTime";
obtaincstringfromjson2(e, field, tcr[recordscount].crteTime);
field = L"optTime";
obtaincstringfromjson2(e, field, tcr[recordscount].optTime);
field = L"opterId";
obtaincstringfromjson2(e, field, tcr[recordscount].opterId);
field = L"crterName";
obtaincstringfromjson2(e, field, tcr[recordscount].crterName);
field = L"crterId";
obtaincstringfromjson2(e, field, tcr[recordscount].crterId);
field = L"optinsNo";
obtaincstringfromjson2(e, field, tcr[recordscount].optinsNo);
recordscount++;
}
}
}
}
catch (const std::exception& e)
{
write_text_to_log_file(e.what());
return -999;
}
return 0;
}
I have tracked the code, it has done for return 0
it encountred some problems afterward as some pics on attachments
any helps would be appreciated, actually I am kinda considering using Powerbuilder native Jsons as well as http features for doing this. but if you have suggestions for me for this problem I would be even more appreciated
Find Questions by Tag
Helpful?
If a reply or comment is helpful for you, please don’t hesitate to click the Helpful button. This action is further confirmation of their invaluable contribution to the Appeon Community.