• SugarCRM 一对多 DetailView页面显示


    需求:DetailView页面中显示与父表相关的子表ListView并可增加子表内容
        解决方案:
            1.两个模块
                bw_Consignments  提运单信息     父表
                bw_ConsignItems  提运单明细     子表    关系: 子表中ConsignmentID字段为父表中的id
            2.关系字段
                ConsignmentID 必须为主表字段
                如何创建主表字段 详见 主表-自定义字段
            3.增加关系
                \modules\bw_Consignments\vardefs.php    父表模块下 添加如下
    
                 //BUILDER: included fields
    			    'bw_ConsignItems' =>          //子表模块名
    			    array (
    				    'name' => 'bw_ConsignItems',    //子表模块名
    				    'type' => 'link',
    				    'relationship' => 'MR_bw_ConsignItems',   //关系名
    				    'source'=>'non-db',
    				    'vname'=>'LBL_REVMSGS',
    				    ), 
                //BUILDER:END of fields    
            
                //Relationships one-to-many               //注意位置不能错,否则生成的sql语句有问
                'relationships' => array(
    			    'MR_bw_ConsignItems' => array(
    				    'lhs_module'=> 'bw_ConsignItems', 'lhs_table'=> 'bw_ConsignItems', 'lhs_key' => 'ConsignmentID', //子表模块
    				    'rhs_module'=> 'bw_Consignments', 'rhs_table'=> 'bw_Consignments', 'rhs_key' => 'id',            //父表模块
    				    'relationship_type'=>'one-to-many'),//关系
    		4.设置subpanel的显示		
                \modules\bw_Consignments\layout_defs.php   父表模块下 添加如下
    
                $layout_defs['bw_Consignments'] = array(
                     'subpanel_setup'   => array(
                        //BUILDER:END of subpanels
    
    	                'bw_consignitems' => array(                     //必须小写
    		                'order' => 25,    
    		                'module' => 'bw_ConsignItems',              //子表模块名
    		                'subpanel_name' => 'default',   
    		                'get_subpanel_data' => 'bw_ConsignItems',   //子表模块名
    		                'add_subpanel_data' => 'bw_Consignments',   //父表模块名
    		                'title_key' => 'LBL_MODULE_NAME',           //subpanel的标题
    		                'top_buttons' => array(	array('widget_class' => 'SubPanelTopCreateButton')			
    			            ),
    		             ),
                        
            		    'ser_rights' => array(
    				        'order' => 26,                                  //布局  多个SubPanel时显示的顺序
    				        'module' => 'ser_Rights',
    				        'subpanel_name' => 'default',
    				        'get_subpanel_data' => 'ser_Rights',
    				        'add_subpanel_data' => 'ser_right_id',
    				        'title_key' => 'LBL_SER_RIGHTS_SUBPANEL_TITLE',//subpanel的标题 在父模块的 \language\zh_cn.lang.php 增加 'LBL_SER_RIGHTS_SUBPANEL_TITLE'=> '维权服务',
    				        'top_buttons' => array(   //array('widget_class' => 'SubPanelTopCreateButton')		//新增 按钮	注掉则不显示按钮
    					   ),
    				     ),
     
                     ),
                  );
            5.DetailView中显示
                \modules\bw_Consignments\DetailView.php
                ///////////////////////////////////////////////////////////////////////////////
                ////	SUBPANELS
                ///////////////////////////////////////////////////////////////////////////////
                
                  require_once('include/SubPanel/SubPanelTiles.php');
                  $subpanel = new SubPanelTiles($focus, 'MRConsignments');
                  echo $subpanel->display();
                
                去掉上面注释的代码,即可在DetailView视图中显示subpanel
            6.子表保存时,将赋父表的id
                 \modules\bw_ConsignItems\Save.php    //在子表模块中
                 在下面代码后
                 $sugarbean = new bw_ConsignItems();
                 $sugarbean = populateFromPost('', $sugarbean);
                 $sugarbean->bw_Consignment_id = $_POST['return_id']; 
                 添写
                 if ($_REQUEST['return_module']=='bw_Consignment'){
                    $sugarbean->ConsignmentID = $_REQUEST['return_id'];  //将父表id 赋给子表的关系字段 ConsignmentID
                 }
            7.刷新关系(非常重要,不刷新则子表全部显示)
                系统管理 -> 升级 -> 重建关系(重建meta数据关系,删除cache文件)
     
            8.此步骤不写好像也行
                \modules\bw_ConsignItems\field_arrays.php
                $fields_array['bw_ConsignItem'] = array (
                'column_fields' => array(
                  'id',
                  'date_entered',
                  'date_modified',
                  'assigned_user_id',
                  'modified_user_id',
                  'created_by',
                  'name',
                  'description',
                  'deleted',
                //BUILDER: included fields
                  'ConsignmentID',              //关系字段  不写好像也行
                //BUILDER:END of column fields
     
            9.subpanel显示列
                在子表模块的subpanel文件夹下的 Default.php文件中
                \modules\bw_ConsignItems\default.php
    	            'list_fields' => array(
    		            'name'         =>array(
    	 	            'vname'         => 'LBL_LIST_NAME',
    			            'widget_class'  => 'SubPanelDetailViewLink',
    	 	            'width'         => '20%',
    		            ),
    		            //自定义列
    		            'SequenceNumeric'         =>array(
    	 	            'vname'         => 'LBL_SequenceNumeric',
    			            'widget_class'  => 'SubPanelDetailViewLink',
    	 	            'width'         => '20%',
    		            ),
    		            'MarksNumbers'         =>array(
    	 	            'vname'         => 'LBL_MarksNumbers',
    			            'widget_class'  => 'SubPanelDetailViewLink',
    	 	            'width'         => '20%',
    		            ),
    		            //下面是修改,删除 按钮可删除则不显示(不删除,按钮也不好用) 
    		            'edit_button'  =>array(
    			            'widget_class'  => 'SubPanelEditButton',
    			            'module'        => 'bw_ConsignItems',
    	 	            'width'         => '4%',
    		            ),
    		            'remove_button'=>array(
    			            'widget_class'  => 'SubPanelRemoveButton',
    			            'module'        => 'bw_ConsignItems',
    			            'width'         => '5%',
    		            ),
    	            ),
                );
    
  • 相关阅读:
    做了点数论的题
    2016日报总结
    2016在H3C
    2017春节小目标
    2016项目小总结
    明明的随机数
    计算字符个数
    字符串最后一个单词的长度
    字符串分隔
    考研回忆
  • 原文地址:https://www.cnblogs.com/hailexuexi/p/1953233.html
Copyright © 2020-2023  润新知