以下是引用easyppt在2024-12-30 21:06:28的发言:
很普通的json字符串啊,不知道你解析哪个节点 有问题
这个json字符串是 金蝶 返回来的? 看到formid,怎么觉得那么眼熟
金蝶一张单据,会关联十几个子表,才会得到完整的数据
上贴乱了哈。
没有想的那么复杂,玩VFP喜欢把很多问题想得太复杂,这是原生C扩展出VFP所带来的逻辑,现在都不这么玩了,发给你参考一下。。。。。?
?"2.单据查询 - 销售订单(SAL_SaleOrder): SAL_SaleOrder 待装入实体数据->"
m.lcErrorMsg = "" &&@地址回参
m.lcFormId = "SAL_SaleOrder" &&销售订单(SAL_SaleOrder)
m.lcOperateStyle = "ExecuteBillQuery" &&单据查询 区分大小写
*-- 建表 T_SAL_OUTSTOCK
Create Cursor SAL_SaleOrder( FDate C(26); && 日期
,FBillNo C(60); && 单据编号
,FCustId_FNumber C(60); && 客户
,FSalerId_FName C(200); && 客户名称
,FQty N(13,10); && 数量
,FPrice N(13,10); && 单价
,FAmount N(13,10); && 金额
,FSettleCurrId_FName C(60); && 结算币别名称
,FMaterialId_FNumber C(60); && 物料编码
)
*--获取对应表字段序列
Local lcFieNoLsts ;
, lcFieNo ;
, lnCount
For m.lnCount = 1 To Fcount( "SAL_SaleOrder" )
m.lcFieNo = Field( m.lnCount )
m.lcFieNo = Strtran( m.lcFieNo , "_" , "." )
m.lcFieNoLsts = Iif( Empty( m.lcFieNoLsts ) , "" , m.lcFieNoLsts + "," ) + m.lcFieNo
Endfor
*--构造JsonString 说明:
* FormId String 必录 SAL_OUTSTOCK 业务对象表单Id(必录)
* FieldKeys String 必录 需查询的字段key集合,字符串类型,格式:"key1,key2,..."(必录) 注(查询单据体内码,需加单据体Key和下划线,如:FEntryKey_FEntryId)
* FilterString Array 非必录 [] 过滤条件,数组类型,如:[{"Left":"(","FieldName":"Field1","Compare":"67","Value":"111","Right":")","Logic":"0"},{"Left":"(","FieldName":"Field2","Compare":"67","Value":"222","Right":")","Logic":"0"}]
* OrderString String 非必录 排序字段,字符串类型(非必录)
* TopRowCount Integer 非必录 0 返回总行数,整型(非必录)
* StartRow Integer 非必录 0 开始行索引,整型(非必录)
* Limit Integer 非必录 2000 最大行数,整型,不能超过10000(非必录)
* SubSystemId String 非必录 表单所在的子系统内码,字符串类型(非必录)
Text To m.lcJsonData Textmerge Noshow Pretext 1+2+4+8
{
FieldKeys:"<<m.lcFieNoLsts>>",
FilterString:"FDate >= '2024-12-30'",
FormId:"<<m.lcFormId>>",
Limit:100000,
OrderString:"FBillNo",
StartRow:0,
SubSystemId:"",
TopRowCount:0
}
Endtext
*-- SendBody 是通用方法
m.lcResult = oKDApi.SendBody( m.lcOperateStyle ,m.lcFormId , m.lcJsonData , @lcErrorMsg )
If !Empty( m.lcErrorMsg ) Then
*-- 系统性逻辑错误
?m.lcErrorMsg
Else
*-- 出错信息
If "Errors" $ m.lcResult Then
?m.lcResult
Return
Else
*-- 2.1 解析为表
*-- 2.2 将oJson数据插入Cursor
*-- 2.3 需要判定是否获取到了指定条件的全部记录
? " 2.1 反序化SaleOrder报文:"
Local loJsonSAL_SaleOrder
m.loJsonSAL_SaleOrder = oJson.decode( m.lcResult )
If !Empty( oJson.cError ) Then
?? "失败,原因:" + oJson.cError
Return
Else
?? "成功"
Endif
?" 2.2 解析为表:"
Local loError
Try
For m.lnCount = 1 To m.loJsonSAL_SaleOrder .nsize
Insert Into SAL_SaleOrder From Array m.loJsonSAL_SaleOrder.Array[m.lnCount].Array
Endfor
Catch To loError
Endtry
If Type( "loError.Message" ) == "C" Then
?? "失败,原因:" + m.loError.Message
Else
?? "成功"
Endif
Browse
Endif
Endif