PbIdea功能库用于新医保项目快速入门
- 什么群体适合使用PbIdea?
需要强大的功能库可以便捷、高效完成开发任务,并且没有追求“pb源码”和“pb原生功能实现”这些“洁癖”的pb程序员。否则,现在就可以return。
二、什么是新医保项目?
国家医保局制订《 医疗保障信息平台定点医药机构接口规范》,统一医保标准。各省在此基础建设医保平台,所有医保定点机构开发系统对接此接口。
三、pb用于新医保项目开发有哪些痛点?
Pb主要用于传统基于数据库的CS开发,由于其架构出现比较早,它的基础功能着重于数据库方面,在网络、系统、基础功能等方面几乎没什么功能。具体到新医保方面来说它缺乏的功能有:
- 访问webapi必要的httpclient功能,虽然可以使用基于com接口的xmlhttp访问http,但该接口单一,与其他功能配套使用时非常不方便。
- Json,强大方便的数据交换格式。
- Openssl库功能,用于各种加密、解密、散列算法、base64、HEX转换等各种数据签名及加密解密功能。
- 文件传输的zip加解压
- 个别省份特殊的加密解密或签名算法,例如甘肃的华为算法。
- utf8、utf16、ansi字符集编码转换。
- 大文件处理(几百M的txt文件导入)。
- 基于国密的算法sm2 sm3 sm4功能。
四、PbIdea可以解决以上痛点吗?
是的,以上前点PbIdea可以完全解决,而且方便、高效。
目前PbIdea已经广泛应用于pb开发各个领域的应用系统。不仅仅是新医保,各种webapi相关的现代应用,不管是客户端还是服务端,均可以使用pbidea实现。
五、所需要的基础知识储备
不要说你的项目进度有多紧张,你的时间有多宝贵。如果你连一些基础知识都没有,而且以各种理由拒绝学习,只想做个“伸手党”,那么到这里你可以return了。
1、HTTP协议。菜鸟教程等着你:HTTP 教程 | 菜鸟教程。
2、json。菜鸟教程等着你:JSON 教程 | 菜鸟教程,至少要弄清楚什么是对象,什么是数组,什么是字符串。如果你弄不清楚这些,那就继续看菜鸟教程,直到看明白为止。
3、一些常见名词术语:SM3、sha/MD5是取散列值,base64是编码与解码,SM2、rsa是非对称加密解密和签名,SM4、des/aes是对称加密解密。不要把这些统统都叫做“加密”。正确表述,显得有知识有文化有技术有力量。
六、走近/进PbIdea
首先假设你已经有了五中的基础知识储备,如果没有,那么请return到五,完成你的知识储备。
接下来,到群(群号:624409252)共享“大自在”目录里下载pbidea最新版本。解压到任意目录,子目录9指这里面的项目是PB9的DEMO,子目录100是指这里面是pb10-pb2021的DEMO。Pb8请到群里下载专门的pb8的DEMO。更早的版本不确定能支持,自己试吧。
(一)uo_httpclient/uo_curl
这两个对象都用于访问http/https接口。首先打开这个对象研究一下那些函数,以及函数的调用参数,也许你需要的某个功能,就在某个参数里面。
Uo_httpclient hc
Hc = create uo_httpclient
………初始化
Hc.request(……)
然后判断 hc.response.httpcode = 200是成功的,否则自己百度对照相应代码意义。如果为0,说明访问根本就没发起,本机上就失败了。
代码为200说明成功,此时请示数据在hc.response.data里面,blob类型。从接口取来的任何内容都在hc.response.data里面。
注意:你的世界不是只有字符串,这里面全是二进制数据,当然可以是字符串,也可以不是字符串。如果获取的是zip文件,直接把hc.response.data写入为文件就行:
Uo_file file
File = create uo_file
File.blobtofile(hc.response.data,”my.zip”)
Destroy file
如果接口回传给你的是JSON,直接使用hc.response.json对象即可。
如果接口回传给你的是xml,直接使用hc.response.xml对象即可。
Pbidea已经为你自动处理好这些数据。尤其是不必要去徒劳地搞什么UTF8编码转换,你只要记得:Pbidea已经为你自动处理好这些数据,包括编码转换。
(二)uo_json
目前为止史上功能最强大、使用最便捷、效率最高的json对象,没有之一。
1、什么是对象?
{“a”:”this is a“},特点是大括号括起来。
2、什么是数组?
[1,2,3,4] [“aa”,”bb”,”cc”] [{“a”:”aa”},{“b”:”bb”}] 特点是中括号括起来
如果你把JSON数组,理解为uo_json json[]这样的pb对象数组,就请自己面壁去吧。
3、什么是字符串?
{“a”:”{\“hello\“:\”baby\“}“} 键 a下面的值,由\进行转义的那个部分的值”{\“hello\“:\”baby\“}“,它是一个字符串,它的处理需要把这个字符串取到字符串变量里,再进行parse解析成JSON对象 。
4、{ } , [ ],这样一对空的是什么?
即使是空的,它也是JSON对象和JSON数组。希望不要再说“如何添加或脱中外面那对中括号“这样的笑话。不要看它空着就看不起它,它辈份高。Json.SetObject() 、json.SetArray()都可以生成空的对象或者空的数组。
5、强大的set/get函数
往json里添加数据,使用set,从json里取数据,使用get。不管JSON是多少层,是对象还是数组,都可以使用set/get完成你所需要的功能。
举例一:
json.set("name","机构名称")
json.set("addr","机构地址")
{
"name": "机构名称",
"addr": "机构地址"
}
举例二:
json.set("/input/data/name","机构名称")
json.set("/input/data/addr","机构地址")
结果
{
"input": {
"data": {
"name": "机构名称",
"addr": "机构地址"
}
}
}
String ls_name
json.get("/input/data/name",ref name)
即可取得name值
举例三:
int i
for i = 1 to 10
json.set("/input/data/" + string(i - 1) + "/name","机构名称" + string(i))
json.set("/input/data/" + string(i - 1) + "/addr","机构地址" + string(i))
next
结果
{
"input": {
"data": [
{
"name": "机构名称1",
"addr": "机构地址1"
},
{
"name": "机构名称2",
"addr": "机构地址2"
},
{
"name": "机构名称3",
"addr": "机构地址3"
},
{
"name": "机构名称4",
"addr": "机构地址4"
},
{
"name": "机构名称5",
"addr": "机构地址5"
}
]
}
}
String ls_name
json.get("/input/data/0/name",ref ls_name) 可取得第一项的“机构名称1“
json.get("/input/data/2/name",ref ls_name) 可取得第三项的“机构名称3“
从数组里取数据,索引号是从0开始,0代表第一项,1代表第二项……
所有按路径取值,必须以“/“开始!!!
6、百问不厌的一个问题:上传字节数组
这里做终极回答,以后不再回答这个问题:
json.set("/input/fsUploadIn/in","mydata.zip",json.SetBytes)
json.set("/input/fsUploadIn/filename","mydata.zip")
即可生成医保要求的[10,20,-159,42,-10,.....]这样的数据。
(三)下载医保数据
接口下载zip文件数据,而且文件还那么大,几百M,utf8编码,pb根本无法处理,怎么办?
1、下载不是问题,咱有 uo_httpclient/uo_curl,request后数据在uo_httpclient.response.data里面。不要管文档上写的那些“流“啊什么的,那都是JAVA流X写的,你就当它是传过来的一坨数据就行了,就象那一坨什么似的就行了
2、zip不是问题,咱有 uo_zip。Uo_zip.open(uo_httpclient.response.data);uo_zip. Extract(“我的目录”)。加载数据,解压就完事。
3、几百M的utf8编码的txt文件,咋办?小case!!!
Uo_datawindowex.dwImportFile(dw_1,1,100,1,“文件名”,true,true)
轻松就搞进datawindow。
什么,从头开尾你说我没进行过utf8转码?你想多了吧,什么都要我来utf8转码,那还叫什么高效、便捷?
最后,从知乎抄来一小段文字,供参考:
提问问题,你是有求于人的那一方,定然要有一定的态度我这里遇到了一个问题,【问题描述】,我曾经试着:【思路细节】,但是不能得到解决,报错如下:【错误截图】,请问该怎么解决?一定的文字叙述加上出错截图,这是必要的,当然,不要废话连篇,内容要尽量精简而且非常重要的一点,不要一有问题就去问,要先自己去思考解决,baidu也挺万能的,实在自己解决不了的时候,再去进行求助不过在QQ群问问题有一个大问题,有些只知一二的萌新也会出来bb赖赖(并不是贬低他们),只是这个时候要合理听取建议,三人行必有我师,不过也会有真正的大佬会帮忙的。
大自在 QQ群:624409252
2021年12月12日