起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 4172|回复: 15

[结贴] 自定义action为什么要执行两次,数据才生效

[复制链接]

480

主题

1283

帖子

4472

积分

论坛元老

Rank: 8Rank: 8

积分
4472
QQ
发表于 2014-6-23 09:21:44 | 显示全部楼层 |阅读模式
版本: X5.2.6 小版本号:
数据库: MySQL 服务器操作系统: Windows 应用服务器: Tomcat
客户端操作系统: Windows 8 浏览器: Chrome
我用如下自定义动作来执行保存,为什么要执行两次才能数据更改成功,
自定义动作生成的时候有提示热交换有问题,要停止服务器,我没有停止,是不是这个问题导致缓存问题,怎么解决

public static int saveReceivepayregister(List insertRange,List deleteRange,List updateRange,String concept,String dataModel,String fnModel,String readOnly,String notNull,Table table){
                int result = BizData.save(table, concept, insertRange, deleteRange, updateRange, readOnly, notNull, dataModel, fnModel);

                Iterator it = table.iterator();
                Row row = (Row)it.next();
                String flowKey = row.getString("receivepayregister");
                String fReceivePayRegisterNo = row.getString("fReceivePayRegisterNo");
                String fBankJournal = row.getString("fBankJournal");
                Date fReceivePaymentDate = row.getDate("fReceivePaymentDate");
                String msg = "";
                try{

                        Connection conn = ModelUtils.getConnectionInTransaction("/dissona/reconciliation/data");
                        String sql = "select * from  receivepayregisterdetail  where fReceivePayRegisterMasterID = ?";
                        PreparedStatement ps = conn.prepareStatement(sql);
                        ps.setString(1, flowKey);
                        ResultSet rs = ps.executeQuery();
                        while(rs.next()){
                                String fReconciliationSheetNo = rs.getString("fReconciliationSheetNo");
                                System.out.println("fReconciliationSheetNo:"+ fReconciliationSheetNo);

                                BigDecimal fCurrentReceiveAmount = rs.getBigDecimal("fCurrentReceiveAmount");
                                System.out.println("current receive  amount is:"+ fCurrentReceiveAmount);   
                                String sql1 = "select * from receivepaymentregister where fReconciliationSheetNo = ?";
                                PreparedStatement ps1 = conn.prepareStatement(sql1);
                                ps1.setString(1, fReconciliationSheetNo);

                                ResultSet rs1 = ps1.executeQuery();
                                if(rs1.next()){
                                        BigDecimal fCreditAmount = rs1.getBigDecimal("fCreditAmount");
                                        System.out.println("unreived amount is:"+ fCreditAmount + "end");
                                        if(fCurrentReceiveAmount.compareTo(fCreditAmount) ==1){
                                                System.out.println("step1");

                                                throw new RuntimeException("结算单:"+ fReconciliationSheetNo+ "当前金额超标");
                                        }else{

                                                System.out.println("step2");
                                                String sql2 = "update   receivepaymentregister set   fReceivedAmount = fReceivedAmount + ? , fCreditAmount = fCreditAmount - ?, fReceivePayRegisterNo = ?, fReceivePaymentDate= ?, fBankJournal= ?  where fReconciliationSheetNo = ? ";
                                                PreparedStatement ps2 = conn.prepareStatement(sql2);
                                                ps2.setBigDecimal(1, fCurrentReceiveAmount);
                                                ps2.setBigDecimal(2, fCurrentReceiveAmount);
                                                ps2.setString(3, fReceivePayRegisterNo);
                                                ps2.setDate(4,fReceivePaymentDate );
                                                ps2.setString(5, fBankJournal);
                                                ps2.setString(6, fReconciliationSheetNo);
                                                ps2.executeUpdate();

                                        }
                                }else{


                                        throw new RuntimeException("结算单:"+ fReconciliationSheetNo+  "不存在");
                                }

                        }
                        rs.close();
                        ps.close();


                }catch(Exception ex){
                        ex.printStackTrace();
                        throw new RuntimeException(ex.getMessage());
                }

               
               
               
                return result;
               
        }

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
35945
发表于 2014-6-23 09:39:12 | 显示全部楼层
自定义动作生成的时候有提示热交换有问题,要停止服务器什么意思?第一次执行后数据库中的数据没有改变吗?确认执行过程中是否有错误
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

39

主题

1379

帖子

2464

积分

金牌会员

Rank: 6Rank: 6

积分
2464
发表于 2014-6-23 09:42:03 | 显示全部楼层
楼主设断点跟踪一下,先检查一下这个action有没有问题
回复 支持 反对

使用道具 举报

480

主题

1283

帖子

4472

积分

论坛元老

Rank: 8Rank: 8

积分
4472
QQ
 楼主| 发表于 2014-6-23 09:45:07 | 显示全部楼层
这个action是没有问题的
回复 支持 反对

使用道具 举报

480

主题

1283

帖子

4472

积分

论坛元老

Rank: 8Rank: 8

积分
4472
QQ
 楼主| 发表于 2014-6-23 09:45:30 | 显示全部楼层
第一次执行没有错误发生
回复 支持 反对

使用道具 举报

480

主题

1283

帖子

4472

积分

论坛元老

Rank: 8Rank: 8

积分
4472
QQ
 楼主| 发表于 2014-6-23 09:47:28 | 显示全部楼层
但是数据更改不生效,我把标准save action 变成自定义action时候,系统提示我停掉tomcat,我没有停掉,会不会是这个原因,怎么解决
回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
35945
发表于 2014-6-23 10:10:53 | 显示全部楼层
davidhuang 发表于 2014-6-23 09:47
但是数据更改不生效,我把标准save action 变成自定义action时候,系统提示我停掉tomcat,我没有停掉,会不 ...

如果运行的时候能走到这段代码那就不用停掉重启,第一次确认update这些都执行成功了?
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

480

主题

1283

帖子

4472

积分

论坛元老

Rank: 8Rank: 8

积分
4472
QQ
 楼主| 发表于 2014-6-23 11:20:02 | 显示全部楼层
是的,第一次都执行成功了
回复 支持 反对

使用道具 举报

480

主题

1283

帖子

4472

积分

论坛元老

Rank: 8Rank: 8

积分
4472
QQ
 楼主| 发表于 2014-6-23 13:28:18 | 显示全部楼层
我想问问,在主表的save action 里执行了  BizData.save(table, concept, insertRange, deleteRange, updateRange, readOnly, notNull, dataModel, fnModel);
为什么明细表里会没有记录,是不是还要另外执行明细表的save action 的   BizData.save(table, concept, insertRange, deleteRange, updateRange, readOnly, notNull, dataModel, fnModel);

如果是这样,那就不是自动保存从表了吧
回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
35945
发表于 2014-6-23 13:30:40 | 显示全部楼层
data上如果设置的是主从,主的保存的时候就会保存从data
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-5-22 11:57 , Processed in 0.110322 second(s), 25 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表