UDN-企业互联网技术人气社区

板块导航

浏览  : 21149
回复  : 81

[UAP RIA] 征集需求场景--》参照多选

  [复制链接]
展翔的头像 楼主
发表于 2014-4-1 14:56:38 | 显示全部楼层 |阅读模式
    今天做了一个小的通用的参照多选功能,大家平时有这样的需求吗,请跟帖说出,同时请指出可能存在的问题以便更好的完善
列表下的展示:
QQ图片20140401145433.jpg

卡片下的展示:
QQ图片20140401145441.jpg


展翔的头像 楼主
发表于 2015-1-20 11:53:24 | 显示全部楼层
本帖最后由 展翔 于 2015-1-21 15:46 编辑


千呼万唤始出来,下面给大家一个参照多选的参考形式
整体思路形式:
1.对于在参照上进行多项的选择的值以pk@pk的形式存储在数据库中
2.解析处理:因为单据面板卡片、列表构造不一样,需要进行卡片、列表分开处理

卡片修改方案如下:
一:修改Object nc.ui.bd.ref.AbstractRefModel.getValue(String field)
public Object getValue(String field) {
  Object[] values = getValues(field);

  Object value = null;
  String strValue = "";
  if (values != null && values.length > 1) {
   for (Object pkobj : values) {
    strValue += pkobj + "@";
   }
   strValue = strValue.substring(0, strValue.lastIndexOf("@"));
   value = strValue;
  } else {
   value = values[0];
  }

  return value;
}

二.去掉长度检查规则
如果是向导生成的业务单据,需要去除参照数据库字段的长度限制,默认是20,同时需要扩充改字段长度

三.卡片显示解析
打开声明 void nc.ui.bd.ref.BatchMatchContext.executeBatch()

   /**
    * 添加参照多选逻辑判断、不改变现有功能
    */

   if (pkValue instanceof String[]) {
    strPKValues = (String[]) pkValue;
   } else if (pkValue.toString().contains("@")) {
    strPKValues = pkValue.toString().split("@");
   } else {
    strPKValues = new String[] { pkValue.toString() };
   }

四:列表显示参照多选
1.BillModel.getRelationItemValues()方法修改
       /**
        * 添加参照多选逻辑、不影响以前功能
        */
       if (pk2RowMap.get(pk) == null && pk!=null) {
        if(pk.contains("@")){
         String[] pks = pk.split("@");
         for(String pkinfo:pks){
          pk2RowMap.put(pk, Integer.valueOf(dataIndex));
          pkList.add(pkinfo);
          dataIndex++;
         }
        }
       }
2.BillModel.setRelationValueToModel()方法修改
//添加参照多选逻辑、不影响以前功能
        String showv = "";
        if(v.length > 1){
         for(Object obj:v){
          showv+=obj+",";
         }
         showv = showv.substring(0, showv.lastIndexOf(","));
         setValueAt(showv, row, o .getName());
        }
五:最终效果展示
列表界面显示:
1.png
卡片界面显示:
2.png



参照多选代码包.rar

120.32 KB, 下载次数: 276

售价: 10 U币  [记录]

参照多选代码

使用道具 举报

回复

发表于 2014-4-1 15:41:45 | 显示全部楼层
实际应用中应该有很多这样的场景。我认为怎么展现无所谓,重要的是实体描述或数据库设计时,这多选的参照对应的是一个字段还是一个子表。如果是一个字段的话(一个字段存多个PK,通过分隔符分隔),那么这个字段的业务含义是不明确的、在执行公式、报表统计时都无法解析这个字段的值。
使用道具 举报

回复

发表于 2014-4-1 15:01:57 | 显示全部楼层
例如,开发个会议申请功能,会议参与者,这就是一个用户参照多选
使用道具 举报

回复

发表于 2014-4-1 22:14:30 | 显示全部楼层
有这个需求,记得当时客户是要求 多选出现在行的单元格子里面,貌似是无法保存的,因为行单元格在由编辑状态变为非编辑态时,会触发一个 code转nme的动作,这个动作被控件单元格写死了,所以你如果送一个ID串给单元格,就会转换为空。
注:实际的业务场景:每行数据是一批物料,客户可能需要准备几辆车运输,需要在行上选择车辆,然后单元格中显示多个车牌字符串。
考虑的解决办法:主子孙表
点评 ( 1 ) 收起 / 展开点评

miracle 2015年07月10日 15:06 详情 回复

楼主的方案不适合表体吧,表体只能用组子孙?

使用道具 举报

回复

发表于 2014-4-1 22:15:30 | 显示全部楼层
我说的问题在表头上是没问题的,应该是表格控件的问题。
使用道具 举报

回复

展翔的头像 楼主
发表于 2014-4-2 08:44:48 | 显示全部楼层
这个是可以保存的,中间参照转换为空的地方我通过重新定义Convert进行了实现
使用道具 举报

回复

发表于 2014-4-2 12:57:58 | 显示全部楼层
有需求,项目档案上会录入项目经理、实施经理、参与人员等,存在多选情况。
使用道具 举报

回复

展翔的头像 楼主
发表于 2014-4-2 14:34:51 | 显示全部楼层
嗯,这两天我就把这个案例整理出来,然后贴出,大家也可以尝试使用一下
使用道具 举报

回复

发表于 2014-4-2 16:48:13 | 显示全部楼层
楼主,研究一下行上单元格的多选 ID串的保存啊 @展翔
使用道具 举报

回复

展翔的头像 楼主
发表于 2014-4-2 17:35:24 | 显示全部楼层
这个目前采取的方案是以pk@pk@pk的形式存在数据库中
点评 ( 3 ) 收起 / 展开点评

混了好多年 2016年06月14日 17:30 详情 回复

录入多行,会有问题,会把多行的内容合并显示,改了点代码处理了 int start = 0;//add by xudw for (int row = srow; row 1){ for(int j=start;j

叶子zmx 2015年09月28日 21:04 详情 回复

好贴。都不错。。。

光之翼love 2015年09月21日 18:43 详情 回复

收藏备用了!贴子很不错

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们
联系我们
  • 电话:010-86393388
  • 邮件:udn@yonyou.com
  • 地址:北京市海淀区北清路68号
移动客户端下载
关注我们
  • 微信公众号:yonyouudn
  • 扫描右侧二维码关注我们
  • 专注企业互联网的技术社区
版权所有:用友网络科技股份有限公司82041 京ICP备05007539号-11 京公网网备安1101080209224 Powered by Discuz!
快速回复 返回列表 返回顶部