/******************************************************************************************************
* 特别注意:自2021年8月24日起,因pbjson.dll与官方最新版本DLL重名,特此更名为 pbidea.dll,内部功能完全兼容。
* 原有版本升级,只需要将 pbidea.dll 改名为 pbjson.dll ,然后覆盖,即可!
******************************************************************************************************/
2019/11/26
1.修改 true/false 类型读写的BUG
2.修复导出JSON时取 decimal 列的一个BUG
3.dwExportJson 增加了一个参数,DWItemStatus : 0:NotModified! , 1ataModified! ,2:New!,3:NewModified! ,可以指定只导出这些状态的数据
2019/11/28
1.数字型导入DW的一个BUG
2.第一行为null的字段,后面默认都当长度为20的字符串处理
2019/11/29
1.(*)修复内存泄漏的BUG
2.(*)增加两个模式,直接从文件导入dw/ds,和直接将 dw/ds存为文件,几万条数据秒读秒写.
2019/11/30
全面优化,10W条记录,秒读秒写
2019/12/2
增加一组函数,使用方法很简单:
/******************************************************************************************************
* 特别注意,这组函数必须放在 datawindow/datastore 的继承类中 Local External Function 里面声明 !!!
******************************************************************************************************/
//此函数放在 dw/ds 的继承类中使用
//使用方法,在dw/ds 的继承类中 Local External Function 里面声明此函数,然后直接就可以 dw_1.ImportJson("data.json")
function long ImportJson(string jsonFile) system library "bJsonA.dll" alias for "ImportJson"
//将datawindow/datastore 数据生成JSON,返回生成条数,status : 0:NotModified! , 1ataModified! ,2:New!,3:NewModified!
//参数jsonFile为直接生成到文件
//3个参数,可以任意组合,自己声明吧
//使用方法,在dw/ds 的继承类中 Local External Function 里面声明此函数,然后直接就可以 dw_1.ExportJson("data.json")
function long ExportJson(string jsonFile) system library "bJsonA.dll" alias for "ExportJson"
function long ExportJson(int status) system library "bJsonA.dll" alias for "ExportJson"
function long ExportJson(int status ,string jsonFile) system library "bJsonA.dll" alias for "ExportJson"
//只导出listColumns指定的所有列数
function long ExportJson(string listColumns[]) system library "bJsonA.dll" alias for "ExportJson"
function long ExportJson(string listColumns[],string jsonFile) system library "bJsonA.dll" alias for "ExportJson"
使用方法很简单:
dw_2.ImportJson("json5.txt")
dw_2.ExportJson("export.txt")
给你原生无异。
2019/12/4
增导入列映射功能。
第一步,设置印象 ,印射方式为 "json关键字":"dw/ds列名"
uo_json jsmap
jsmap.set("UnitPrice","je") ,即将 json 的 UnitPrice 映射到 datawindow.je 列
第二步
ll_rows = js.dwImportJson(dw_1,jsmap)
或
ll_rows = js.dwImportJson(dw_1,"json3.txt",jsmap)
导入,并使用映射关系指定
两种情况下映射无效:1.动态创建DW、DS。2.datawindow里存在JSON关系字列,依然以关键字列导入。
2019/12/5
增加压缩、解压缩函数。
两组,分别基于 lzma 和 zlib
2019/12/6
修改 Get longlong double real deicmal 时不能取所有数值的BUG
2019/12/16
1.//xml 转 json
function boolean JsonFromXML(string xml) system library "bJsonA.dll" alias for "JsonFromXML"
2.增加对PB8支持
2020/02/16 重要改进
1.增加 / 支持 ,方便存取子JSON和子数组。支持增、删除、改、查。
!!!!注意:数组序号是从 0 开始
原串:{
"name":"黑黑",
"js":{
"gh":"320124",
"bbb":12.34,
}}
执行:
js.Set("/js/app/city/0","南京")
js.Set("/js/app/city/1","北京")
js.Set("/js/app/city/2","上海")
js.Set("/js/app/city/3","广州")
js.Set("/js/app/city/4","深圳")
得到串:
{
"name":"黑黑",
"js":{
"gh":"320124",
"bbb":12.34,
"app":{
"city":[
"南京",
"北京",
"上海",
"广州",
"深圳"
]
}
}}
同理,要获取第一个数据项,可以:
js.Get("/js/app/city/0",ref ls_city)
以上方法同样支持子项!!!
2020/02/20
1.增加函数 FromSQL,根据SQL语句直接生成JSON
2.增加了一个根据主表和从表DW直接生成JSON的DEMO
2020/02/26
增加了 uo_httpclient 对象,测试版本。
2020/03/09
增加了函数 SetOption 用于设置一些选项
SetOption("rowid",true/false) 是否导出行号
SetOption("displaydata",true/false) 导出显示值还是原始值
2020/03/10
增加上传函数,支持多文件上传
2020/03/16
1.增加了加密、解密、编码函数库。
2.增加了表单提交功能函数
2020/03/19
增加FTP功能组件
2020/03/23
1.uo_json 增使用 any 型直接取键值
2.uo_json GetKeys 增加参数 ref ls_types[],将 keys 和 types 分开分别取到不同数组中
3.uo_ujson GetType 返回当前json类型
4.其他部分 uo_json 增强
2020/04/25
修复BUG:uo_json 取值时,使用进程变量取值失败
我这两天测试了下FTP发现有以下一个小BUGS:
下载方法[ ftpGet ],下载过程中如果真实情况是不成功[例如断网,文件不存在],
此方法[ ftpGet ]都会返回True而非False
而[ ftpPut ]方法则会相应的返回正确的结果[上传中途断网]
2020/04/25
增加 uo_map
2020/04/28
增加 uo_zip
2020/04/30
改进 dwExportJson 函数,导出时指定列方式,排除或者包含,并进行列名称关联,实现JSON KEY 大小写敏感,而不是全部小写
2020/05/23
1.uo_json.SetOption函数增加 "valueasstring" , true/false,是否所有DW、DS值都作为字符串导出,默认为 false
2.uo_crypto.FromTimeStamp , uo_crypto.ToTimeStamp 增对 datetime类型直接支持
3.增加函数uo_crypto.AlignKey,自动修正密钥的格式
function string AlignKey(string key,boolean opensslKey,boolean privateKey) system library "bJson.dll" alias for "AlignKey"
4.其他已发现的小BUG
2020/5/25
增加数据连接对象(uo_database)、记录集对象(uo_recordset)、字段对象(uo_field),支持目前几乎所有关系数据库。
2020/6/2
修正 uo_zip 中文路径名问题
2020/6/12
1.增加了一个 ping 函数,提供类似操作系统 ping 命令的功能,可指定超时和 ping 次数。
2.增加 uo_hook 对象,提供 HOOK DLL API 的功能,可以完成一些特别任务。
2020/6/18
增加 uo_string 对象,提供一些远超 string 提供的功能。
2020/6/19
修改 JSON 在多线程下与DW交互的机制。
2020/6/21
增加 pdf 阅读、转图片、转文本支持
2020/7/8
增加PDF转存、放大缩小、旋转、签名等功能
#define BUTTON_PAGE_PREV 201
#define BUTTON_PAGE_NEXT 202
#define BUTTON_ZOOM_LARGE 203
#define BUTTON_ZOOM_SMALL 204
#define BUTTON_ROATE_LEFT 205
#define BUTTON_ROATE_RIGHT 206
#define BUTTON_SAVE_AS 207
#define BUTTON_PRINT 208
#define BUTTON_FIND 209
#define BUTTON_SIGN 210
#define BUTTON_ABOUT 211
在 pbjson.ini 里的 [pdfToolBar]下面,可以使用上面的定义,定义自己的工具条文本
例如
[pdfToolBar]
201=谬总需求真变态
202=谬总需求确实变态
2020/7/10
增加 sftp 客户端支持
加入datawindow鼠标拖拽功能
2020/7/13
增加了 uo_mail 对象
1.提供 SendMail 函数用于发送邮件。
2.提供 RecvMail 函数用于接收邮件,收到的邮件保存在当前目录下的 mail 目录里。
2020/7/29
1.增加 uo_wait_box 对象,提供等待时的多线程等待动态图标对话框
2.增加 uo_xml , uo_xml_node , uo_xml_attribute 对象,用于生成和解析 XML,提供 json2xml,datawindow 导入 xml 功能.
3.改进了 pdf 签名
2020/7/30
1.改进 uo_httpclient ,自动解码 application/xml 到uo_xml对象
2.对Content-Encoding:gzip 进行自动解压
2020/8/17
1.增加 uo_image 对象,可以对 bmp,jpg,png 图片做一些常规格式转换、base64解码、显示、简单特效等。
2.增加 uo_websocket_server 对象。
!!!!!!!!!!!!!!!!特别注意,这是一个重大功能
uo_websocket_server 对象可提供基于PB实现的 web server 和 websocket server 服务,直接可以用PB代码实现 iis + C# (JAVA,PHP) 实现的功能,直接就可以使用 pb 来写 web api.
结合 uo_database,uo_recordset,uo_field 对象使用,效率奇高。
本功能单线程版本免费,多线程版本需要授权费用。
2020/8/19
1.PSS增加基于HTTP的布署和增量更新机制
2.增加两个程序,用于支持基于HTTP的布署和增量更新。
3.增加取硬盘序列号、CPU序列号函数
2020/8/25
修复PSS部分BUG,改进了基于HTTP的布署和增量更新,增加增量上传功能。
2020/8/27
uo_image 对象中,增加二维码和条码生成函数。生成后,可以另存为图片,或者显示到其他窗口上。
2020/8/29
1.uo_pdfview 增加多个PDF合并成一个PDF的功能
2.支持文件HTTP方式,通过 form 提交文件,默认保存在当前目录的 tmp 子目录下
2020/9/2
修正 pss 下载大文件失败
2020/9/24
增加国密标准 SM2 加密、解密,签名、验签
2020/10/24
增加 websocket 客户端
2020/10/26
增加websocket 客户端心跳断线检测
2020/11/2
改进websocket 客户端心跳断线检测,同时增加连接参数,可以在连接时进行身份识别
2020/11/17
修改 uo_json,dwimportjson 时,将第一行值为 null 的列,默认为 string 类型
2020/11/20
增加了一个 socket 客户端
2020/12/02
增加 7z 压缩支持,同时可以解压 .zip .cab ,iso
修改了 zip 解压乱码问题
2020/12/07
1.把 pbPaint功能合并进来
2.把 fchart 合并进来
3.添加了 uuid ,GetIP 函数
4.添加了 QueryVar 函数,可以自己取得调试变量信息
2020/12/09
国家医保接口需要的一个功能
增加 JAVA 的BLOB转字节序函数 BlobToByte 和 ByteToBlob
增强JSON
uo_json js
js = create uo_json
js.set("in","20201208102640.zip",js.SetBytes)
//或者 js.set("in",blob_data,js.SetBytes)
destroy js
这样可以直接把一个文件或blob数据在字节序的形式放进JSON。
2020/12/10
修复一个PSS取base64参数的BUG
2021/1/25
1.提供全局选项,将deExportJson 导出的 NULL指定为 ""
2.uo_image 增加 GetSize 函数。
3.修复个别偶发性小BUG。
2021/7/14
1.修改了若干BUG
2.在多线程环境下运行得到有效支持
3.提供国家医保相关技术支持
2021/8/16
1.增加了 dbf 导出与导入为 json 功能
2.增加 asn1 编码解码功能
3.增加 redis 客户端功能
2021/9/7
增加了基于 libcurl的 httpclient 对象 uo_curl ,可以支持 tls1.3,摆脱原来 uo_httpclient 受操作系统限制,导致win7不能访问某些服务的问题。
2021/9/10
修复一个国家医保接口BUG:上传大文件时,有一定可能导致内存越界,程序崩溃。
2021/9/16
1.增加了 uo_curl 异步下载支持
2.增加了 JWT 分发token和验签对象 uo_jwt
3.增加了大文本文件导入DW,兼容 ansi,utf8,unicode 各种编码,不用转换
2021/9/23
1.uo_json set 函数,可以接受 date,time datetime 类型参数
2.uo_json get 增加了根据索引取 键值对
3.uo_json 增加了一个遍历示例。一直以来许多人不知道如何遍历 uo_json
4.修复了 utf8 编码检测的一个BUG。
5.修复 uo_httpclient.response.timeout 取不到设置值的问题
6.excel操作已升级到 libxl 4.0.0.0
2021/9/28
1.增加一组函数:简繁体互转、取拼音首字母、全角半角互转、金额大写、比较字符串相似度
2.修改了uo_xml一个按名称取节点属性会闪退的 BUG
3.websocket 服务端和客户端,增加了发送消息类型参数,可以指定发blob和string消息
4.修复了内部一个 pkcs7 对齐的BUG。
2021/10/11
1.增加了 kafka 生产者客户端功能
2.增加了 kafka 消费者订阅客户端功能
3。uo_json 增加 ToText 函数,用于生成格式化文本内容。
2021/10/14
1.uo_json 增加 GetString GetDobule GetLong GetLongLong 函数
2.修改了医保接口函数 YiBao_Request 自动进行 SM4解密的一个BUG。
2021/10/15
1.增加取拼音首字母汉字量,由原来 GB2312扩展到GBK计2W多汉字。
2.改进了 dwImportFile 函数,该函数导入大医院下载的txt文件。增加了2个参数:
boolean removeNull,对 null 这样的字段替换为空
boolean autoTrunc,对超出字段长度的文本,直接进行截断处理,避免导入字段内容长于dw定义长度,导致报错。
3.
//根据指定标志,指定长度,取一个序号.本函数功能主要是在服务端,提供一个乱序,但不重复的单据号
function string GetRandSerial(string flag,int numLen) system library "bIdea.dll" alias for "stringGetRandSerial"
2021/10/29
修复了几个BUG
2021/10/31
1.uo_pdfview printf 函数增加打印到指定打印机参数
2.增加列举打印机函数,可查询所有已安装打印机,及打印机实时状态
2021/11/10
增加语法高亮、折叠块、行号控件
2021/11/16
1.增加ReadObjectNames和ReadObjectContent两个函数,读取PBL PBD(也可以是PB编译的DLL,EXE) 里面的对象内容,包括资源文件。
2.uo_json 增加 WriteJsonFile 字符编码参数,可以把JSON存为 utf8,ansi,unicode(utf16)三种类型的文件
2021/11/17
1.uo_painter,uo_image,uo_json.parsefile 可以直接使用内置资源
2021/11/24
uo_httpclient uo_curl 两个对象,给 SetParam SetHeader 函数增加了 uo_map 类型参数
作用:
需要对类似 a=aa&b=bb&c=cc 这样的参数排序并签名时非常有用
uo_map m;m = create uo_map
m.set("c","cc");m.set("b","bb");m.set("a","aa"); //会自动排序
ls_text = m.join("&") //join后得到字符串 "a=aa&b=bb&c=cc" ,然后根据文档要求对这个字符串进行签名
httpclient.setParam(m) or curl.setParam(m) 把参数添加到对象
这样使用方便
2021/12/12
1.修改大文件导入的一个bug
2.添加函数ReadResourceList,可以解析PBL源码中引用的文件,形成一个字符串列表,方便生成 .pbr 文件。文件大于2M不添加到列表,uo_utils基于此添加了makepbr函数
3.增加 uo_tranicon对象,方便任务栏图标和弹出菜单应用
2021/12/17
1.增加打印机自定义纸张功能
2021/12/18
1.增加对gif格式支持
2.添加表达式计算,以及一个计算器控件
2021/12/21
增加socket client 异步支持
2021/12/25
增加可视对象子类化功能对象 uo_subclass
2021/12/31
增加加了 uo_database_pool 对象。用处:可以初始时批量建立数据库连接,PSS线程里可以通过poolname 取得空闲数据库连接。适用于saas之类连接多数据库场合。
1.启动PSS服务时,uo_database_pool pool; pool.CreatePool("sqlserver",dbsql);; pool.CreatePool("oracle",dbora); //分别创建8个 sql和ora的连接,名称可以自己起,从池中取的时候也要用同样的名称。
2.PSS线程里 uo_database_pool pool; uo_database dbsql,dbora; dbsql = pool.queryPool("sqlserver"); dbora = pool.queryPool("oracle");,然后可以使用数据库实例对象操作数据
操作完成后,要把这个数据实例还给连接池,pool.GiveBackPool(dbsql) ;pool.GiveBackPool(dbora) ; 或者直接 destroy dbsql; destroy dbora; ,默认情况下,函数运行结束,自动也会销毁对象,也就自动还给数据库池
3.停止服务后 uo_database_pool pool; pool.destroyPool(); 销毁数据库连接池,释放所有数据库连接。
4.连接池内的连接如果10分钟没有被申请使用,会自动被断开。
2022/01/01
添加阿里 csb 签名方法
PB版本用法:
uo_json js
js = create uo_json
js.set("secretKey","4txZk+mhrU/JMLXmyP5m3S4Rc20=") //签名密钥,base64形式
js.set("_api_access_key","3b78a66b1bb04183a0215b7b8e6e18e9")
js.set("_api_name","hssServives")
js.set("_api_timestamp",0) //设置为0,我会自动计算一个,然后放JSON里返回
js.set("_api_version","1.0.0")
js.set("base64key",true) //是否对 secretKey作base64解码处理
//如果有其他参数需要放一起签名,请放到子JSON里去
js.set("/other/mv1","mv1")
js.set("/other/mv2","mv2")
js.set("/test/name","张三")
uo_crypto c
c = create uo_crypto
string ls_sign
ls_sign = c.CsbSignature(js)
MessageBox(ls_sign,js.tostring(true,false,true))
标准版用法:
string ls_jsonIn,ls_jsonOut
int li_len
uo_json js
js = create uo_json
js.set("secretKey","4txZk+mhrU/JMLXmyP5m3S4Rc20=") //签名密钥,base64形式
js.set("_api_access_key","3b78a66b1bb04183a0215b7b8e6e18e9")
js.set("_api_name","hssServives")
js.set("_api_timestamp",0) //设置为0,我会自动计算一个,然后放JSON里返回
js.set("_api_version","1.0.0")
//如果有其他参数需要放一起签名,请放到子JSON里去
js.set("/other/mv1","mv1")
js.set("/other/mv2","mv2")
js.set("/test/name","张三")
ls_jsonIN = js.tostring()
li_len = 4096
ls_jsonOut = space(li_len)
csb_signature(ls_jsonIn,ls_jsonOut,li_len)
js.parse(ls_jsonOut)
MessageBox("",js.tostring(true,false,true))
2022/1/4
添加.wav格式文件合并和播放函数,数组成员可以是 n 个,一些基础采样率使用第一个数据项内容
any ls_wav[]
blob data
uo_file file
file = create uo_file
ls_wav[1] = "../demores/wav/1.wav"
data = file.blobfromfile("../demores/wav/2.wav") //blob数据,此处从文件生成blob,实际应用中可以网上下载,可以从数据库中 selectblob
ls_wav[2] = data
uo_wavfile wav
wav = create uo_wavfile
data = wav.mergefile(ls_wav[])
wav.play(data)
destroy wav
2022/1/16
增加datawindow直接显示条码、二维码方法
步骤1:在DW上放置一个计算字段,名称自定,表达式是什么不重要,可以直接输入""
步骤2:对DW进行设置,SetDatawindowCoder。
具体参考uo_tabpage_code
2022/01/18
多屏信息,可支持多显示屏
2022/01/21
增加MQTT客户端
2022/01/23
1.增加了 uo_messagewidget 组件
2.修复类似 /api/order/report 这样纯uri不能响应on_http 的bug
2022/02/10
1.PSS 支持 https wss,不过需要单独编译DLL替换。找群主要。
2.增加 uo_monitor.RotateMonitor(int angle) , 旋转显示屏 ,参数为 270 180 90 0 或 3 2 1 0
2022/02/11
1.把一个 datawindow 内容以虚拟打印的方式输出到PDF,或者 bmp,jpg,png类型文件,具体输出类型以文件扩展名区分
function boolean PrintDatawindow(datawindow dw,string fileName) system library "bIdea.dll" alias for "dwPrintDatawindow"
function boolean PrintDatawindow(datawindow dw,string fileName,uo_json pdfoption) system library "PbIdea.dll" alias for "dwPrintDatawindow"
uo_pdfmaker pdf
pdf = create uo_pdfmaker
pdf.printdatawindow( dw_1,"tmp\dw.jpg")
pdf.printdatawindow( dw_1,"tmp\dw.png")
pdf.printdatawindow( dw_1,"tmp\dw.bmp")
uo_json joption
joption = create uo_json
//一些创建信息,可选
joption.set("author","作者")
joption.set("creator","创建者")
joption.set("producer","生产工具")
joption.set("title","标题")
joption.set("subject","主题")
joption.set("keywords","关键字")
//使用密码,可选
joption.set("owner_password","owner123")
joption.set("user_password","user123")
pdf.printdatawindow( dw_1,"tmp\dw.pdf",joption)
destroy joption
destroy pdf
2022/02/22
1.更新了 ping 函数,增加了ping指定端口功能
2.修复 uo_database 之 sqlite不能使用中文路径
3.dw2pdf 完善了图表导出错位问题
2022/03/18
增加系统已安装输入法获取和切换到任意输入法。支持XP、WIN7、WIN8、WIN10及以上版本
//获取输入法列表
function int GetInputList(uo_json inputList) system library "PbIdea.dll" alias for "GetInputList"
//切换输入法
function boolean InputChange(string inputID) system library "PbIdea.dll" alias for "InputChange"
2022/4/14
添加 uo_yibao.importYiBaoZip 函数。
|