以下是引用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