单据转换--字段映射自定义表达式原创
金蝶云社区-eris
eris
55人赞赏了该文章 558次浏览 未经作者许可,禁止转载编辑于2024年05月30日 16:56:42

单据转换来源数据包是没有结构的,是通过sql脚本查询到的表数据集合,所以在写表达式时不能像实体服务,值更新服务那样使用实体的key来代表集合数据源;单据转换用关键字“Sources" 代表来源数据包集合,通过Sources得到唯一的字段所在的实体内码和字段值集合。

1、单据合并汇总值

错误写法:sum(fqty) ,运行时会报fqty不是一个集合

正确写法:sum(Sources.fqty)

2、单据合并或分录合并连接字符

错误写法:",".join(fstrKey), 虽然不会报错,但运行是只是第一个数据包中的值的两个字母的连接,因为字符串每个字母可以看作集合项。

正确写法:",".join(Sources.fstrKey)

去重复写法:",".join(set(","join(Sources.fstrKey).split(","))) ,  set函数去重复值

带过滤去重复:",".join(set(",".join(filter(lambda x: x<>null,Sources.fstrKey)).split(","))) , 其中filter为过滤函数,lambda 为具体执行的匿名函数

3、很多时候需要if...else的表达式

1)如果判断的字段是简单字段直接写:  IfTrueKey  if  fSimpleKey =="" else IfFalsekey

2)如果判断的字段是基础资料,使用fBaseDataKey ==null 做判断的时候fBaseDataKey 返回的是一个转换对象,永远都不会为null,  这里要使用基础资料的里面一个字段,一般使用基础资料编码就可以, 

正确写法:  IfTrueKey  if  fBaseDataKey.FNumber ==null else IfFalsekey

3)如果判断使用基础资料中的基础资料,比如:  fBaseDataKey.FOrgId ==123456,这个fBaseDataKey.FOrgId返回的是 基础资料名称,所以正确的写法是:  fBaseDataKey.FOrgId ==“莫某组织”

4)赋值,如果使用的是基础资料中的基础资料字段,比如:    fBaseDataKey.FOrgId   if  fBaseDataKey.FOrgId =="莫某事业部" else   fBaseDataKey.FOrgId2, 则得到的最终结果是组织的名称,故基础资料中的基础资料字段是不能为基础资料赋值的。

    

4、注意事项

如果是选单,并且给单据头字段赋值,每次都会覆盖,这时候可能需要两个字段,一个隐藏字段得到当前来源值,另外一个字段使用服务策略中的服务赋值,把隐藏字段的值加上已存在的值合并赋值。

5、参考帖子

python脚本表达式

单据转换.字段映射关系.公式.去重拼接




赞 55