13
2024
08
19:07:29

金蝶云星空:工作流中高级条件python的编写示例

在工作流设计中,连线条件和参与人设置条件上都可以使用高级页签的pyhton语句来实现。

下面对一些常用的python语句的编写进行了整理,希望能对设计者有所帮助。

首先,如果您写了一个python语句如果不知道可否正常运行,建议使用表达式测试进行测试。


2f0540f87320d7bd994ea8db4d7667dd_0100858155bea3984417b35740b9688ee944.png

下面开始举例:

一、流程变量:

1、发起人=XXX

python语句:WF.Originator == 'XXX',使用单引号,XXX为发起人名称;

2、发起人岗位=XXX

python语句:WF.OriginatorPost = 'GW000001',GW000001是岗位编码,高级条件中的岗位都是记录的岗位编码。

3、发起人岗位存在多个岗位时或不同发起人,判断发起人岗位

python语句:WF.OriginatorPost in['GW000001', 'GW0000012', 'GW000003',...],只要发起人岗位编码为其中的一个值都会为true;如果不在其中,使用 not in。

4、节点执行人为空

python语句:WF.GetApprovalActionExecutor(17) ='',单引号中间没有空格键;

节点执行人不为空:WF.GetApprovalActionExecutor(17) <>''

5、节点执行人岗位为空

python语句:WF.GetApprovalActionExecutor(17) ='';单引号中间没有空格键;

节点执行人岗位不为空:WF.GetApprovalActionExecutorPost(17)<>''


二、单据变量:

1、文本类型字段

文本字段为空:F_JD_Text1=null 

文本字段内容=XXXX:F_JD_Text1 = 'XXXX'
搜索字段中是否包含某段文本:XXXX:F_JD_Text1.find('XXXX') >= 0

多行文本字段

文本字段为空:XXXX=null or XXXX=" "

文本字段不为空:XXXX<>null and XXXX<>" "

2、复选框类型字段

勾选:F_JD_CheckBox1 = true;

不勾选:F_JD_CheckBox1 = false;

3、数值类型

字段值为1判断:F_JD_Decimal1 = 1

4、下拉列表类型

下拉列表字段,存储的是枚举项值,显示的是枚举项名称,公式中,需要与枚举项值进行比较
如F_JD_Combo1绑定的枚举类型为价格类型,有两个枚举项('1' : 到岸价; '2' : 出厂价)
F_JD_Combo1 = '1'

5、基础资料类型

因为基础资料字段有恨多属性,不能直接使用基础资料和期望的值进行比较。

需要明确的指定属性与常量值进行比较:
基础资料的ID:F_JD_Base1.Id = 100001
基础资料的编码:F_JD_Base1.FNumber = 'GW0001'
基础资料的名称:F_JD_Base1.FName = '采购员'

6、日期字段

字段值为日期型,不能与字符串常量进行比较。
可以采用公用函数,把日期转换为字符串进行比较:

F_JD_Date1.ToString('yyyy-MM-dd') = '2016-07-07'

如:日期字段等于当前日期:

FDate.ToString('yyyy-MM-dd') == WF.CurrentDate(WF.CurrentDate目前已经提供的变量)

当前日期-单据的创建日期大于2天

(datetime(WF.CurrentDate) - FCreateDate.Date).Days > 2

7、单据体字段

工作流高级条件的界面没有展示出单据体字段,但是通过写python是可以支持到的。

因为单据体是多行数据,需要lambda表达式,对单据体行,进行循环,逐行取基础资料字段值进行比较:

len(filter(lambda x: ( x.维修次数 == '2' ), FEntity))>0  维修次数是字段的标识,如果名称需要加Fname

表达式说明: FEntity是单据体标识,bos设计器中点击单据体,属性中显示的标识;

x 代表单据体当前行, 逐行判断单据体字段维修次数是否为'2',如果是,则计数加一; 循环结束,如果计数器大于0,返回真:即起码有1行,符合条件。


举例1:采购入库单单据体中仓库不等于XXX 


len(filter(lambda x: ( x.FStockId!=None and x.FStockId.FNumber <> 'CK001'), FInStockEntry))>0


例如:所有分录数量都大于15


len(filter(lambda x : x.FReqQty>15 , FEntity)) = len(FEntity) 所有分录数量都大于15


例如:所有分录有一条数量都小于10


len(filter(lambda x : x.FReqQty<10 , FEntity)) >0  


例如: 所有分录中最低的数量在10和15之间


min(map(lambda x:x.FReqQty, FEntity))  >= 10 and min(map(lambda x:x.FReqQty, FEntity)) =<15  


单据体字段为下拉列表类型时,单据体中有下拉列表字段为:收货 的行时


len(filter(lambda x : x.F_dev_Combo ='1' , FEntity))>0 ,1为单据体下拉列表收货的枚举项值

举例2:其他出库单单据体仓库名称等于CK作为条件:为true

len(filter(lambda x: ( x.FStockId!=None and x.FStockId.FName = 'CK'), FEntity))>0

举例3: 单据体日期字段只要有一行日期字段为空判断条件就为true

len(filter(lambda x:x.F_BHR_Date==null or x.F_BHR_Date=="" ,FEntity))>0

举例4:直接调拨单单据体调入仓库名称包含“仓”的情况为true

len(filter(lambda x: ( x.FDestStockId!=None AND x.FDestStockId.FName.find('仓')>=0), FBillEntry))>0

直接调拨单单据体调入仓和调出仓同时满足条件的情况

len(filter(lambda x: (x.FDestStockId!=None and x.FSrcStockId!=None and ((x.FDestStockId.Fnumber ="CK005"and x.FSrcStockId.Fnumber ="CK006") or (x.FDestStockId!=None and x.FDestStockId.Fnumber ="CK002"and x.FSrcStockId.Fnumber ="CK003"))), FBillEntry))>0

举例5:费用报销单据体所有分录的费用项目编码都为CI001,条件才是true

len(filter(lambda x: x.FExpID.FNumber = 'CI001', FEntity)) = len(FEntity)

举例6:采购入库单单据体中必须所有行的物料编码都是001

len(filter(lambda x :x.FMaterialId.FNumber ='001',FInStockEntry))  == len(FInStockEntry)

如果是单据体中所有行都要物料编码包含001

len(filter(lambda x :x.FMaterialId.FNumber <> null  and x.FMaterialId.FNumber.find('001')>=0, FInStockEntry))  == len(FInStockEntry)

举例7:采购入库单单据体中必须所有行中物料编码是001或者是002,不能是其他

len(filter(lambda x :x.FMaterialId.FNumber ='001',FInStockEntry)) + len(filter(lambda x :x.FMaterialId.FNumber ='002',FInStockEntry))== len(FInStockEntry)

举例8:费用申请单单据体申请金额大于500,小于等于1000时为true

len(filter(lambda x : x.FOrgAmount > 500 and x.FOrgAmount <= 1000,FEntity)) >0


8、多选基础资料类型

例如:判断发起人是多选基础资料中的任何一个值时为true:

WF.Originator in (map(lambda x:x.Name,F_MOB_MulBase))

23425c162f887697db0244d57b902ad2_0109cfec05ac5bdf4a528870ed66a86ffc23.png

多选基础资料中选择的个数条件判断,选择大于1个时下面语句true

len(filter(lambda x:x.Name,F_MOB_MulBase))>1

9、多选下拉列表字段python的写法

例如在单据头新增多选下拉列表字段,枚举类型选择如图:

759ed513c6ca43dd22ebec5c231ff897_0109d95b374c9d084fac914646cbac00dc19.png

需要在流程连线上判断多选下拉列表字段的值:"1" in F_PAEZ_MulCombo_qtr.split(',') or "4" in F_PAEZ_MulCombo_qtr.split(',') or "5" in F_PAEZ_MulCombo_qtr.split(',') ,当多选下拉列表选择1或者4或者5或者同时选都为true

其中1、4、5是枚举项值, F_PAEZ_MulCombo_qtr是多选下拉列表字段标识

d611dba37f01580f867e89cca7a95da8_0109cea2e50db69a4e89a36dd230fd495484.png






推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

本文链接:https://www.hqyman.cn/post/7542.html 非本站原创文章欢迎转载,原创文章需保留本站地址!

分享到:
打赏





休息一下~~


« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

请先 登录 再评论,若不是会员请先 注册

您的IP地址是: