阅读:3901 回复:9
t156965365
46

帖子

688

跟帖

4536

积分

H3 BPM互助团队
H3 BPM互助团队
  • 社区居民

[已解决]打印模板如何显示数据字典字段的显示值

楼主#
更多 发布于:2016-12-15 13:49
如图表单使用打印模板进行打印
显示的字段有些是从数据字典取值的,存在数据库的是值而不是显示文本,如何才能取到显示值?
@岩竹玉雨

图片:火狐截图_2016-12-15T05-47-06.917Z.png

t156965365
46

帖子

688

跟帖

4536

积分

H3 BPM互助团队
H3 BPM互助团队
  • 社区居民
1楼#
发布于:2016-12-15 15:27
帖内置顶  –    –  2016-12-19 17:39
谢谢,简单点的做法是值和显示设成一样了。
根据@岩竹玉雨 提供的建议,修改了SheetPrint.aspx.cs,毕竟有些数据字典不是单独BPM系统用,别的系统数据传递也用到。
根据审批意见获取代码的修改而来,代码如下
  1. 增加获取字典函数

  2. 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;
            }

  3. 主表字段修改代码
  4. 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用于标识数据字典字典,后面带数据字典的名称,不要分号。
岩竹玉雨
20

帖子

840

跟帖

205241

积分

论坛版主
论坛版主
  • 社区居民
  • 忠实会员
2楼#
发布于:2016-12-15 14:25
可参考帖子:http://bbs.h3bpm.com/read.php?tid=1323&fid=8打印模板是一个静态的html,字段绑定是通过{字段编码}来绑定的。子表数据要加<Row>{子表.字段编码}</Row>
关于数据字典中的值,在提交保存表单时,数据会写入到业务表中。如果你存入的是一个编码代号之类的值。却要显示正常的文字的话。
目前我不知道H3bpm是怎么处理的,刚看了SheetPrint.aspx.cs文件,关于数据字典没有处理。
综上所述,所以我建议把数据字典的编码和要显示的文字写成一样。
或者有能力者可以修改SheetPrint.aspx.cs,对值进行判断查询替换。
发问题贴的时候,可以@一下我,我就能更快的知道了
t156965365
46

帖子

688

跟帖

4536

积分

H3 BPM互助团队
H3 BPM互助团队
  • 社区居民
3楼#
发布于:2016-12-15 15:27
谢谢,简单点的做法是值和显示设成一样了。
根据@岩竹玉雨 提供的建议,修改了SheetPrint.aspx.cs,毕竟有些数据字典不是单独BPM系统用,别的系统数据传递也用到。
根据审批意见获取代码的修改而来,代码如下
  1. 增加获取字典函数

  2. 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;
            }

  3. 主表字段修改代码
  4. 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用于标识数据字典字典,后面带数据字典的名称,不要分号。
t156965365
46

帖子

688

跟帖

4536

积分

H3 BPM互助团队
H3 BPM互助团队
  • 社区居民
4楼#
发布于:2016-12-15 15:34
岩竹玉雨:可参考帖子:http://bbs.h3bpm.com/read.php?tid=1323&fid=8打印模板是一个静态的html,字段绑定是通过{字段编码}来绑定的。子表数据要加<Row>{子表.字段编码}</Row>
关于数据字典中的值...
回到原帖
另外有两个问题想问一下
1/如何显示当前的打印时间?
2/如何显示明细表的序号字段?

图片:火狐截图_2016-12-15T07-36-04.204Z.png

岩竹玉雨
20

帖子

840

跟帖

205241

积分

论坛版主
论坛版主
  • 社区居民
  • 忠实会员
5楼#
发布于:2016-12-15 15:40
t156965365:另外有两个问题想问一下
1/如何显示当前的打印时间?
2/如何显示明细表的序号字段?
回到原帖
1:打印时间用js获取当前系统时间,如不放心。那就自定一个特殊名称,后台过滤赋值。
2:明细表没有序号字段,页面上的序号是通过js给的。
发问题贴的时候,可以@一下我,我就能更快的知道了
t156965365
46

帖子

688

跟帖

4536

积分

H3 BPM互助团队
H3 BPM互助团队
  • 社区居民
6楼#
发布于:2016-12-15 15:52
岩竹玉雨:1:打印时间用js获取当前系统时间,如不放心。那就自定一个特殊名称,后台过滤赋值。
2:明细表没有序号字段,页面上的序号是通过js给的。
回到原帖
模板不能加入js代码,没想到什么好方法处理这个了。
用特殊名字不太好融入现在这个模板。。
岩竹玉雨
20

帖子

840

跟帖

205241

积分

论坛版主
论坛版主
  • 社区居民
  • 忠实会员
7楼#
发布于:2016-12-15 16:14
t156965365:模板不能加入js代码,没想到什么好方法处理这个了。
用特殊名字不太好融入现在这个模板。。
回到原帖
js可以运行啊。
&lt;span id="tt"&gt;&lt;/span&gt;
&lt;script&gt;
var oDate = new Date();
  
document.getElementById("tt").innerText=oDate;  
  
&lt;/script&gt;

图片:QQ截图20161215161249.png

发问题贴的时候,可以@一下我,我就能更快的知道了
t156965365
46

帖子

688

跟帖

4536

积分

H3 BPM互助团队
H3 BPM互助团队
  • 社区居民
8楼#
发布于:2016-12-15 16:35
岩竹玉雨:js可以运行啊。
&lt;span id="tt"&gt;&lt;/span&gt;
&lt;script&gt;
var oDate = new Date();
  
document.getElementById("tt")....
回到原帖
你在函数里面加个大括号试下,会被替换掉


<script>     $(function () {
        $("#printDate").html("test");
    }); </script>

图片:捕获3333.PNG



岩竹玉雨
20

帖子

840

跟帖

205241

积分

论坛版主
论坛版主
  • 社区居民
  • 忠实会员
9楼#
发布于:2016-12-15 16:44
t156965365:你在函数里面加个大括号试下,会被替换掉


<script>     $(function () {
        $("#printDate").html("test");
    }); </script>
回到原帖
你的意思我明白。
这样把模板中获取改为pw_这个。后台过滤时也用"pw_"  ""。
发问题贴的时候,可以@一下我,我就能更快的知道了
上一页
1 2  »|
游客

返回顶部