<?xml version="1.0" encoding="UTF-8"?>
<a:service xmlns:ns1="leaf.application.action" xmlns:s="leaf.plugin.script" xmlns:a="http://www.leaf-framework.org/application" xmlns:p="uncertain.proc" trace="true">
    <a:init-procedure>
        <s:server-script><![CDATA[
            function recursive_dynamic_save(root, base_table, query_only, parent_table, parent_base_table_pk) {
                if (!root || !base_table) return;
                var children = root.getChildren();
                if (!children.length) return;
                var query_base_table_bm = $bm('cont.CON500.con_hls_doc_layout_tab_query');
                var sub_tn_map = query_base_table_bm.queryAsMap({
                    "parent_table": base_table.toUpperCase(),
                    'layout_code': $ctx.parameter.layout_code,
                    'enabled_flag': 'Y'
                });
                var sub_base_tables = sub_tn_map.getChildren();
                if (query_only == 'Y' && sub_base_tables.length == 0) {
                    return;
                }
                $ctx.dynamic_base_table = base_table;
                var bm = $bm('cont.CON500.con_contract_common');
                var pk = $ctx.pkmap[base_table];
                for (var i = 0;i < children.length;i++) {
                    var _status = children[i]._status;
                    // var status_bm=$bm('bm');
                    // status_bm.update(children[i]);校验单据状态
                    var parent_error_code = '';
                    try {
                        bm.option = {
                            updatePassedFieldOnly: 'true'
                        }
                        if (parent_table && parent_base_table_pk && !children[i][parent_base_table_pk]) {
                            parent_error_code = 'HLS_TABLE_UNIQUE.SAVE_PARENT_FIRST';
                            raise_app_error(parent_error_code);
                        }
                        if (query_only != 'Y') {
                            bm[_status](children[i]);
                        }
                    } catch (e) {
                        if (parent_error_code) {
                            raise_app_error(parent_error_code);
                        } else {
                            raise_app_error('HLS_TABLE_UNIQUE.' + base_table.toUpperCase());
                        }
                    }
                    var check_bm;
                    if (base_table == 'hls_bp_master') {
                        check_bm = $bm('hls.HLS213.hls_bp_master_check_id_card');
                        check_bm['update'](children[i]);
                    } else if (base_table == 'hls_bp_master_contact_info' && _status != 'delete') {
                        check_bm = $bm('hls.HLS213.hls_bp_master_contact_info_check');
                        check_bm['update'](children[i]);
                    } else if (base_table == 'hls_bp_master_address') {
                        check_bm = $bm('hls.HLS213.hls_bp_master_check_address_type');
                        check_bm['update'](children[i]);
                    }
                    if (!parent_table && children[i].getData().getParent().getName() == 'parameter') {
                        if (!$ctx.parameter.master_id) {
                            $ctx.parameter.master_id = children[i][pk];
                        }
                        if ($ctx.parameter.master_type) {
                            children[i].master_type = $ctx.parameter.master_type;
                        }
                        if ($ctx.parameter.document_category) {
                            children[i].document_category = $ctx.parameter.document_category;
                        }
                        if ($ctx.parameter.document_id) {
                            children[i].document_id = $ctx.parameter.document_id;
                        }
                        if ($ctx.parameter.function_code) {
                            children[i].function_code = $ctx.parameter.function_code;
                        }
                        if ($ctx.parameter.function_usage) {
                            children[i].function_usage = $ctx.parameter.function_usage;
                        }
                        if (_status == 'insert') {
                            var get_num_bm = $bm('hls.HLS213.hls_bp_master_update_special_fields');
                            children[i].master_id = children[i][pk] || null;
                            get_num_bm.update(children[i]);
                        }
                    }
                    for (var j = 0;j < sub_base_tables.length;j++) {
                        var bind_name = sub_base_tables[j].tab_code + '_' + sub_base_tables[j].base_table.toLowerCase();
                        var sub_root = children[i].getChild(bind_name);
                        if (sub_root && pk) {
                            var sub_children = sub_root.getChildren();
                            for (var m = 0;m < sub_children.length;m++) {
                                sub_children[m][pk] = children[i][pk];
                            }
                            recursive_dynamic_save(sub_root, sub_base_tables[j].base_table, sub_base_tables[j].query_only, sub_base_tables[j].parent_table, sub_base_tables[j].parent_base_table_pk);
                        }
                    }
                }
            }
            
            function master_check_after_save() {
                var last_check_bm = $bm('hls.HLS213.hls_bp_master_check_after_save');
                last_check_bm.update({
                    master_type: $ctx.parameter.master_type,
                    master_id: $ctx.parameter.master_id
                });
            }
            recursive_dynamic_save($ctx.parameter, $ctx.parameter.base_table, $ctx.parameter.query_only, $ctx.parameter.parent_table, $ctx.parameter.parent_base_table_pk);
            master_check_after_save();
        ]]></s:server-script>
    </a:init-procedure>
    <a:service-output output="/parameter"/>
</a:service>