WebAPI【财务凭证】核算维度赋值【分享】
金蝶云社区-云社区用户4u731234
云社区用户4u731234
3人赞赏了该文章 1.1万次浏览 未经作者许可,禁止转载编辑于2015年12月09日 17:50:42
summary-icon摘要由AI智能服务提供

本文介绍了K/3 Cloud系统中维度关联字段(弹性域)功能的增强,即现在可以直接按编码构造实现值的保存,无需事先保证内码值存在或设置为固定列。此功能在6.0大版本通过安装6.1补丁实现,5.0版本后续也将同步。同时,文章详细说明了维度关联字段在Web API系统集成调用中的赋值问题,并以财务凭证为例展示了通过JSON字串进行内码和编码赋值的实例。文章还推荐在调用接口前预先准备好数据,使用内码方式赋值以提高数据正确性和系统性能。

WebAPI 维度关联字段功能增强说明
维度关联字段 已改成统一直接按编码构造,即可实现“维度关联字段”值的保存。
用户无需保证内码值存在,或者修改为固定列的方式进行保存。

服务端会自动处理,
如有之前的维度关联字段的值组合,就会使用之前的内码,
如果没有,会按新传的组合值,新生成一个内码。

6.0 大版本,安装7月22号6.1的补丁即有此功能,
如果是5.0的版本,后续补丁也会进行相关功能的同步。

----以下是原帖,会对理解维度关联字段数据库表关系有一定帮助----
写本帖子的目的,
1、帮助小伙伴知道下 维度关联字段(弹性域)类型字段 ——K/3 Cloud的一处强大的特色功能。
2、解决Web API系统集成调用,此类型字段赋值问题。

3、可对核算维度、辅助属性、仓位等维度关联字段的帐表、报表相关取值有一定帮助。

本示例以财务凭证为原型,使用“蓝海机械演示帐套”,可以直接用本帖子提供的Json字串进行测试成功。

【财务凭证】(凭证 GL_VOUCHER)的“核算维度”字段,控件的元素实际类型即为“维度关联字段”类型。
也常会称之为“弹性域”类型字段。
弹性从字面上理解就是有弹性,能缩能伸。
此类型控件元素,可以看做是K/3 Cloud对几种有代表性的业务需求做的业务上的封装。

举个实际我们经常穿的衣服,
如果需要用数据表存储衣服的一条数据信息,我们该如何设计数据表呢,
可能比较容易想到 尺码、品牌、颜色、类型(男装、女装、童装……)、产地……
具体到某一件服装类型,可能还会到具体的细节描述,领口 是圆领还是尖领、袖口 纽扣数量…… n(n可能是无穷)。

衣服可以看做一种物料,物料的辅助属性。
还有本文帖子中用到的 财务凭证的核算维度。
仓库的仓位划分,一个仓库划分N多仓位,这个N多仓位下,还会有N多小仓位、之后又N多小小仓位、又…… 。

说到这里你可能会问,难道这些在K/3 Cloud 通通能够进行实现?
这里可以肯定的告诉你,答案是肯定的。
在K/3 Cloud系统中,此类业务需求被抽象成一个叫“维度关联字段”的元素类型。

论坛中也曾有人问到过
弹性域和普通的基础资料有什么差别?
https://vip.kingdee.com/article/285117970655862617

具体拖一个维度关联类型的字段,
“维度数据表单”可关联的下拉中,
我们可以看到

系统集成的弹性域赋值方式,论坛里也会经常有人问到。
针对【财务凭证】的核算维度,把Web API弹性域赋值方式,特写了此分享帖
如下:
本帖针是对凭证的核算维度字段赋值,对物料的辅助属性,及仓库的仓位同样参考价值
还是先上截图
第一种:按内码赋值(缺点:内码需要是事先存在的)


第二种:按编码赋值(缺点:弹性域字段需设置为“固定列”模式)

通过接口把数据保存到数据库后,我们通过接口保存返回的凭证内码'110405','110407'
进行数据的查询,可以看到:

附:测试的2段Json字串结构

[code] sFormId = "GL_VOUCHER";
//按内码赋值 FDetailID 100880 CUST0001/同益科技
//sContent = "{\"Creator\":\"String\",\"NeedUpDateFields\":[],\"Model\":{\"FVOUCHERID\":0,\"FAccountBookID\":{\"FNumber\":\"004\"},\"FDate\":\"2015-12-09\",\"FSystemID\":{\"FNumber\":\"gl\"},\"FVOUCHERGROUPID\":{\"FNumber\":\"PRE001\"},\"GL_VOUCHER__FEntity\":[{\"FEXPLANATION\":\"1按内码\",\"FACCOUNTID\":{\"FNumber\":\"1001\"},\"FDetailID\":100880,\"FDEBIT\":\"100\"},{\"FEXPLANATION\":\"2\",\"FACCOUNTID\":{\"FNumber\":\"1101\"},\"FCREDIT\":\"100\"}]}}";
//按编码赋值 FDetailID 100880 CUST0001/同益科技
sContent = "{\"Creator\":\"String\",\"NeedUpDateFields\":[],\"Model\":{\"FVOUCHERID\":0,\"FAccountBookID\":{\"FNumber\":\"004\"},\"FDate\":\"2015-12-09\",\"FSystemID\":{\"FNumber\":\"gl\"},\"FVOUCHERGROUPID\":{\"FNumber\":\"PRE001\"},\"GL_VOUCHER__FEntity\":[{\"FEXPLANATION\":\"11按编码\",\"FACCOUNTID\":{\"FNumber\":\"1001\"},\"FDetailID\":{\"FDetailID__FFLEX6\":{\"FNumber\":\"CUST0001\"}},\"FDEBIT\":\"100\"},{\"FEXPLANATION\":\"22\",\"FACCOUNTID\":{\"FNumber\":\"1101\"},\"FCREDIT\":\"100\"}]}}";
[/code]

其中:
第一种按内码赋值的关键代码段:
\"FDetailID\":100880

值100880 通过第三张截图可以看出是核算维度的一个内码。此种方式前面也有说内码是事先存在的

第二种按编码赋值的关键代码段:
\"FDetailID\":{\"FDetailID__FFLEX6\":{\"FNumber\":\"CUST0001\"}}

值CUST0001 是蓝海机械测试帐套一个客户的编码值(同益科技)。


上图固定列的方式是在这里设置的:


其实凭证核算维度字段弹出窗默认是这个样子的:

FDetailID__FFLEX6这个Key值
要看BOS IDE的字段命名,及结合T_BD_FLEXITEMDETAILV数据库维度表的查询 找出Key值

SQL语句:
[code]--凭证 根据导入Id 数据库中直接查询出的数据
select * from T_GL_VOUCHER
where FVOUCHERID in ('110405','110407')
select FDETAILID, * from T_GL_VOUCHERENTRY
where FVOUCHERID in ('110405','110407')

select * from T_BD_FLEXITEMDETAILV--核算维度数据表 --FDetailID 100880 CUST0001/同益科技[/code]

另附:[code]select * from T_BD_FLEXSITEMDETAILV--辅助属性数据表
select * from T_BAS_FLEXVALUESDETAIL --值集资料维度数据 仓位数据表[/code]

至此:相信遇到所有维度关联字段(弹性域)类型的单据字段的WebAPI方式赋值,相信你都可以做到了。

1、什么你想说不想改变原配置单据的维度关联字段的“弹出窗”模式,因为这会影响到用户的界面操作体验。
提醒下 别忘了K/3 Cloud单据在有强大的扩展功能的同时,也是有继承方式的
BOS IDE中右键


什么 新来的小伙伴继承及扩展还是第一次听说?
这里有个经典帖
K/3 Cloud BOS表单的继承和扩展的区别:
https://vip.kingdee.com/article/15066

2、什么还有其他的 该没有其他的了

来个终结吧:
比较推荐第一种按内码的方式进行维度关联字段赋值
即在调用接口前,把需要的数据在系统里都事先准备好,而不是临时去新增。
原因:
1、从数据正确性考虑 主要是维度关联字段想按编码赋值,在接口里把数据控制好不是一件易事,很容易就出现垃圾数据(界面上是由展现层计算的关联的弹性域不同类型可选值及锁定性,因此就很难出现垃圾数据)。
2、从性能角度考虑 按内码方式赋值,一定是有性能上的提高的,而且对性能提高还不容小觑,尤其是对此种类型的字段大量数据的弹性域字段解析效果会更为明显。