单据转换--字段映射自定义表达式

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-16浏览:1

单据转换--字段映射自定义表达式

单据转换来源数据包是没有结构的,是通过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脚本表达式

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





老师,基于Python语法的特性(如下):

Python中对变量是否为None的判断_python 非none-CSDN博客

https://blog.csdn.net/qq_27361945/article/details/79433284


您此文中提到的【正确写法:  IfTrueKey  if  fBaseDataKey.FNumber ==null else IfFalsekey】,

通常我会简写成【正确写法:  IfTrueKey  if  fBaseDataKey else IfFalsekey】,

这样只要它是【''、0、False、null、[]、None、()、{}】或其他代表空的对象,就能执行else后面的语句了。


不过,我发现,这两年的新版本,我这这样简写python表达式,会报错;具体哪个版本我不知道,也不知道是不是我的错觉。但是,确实,我的老账套这样写没事,直升到这两年某个新版本就报错了。


如果确实是你们改了的话,不知道能不能改回来,支持简写。


Mark~

单据转换--字段映射自定义表达式

单据转换来源数据包是没有结构的,是通过sql脚本查询到的表数据集合,所以在写表达式时不能像实体服务,值更新服务那样使用实体的key来代表...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息