![[python]表单插件-显示隐藏列](https://media.my7c.com:19000/files/202409/16/ba98a543-f532-4bf0-890c-7b7f8d389ade.jpg)
本文介绍如何用Python代码,以实现在简单报表的显示隐藏列的功能
## 定义报表列
定义了一个DataList数组,其中包含了想要在报表中显示的列名(例如“FNumber”、“FID”和“FJOINDATE”),以及一个DataList2数组,用于存储列的中文标题(例如“员工编号”、“员工ID”和“入职日期”)
```python
DataList = ["FNumber", "FID", "FJOINDATE"]
DataList2 = ["员工编号", "员工ID", "入职日期"]
```
## 在过滤框的页签[显示隐藏列]显示
1. 复制元数据:从当前视图的开放参数中复制表单的元数据,以避免直接修改原始数据。
2. 获取布局信息:从复制的元数据中提取当前的布局信息,这是为了能够修改列的显示状态。
3. 处理列信息:检查布局信息中是否包含FieldShowHide控制键,如果存在,则遍历DataList数组,为每一列创建一个Field对象,并设置其名称、字段名和实体键。随后,将这些Field对象添加到布局信息的字段列表中。
4. 更新布局信息:将经过修改的布局信息赋值给事件参数e的LayoutInfo属性,确保这些更改能够被应用到报表的最终布局中。
```python
def OnSetLayoutInfo(e):
# 复制元数据
currmetadata = ObjectUtils.CreateCopy(this.View.OpenParameter.FormMetaData)
# 获取布局信息
layout_info = currmetadata.GetLayoutInfo()
# 检查并处理列信息
columns = layout_info.GetAppearance(CommonFilterConst.ControlKey_FieldShowHide)
if columns is not None:
for key, caption in zip(DataList, DataList2):
field = Field(key)
field.Name = LocaleValue(caption)
field.FieldName = key
field.EntityKey = ""
columns.FieldList.Add(field)
# 更新布局信息
e.LayoutInfo = layout_info
```
## 结果
在过滤条件框注册Python插件


## 完整代码
```python
"""
表单插件_显示隐藏列
"""
import clr
clr.AddReference("System")
clr.AddReference("Kingdee.BOS")
clr.AddReference("Kingdee.BOS.Core")
clr.AddReference("Kingdee.BOS.Contracts")
clr.AddReference("Kingdee.BOS.DataEntity")
clr.AddReference("Kingdee.BOS.ServiceHelper")
clr.AddReference("Kingdee.BOS.App")
from Kingdee.BOS import *
from Kingdee.BOS.Orm import *
from Kingdee.BOS.Orm.DataEntity import *
from Kingdee.BOS.ServiceHelper import *
from System.ComponentModel import *
from Kingdee.BOS.JSON import *
from Kingdee.BOS.Core.CommonFilter import *
from Kingdee.BOS.Core.CommonFilter.PlugIn import *
from Kingdee.BOS.Core.DynamicForm.PlugIn.Args import *
from Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel import *
from Kingdee.BOS.Util import *
from System.Collections.Generic import *
from Kingdee.BOS.Core.Metadata import *
from Kingdee.BOS.Core.Metadata.ControlElement import *
from Kingdee.BOS.Core.Metadata.FieldElement import *
DataList = ["FNumber", "FID", "FJOINDATE"]
DataList2 = ["员工编号", "员工ID", "入职日期"]
def OnSetLayoutInfo(e):
currmetadata = ObjectUtils.CreateCopy(this.View.OpenParameter.FormMetaData)
_currLayoutInfo = currmetadata.GetLayoutInfo()
columns = _currLayoutInfo.GetAppearance(CommonFilterConst.ControlKey_FieldShowHide)
if columns != None:
for i in range(0, len(DataList)):
newField = Field(DataList[i])
newField.Name = LocaleValue(DataList2[i])
newField.FieldName = DataList[i]
newField.EntityKey = ""
columns.FieldList.Add(newField)
e.LayoutInfo = _currLayoutInfo
```