Python动态构建下拉列表-年份动态下拉选择

今天分享一下如何用Python脚本动态构建下拉列表选项,简单实用!
这里以年份为例,当我们需要在简单账表过滤框或者单据里面录入年份时,通常只能用整数字段或者文本字段,因为时间在流动,年份无法枚举出来,但是年份是有规律的,所以我们可以写一个Python脚本动态构建年份选项,一劳永逸!![]()
一、单据/简单账表过滤框构建年份下拉字段
C#插件可以参考:https://wenku.my7c.com/article/137250328441093888?productLineId=1
首先在单据上添加一个【下拉列表】,不用设置枚举类型,字段标识为:F_ora_Year。
在表单插件中注册如下Python脚本构建年份的下拉选项,参考代码如下:
----------------------------------------------------------------------------------------------------------------------------
#引入clr运行库
import clr
#添加对cloud插件开发的常用组件的引用
clr.AddReference('System')
clr.AddReference('System.Data')
clr.AddReference('Kingdee.BOS')
clr.AddReference('Kingdee.BOS.Core')
clr.AddReference('Kingdee.BOS.App')
clr.AddReference('Kingdee.BOS.ServiceHelper')
#导入cloud基础库中的常用实体对象(分命名空间导入,不会递归导入)
from Kingdee.BOS import *
from Kingdee.BOS.Core import *
from Kingdee.BOS.Core.Bill import *
from Kingdee.BOS.Core.Metadata import *
from Kingdee.BOS.Core.DynamicForm.PlugIn import *
from Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel import *
from System import *
from System.Data import *
from Kingdee.BOS.App.Data import *
from System.Collections.Generic import List
from Kingdee.BOS.ServiceHelper import *
def AfterBindData(e):
year=str(DateTime.Now.Year);#当前年份
lastYear=str(DateTime.Now.Year-1);#上年
#这里演示:动态显示今年和上年,如果有其他需求,可以自行修改
#注意!通常还需要获取所有历史单据中出现过的年份,都要添加进去。
#写一个select distinct查询就行了,将查询结果构建进去,不复杂 。
#否则,打开历史单据时,没有构建到下拉选项的年份将显示成空白。
enumList=List[EnumItem]();
enumItem = EnumItem();
enumItem.Caption=LocaleValue(year,2052);
enumItem.EnumId=year;
#这里可以这是下拉选项的有效性,true表示禁用 enumItem.Invalid=False;
#例如,2019年有单据,那么打开2019年的单据需要正常显示,所以就需要构建2019这个选项。
#但是新录入单据时,不再,允许选择2019了,就需要构建2019,但是要把2019设置成禁用。
enumItem.Value=year;
enumList.Add(enumItem);
enumItem = EnumItem();
enumItem.Caption=LocaleValue(lastYear,2052);#下拉选项显示标题
enumItem.EnumId=lastYear;#下拉选项值,记录到数据库
enumItem.Invalid=False;
enumItem.Value=lastYear;
enumList.Add(enumItem);
comboList = this.View.GetFieldEditor[ComboFieldEditor]("F_ora_Year", 0);
if (comboList <> None):
comboList.SetComboItems(enumList);
if(this.View.OpenParameter.Status == OperationStatus.ADDNEW):
this.View.Model.SetValue("F_ora_Year", year, 0);#如果单据打开为新增,设置年份默认值为当前年份
二、单据列表根据动态下拉字段过滤时,也要需要动态构建选项,否则将无法正常使用此字段过滤
这个步骤应用于在单据中自己构建了动态下拉字段的时候使用,如果仅仅是简单账表过滤,则不需要!
注意:这里是用来设置单据列表下拉字段过滤功能正常使用,所以构建的下拉选项一定是历史单据都用到过的选项值。
按照以上知识教程处理之后,只能在过滤弹窗里面使用这个下拉字段过滤,在快捷过滤还不能正常使用。
经过研究,可以通过列表插件完成,条件过滤框和快捷过滤都可以生效,列表插件Python脚本参考如下:
----------------------------------------------------------------------------------------------------------------------------
#引入clr运行库
import clr
#添加对cloud插件开发的常用组件的引用
clr.AddReference('System')
clr.AddReference('System.Data')
clr.AddReference('Kingdee
Python动态构建下拉列表-年份动态下拉选择
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



