在表单操作的服务端服务中,lambda表达式报错:字段 is not defined。原创
金蝶云社区-云社区用户8Ov17536
云社区用户8Ov17536
13人赞赏了该文章 2,181次浏览 未经作者许可,禁止转载编辑于2020年03月19日 20:33:16

在表单操作中,添加服务端服务,设置自动下推时,为了配合单据转换规则的选单条件策略,通常需要同时将下推控制条件作为自动下推的前提条件,而对于单据体的条件,通常需要用到Lambda表达式,判断"单据体是否含有满足XXX条件的行),可以像这样设置:len(filter(lambda x : (x.F_CanPayAmt >x. F_GLBCFKSQJE ), F_CXMX))> 0

但是,通常会报错,类似于下图的错误,然后看表达式也没问题,就是不知道为啥。

image.png

image.png

解决方法:

   我猜想,由于服务端在执行前提条件校验规则时,应该是在标准的操作服务插件事务中进行处理,懂插件开发的同事就知道,服务插件中默认不会加载单据的全部字段,只会加载一些单据编号、内码等关键信息,如果需要添加其他字段,需要在

OnPreparePropertys事件方法中先进行添加声明。为了方便快捷的处理这个问题,通过简单的Python脚本是比较好的方式。在对应的操作中,设置服务插件,注册Python脚本即可。卡了很久才发现是这个原因,因此写下这篇文章记录一下。

如下图所示:

image.png

Python示例如下:

import clr
clr.AddReference("System")
clr.AddReference("Kingdee.BOS.Core")
from Kingdee.BOS import *
from Kingdee.BOS.Core import *
from System import *

def OnPreparePropertys(e):
    e.FieldKeys.Add("F_CanPayAmt");
    e.FieldKeys.Add("F_GLBCFKSQJE");
    e.FieldKeys.Add("F_CXMX");

赞 13