流程表单配置时打印模板如何显示数据字典字段的显示值?

问题:

如图表单使用打印模板进行打印

显示的字段有些是从数据字典取值的,存在数据库的是值而不是显示文本,如何才能取到显示值?

 

 

 

打印模板是一个静态的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;

                        }

                    }

                    result = obj[field] + string.Empty;

                    break;

 

打印模板中如下方式使用{PROrderDtl.PRD_BuyStatus.Enum:购买状态} 。Enum用于标识数据字典字典,后面带数据字典的名称,不要分号。

posted @ 2016-12-16 10:59  小林谈开发  阅读(698)  评论(0编辑  收藏  举报