保存

1.基本功能 1.基本功能

1.1.表格、表单数据只保存修过的记录 1.1.表格、表单数据只保存修过的记录

2.配置方法 2.配置方法

2.1.前台:(表格维护方式:表格内编辑)

如果用户自定义的脚本中有对表格进行各种操作在关闭表格之前需要给记录打上标记判断,示例代码如下请参考(也可以查看自己项目中已生成的代码块)

if($$productInformationEditingRowIndex >=0){
    $scope.productInformationGrid.finishEdit();
    if($scope.productInformationGrid.getModifiedRecordMap()[$$productInformationEditingRowIndex]){
        var tempproductInformationModify=$scope.productInformations[$$productInformationEditingRowIndex];
        if(tempproductInformationModify.rowStatus && tempproductInformationModify.rowStatus==2 && tempproductInformationModify.rowStatus!=8){
            $scope.productInformations[$$productInformationEditingRowIndex].rowStatus=16;
        }
    }
}

tab56

2.2.前台:(表格维护方式:当前表单内编辑)

表格内表单编辑方式判断记录是否修改是通过监听行记录对象内属性是否有修改来打标记的。因是表当前表单内编辑和表格内编辑不一样不需要关闭表格所以通过下面的方式维护了是否编辑表格中数据判断(正常情况代已生成了)

$scope.$watch("sysScheduleJob", function(newVal, oldVal) {
                if (newVal && newVal.rowStatus && (newVal.rowStatus == 2 || newVal.rowStatus == 4)) {
                     _.mapObject(newVal,function(val ,key){
                        var propertyCol = [];
                        propertyCol.push("cronExpression");
                        propertyCol.push("jobDesc");
                        propertyCol.push("jobGroup");
                        propertyCol.push("jobMethod");
                        propertyCol.push("jobName");
                        propertyCol.push("jobService");
                        propertyCol.push("jobStatus");
                        propertyCol.push("ruleNo");
                        propertyCol.push("sysScheduleJobId");
                        checked = Arrays.exists(propertyCol, key);
                        if(checked){
                            var newData = val;
                            var oldData = oldVal[key];
                            if (!($scope._compareNewAndOldObjIsEqual(newData,oldData,$scope)))
                            {
                                if(newVal.rowStatus == 2){
                                    newVal.rowStatus = 16;
                                }

                                if($scope._pageState && $scope._pageState.setDataStateModify)
                                    $scope._pageState.setDataStateModify();

                                return false;
                            }
                        }
                    });
                }
            }, true);

tab57

2.3.场景说明

2.3.1.场景1:主表,主子表,主子孙表格中的行记录处理对比:

未修改前:表格中未修改的行记过保存时会被更新数据(比如修改时间),不论子表,孙表是否被修改都会被更新数据
修改之后:只有用户改过的行记录才会真正的被更新数据数据库中。Eg:如果有主子孙例子,当子表修改过,是不会对孙子表和主表记录进行修改,当孙子表修改过,不会对主以上表进行修改,只会自己本身有修改过的行记录进行更新(示例)

tab58

2.3.2.场景2:页面中有主业务对象表格,子业务对象表单(一比一的),主业务对象下有多子表情况如图(示例):

tab59
操作情况:如场景1功能相似,如果只修改子记录的数据,不会更新主业务对象数据

2.3.3.其它说明需了解:项目组需了解的每个业务对象都有一个通用属性控制标志(rowStatus属性)的状态如图:

/**
     * 初始值,没有改变过。
     */
    public final static int ROWSTATUS_UNCHANGED = 2;

    /**
     * 新增的状态。
     */
    public final static int ROWSTATUS_ADDED = 4;

    /**
     * 删除的状态。
     */

    public final static int ROWSTATUS_DELETED = 8;

    /**
     * 修改过的状态。
     */
    public final static int ROWSTATUS_MODIFIED = 16;

        /**
     * 新加载时的状态。
     */
    public final static int ROWSTATUS_LOADING = 32;

tab60
表格中,或编辑中主子业务对象中都使用这个rowStatus作为是否修改过数据记录的标志,后台代码save方法,update方法,saveOrupdate方法中有依此状态过滤,如果是平台上生成的按钮中的事件(比如新增,保存已对状态进行处理,也就是打上了rowStatus标记各种处理方式),如果项目组中自己有对表格或其它地方有对对象进行操作需要对此状态进行了解,以免保存数据有问题,可以查看生成出来的代码进行了解。

2.3.4.相关代码

@Override
    public int update(TestCase301 testCase301)
    {
        int result = -1 ;
        if(testCase301.getRowStatus()==BaseObject.ROWSTATUS_MODIFIED){
            result = super.update(testCase301);
        }
                Set<TestCase301Detail> testCase301Detailss = testCase301.getTestCase301Details();
        if (testCase301Detailss != null) {
            for(TestCase301Detail testCase301Detail : testCase301Detailss) {
                if(testCase301Detail.getRowStatus() == BaseObject.ROWSTATUS_ADDED){
                    testCase301Detail.setTestCase301DetailId(null);
                    testCase301Detail.setTestCase301Id(testCase301.getTestCase301Id());
                    testCase301DetailService.save(testCase301Detail);
                } else if(testCase301Detail.getRowStatus() == BaseObject.ROWSTATUS_DELETED){
                    testCase301DetailService.delete(testCase301Detail.getTestCase301DetailId());
                } else if(testCase301Detail.getRowStatus() == BaseObject.ROWSTATUS_MODIFIED){
                    testCase301DetailService.update(testCase301Detail);
                } else if(testCase301Detail.getRowStatus() == BaseObject.ROWSTATUS_UNCHANGED){
                    testCase301DetailService.saveOrUpdate(testCase301Detail);
                }
            }
        }

        return result;
    }

tab61

@Override
    public int saveOrUpdate(TestCase301 testCase301)
    {
        int result = 0;
        if(testCase301.getRowStatus() == BaseObject.ROWSTATUS_DELETED){
            this.delete(testCase301.getTestCase301Id());
            result =1 ;
        } else {
            if(testCase301.getRowStatus() == BaseObject.ROWSTATUS_ADDED || testCase301.getRowStatus() == BaseObject.ROWSTATUS_MODIFIED){
                result = super.saveOrUpdate(testCase301);
            }

        Set<TestCase301Detail> testCase301Detailss = testCase301.getTestCase301Details();
        if (testCase301Detailss != null) {
            for(TestCase301Detail testCase301Detail : testCase301Detailss) {
                if(testCase301Detail.getRowStatus() == BaseObject.ROWSTATUS_ADDED){
                    testCase301Detail.setTestCase301DetailId(null);
                    testCase301Detail.setTestCase301Id(testCase301.getTestCase301Id());
                    testCase301DetailService.save(testCase301Detail);
                } else if(testCase301Detail.getRowStatus() == BaseObject.ROWSTATUS_DELETED){
                    testCase301DetailService.delete(testCase301Detail.getTestCase301DetailId());
                } else if(testCase301Detail.getRowStatus() == BaseObject.ROWSTATUS_MODIFIED){
                    testCase301DetailService.update(testCase301Detail);
                } else if(testCase301Detail.getRowStatus() == BaseObject.ROWSTATUS_UNCHANGED){
                    testCase301DetailService.saveOrUpdate(testCase301Detail);
                }
            }
        }
        }
        return result;
    }

tab62

var newRow = options.newRow || {
                testCase301Id : $scope.testCase301.testCase301Id,
                    testCase301DetailId : $scope.newTestCase301DetailGridId++,
                    rowStatus : 4
                };

tab63

3.常用扩展 3.常用扩展

暂无

4.版本更新 4.版本更新