1.基本功能 1.基本功能
1.1.复制新增(旧表格) 1.1.复制新增(旧表格)
此功能的场景是在编辑页面自定义一个拷贝新增按钮,点击这个拷贝新增按钮后会复制当前页面的主表、子表、孙子表数据到新增页面,同时关闭编辑页面。
例如:点击一个复制新增按钮,然后可以把主表、子表、孙子表数据一起拷贝下来,然后在新增页面显示。
1.2.复制功能配置文档1.2.复制功能配置

1.3.弹窗复制1.3.弹窗复制
复制方法支持以弹窗方式复制并可以修改数据。
2.配置方法 2.配置方法
2.1.复制新增(旧表格)2.1.复制新增(旧表格)
- 对象建模–业务对象–业务对象管理:编辑业务对象,点击【方法定义】tab页,新增一个方法。
  
- 在BsCtrl.js扩展文件中添加自定义代码,具体代码可参考【3.1复制新增(旧表格)】。
- 在【方法定义】tab页新增一个提供给用户使用的初使化方法,
  
- 在初始化方法自定义JS添加自定义代码,具体代码可参考【3.1复制新增(旧表格)】。
2.2.复制功能配置文档2.2.复制功能配置
- 对象建模–业务对象–业务对象管理:点击【方法定义】tab页,业务对象-方法定义:编辑业务对象,点击新增按钮新增方法,选择方法的类型为【复制】类型。
  
- 点击【复制】页签,配置复制规则。
  
 其中:
 1). 左侧树结构展示业务对象结构:可点击切换对象属性列表
 2). 左侧表格表示默认复制,值与原对象不变。且此处不会显示主键,公共字段属性。
 3). 右侧表格表示自定义复制规则
 默认值类型:
 不处理:不赋值
 变量:字符串或数字
 表达式:方法或运算
 固定值:平台默认值,如当前角色、当前用户等
 4). 通过左右按钮,批量编辑方法属性
- 
配置完后,点击方法定义上的保存按钮保存数据。 
- 
业务对象-方法定义:点击【可视化布局】按钮进入可视化编辑,配置复制按钮 
  
- 
提交对象,生成代码后在业务系统启动后执行复制方法。 
代码
单表,表格内编辑复制案例代码示例
/**
    * GLPaaS生成
    * 复制 常用案例NewHot101
    */
    $scope.testCopyTestCaseNewHot101 = function(options){
        var checkedRows = $scope.testCaseNewHot101Grid.getCheckedRows();
        if (Arrays.isNotEmptyArray(checkedRows)) {
            var options = {
                addCallback: function () {
                    $scope._finishEditGridWrap($scope.testCaseNewHot101Grid, $scope.testCaseNewHot101s, $scope);
                    var copyRows = angular.copy(checkedRows);
                    angular.forEach(copyRows, function (testCaseNewHot101) {
                    angular.extend(testCaseNewHot101, {
                    mdBankAccountId: $scope.testCaseNewHot101GridId++,
                    rowStatus : 4,
                    bankCode:null,bankNameCn:'农业银行',
                    bankAddress:$scope.$sessionAttrs.loginUser.userNameCn});
                });
                    var newSource, rowIndex;
                    if ($config.gridAddRowPos === 'bottom') {
                        newSource = _.union($scope.testCaseNewHot101s, copyRows);
                        rowIndex = newSource.length;
                    } else {
                        newSource = _.union(copyRows, $scope.testCaseNewHot101s);
                        rowIndex = 0;
                    }
                    $scope.testCaseNewHot101Grid.loadData(newSource);
                    if ($scope._pageState && $scope._pageState.setDataStateModify) {
                        $scope._pageState.setDataStateModify();
                    }
                    $scope.testCaseNewHot101 = newSource[rowIndex];
                    $scope.addTestCaseNewHot101ClickSign = false;
                }
            };
            $scope.addTestCaseNewHot101(options);
        } else {
            $scope.baseAlert($config.i18nInfo.alertTitle, $config.i18nInfo.alertPlsSelectRows || "请选中行数据!");
        }
    };
单表,新页面编辑-管理页
/**
    * GLPaaS生成
    * 复制 常用案例NewHot103
    */
    $scope.testCopyTestCaseNewHot103 = function(options){
        var checkedRows = $scope.testCaseNewHot103Grid.getCheckedRows();
        if (angular.isArray(checkedRows) && checkedRows.length==1) {
            var id = checkedRows[0].wmsInbReceiptOneId;
            var urlParams = {
                wmsInbReceiptOneId: id,
                methodType: 'COPY',
                openType: '1'
            };
                            var url = "html/sample/test/testCaseNewHot103Add.html";
            url = $scope.urlParamsSerializer(url, urlParams);
            var resource = {
                sysResourceId : 'testCaseNewHot103_add_',
                urlTitle : '新增常用案例NewHot103',
                url : url
            };
            var indexScope = top.angular.element("body").scope();
            indexScope.addTab(resource);
            indexScope.$apply();
        } else {
            $scope.baseAlert($config.i18nInfo.alertTitle, $config.i18nInfo.alertPlsSelectRow || "请选中一条行数据!");
        }
    };
单表,新页面编辑-编辑页
/**
    * GLPaaS生成
    * 复制 常用案例NewHot103
    */
    $scope.testCopy = function(options){
            var id = Params.wmsInbReceiptOneId
            var urlParams = {
                wmsInbReceiptOneId: id,
                methodType: 'COPY',
                openType: '1'
            };
                            var url = "html/sample/test/testCaseNewHot103Add.html";
            url = $scope.urlParamsSerializer(url, urlParams);
            var resource = {
                sysResourceId : 'testCaseNewHot103_add_',
                urlTitle : '新增常用案例NewHot103',
                url : url
            };
            var indexScope = top.angular.element("body").scope();
            indexScope.addTab(resource);
            indexScope.$apply();
    };
单表,表单内编辑
/**
    * GLPaaS生成
    * 复制 常用案例NewHot102
    */
    $scope.testCopyTestCaseNewHot102 = function(options){
        var checkedRows = $scope.testCaseNewHot102Grid.getCheckedRows();
        if (Arrays.isNotEmptyArray(checkedRows) && checkedRows.length==1) {
            var copyRow = angular.copy(checkedRows[0]);
            angular.extend(copyRow, {
            wmsInbReceiptOneId: $scope.testCaseNewHot102GridId++,
            rowStatus : 4,
            receivePersonName:$scope.$sessionAttrs.loginUser.userNameCn,remark:'AT001'  });
            var options = {
                newRow: copyRow
            };
            $scope.addTestCaseNewHot102(options);
        } else {
            $scope.baseAlert($config.i18nInfo.alertTitle, $config.i18nInfo.alertPlsSelectRow || "请选中一条行数据!");
        }
    };
2.3.弹窗复制2.3.弹窗复制
目前只支持弹窗后交互方式为表单
配置
1.对象建模–业务对象–业务对象管理:编辑业务对象,在【方法定义】tab页找到复制对应的方法并编辑,在【基本信息】tab页填写跳转地址。

代码
/**
 * GLPaaS生成
 * 复制 常用案例NewHot101
 */
$scope.testCopyTestCaseNewHot101 = function(options) {
    var isDataModified = $scope._pageState.isDataModified($scope.boStatusOptions);
    if (isDataModified) {
        $scope.baseAlert("提示", "请先保存页面数据!");
        return;
    }
    var url = $scope.urlParamsSerializer('/html/sample/test/testCaseNewHot101batchUpdate.html', {
        openType: '2',
        boName: 'TestCaseNewHot101',
        methodType: 'COPY',
        methodName: 'testCopy',
        copyUrl: '/testCaseNewHot101/testCoopy'
    });
    var checkedRows = $scope.testCaseNewHot101Grid.getCheckedRows();
    if (checkedRows.length == 0) {
        $scope.baseAlert("提示", "暂无选中的记录");
        return;
    }
    var options = {
        title: '复制',
        closable: true,
        modal: true,
        url: url,
        width: 900,
        height: 700,
        data: checkedRows
    };
    $scope.showUrl(options);
};
3.常用扩展3.常用扩展
3.1复制新增(旧表格)3.1复制新增(旧表格)
自定义JS代码参考如下:
$scope.copyAndAdd = function() {
  var data = angular.copy($scope.traCoaHeader); // 主对象
  data.traCoaTermss = angular.copy($scope.traCoaTermss); // 子对象 
  data.traCoaTermss.traCoaRatev = angular.copy($scope.traCoaRatev);  // 孙子对象 
  var url = "/html/vcm/coaHeader/traCoaHeaderAdd.html";
    var openType = "1";
    if (url.indexOf("?")>=0){
        url = url + "&openType=" + openType;
    } else {
        url = url + "?openType=" + openType;
    }
    var resource = {
        sysResourceId : 'traCoaHeader_add',
        urlTitle : '新增合同',
        url : url
    };
    top.angular.element("body").scope().traCoaHeader =data;
    var indexScope = top.angular.element("body").scope();
    indexScope.addTab(resource);
    indexScope.$apply();
}
初始化方法自定义JS代码参考如下;
$scope.customTraCoaHeaderInit=function(){
    if($scope._pageState.pageType=="add"){
        $scope.traCoaHeader.versionNo=0;
    }
    $scope.data=angular.copy(top.angular.element("body").scope().traCoaHeader);
    delete top.angular.element("body").scope().traCoaHeader;
    if($scope.data){
        debugger;
        var tabArray=top.angular.element("body").scope().tabArray;
        for(var i =0;i<tabArray.length;i++){
            if(tabArray[i].sysResourceId =="traCoaHeader_view"){
                top.angular.element("body").scope().tabArray.splice(i,1);
            }
        }
        $scope.traCoaHeader=$scope.data;  //主表赋值
        $scope.traCoaTermss=$scope.data.traCoaTermss;//子表赋值
        $scope.traCoaTermss.traCoaRatev=$scope.data.traCoaTermss.traCoaRatev;//孙子表赋值        
    }   
};