流程表单配置时打印模板如何显示数据字典字段的显示值?
2016-12-26 17:01
218 查看
问题:
如图表单使用打印模板进行打印
显示的字段有些是从数据字典取值的,存在数据库的是值而不是显示文本,如何才能取到显示值?
打印模板是一个静态的html,字段绑定是通过{字段编码}来绑定的。子表数据要加<Row>{子表.字段编码}</Row>
关于数据字典中的值,在提交保存表单时,数据会写入到业务表中。如果你存入的是一个编码代号之类的值。却要显示正常的文字的话。
目前我不知道H3bpm是怎么处理的,刚看了SheetPrint.aspx.cs文件,关于数据字典没有处理。
综上所述,所以我建议把数据字典的编码和要显示的文字写成一样。
或者有能力者可以修改SheetPrint.aspx.cs,对值进行判断查询替换。
根据审批意见获取代码的修改而来,代码如下
增加获取字典函数
private Dictionary<string, EnumerableMetadata[]> DicMetadata = new Dictionary<string, EnumerableMetadata[]>();
/// <summary>
/// 获取数据字典
/// </summary>
/// <param name="category" />数据字典名称</param />
/// <returns></returns>
private EnumerableMetadata[] GetEnum(string category)
{
string key = category;
if (DicMetadata.ContainsKey(key)) return DicMetadata[key];
EnumerableMetadata[] byCategory = this.Engine.MetadataRepository.GetByCategory(key);
DicMetadata.Add(key, byCategory);
return byCategory;
}
主表字段修改代码
GetFieldValue函数的
case Data.DataLogicType.String:
case Data.DataLogicType.ShortString:
下增加如下代码
string category = string.Empty;
if (param.ToLower().StartsWith("enum:"))
{
category = param.Substring(param.IndexOf(":") + 1);
var metadata = GetEnum(category);
if (metadata != null)
{
result = metadata.FirstOrDefault(x => x.Code.Equals(data.Value)).EnumValue + string.Empty;
break;
}
}
result = data.Value + string.Empty;
break;
打印模板中如下方式使用{PRM_Type.Enum:请购类型} 。Enum用于标识数据字典字典,后面带数据字典的名称,不要分号。
明细表修改代码
需要修改GetBizObjectFieldValue函数:
PropertySchema property = obj.Schema.GetProperty(field);
下增加
string param = string.Empty;
if (property == null && field.IndexOf(".") > -1)
{
// 处理field逻辑
param = field.Substring(field.IndexOf(".") + 1);
field = field.Substring(0, field.IndexOf("."));
property = obj.Schema.GetProperty(field);
}
case Data.DataLogicType.String:
case Data.DataLogicType.ShortString:下增加
string category = string.Empty;
if (param.ToLower().StartsWith("enum:"))
{
category = param.Substring(param.IndexOf(":") + 1);
var metadata = GetEnum(category);
if (metadata != null)
{
result = metadata.FirstOrDefault(x => x.Code.Equals(obj[field])).EnumValue + string.Empty;
break;
91c9
}
}
result = obj[field] + string.Empty;
break;
打印模板中如下方式使用{PROrderDtl.PRD_BuyStatus.Enum:购买状态} 。Enum用于标识数据字典字典,后面带数据字典的名称,不要分号。
如图表单使用打印模板进行打印
显示的字段有些是从数据字典取值的,存在数据库的是值而不是显示文本,如何才能取到显示值?
打印模板是一个静态的html,字段绑定是通过{字段编码}来绑定的。子表数据要加<Row>{子表.字段编码}</Row>
关于数据字典中的值,在提交保存表单时,数据会写入到业务表中。如果你存入的是一个编码代号之类的值。却要显示正常的文字的话。
目前我不知道H3bpm是怎么处理的,刚看了SheetPrint.aspx.cs文件,关于数据字典没有处理。
综上所述,所以我建议把数据字典的编码和要显示的文字写成一样。
或者有能力者可以修改SheetPrint.aspx.cs,对值进行判断查询替换。
根据审批意见获取代码的修改而来,代码如下
增加获取字典函数
private Dictionary<string, EnumerableMetadata[]> DicMetadata = new Dictionary<string, EnumerableMetadata[]>();
/// <summary>
/// 获取数据字典
/// </summary>
/// <param name="category" />数据字典名称</param />
/// <returns></returns>
private EnumerableMetadata[] GetEnum(string category)
{
string key = category;
if (DicMetadata.ContainsKey(key)) return DicMetadata[key];
EnumerableMetadata[] byCategory = this.Engine.MetadataRepository.GetByCategory(key);
DicMetadata.Add(key, byCategory);
return byCategory;
}
主表字段修改代码
GetFieldValue函数的
case Data.DataLogicType.String:
case Data.DataLogicType.ShortString:
下增加如下代码
string category = string.Empty;
if (param.ToLower().StartsWith("enum:"))
{
category = param.Substring(param.IndexOf(":") + 1);
var metadata = GetEnum(category);
if (metadata != null)
{
result = metadata.FirstOrDefault(x => x.Code.Equals(data.Value)).EnumValue + string.Empty;
break;
}
}
result = data.Value + string.Empty;
break;
打印模板中如下方式使用{PRM_Type.Enum:请购类型} 。Enum用于标识数据字典字典,后面带数据字典的名称,不要分号。
明细表修改代码
需要修改GetBizObjectFieldValue函数:
PropertySchema property = obj.Schema.GetProperty(field);
下增加
string param = string.Empty;
if (property == null && field.IndexOf(".") > -1)
{
// 处理field逻辑
param = field.Substring(field.IndexOf(".") + 1);
field = field.Substring(0, field.IndexOf("."));
property = obj.Schema.GetProperty(field);
}
case Data.DataLogicType.String:
case Data.DataLogicType.ShortString:下增加
string category = string.Empty;
if (param.ToLower().StartsWith("enum:"))
{
category = param.Substring(param.IndexOf(":") + 1);
var metadata = GetEnum(category);
if (metadata != null)
{
result = metadata.FirstOrDefault(x => x.Code.Equals(obj[field])).EnumValue + string.Empty;
break;
91c9
}
}
result = obj[field] + string.Empty;
break;
打印模板中如下方式使用{PROrderDtl.PRD_BuyStatus.Enum:购买状态} 。Enum用于标识数据字典字典,后面带数据字典的名称,不要分号。
相关文章推荐
- SD-供应商主数据和客户主数据各个字段进行显示、必输、隐藏和可选输入的配置学习
- 如何将数据库中的字段数据绑定显示在Label或TextBox控件中
- 供应商主数据和客户主数据各个字段进行显示、必输、隐藏和可选输入的配置学习
- 一个表里有多个字段需要同时使用字典表进行关联显示,如何写sql查询语句
- 如何设置流程表单单据打印?
- 【Excle数据透视表】如何显示/隐藏数据透视表字段列表
- 利用THINKPHP框架开发的自定义表单及数据字典模板
- 如何从流程助手中(Workflow Agent)访问文档的数据,如表单类型名称
- PB datawindow 数据窗口字段保存显示超过255个字符,要如何设置?
- 【Excle数据透视】如何在数据透视表字段列表中显示更多的字段
- Excel数据字典转换为PDM(且显示表名、字段相应的中文描写叙述)
- 如何判断a、b、c三个字段同时为0则不显示这条数据
- Excel数据字典转换为PDM(且显示表名、字段对应的中文描述)
- 通达OA2015中会签意见如何在流程的表单中并排显示
- 如何使用自定义表单进行数据安全性配置
- Golang 页面模板之模板中如何插入数据,输出嵌套字段内容?以及神奇的减号“-”,如何去掉Go Template生成的标签换行符
- jsp表单如何默认显示前几天的数据
- QTableview QSqlTableModel如何最恰当地只显示一个表中的某几个字段的数据